2014년 2월 27일 목요일

scdbg를 이용한 셸코드(ShellCode) 분석 방안

며칠 전 여느 때와 다름없이 아침 출근 길에 간밤에 일어난 상황들을 주욱 살펴보고 있었습니다. 그런데 그 중 미국 보안 업체인 Zscaler에서 작성한 "Probing into the Flash Zero Day Exploit (CVE-2014-0502)" 블로그 글이 눈에 들어오던군요.

어도비(Adobe) 플래쉬 플레이어(Flahs Player)의 새로운 제로 데이(Zero Day) 취약점이 발견되고 이슈화 되었으며, 그에 따른 분석 내용을 다루고 있는 내용이었습니다.

사실 제로 데이 취약점들이 하루가 멀다하고 발견되다 보니 예전 만큼 호기심을 자극하는 것 은 없는 것 같습니다.

새로운 플래쉬 플레이어의 제로데이 취약점을 다룬 Zscaler 블로그 중에서 특히나 눈에 띄었던 부분은 아래 이미지입니다.


위 이미지는 scdbg라는 셸코드(ShellCode) 분석을 위한 도구인데, Zscaler에서는 플래쉬 파일(.swf) 파일에서 셸코드를 추출 한 후 scdbg를 이용해 분석한 결과를 보여준 것 입니다.

scdbg는 셸코드를 분석하기에는 아주 유용하고 편리한 도구이며, libemu라는 x86 Shellcode Emulation을 이용해서 셸코드를 에뮬레이션(Emulation) 해주므로 셸코드를 포함한 악성코드를 분석할 때 발생하는 여러가지 번거로움을 줄여주기도 합니다

일반적으로 셸코드는 위키피디아(Wikipedia)에서 정의해놓은 바와 같이 "In computer security, a shellcode is a small piece of code used as the payload in the exploitation of a software vulnerability." 입니다.

즉, 셸코드는 실행코드에 대한 페이로드로 동작하는 작은 코드 덩어리 입니다. 그래서 실제 셸코드는 아래 이미지와 같이 데이터 덩어리들입니다.


셸코드에 대한 내용들은 "The Shellcoder's Handbook: Discovering and Exploiting Security Holes"라는 책 한 권으로 다룰 정도 방대합니다.

이러한 셸코드라는 데이터 덩어리를 분석하기 위해 다양한 방법들이 사용되지만 그 중에서 간편하게 셸코드를 분석 할 수 있는 방법 중 하나가 바로 scdbg 입니다.

scdbg는 "scdbg download"에서 "Windows Native Source/Binaries"라고 표기 되어 있는 "Win32 Binaries"를 클릭하면 약 0.9 MB 크기의 scdbg.zip 파일을 하나 다운로드 할 수 있습니다.


해당 파일의 압축을 풀게 되면 2개의 실행 파일과 1개의 메뉴얼 파일이 나오는데, 그 중 gui_launcher.exe 파일은 윈도우에서 GUI 모드로 실행 가능하도록 해줍니다. 나머지 scdbg.exe는 커맨드라인(CommandLine) 명령으로 사용 할 수 있습니다.

gui_launcher.exe를 실행하고 아래 그림과 같이 "실전 악성코드와 멀웨어 분석 Practical Malware Analysis"에서 제공하는 예제 셸코드 파일을 드래그앤드롭으로 끌어다 놓습니다.


그 후에 Launch를 실행하면 아래 그림과 같이 셸코드를 에뮬레이션 한 결과가 별도의 커맨드라인 창으로 나타나게 됩니다.


위 그림의 붉은색 박스 안의 코드를 살펴보게 되면 예제로 사용한 셸코드는 다음과 같은 코드를 수행하도록 제작되어 있는 것을 알 수 있습니다.

우선, GetSystemDirectoryA 함수를 이용해 시스템의 시스템 디렉토리 위치를 얻어 온 후 URLDownloadToFileA 함수를 이용해서 특정 웹 사이트에서 "annoy_user.exe"를 윈도우 시스템 디렉토리에 "1.exe" 파일명으로 다운로드 하게 됩니다. 그리고 다운로드 한 파일을 WinExec 함수를 이용해서 실행하게 됩니다.

scdbg의 결과를 검증하기 위해 이제는 일반적으로 많이 사용하는 "Shellcode 2 EXE"에 셸코드를 업로드 한 후 EXE 파일로 만들어 Ollydbg를 이용해 디버깅을 해보았습니다. 이 과정에서도 역시 위 그림에서 보았던 동일한 코드들이 존재하는 것을 확인 할 수 있습니다.


앞서 살펴본 것 처럼 scdbg는 간편하게 셸코드를 분석 할 수 있도록 해주는 도구입니다. 그래서 비교적 간단한 포트 바인딩(Port Binding)이나 파일 다운로드 관련 셸코드는 에물레이션이 가능합니다만, 모든 셸코드를 충분히 분석이 가능하도록 지원하는 것은 아님으로 "Distorm Powerful Disassembler Library For x86/AMD64"와 같이 다르게 분석 할 수 있는 기법들 역시 파악하고 있는 것도 중요 합니다.

다음에는 시간적인 여유가 있을 때 실제 취약점이 존재하는 PDF와 DOC 같은 전자문서 파일에서 셸코드를 추출하여 scdbg와 Kali Linux를 이용한 분석 방안에 대해서도 다루어 보도록 하겠습니다.

댓글 없음:

댓글 쓰기