본문 바로가기

reversing/rootkit

WinDBG 명령어 [SXE,sxe] -SYS 분석

SMALL

기본적으로 커널 디버깅 환경이 구축된 상태로 진행한다.


커널 디버깅 환경 구축 [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


windbg에 위와같이 설정을 한다.

그 다음 Guest PC에서 로더 프로그램을 사용하여서 해당 richong.sys 파일을 로드한다.

Register Service --> Start Service 버튼을 차례로 누른다.

여기서 서비스를 사용하는 이유는 드라이버를 로드하는 방법에는 여러가지가 존재하지만, 가장 안정적으로 

로드시키는 방법은 서비스를 사용하는 방법이기 때문이다.




로드를 하고 나면 Windbg에 브레이크 포인트가 걸렸다는 것을 알 수있다.

kd> lm --> load module 을 보여주는 명령어

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을 이용한 분석 방법도 있다.








LIST