보안 공부를 시작한 분이라면 OverTheWire Bandit 워게임을 한 번쯤 들어봤을 거예요. Bandit은 리눅스 기초 명령어부터 시작해서 점점 심화되는 보안 개념을 실습으로 배울 수 있는 최고의 무료 플랫폼이에요. SSH로 서버에 접속해서 레벨별로 비밀번호를 찾아 다음 단계로 나아가는 방식이에요.
이 글에서는 Bandit 워게임의 전반적인 구조와 공략 방향을 안내하고, 초반 레벨들에서 반드시 알아야 할 핵심 명령어와 개념들을 함께 정리해 드릴게요. 막히는 레벨이 있을 때 힌트를 찾는 데 도움이 될 거예요.
Bandit 워게임이란 무엇인가요
OverTheWire 소개
OverTheWire는 다양한 난이도의 워게임(wargame)을 제공하는 무료 보안 학습 플랫폼이에요. 워게임이란 실제 서버 환경에서 보안 취약점을 찾거나 퍼즐을 해결하면서 실력을 키우는 방식의 학습 방법이에요. Bandit은 그중에서 완전한 초보자를 위한 입문 워게임이에요.
Bandit의 구조
Bandit은 Level 0부터 시작해서 Level 34(이상)까지 단계적으로 진행돼요. 각 레벨에서는 현재 레벨의 비밀번호로 SSH에 접속한 뒤, 다음 레벨의 비밀번호를 찾아야 해요. 비밀번호는 파일 시스템 어딘가에 숨겨져 있거나, 특정 명령어를 조합해서 찾아낼 수 있어요.
왜 Bandit인가요
Bandit이 입문자에게 추천되는 이유는 체계적인 학습 경로 때문이에요. 초반에는 ls, cat, find 같은 기초 명령어부터 시작해서, 점점 파일 권한, 네트워크 통신, 암호화, 쉘 스크립팅 등 심화 개념으로 이어져요. 단순 암기가 아니라 직접 문제를 풀면서 배우기 때문에 기억에 더 잘 남아요.
시작하기 — SSH 접속 방법
Level 0 접속
Bandit 워게임은 SSH로 접속해요. 접속 정보는 다음과 같아요.
- 호스트: bandit.labs.overthewire.org
- 포트: 2220
- 사용자명: bandit0
- 비밀번호: bandit0
터미널에서 ssh bandit0@bandit.labs.overthewire.org -p 2220 명령으로 접속하면 돼요. 윈도우 사용자라면 PuTTY, Windows Terminal, 또는 WSL을 이용할 수 있어요.
비밀번호 보관 방법
각 레벨에서 찾은 비밀번호는 반드시 따로 적어두세요. 세션이 끊어지면 다시 이전 레벨 비밀번호로 접속해야 하기 때문이에요. 텍스트 파일에 레벨별로 정리해 두는 습관을 들이면 워게임 진행이 훨씬 수월해요.
초반 레벨 공략 방향
Level 0 → Level 1: 파일 읽기
홈 디렉토리에 있는 readme 파일을 읽는 가장 기본적인 문제예요. ls 명령으로 파일 목록을 확인하고, cat readme로 파일 내용을 출력하면 비밀번호를 찾을 수 있어요. 리눅스의 가장 기본 명령어인 ls와 cat의 사용법을 배우는 단계예요.
Level 1 → Level 2: 특수 파일명 처리
이 레벨에서는 파일 이름이 -(하이픈 하나)로 돼 있어요. 단순히 cat -를 입력하면 표준 입력을 읽으려 해서 동작하지 않아요. cat ./-처럼 상대 경로를 명시하거나 cat < -를 사용하면 읽을 수 있어요. 특수 문자가 포함된 파일명 처리 방법을 배우는 레벨이에요.
Level 2 → Level 3: 공백이 있는 파일명
파일명에 공백이 포함된 경우 처리하는 방법을 배워요. cat "spaces in this filename"처럼 따옴표로 감싸거나, cat spaces\ in\ this\ filename처럼 이스케이프를 사용하면 돼요.
중반 레벨 핵심 개념
find 명령어 활용 (Level 4~7)
find 명령어는 Bandit 중반부에서 매우 자주 사용돼요. 파일 크기, 소유자, 권한, 타입 등 다양한 조건으로 파일을 검색할 수 있어요. 예를 들어 find . -type f -size 1033c는 현재 디렉토리에서 크기가 1033 바이트인 일반 파일을 찾아요. find의 다양한 옵션을 익히는 것이 중반 레벨 돌파의 핵심이에요.
파일 권한과 소유자 (Level 5~6)
리눅스 파일 권한 체계를 이해하는 것이 중요한 레벨들이 있어요. ls -la로 파일의 권한, 소유자, 그룹 등을 확인하고, find 명령의 -user, -group, -perm 옵션을 활용해서 조건에 맞는 파일을 찾는 방법을 배워요.
strings와 grep 활용 (Level 6~9)
바이너리 파일에서 사람이 읽을 수 있는 문자열을 추출하는 strings 명령어와, 파일에서 특정 패턴을 찾는 grep 명령어가 자주 등장해요. 이 두 명령을 파이프(|)로 연결해서 조합하면 복잡한 검색도 쉽게 할 수 있어요.
네트워크와 암호화 관련 레벨
nc(netcat) 활용
네트워크 통신 도구인 nc(netcat)를 사용하는 레벨들이 있어요. 특정 포트로 접속해서 데이터를 주고받는 방법, 리스닝 서버를 열어두는 방법 등을 실습해요. nc localhost 포트번호 형태로 사용하는 경우가 많아요.
openssl과 암호화
SSL/TLS 암호화 통신을 다루는 레벨도 있어요. openssl 명령어를 사용해서 암호화된 포트에 접속하거나, 파일을 인코딩·디코딩하는 실습을 해요. openssl s_client 명령이 자주 등장해요.
base64 인코딩/디코딩
base64로 인코딩된 비밀번호를 디코딩해야 하는 레벨이 있어요. base64 -d 명령으로 쉽게 디코딩할 수 있어요. 이외에도 rot13, xxd(hex dump) 등 다양한 인코딩 방법을 다루는 레벨들이 있어요.
심화 레벨 개요
쉘 스크립트와 크론잡
후반부 레벨에서는 리눅스 쉘 스크립트와 크론잡(cron job)을 분석하는 능력이 필요해요. 시스템이 주기적으로 실행하는 스크립트의 취약점을 찾아서 권한 상승(privilege escalation)을 시도하는 개념을 배워요.
setuid 바이너리
setuid는 파일 실행 시 파일 소유자의 권한으로 실행되게 하는 특수 권한이에요. 이를 이용해 다른 사용자 권한으로 특정 명령을 실행하는 방법을 배우는 레벨들이 있어요.
Git 활용
후반부에는 Git 리포지토리에서 정보를 추출하거나, git 이력을 분석해서 비밀번호를 찾는 레벨들도 있어요. git log, git diff, git stash 등 git 명령어를 보안 관점에서 활용하는 방법을 배울 수 있어요.
워게임 공략 팁
man 페이지를 적극 활용하세요
모르는 명령어가 나오면 man 명령어로 매뉴얼 페이지를 확인하세요. Bandit의 각 레벨 페이지에는 해당 레벨에서 필요한 명령어 목록이 힌트로 제공돼요. 이 목록에 있는 명령어들의 man 페이지를 읽는 것만으로도 대부분의 레벨을 풀 수 있어요.
힌트는 검색하되 정답은 스스로
막혔을 때 “bandit level X Y walkthrough” 같은 키워드로 검색하면 힌트를 찾을 수 있어요. 하지만 바로 정답을 복사하기보다는 힌트를 참고해서 스스로 명령어를 입력하고 이해하는 것이 실력 향상에 훨씬 도움이 돼요.
노트를 작성하세요
각 레벨에서 배운 명령어, 개념, 사용한 명령어 조합을 노트에 기록해 두세요. 나중에 비슷한 문제를 만났을 때 참고할 수 있고, 공부한 내용을 정리하는 과정에서 이해도 더 깊어져요.
마무리
Bandit 워게임은 리눅스 기초부터 보안 개념까지 체계적으로 배울 수 있는 최고의 무료 자원이에요. Level 0부터 차근차근 진행하다 보면 자연스럽게 리눅스 명령어, 파일 시스템, 네트워크, 암호화 등의 개념이 쌓여요.
막히는 레벨이 있어도 포기하지 말고, man 페이지와 검색을 통해 힌트를 찾아가세요. 정답을 찾는 것보다 과정에서 배우는 것이 더 중요해요. OverTheWire 공식 사이트(overthewire.org/wargames/bandit)에서 지금 바로 시작해 볼 수 있어요.