windbg로 커널영역 메모리 덤프뜨기




드라이버를 분석할 때, 1394디버깅을 할 떄는 머 별로 상관이 없겠지만, 디버깅을 하는 그 순간
말고도 별도로 파일 자체가 필요할 때가  있다. 파일을 디스어셈블링 하던가 hex compare등을
하던가 머 상황은 다양한데, 일반적인 경우는 머 babo.sys 형태로 파일이 current 폴더 혹은 driver
폴더에 있을텐데 뭐가 문제냐 하겠지만, 요즘은 드라이버를 올린 후에 지워버리는 것이 또 하나의
추세라 (물론 FILEMON 등은 예전부터 그렇게 하긴 했지만) 그렇게 하는 넘들에게 드라이버
파일을 뽑아내기가 쉽지 않을 때가 있다.

어쨌든 그래도 적어도 드라이버가 올라가는 타이밍을 알고 있다면 나름 획득하는 꽁수가 있다.
하지만 이미 올라가 있는 경우 혹은 언제 올라가는지 알 수 없을 경우 (특히 루트킷 같은 넘들이나
커널모드에서 돌아가는 악성 코드 같은 넘들) 파일을 획득하기가 까다로운 편이다.

하지만 이 때는 커널번지를 그대로 메모리 덤프를 떠 버리는 방법을 쓰면 나름 도움이 된다.
그 방법은? windbg의 .writemem 명령어를 이용한다

먼저 .hh를 통해 헬프 파일을 보자

 

사용자 삽입 이미지


간단하다 .writemem 파일이름 address l 요까지

그럼 한번 직접 덤프를 떠 보자. FileMon의 경우는 드라이버를 올린 뒤 파일을 지워버리니
좋은 마루타가 될 수 있다. 파일몬을 띄워놓고 드라이버 리스트를 출력해 보았다. 메모리상에
드라이버는 올라가 있지만, 실제로 파일은 없기 때문에 리스트 컨트롤에는 0byte로 출력된다.
(TaskInfo에서는 드라이버 이름은 커널번지를 스캔해서 얻지만, 그 파일에 대한 size나 version
등의 세부정보는 파일을 통해서 얻기 때문)

사용자 삽입 이미지


따라서 FILEM.SYS는 이 파일을 로드한 driver 폴더에 가 보아도 파일이 없음은 물론이다. 이넘을
덤프를 떠 보자.

사용자 삽입 이미지

여기가 FILEM.sys가 로드된 커널번지다.

사이즈를 알 수 없으니 무식한 방법을 쓸 수 밖에 없다 :( NEXT를 열심히 눌러서 할당되지 않은
영역까지 가 본다. 거기까지가 FILEM.sys의 영역일 것이다(별로 마음에 들지 않는 방법이다
좀 더 고급스런 방법 없을까요 ㅠㅠ)

사용자 삽입 이미지

요까지다. 그럼 사이즈를 계산해보면,

사용자 삽입 이미지

사이즈는 0x9fff 다. 그러면 그만큼을 덤프를 떠 보자!
c:\에 FILEM_dump.sys 라는 파일로 덤프를 떠 보겠다. windbg의 커멘드창에 다음과 같이
입력하자.

.writemem c:\\FILEM_dump.sys a945c000 l 9FFF


사용자 삽입 이미지


자 이제 C드라이브 루트에 파일이 생겼다. 헤더를 확인해볼까?

사용자 삽입 이미지

흐흐 PE영역이 분석이 잘 된다.

이제 이 파일을 IDA에 넣던, 기존 파일이 있으면 기존 파일과 hex compare를 하던 마음대로
활용하면 된다 :p

단, FILEM.sys의 경우는 ksecdd.sys 를 또 참조하고 있고, 또 이 파일은 메모리 영역을 그대로
덤프 뜬 것이라 ntoskrnl에서 export하고 있는 각종 상대번지와 어드레스 등이 일치하지 않는다.
그래서 함수 콜 부분이 제대로 분석되지 않을 것이다(극복하는 방법은 한번 연구해보세요^^;;)

커널 드라이버도 ImportREC같은 툴이 있다면 좋을 것 같은데 :p

물론 FileMon의 경우는 더 쉬운 드라이버 획득 방법이 있지만 지금은 writemem을 설명하기 위해서
예로 든 것이니 괜한 태클은 걸지 않으길 바란다 (전 주로 악성 코드 분석에 이 방법을 이용합니다)


2007년 5월
신고
Posted by window31


댓글을 달아주세요

  1. kyh1026
    2010.01.04 14:07 신고
    댓글 주소 수정/삭제 댓글
    유용한 정보 감사합니다.

    출처 밝히고 퍼가도록 할께요 ^^

BLOG main image
by window31

카테고리

분류 전체보기 (285)
Reverse Engineering (22)
C, C++ (20)
Kernel (8)
Guitar (19)
잡담 (79)
etc (8)
who am i (8)
보안 이야기 (89)
Tools (3)
월간 마이크로소프트웨어/그.. (28)

글 보관함