악성코드 분석에 있어 제일 걸림돌은 무엇일까? 복잡한 알고리즘? 안티 디버깅? 개인적으로 바이너리 패킹(Binary Packing)이라고 생각이 든다. 악성코드 제작자 입장에서 악성코드 분석을 가장 쉽게 저지하는 방법은 악성코드 프로그램을 분석하지 못하도록 패킹하여 분석을 어렵게 하는 것인데, 이를 해결하기 위해 분석가들은 여러가지 노력을 하게 된다.
보통 언패킹을 하게 되면 알려지지 않은 악성코드 제작자의 독자적인 패킹을 풀기 위해 매뉴얼 언패킹을 시도하거나 알려진 패킹의 경우 패킹 제작자가 만든 언패킹 프로그램(언패커)를 사용하여 패킹을 풀게 된다. 언패킹을 할 때 매뉴얼 언패킹과 언패커를 이용한 언패킹이 정석이고 가장 좋은 방법이긴 하다. 하지만 과연 이 방법 밖에는 언패킹 하는 방법이 없는 것일까? 디지털 포렌식을 공부한 사람이라면 'No' 라고 대답 할 것이다. 이번 글에서 소개 할 메모리 덤프를 이용한 언패킹 방법이다. 메모리 덤프를 이용한 언패킹 방법은 다음과 같이 두 가지로 나뉘게 된다.
1. 메모리 캡쳐 파일을 이용한 프로세스 또는 DLL 파일 덤프를 이용한 방법
2. 프로세스의 크래시 덤프를 이용한 방법
1번의 경우 외국에서 이미 Volatility를 이용 해 소개 된 방법이다. 물론 소개 되기 전에도 여러 포렌식 전문가들은 이 방법을 알고 있었을 것이다. 이 글에서 소개 할 방법은 2번 방법이다. 2번 방법 또한 여러 포렌식 전문가들은 개인적으로 알고 있을지도 모른다.
하지만 이 글을 쓰는 이유는 조금 더 이 방법을 알리고, 이런 방법도 있다라는 것을 알리기 위함이다.(개인적으로는 블로그 포스팅 목적도 있다.... ^^;;)
그럼 이제부터 2번 방법에 대해 한번 살펴보자. 샘플로는 PEiD에서 스캔하지 못하는 패커로 패킹되어 있는 악성코드 샘플을 대상으로 하도록 하겠다. 먼저 대상 샘플 프로그램을 패커 스캐너로 스캔하여 보면 다음과 같이 결과가 출력되는 것을 볼 수 있다.
[그림 1 - PEiD 스캔 결과]
[그림 1]을 보면 Noting found라는 문자열과 함께 패커 스캔을 실패한다. 문자열을 보아도 별다른 내용을 찾을 수 없고 디버거 툴로 열어 보아도 크게 악성코드라고 할만한 부분은 보이지 않는다.
[그림 2 - 문자열]
이제 이 글의 주요 목적은 크래시 덤프를 이용 해 언패킹을 시도 해 보자. 크래시 덤프는 Windows에서 기본적으로 지원하는 작업관리자 프로세스를 이용해서 Full Dump를 수행 할 수도 있고 Process Explorer 또는 Process Hacker등으로 Mini Dump 또는 Full Dump를 수행 할 수 있다. 또 Windbg를 이용해서 프로세스 메모리를 덤프 할 수도 있다. Windbg를 이용할 경우 프로세스 메모리 덤프 후 바로 분석 가능하다는 장점이 존재한다. 이 글에서는 작업관리자와 Process Explorer를 이용하도록 하겠다.
먼저 작업관리자를 이용해 보자. 프로그램을 실행하게 되면 다음과 같이 프로세스 목록에 샘플 프로그램의 프로세스 생성된 것을 볼 수 있다.
[그림 3 - 작업관리자 프로세스 탭]
여기서 마우스 오른쪽을 클릭하게 되면 "덤프 파일 만들기"가 보이게 되는데, 이 기능을 수행하게 되면 작업 관리자는 Full Dump를 수행 하고 파일 저장 위치를 알려준다.
[그림 4 - 작업관리자의 프로세스 메모리 덤프]
분석 방법은 이 글 마지막에 언급하도록 하겠다.
이번에는 Process Explorer 프로그램을 이용 해 덤프해보자. 방법은 거의 동일하다.
[그림 5 - Process Explorer를 이용한 프로세스 메모리 덤프]
위와 같은 방법으로 메모리 덤프를 수행하고 덤프 파일의 문자열을 출력 해보면 다음과 같이 문자열들이 많이 바뀐 것을 볼 수 있다.
[그림 6 - 악성 행위로 보이는 문자열들]
해당 덤프 파일을 크래시 덤프 파일이므로 일반 크래시 덤프 파일을 분석하듯 Windbg 등을 이용 해 분석을 수행 하면 된다.
그런데, 여기서 한가지 의문점이 생길 수 있다. DLL 인젝션을 이용 해 정상 프로세스에 악성코드가 인젝션되어 실행 된거나 숨겨진 프로세스라면 어떻게 할까?
이런 경우에는 지금 소개 했던 방법보다 1번 방법인 전체 메모리 덤프 파일을 이용 해 악성 DLL 파일을 찾아내 해당 DLL 파일을 덤프 해 분석하는 방법을 추천한다. 악성 DLL 파일을 찾는 방법으로는 대표적으로 Volatility의 malfind 플러그인을 이용하면 된다. 오탐이 없는 것은 아니지만 탐색율은 굉장히 좋은 편이다.
사실 이 방법들은 꼼수(?)이기 때문에 완벽한 결과물을 바라면 안된다. 가장 완벽하게 모든 분석을 끝마치려면 매뉴얼 언패킹이나 언패커를 이용해야 한다. 지금 소개한 메모리 덤프를 이용한 방법들은 분석이 시간을 다투거나 어떤 기능을 가지고 있는지 볼때에 사용하면 좋은 방법이니 참고하기 바란다. "모로 가도 서울만 가면 된다" 라는 속담도 있지 않은가.
'[+] Information > [-] RCE' 카테고리의 다른 글
ARE(Android Reverse Engineering) 환경 소개 (5) | 2012.05.05 |
---|---|
Oter : Android Revese Engineering Tool (8) | 2012.01.30 |
PE 구조 (8) (0) | 2012.01.01 |
PE 구조 (7) (0) | 2012.01.01 |