Bomblab-1
by
소개
Bomblab에 대해 메모했습니다. Bomblab은 reverse engineering과 어셈블리어에 입문하게 해주는 재미있는 학습교재입니다. 게임같이 매 phase마다 점수가 나오기 때문에 은근 중독성이 있습니다. 저는 컴퓨터구조 수업에서 처음 보았고, 그 다음으로는 컴퓨터보안 시간에 봤습니다.
이 실습에는 bomb이라는 실행 가능한 프로그램이 있습니다. 여러 개의 phase로 구성되어 있는데 잘못 실행하면 터집니다. 기본적으로 objdump
등의 명령어를 통해 실행 가능한 bomb을 어셈블리로 역어셈블합니다.
bomb이 안 터지게 하려면?
bomb이 안 터지게 하는 데에는 몇 가지 방법이 있는데, 앞의 두 개는 쉬운 거라서 마지막 Binary Patch를 중점적으로 메모했습니다.
-
GDB Breakpoints 기본적인 방법입니다. gdb 상에서
break *explode_bomb
과 같은 명령어를 통해 해당 함수에 breakpoint를 걸 수 있습니다. -
copy to local directory bomb을 로컬 디렉토리로 이동시킨 뒤에 실행합니다.
-
Binary Patch 가령 bomb 내부에
curl
이란 함수가 서버와의 통신을 담당한다면(bomb이 터지면 감점) 이 함수를 다르게 실행되도록 합니다. 방법은 원래의 PATH에 있는 curl을 우선 PATH를 만집니다.
echo echo 1234 > /tmp/curl
을 해서 /tmp 디렉토리 아래에 curl이라는 파일을 만들어줍니다. 그 뒤chmod +x /tmp/curl
을 통해 만든 파일을 실행 가능하도록 바꿔줍니다. 그 다음 bomb이 있는 디렉토리로 가서,PATH=/tmp ./bomb
명령어를 입력하면 api-key를 입력하지 않고도 bomb을 실행시킬 수 있고, api-key가 입력되지 않았으므로 bomb이 터지거나 말거나 remote server에는 전달되지 않습니다.다른 방법도 있습니다. binary 파일인 bomb을 에디터로 열어서 hexl-mode 등으로 봅니다. 그 뒤
curl
이라고 되어 있는 부분을echo
로 바꿔주면, 이제 이 bomb은 항상 curl 대신 echo를 실행하게 됩니다.
사용하는 도구들
gdb
컴퓨터구조 시간에 배웠습니다. gdb는 GNU-Debugger의 약자라고 합니다. 프로그램을 실행시키면 코드 단위에서 지금 실행하는 명령어가 무엇인지, 레지스터에는 어떤 값이 있는지, 스택 메모리에는 무엇이 있는지 등을 볼 수 있습니다.
pwndbg
컴퓨터보안 수업에서 배웠습니다. 기본적으로 gdb의 업그레이드 버전입니다. 칼라풀하고 이쁩니다.
ghidra
컴퓨터보안 수업에서 배웠습니다. 누구는 자이드라라고 읽고 누구는 기드라라고 읽던데 교수님 발음이 자이드라였으니 자이드라가 맞을 것 같습니다. 컴퓨터구조 시간에서 처음에 bomblab 할 때는 어셈블리를 C언어로 바꾸면 뭐가 될까 생각하느라 골치아팠는데, 이 프로그램은 그걸 자동으로 해줍니다.
Subscribe via RSS