기본적으로 커널 디버깅 환경이 구축된 상태로 진행한다.
커널 디버깅 환경 구축 [http://richong.tistory.com/97]
분석 환경:
OS : Windows7
Tool : PE View, IDA, Windbg, OsrLoader
WinDBG 명령어 중에 SXE라는 명령어가 있다.
드라이버 분석할 때 주로 사용되는 명령어인것 같다.
명령어를 익숙하게 하기 위해서 어떠한 명칭으로 사용되는지를 아는게 중요하다고 생각한다.
Set Exceptions를 SXE라고 표현한다. 예외를 발생시켜라 라는 의미이다.
명령어의 활용에 대해서 알아 보고자 한다.
kd> sxe ld [moduleName] --> moduleName이 로드 될 때 예외를 발생시켜라는 의미이다.
--> 예외를 로드 될 때 이러한 이름의 모듈이 발생시켜라
kd> sxe ud [moduleName] --> moduleName이 언로드 될 때 예외를 발생시켜라는 의미이다.
kd> sxe av [address] --> address에 access violation이 발생 했을때 예외를 발생시켜라
악성 드라이버 분석을 진행할 때, 보통 디버깅 심볼이 없을 경우가 많다. 그렇기 때문에 심볼이 없다는 가정하에
진행하고자 한다.
여기서 악성 드라이버는 richong.sys라고 하겠다.
kd> sxe ld richong.sys --> richong.sys 가 로드되면 예외를 발생시켜라
kd> g
kd> lm
start end module name
00270000 00316000 autochk (deferred)
47a30000 47a43000 smss (deferred)
75b70000 75b7c000 msasn1 (deferred)
75b80000 75ba7000 cfgmgr32 (deferred)
...(생략)...
911b0000 911ce000 cdd (deferred)
92220000 922b7000 peauth (deferred)
922b7000 922c1000 secdrv (deferred)
922c1000 922e2000 srvnet (deferred)
922e2000 922ef000 tcpipreg (deferred)
922ef000 9233e000 srv2 (deferred)
9233e000 9238f000 srv (deferred)
923f9000 923ff000 richong (deferred)
그리고 확인해보면 잘 로드된것을 알 수있다.
앞에 start, end는 start는 BaseAddress를 기반으로 end는 BaseAddress + Memory Image 만큼의 크기일 것이다.
이를 확인 해본다.
0x923ff000 - 0x923f9000 = 0x6000인 것을 알 수있다.
밑의 그림을 보면 Size of Image가 0x6000을 확인할 수 있다.
이렇게 대략 확인해보았다.
이제 분석을 하기 위해서 Entrypoint에 브레이크 포인트를 걸어야 한다.
그러면 앞서 PE구조를 이용해서 BaseAddress에 EntryPoint만큼 더한 곳에 브레이크 포인트를 건다.
kd> bp 0x923f9000 [BaseAddress]+ 0x4000[EntryPoint]
kd> g
Breakpoint 0 hit
richong!GsDriverEntry:
923fd000 8bff mov edi,edi
이를통해서 Entry Point에 브레이크 포인트를 걸고 동작 시키면 잘 걸린다.
그리고 IDA와 Windbg를 보면서 OFFSET을 통해서 BP를 걸고 분석을 진행한다.
IDA를 통해서 본 richong.sys의 DriverEntryPoint이다.
Windbg를 통해서 본 브레이크 포인트가 걸린 부분이다. 일치하는 것을 확인할 수있다.
심볼이 없다고 가정하고서..이다.
말고도 CheatEngine을 이용한 분석 방법도 있다.
'reversing > rootkit' 카테고리의 다른 글
DPC (0) | 2016.08.19 |
---|---|
EPROCESS 구조체 [ 프로세스 숨기기_2 ] (5) | 2016.08.14 |
EPROCESS 구조체 [ 프로세스 숨기기_1 ] (0) | 2016.08.11 |
Kernel Debug 준비[windbg] (0) | 2016.08.10 |
장치 노드[Device node], 장치 개체[Device Object] 개념 (0) | 2016.08.07 |