Bandit Wargame Level 13 — SSH 개인키 인증 완전 정복

OverTheWire Bandit Level 13 풀이를 상세하게 설명해요. SSH 개인키 파일 활용, 키 기반 인증 원리, localhost 접속 방법까지 완벽 안내해요.

OverTheWire Bandit Level 13은 Bandit 시리즈에서 처음으로 SSH 키 기반 인증이 등장하는 레벨이에요. 지금까지는 비밀번호를 찾아서 다음 레벨로 넘어갔는데, Level 13은 비밀번호 대신 개인키(private key) 파일을 찾아서 그것으로 로그인해야 해요.

이 글에서는 Level 13의 풀이 방법과 함께, SSH 키 기반 인증의 원리를 깊이 이해할 수 있도록 설명해 드릴게요. Level 13을 이해하면 이후 보안 공부에서도 키 기반 인증을 자신 있게 다룰 수 있어요.

Level 13의 문제 설명

이 레벨의 특징

Level 13은 Bandit에서 유일하게 다음 레벨의 비밀번호를 직접 찾지 않는 레벨이에요. 대신, bandit14로 SSH 접속할 수 있는 개인키 파일이 주어져요. 이 개인키를 사용해서 bandit14로 접속하면 Level 13이 완료돼요.

Level 13 접속 방법

Level 13에 접속하려면 Level 12에서 찾은 비밀번호를 사용해요. ssh bandit13@bandit.labs.overthewire.org -p 2220으로 접속하고, Level 12에서 찾은 비밀번호를 입력하면 돼요.

접속 후 확인

bandit13으로 접속하면 홈 디렉토리에 sshkey.private 파일이 있어요. ls로 확인하고, cat sshkey.private로 내용을 보면 RSA 개인키 내용이 출력돼요.

SSH 키 기반 인증 원리

비밀번호 인증 vs 키 인증

SSH에는 두 가지 주요 인증 방법이 있어요. 비밀번호 인증은 우리가 Level 0~12까지 사용해 온 방식으로, 매번 비밀번호를 입력해서 인증해요. 키 기반 인증은 수학적으로 연결된 키 쌍(개인키와 공개키)을 사용해서 비밀번호 없이 인증하는 방식이에요.

개인키와 공개키

키 기반 인증에서 개인키(private key)는 절대 외부에 공개해서는 안 되는 비밀 키예요. 공개키(public key)는 접속하려는 서버에 미리 등록해 두는 키예요. 인증 과정에서 서버는 등록된 공개키로 검증을 수행하고, 클라이언트는 개인키로 응답해요. 이 수학적 쌍이 맞아야 인증이 통과돼요.

authorized_keys 파일

서버에서는 각 사용자의 ~/.ssh/authorized_keys 파일에 허용된 공개키가 저장돼요. Bandit Level 13→14에서는 bandit14의 authorized_keys에 이미 해당 공개키가 등록되어 있어서, sshkey.private 파일을 가지고 있으면 비밀번호 없이 접속할 수 있어요.

Level 13 풀이 단계

1단계: 개인키 파일 확인

bandit13으로 접속한 뒤 ls를 입력하면 sshkey.private가 보여요. file sshkey.private를 입력하면 “PEM RSA private key”처럼 파일 타입이 표시돼요. cat sshkey.private로 내용을 보면 “—–BEGIN RSA PRIVATE KEY—–“로 시작하는 키 데이터가 출력돼요.

2단계: 개인키로 bandit14에 접속

다음 명령어로 sshkey.private 파일을 사용해서 bandit14로 접속해요.

ssh -i sshkey.private bandit14@localhost -p 2220

  • -i sshkey.private — 인증에 사용할 개인키 파일 지정
  • bandit14@localhost — 같은 서버의 bandit14 계정으로 접속
  • -p 2220 — Bandit 서버 포트 번호

3단계: bandit14 접속 확인

접속에 성공하면 프롬프트가 bandit14@bandit:~$로 바뀌어요. 이제 bandit14 계정으로 서버에 들어온 상태예요. Level 13 완료!

4단계: bandit14 비밀번호 확인

Level 14→15로 넘어가기 위해서는 현재 비밀번호(bandit14의 비밀번호)가 필요해요. cat /etc/bandit_pass/bandit14를 입력하면 bandit14의 비밀번호를 볼 수 있어요. 이 값을 반드시 메모해 두세요.

키 파일 권한 문제와 해결

권한 오류 메시지

ssh 명령을 실행했을 때 다음과 같은 경고가 나올 수 있어요. “WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0644 for ‘sshkey.private’ are too open.” 이 경고가 나오면 SSH가 인증을 거부할 수 있어요.

권한 수정 방법

개인키 파일은 소유자만 읽을 수 있어야 해요. chmod 600 sshkey.private를 입력해서 권한을 수정한 뒤 다시 SSH 명령을 실행하면 돼요.

  • chmod 600 — 소유자만 읽기·쓰기 가능 (그룹·기타 접근 불가)
  • chmod 400 — 소유자만 읽기 가능 (더 엄격한 설정)

왜 권한이 중요한가요

개인키가 다른 사용자에게도 읽힐 수 있는 권한이면, 해당 서버에 접속한 다른 사람이 개인키를 훔쳐서 무단 접속에 사용할 수 있어요. SSH는 이를 방지하기 위해 너무 광범위한 권한의 개인키 파일 사용을 거부해요.

SSH 키 인증 더 알아보기

SSH 키 쌍 생성하기

자신만의 SSH 키 쌍을 만들고 싶다면 ssh-keygen 명령을 사용해요. 실행하면 키 저장 위치와 패스프레이즈 입력을 요청해요. 기본 경로(~/.ssh/id_rsa)에 저장하고 패스프레이즈를 설정하면 개인키도 비밀번호로 보호할 수 있어요.

공개키 서버에 등록하기

생성한 공개키를 서버에 등록하려면 ssh-copy-id 사용자명@서버주소 명령을 사용하거나, 공개키 내용(~/.ssh/id_rsa.pub)을 서버의 ~/.ssh/authorized_keys 파일에 직접 추가하면 돼요.

실무에서의 SSH 키 사용

실제 서버 운영에서는 비밀번호 인증보다 키 기반 인증이 훨씬 권장돼요. 비밀번호는 무작위 대입 공격(브루트 포스)에 취약하지만, 키 기반 인증은 수학적으로 안전하기 때문이에요. AWS, GCP, Azure 같은 클라우드 서비스도 기본적으로 SSH 키 인증을 사용해요.

localhost와 포트 번호 이해

localhost란

localhost는 자기 자신의 컴퓨터(서버)를 가리키는 특수 도메인 이름이에요. IP 주소로는 127.0.0.1과 같아요. Bandit Level 13에서 bandit14@localhost처럼 사용하는 것은, 현재 접속해 있는 Bandit 서버 안에서 다시 같은 서버에 접속하는 것을 의미해요.

포트 번호의 역할

하나의 서버에서 여러 서비스가 동시에 실행될 수 있어요. 포트 번호는 이 서비스들을 구분하는 역할을 해요. SSH는 기본적으로 22번 포트를 사용하지만, Bandit은 보안을 위해 2220번 포트를 사용해요. 포트 번호를 명시적으로 지정하지 않으면 기본 포트(22)로 연결하려 해서 실패할 수 있어요.

자주 하는 실수와 해결 방법

개인키 파일 경로 오류

ssh 명령에서 -i sshkey.private를 사용할 때, 명령을 실행하는 현재 위치에 sshkey.private 파일이 있어야 해요. ls로 파일이 현재 디렉토리에 있는지 확인하고, 없다면 파일이 있는 경로로 이동하거나 절대 경로를 지정하세요.

이미 bandit14 세션에 있는데 또 접속하려는 경우

bandit13에서 bandit14로 접속한 뒤에는 프롬프트가 bandit14로 바뀌어요. 이 상태에서 또 ssh 명령을 사용하면 중첩 접속이 될 수 있어요. 현재 프롬프트를 확인해서 어느 계정에 있는지 파악하는 습관을 가지세요.

마무리

Bandit Level 13은 SSH 키 기반 인증이라는 보안 분야의 핵심 개념을 처음 다루는 레벨이에요. 개인키 파일로 비밀번호 없이 서버에 접속하는 경험은 실제 서버 운영과 보안 테스트에서 매우 유용하게 활용돼요.

Level 13을 완료했다면 이제 Level 14에서 네트워크 포트 통신을 배울 차례예요. SSH 키와 포트 통신이라는 두 가지 핵심 개념을 연달아 배우면서 보안 실력이 한 단계 더 올라가는 것을 느낄 수 있을 거예요.