악성코드 분석에 있어 제일 걸림돌은 무엇일까? 복잡한 알고리즘? 안티 디버깅? 개인적으로 바이너리 패킹(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' 카테고리의 다른 글

소소한 Unpacking TIP  (8) 2013.01.09
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
  1. Ezbeat 2013.01.09 22:40

    덤프떠서 windbg로 분석할수있는 방법은 괜찮네요 ㅎㅎ 급하게 할땐 이방법이 더 나은것 같습니다
    하지만.. 리버싱하면서 언패킹을 하지못하면 왠지 지는 느낌을 받는건 뭘까요...ㅠㅠ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.01.10 09:32 신고

      리버싱을 배웠다면 언패킹은 기본적으로 할줄알아야 한다는 이 업계에 불편한 사고방식에서 비롯된 자괴감인듯 ㅠㅠ
      그래서 저도 가끔 이런 방법을 사용하고 공부할 겸 언팩할때는 무조건 매뉴얼 언패킹 한답니다 ㅋㅋ 실무에서는 언패커나 이런 방법이 더 시간적인 면에서 효율적이겠지만요 ㅎ

  2. Favicon of https://sun2day.tistory.com BlogIcon Sun2Day 2013.01.10 00:13 신고

    제목상.. 소소한 unpacking 이라고해서 들어왔는데.. 그 내용은 아닌듯!!
    그 외, 작업관리자에서도 덤프를 뜬다는건 몰랐으니 thanks
    성빈이 좀 갈궈봐요 선배라고 너무 방치하지말고.. ㅎㅎ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.01.10 09:34 신고

      ㅎㅎ 작업관리자로 덤프뜨는건 Windows Vista던가?? 아마 이때부터 될꺼에요 ㅎㅎ

      성빈이형은 연락도, 만나지도 못하고 있답니다... 그리고 갈굴만한 실력이 못되서요 ㅠㅠ

  3. 2013.10.12 20:37

    비밀댓글입니다

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.10.15 14:37 신고

      더미다는 기본적으로 안티메모리덤핑 옵션이 체크되어 있습니다. 그래서 메모리 덤프가 안되는거구요. 이때는 정적분석이나 안티디버깅을 우회하여 동적분석을 하는 방법 밖에는 없습니다.

    • 2013.10.17 01:00

      비밀댓글입니다

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.10.19 16:21 신고

      그럼 그건 메모리 덤프를 잘못 하신 것 같네요 ^^;

이번에는 메모리 덤프 방법 중 소프트웨어를 이용한 덤프 방법을 알아볼 것이다.

종류를 알아보기 전 소프트웨어를 이용한 메모리 덤프의 장단점을 알아보자.

[소프트웨어를 이용한 메모리 덤프의 장단점]
1. 장점
    - 메모리 덤프를 하기 위해 추가적인 장비가 필요하지 않음.
    - 상용 도구와 크게 다르지 않은 성능을 가지고 있는 공개 도구들이 있음.
    - 상용 제품들은 원격에 있는 컴퓨터에서도 메모리 덤프를 수집할 수 있음.

2. 단점
    - 커널 레벨 루트킷과 악성 프로그램에 매우 취약함.
    - OS의 종류와 버전에 따라 사용할 수 있느 도구에 제약을 받음.
    - 수집하는 메모리에 자신의 흔적을 남김. 


위의 내용에서 보았듯이 소프트웨어를 이용한 메모리 덤프에도 장단점이 존재한다.

하드웨어를 이용한 메모리 덤프는 얻어지는 결과에 대해서는 좋지만 그 과정에 제약사항이 많고 검증되지 않은 기법들이어서

보통 소프트웨어를 통한 메모리 덤프를 수행한다.

이제 소프트웨어를 통한 메모리 덤프에는 어떠한 방법들이 있는지 알아보겠다.

(도구들 중 Windows XP SP2의 /device/physicalmemory 를 참조하여 메모리 덤프를 수행하는 툴들이 있는데 SP2 이후에는 /device/physicalmemory 를 참조할 수 없어 작동하지 않는 도구들이 있다. 이 도구들은 설명에서 제외되었다.)

[DD]
DD는 유닉스도구 중 하나로 GNU License로 배포되는 도구이다. 사용법이 간단한것에 비해 결과물이 좋아 인기가 좋은 도구이다. 유닉스 도구를 기초로 하여 윈도우에서도 적용이 가능한 윈도우버전도 존재한다. DD는 사용자가 접근 가능한
모든 데이터를 바이트 또는 블록 단위로 복사하는데, 복사하려고 하는 영역을 OS가 인식하지 못하거나, 사용자권한이
낮아 접근하지 못하는 영역이거나, 지원하는 API가 없는 경우를 제외하고는 모든 시스템 데이터를 덤프할 수 있다.
DD의 포맷이미지는 로우 데이터 포맷이미지라고 하여 대부분의 포렌식 도구에서 이 포맷을 지원한다.
DD의 장점으로는 데이터의 형태를 그대로 덤프한다는 것이고, 단점은 부가정보가 제공되지 않아 분석하는데 시간이 오래
걸린다는 것이다.


[KntDD]
이 도구는 DFRWS 2005의 Memory Analysis 대회에서 처음 제작되었으며, 이 대회의 우승팀 중 한팀이 문제를 풀기위해 제작한 도구이다. 이 도구는 메모리 덤프를 네트워크로 전송하는 기능을 포함하고 있으며, 메모리 덤프를 윈도우 크래시 덤프 포맷으로 변환하는 기능도 가지고 있다. 하지만 이 도구는 보안전문회사, 군대, 정부기관에만 제공되고 있어 일반인들은 사용 할 수 없다.
이런 이유에서 실습이 불가하다. 


[MDD]
Mantech에서 만들어진 도구이며 메모리 덤프만을 위해 만들어진 도구이다. Windows XP SP2(32bit) 이후 버전에서도 문제없이 수행가능하지만 업데이트가 되지 않는 것이 문제이다. 또 64bit를 지원하지 않아 모든 시스템에 적용하기에는 무리가 있다.
사용법 : mdd -o <파일이름.mdd> --> 파일의 확장자는 조사관의 판단에 따라 임의적으로 정할 수 있음

[그림 1 - mdd 실행화면]

* 너무 시간이 오래걸려 결과물은 얻지 못하고 실행화면만 첨부한다.


[WIN32(64)DD]
이 도구도 mdd처럼 메모리 덤프 전용으로 개발된 도구이다. 많은 기능을 포함하고 있으며, 지원하는 윈도우 버전이 많다.
이 도구는 기본적으로 로우포맷을 지원하며, 추가로 크래시포맷과 하이버네이션 포맷을 지원한다. 
또 이 도구는 네트워크 전송 기능도 가지고 있으며, 64bit 시스템도 지원하고 4GB 이상의 메모리 덤프도 지원한다.

* 이 도구의 CLI 버전을 구할 수 없어 실습을 할 수 없었다. Sourceforge에 GUI 버전이 있는데 그 버전은 내 시스템에서는 작동하지 않아 실습 진행이 되지 않는다.  


[Fastdd]
포렌식 분야를 연구하고 있는 baadc0de라는 닉네임을 사용하는 국내 블로거가 제작한 메모리 덤프 도구로 제작자의 말에 따르면 win32dd보다 속도가 빠르다고 한다. 32bit 시스템과 64bit 시스템을 모두 지원한다.
참고 URL :  http://baadc0de.blogspot.com/2010/12/fastdd-fastest-windows-physical-memory.html 

* 현재 다운로드 링크에 파일이 지워져 도구를 구하지 못해 제작자가 캡쳐한 이미지로 대신하겠다.

[그림 2 - Fastdd 실행화면]



[기타 상용 도구]
위에서 알아본 것들 외에 상용도구들이 있는데 목록은 다음과 같다.
 - FastDump : CLI 기반의 도구로 HDGary사에서 제작하였다.
 - Pro Discover IR: Technology Pathway 사에서 제작했으며 메모리 덤프 전용이 아닌 침해사고용으로 개발된 도구이다.
 - EnCase Enterprise : Guidance software 사에서 제작했다.
 - AccessData Enterprise : AccessData 사에서 제작했으며, 기업 환경에서의 네트워크에 있는 컴퓨터의 메모리 덤프를
                                       수집하는데 목적이 있다. 

대부분 상용도구들은 메모리 덤프 전용이 아닌 복합적 기능이 구현된 도구들이다. 그렇기에 가격도 비싸 메모리 덤프만 할 것이라면 굳이 구입 할 필요는 없다.


'[+] Forensic' 카테고리의 다른 글

Memory Analysis (5)  (0) 2011.12.26
Memory Analysis (4)  (0) 2011.12.25
Memory Analysis (3)  (2) 2011.12.25
HardDisk 구조  (0) 2011.12.24
Memory Analysis (2)  (0) 2011.12.24
  1. 현우킴 2012.07.07 04:13

    좋은 정보 감사합니다.~ 잘보고갑니다 >.<

+ Recent posts