Bomb Lab은 컴퓨터 사이언스로 유명한 카네기 멜론 대학교에서 만든 실습 프로그램이다.
이 프로그램을 통해 디버거 사용법을 익히고 바이너리 분석을 연습해볼 수 있다.
폭탄을 터뜨리지 않고 안전하게 해체하는 컨셉으로, 총 6단계로 이루어져 있다.
각 단계에서 적절한 문자열을 입력하면 폭탄이 해체되고 다음 단계로 넘어간다.
적절한 문자열을 찾기 위해서는 디버거를 이용해 바이너리를 분석해야 한다.
아래 링크에서 프로그램을 다운받을 수 있다.
http://csapp.cs.cmu.edu/3e/labs.html
표시한 부분을 클릭하면 bomb.tar 압축파일이 다운로드된다.
실습할 리눅스 환경에 해당 압축 파일을 다운로드한 뒤 압축을 푼다.
압축을 풀면
bomb, bomb.c, README 3개의 파일이 있다.
먼저 bomb.c를 열어보았다.
우리가 분석할 bomb의 원본 소스파일인데, 주석을 읽어보면서 문제가 어떻게 진행되는지에 대한 힌트를 얻을 수 있다.
6개의 phase함수가 있는 것을 확인할 수 있고,
각 phase마다 read_line(), phase(), phase_defused()가 반복되는 것을 확인할 수 있다.
read_line() 함수를 통해 해당 사용자에게 문자열을 입력받고, 입력받은 값은 phase함수에 전달된다.
phase함수를 무사히 종료하면 phase_defused() 함수가 실행되어 폭탄이 해체되는 것 같다.
파일이 들어있는 경로에서 터미널을 열고 gdb bomb을 입력해서 디버깅을 시작한다.
우선 disassemble main을 입력해서 main함수의 어셈블리 코드를 확인해보았다.
<main+141>지점부터 <main+299> 지점까지가 6단계의 폭탄 해체와 직접적으로 관련된 부분인 것 같다.
앞서 C코드에서 살펴본 바와 유사하게 <puts@plt>, <read_line>, <phase_n>, <phase_defused>가 반복되는 것을 볼 수 있다.
여기까지 bomb lab 프로그램의 전체적인 구조를 살펴보았다.
이제 본격적으로 phase_1부터 disassemble해서 바이너리를 분석하고 문자열을 찾아 폭탄을 해체해보자.
<실습 환경 참고>
가상머신: virtualbox
GuestOS: Ubuntu 22.04
디버거: pwndbg 플러그인 설치한 gdb
'Bomb Lab' 카테고리의 다른 글
[Bomb Lab] phase4 (0) | 2024.05.10 |
---|---|
[Bomb Lab] Phase3 (0) | 2024.03.24 |
[Bomb Lab] Phase2 (0) | 2024.03.24 |
[Bomb Lab] Phase1 (0) | 2024.03.24 |