디지털 포렌식에 관련한 첫 글입니다. 최근들어 계속 진행해오던 윈도우즈 물리 메모리 분석과 관련해 지속적으로 포스팅할 계획입니다.

일반적으로 디지털 포렌식Digital forensics이라 하면 증거를 찾기 위한 하드디스크 복구 및 파일시스템 분석을 생각하실 듯 합니다. 물론 보조 저장장치로 가장 많이(대체할말한 것이?) 쓰이는 하드디스크 내에 중요 증거가 존재한다는 것은 명백한 사실입니다. 따라서 디지털 포렌식 분야에서 기술적, 법적으로 가장 많은 연구가 진행되어왔으며, 실제 민형사 사건 발생 시 하드디스크에서 발견된 디지털 데이터가 증거로서 채택이 된 경우가 많습니다.

제가 앞으로 떠들고자하는 물리 메모리 분석은 라이브 포렌식Live forensics의 일부로서, 시스템이 활성 상태로 구동 중일 때 휘발성 데이터를 수집하고 분석하는 방법 중 하나입니다. 일반적으로 하드디스크 분석을 위한 이미징 시, 디스크의 무결성을 보존하기 위해 시스템의 전원을 강제로 차단해버립니다(쉽게 말해 코드를 뽑아버리는 방법으로). 하지만 이러한 방법을 사용하는 경우, 시스템이 구동 중이던 시점의 프로세스나 네트워크 세션 등의 휘발성 데이터가 소멸되어 버립니다. 물론 회계 부정이나 기밀 문서 유출 사건과 같은 경우에는 하드디스크 내의 데이터가 가장 중요한 증거가 될 수 있겠습니다만, 최근 많이 발생하고 있는 웜, 트로얀 및 시스템 침해 사건의 경우에는 시스템이 구동 중이던 시점의 그 '상태'가 더 중요할 수 있습니다.

지금까지의 침해 사건의 경우, 이에 대응하기 위한 콘솔 명령어 도구, 이를 자동화하기 위한 쉘스크립트 및 로그 파일 수집, 분석을 하게 됩니다. 이러한 방법은 대부분의 경우 OS가 제공하는 API(시스템 콜)를 이용하게 되는데, 이는 악성코드의 커널-유저모드 후킹과 같은 기법에 의해 변조된 결과를 얻을 가능성이 있습니다. 바로 이러한 단점을 극복하기 위한 기법이 물리 메모리 분석입니다.


물리 메모리 분석은 소프트웨어 및 하드웨어 기반으로 현재 물리 메모리에 존재하는 데이터를 그대로(raw) 파일 형태로 덤프한 후 이를 분석하여, 프로세스 실행 상태, 로드된 모듈, 사용 중이었던 파일, 네트워크 세션 등의 정보를 복구해내는 기술입니다. 물리 메모리 분석은 2005년에 열린 DFRWS 로데오 챌린지Digital Forensics Research Conference Rodeo Challenge에서 당시 파일시스템 포렌식계의 거물(?)인 브라이언 캐리어Brian Carrier가 챌린지를 주최 및 그 중요성을 강조하면서 본격적인 연구가 시작되었습니다. 챌린지의 대상으로는 Windows 2000 SP4의 물리 메모리 이미지가 올라왔구요.

The results of memory analysis challenge

그 결과로 위의 두 개의 도구 memparser, kntlist가 개발되었습니다. 메모리 분석에 관심있으신 분들은 한 번쯤은 들어보시거나 직접 사용해보셨으리라 생각됩니다. 두 도구는 물리 메모리로부터 프로세스 목록 및 환경, 감사 로그 등의 정보를 추출하는 최초의 도구입니다. 이 이후에는 프로세스 및 쓰레드 객체의 구조체인 EPROCESS, ETHREAD를 카빙하는 도구인 ptfinder, 파이썬으로 제작되었고 사용자가 기능을 추가할 수 있도록 플러그인 개발을 지원하는 Volatility Framework 등의 유명한 도구들이 개발되었습니다.

하지만 앞서 설명드린 도구들은 콘솔 기반이기 때문에 분석의 결과를 시각적으로 보여주지 못한다는 단점을 보여줍니다. 또한 대부분 Windows 2000 및 XP만을 대상으로 하였기 때문에 최근 널리 쓰이고 있는 Vista 및 7, 그리고 서버 제품군을 지원하지 못하고 있습니다.


뭐 이러한 이유 때문은 아니지만.. 제가 최근에 물리 메모리 분석에 대해 공부하며 직접 분석 도구를 개발하였습니다. 아직 완벽하지는 않지만 상당부분에서 진행이 완료되어 쓸만하다고 생각됩니다. 우선 GUI 형태로 개발되어 보기도 좋고(?) 폭 넓은 윈도우즈 버젼을 지원한다는 것이 장점입니다.


Physical Memory Dump Explorer

보시면 아시겠지만, Sysinternals(http://technet.microsoft.com/en-us/sysinternals/default.aspx)의 Process Explorer와 비슷한 형태를 지니고 있습니다. 프로세스명, PID, 실행-종료 상태 등의 기본 정보 및 파일 핸들, 시스템 드라이버 및 DLL, 네트워크 세션 등의 정보가 출력되며, Processlibrary.com으로부터 얻어온 프로세스의 상세 정보 역시 출력됩니다. 또한 아래의 프로세스 속성, 메모리맵, 프로세스 주소 영역 덤프 및 문자열 추출 기능까지 지원하도록 개발되었습니다.


Image properties

Memory map

Strings

아직까지는 갈길이 멀긴하지만, 앞으로 관련 연구가 진행되는대로 기능이 추가될 예정입니다. 현재는 4n6tech(http://4n6tech.com)에서 MEMA라는 이름으로 판매되고 있지만(-_-;) 향후 오픈 소스 프로젝트로 새롭게 개발할까도 생각하고 있습니다. 실천이 될런지는 모르겠습니다만.. 물리 메모리 분석에 대해 관심있으신 분들의 지속적인 관심 및 격려를 부탁드리겠습니다 하하.

참고로 Mac OS X를 대상으로 한 오픈소스 프로젝트가 진행 중입니다. n0fate님의 Volafox(http://code.google.com/p/volafox/)이구요, 맥을 대상으로 한 물리 메모리 분석에서는 가장 진보한 형태라고 생각됩니다(사실 다른건 몰라서 ㅋㅋ). 유일한 맥을 대상으로 한 물리 메모리 분석 도구입니다. (n0fate님 지적 감사)


향후 본 블로그에 물리 메모리 분석과 관련한 글을 지속적으로 포스팅할 계획입니다. 사실 지금까지 해온 것들을 정리한다는 느낌이 크긴 하지만요. 제가 글을 잘 쓰는 편이 아니라 쉽게 이해가 되지 않으실지도 모르겠습니다만, 관심을 가져주시면 감사드리겠습니다.


일단 이번 포스팅은 여기에서 마무리 짓겠습니다. 두 번째 글은 아마도 가상-물리 주소 변환과 관련한 글이 될 것 같습니다.



5 Comments to “Physical memory analysis on Windows system”

  1. Unknown says:

    Mac OS X는 그거 밖에 없다는 ㅎㅎ 여튼 블로그라는 것은 자신의 지식을 정리해나가는 하나의 지식 일기라고 생각해도 될거 같음 :)

    사진이 몇개 짤려있네 ㅎㅎ 여튼 오픈 소스화 된다면 나도 적극적으로 서포트 하도록 하겠음 :)

  2. baadc0de says:

    컨텍왔다는 그 외쿡인의 도구는 아직 공개 안 한것인가? ㅋㅋ

    근데 난 사진 잘보이는데 뭔 문제인지 몰겠네.. 글 좀 수정해봐야겠다 ㅋㅋ

  3. Unknown says:

    그 외국인은 리눅스 기반에서 심볼 정보 없이 구조체 찾는걸 공개한거임 :D
    링크: http://code.google.com/p/draugr/

  4. baadc0de says:

    오호
    니가 먹어버려
    건방지게 통합을 논하다니
    ㅋㅋ

  5. JinsNova says:

    오.. ㅋㅋㅋ 메모리 포렌식 관련해 뭐좀 찾다가 여기로 오게 되다니. ㅎㅎ

Leave a Reply