RootKit [ DeviceDriver 개념 및 설치실습]

2018. 5. 13. 19:25악성코드 분석

RootKit

침투를 성공한 공격자가 은밀하게 침투한 상태를 유지하도록 도와주는 프로그램


4가지 기능

- 프로세스 숨기기

- 파일 숨기기

- 네트워크 커넥션 숨기기

- 시스템에 접속하기 위한 백도어 설치


* RootKit은 커널의 DeviceDriver를 통해서 동작한다

* RootKit을 공부하기 전에  DeviceDriver에 대해서 공부하자



DeviceDriver란 ?

- load가능한 커널모드 모듈형태 ( .sys )

- I/O관리자와 관련 하드웨어를 인터페이스로 연결한다

- 커널내에 존재하여, Hal.dll을 통해서 하드웨어와 조작 및 통신

- 컴퓨터 하드웨어 장치와 상호작용하기 위해 만들어진 컴퓨터 프로그램

- 커널 전체 소스에 포함되어 컴파일 되기도하고, 별도로 컴파일된 (sys파일)형태로 존재할 수 있다

- dll load & unload, Thread start & end 시에 동작한다



* DeviceDriver 설치 & 실행 실습


먼저 DeviceDriver를 컴파일 할 수 있는 환경 구성을 한다 ( Build Environment  )


Windows Driver Kits - WDK 7600.16385.1 - Build Environments - Windows XP - x86 Checked Build Environment 실행


basic.c & MAKEFILE & SOURCES 파일을 컴파일했고 실행가능한 파일( sys파일 )을 하나 생성하였다



basic.c의 소스코드를 한번 보자 ( 나머지 두 파일에 크게 신경쓸 코드는 없다 )

DeviceDriver 실행 시 " I loaded " 출력 , 그리고 OnUnload함수를 통해서 " OnUnload calld " 출력 후 종료하는 루틴


생성된 sys타입의 DeviceDriver 파일을 실행시켜보자

DeviceDriver실행은 service로 등록하고 로드시켜서 실행시킬 수 잇다

이 때, 서비스를 자동으로 등록해주고 실행시키는 프로그램인 InstDvr을 사용한다


* InstDrv

파일의 경로를 입력하고 Install을 통해 서비스 등록, start & stop 으로 실행 및 종료 가능



* DbgView

Capture Kernel Check - 커널의 상태를 확인할 수 있다

아래에서처럼 DbgPrint() 함수의 결과를 확인할 수 있었다

Start => #1 출력

Stop => #2 출력



루트킷을 실행하는DeviceDriver원리에 대해서 알아보았고 다음에는 RootKit의 한 종류인 SSDT Hooking에 대해서 알아보겠습니다