tmxklab

[Volatility] 커널 모드 루트킷 탐지 본문

Security/Volatility

[Volatility] 커널 모드 루트킷 탐지

tmxk4221 2021. 4. 28. 20:42

1. kernel mode rootkit

  • 루트킷과 같은 프로그램은 커널 드라이버를 커널 모드에서 코드를 실행할 수 있음
  • 커널 공간에 실행되면 내부 OS 코드에 접근하여 시스템 이벤트의 모니터링, 함수 후킹, 호출 테이블 수정 등 가능
  • 커널 드라이버는 드라이버 서비스 유형의 서비스를 생성할 때 로드
  • 커널 드라이버는 .sys확장자를 가지며 %windir%/system32/drivers에 존재

일반적으로 루트킷은 유저 모드 컴포넌트(EXE or DLL)와 커널 모드 컴포넌트(Device Driver)로 구성되며 루트킷의 유저 모드 컴포넌트는 지정된 메커니즘을 통해 커널 모드 컴포넌트와 통신한다. 통신 방법과 관련 컴포넌트를 이해하기 위해서 다음 링크를 참고하자

 

 

관련 보호기법)

① 커널 모드 코드 서명(KMCS, Kernel-Mode Code Signing)

---> 커널 모드 드라이버를 메모리에 로드하려면 디지털 서명을 해야 함

② 커널 패치 보호(KPP, Kernel Patch Protection) 또는 패치가드(Patch Guard)라고 불림

---> 핵심 시스템 컴포넌트, 데이터 구조, 호출 테이블(SSDT, IDT 등)을 수정하지 못하도록 막음

 

하지만, 공격자는 커널 보호 기법을 우회하기 위해 서명되지 않은 드라이버를 설치하고 보안 메커니즘을 우회하는 고급 기술을 사용하여 개발함

Example1) 

---> 부트킷(bootkit) : OS가 로드되기 전에 시스템 시작 과정의 초기 단계에서 감염

 

Example2)

---> 커널 또는 서드파티 드라이버에 있는 취약점을 악용하여 서명되지 않은 드라이버 설치

 

악의적인 목적을 가지고 커널에 로드한 모듈들을 확인하기 위해 로드되어 있는 커널 모듈을 확인해야 한다.

 


2. Kernel Module 확인

 

1) modules 플러그인

  • 커널에 로드된 모듈 정보 확인
  • 커널모듈리스트(PsLoadedModuleList)가 가리키는 메타 데이터를 담은 구조체인 KLDR_DATA_TABLE_ENTRY의 double linked list를 탐색하는 것에 의존
  • PsLoadedModuleList에 의존하기 때문에 로드된 순서대로 커널 드라이버를 나열
  • DKOM기법에 취약 -> 풀 태그 스캐닝 방식을 사용하는 modscan 플러그인 사용
vol_2.6.exe -f <메모리 이미지 파일> --profile=<프로파일 명> modules

  • ntoskrnl.exe 또는 ntkrnlpa.exe 파일은 실제 윈도우 커널이고 커널 모듈로 가장 처음 실행되므로 커널모듈리스트(PsLoadedModuleList)의 가장 첫 번째 노드가 된다.
  • 이상한 이름을 가지는 커널 드라이버, 정상적이지 않은 경로(비표준) 또는 임시 경로에서 로딩된 커널 모듈에 대해서 파악할 수 있음
  • 따라서, 루트킷 드라이버가 최근에 설치됐고, 해당 모듈이 숨겨지지 않았으며 메모리 이미지를 취득하기 전 시스템이 재부팅되지 않았다면 출력된 리스트 마지막에서 해당 모듈을 발견할 가능성 큼

2) modscan 플러그인

  • 풀 태그 스캐닝 방식으로 커널에 로드된 모듈 정보 확인
  • 커널 모듈과 연관된 풀 태그(MmLd)를 탐색하기 위해 물리 주소 공간을 스캔하므로 로딩된 순서로 출력되지 않음
  • 풀 태그 스캐닝 방식을 사용하기 때문에 언로드된 모듈을 탐지 가능
vol_2.6.exe -f <메모리 이미지 파일> --profile=<프로파일 명> modscan

 

3) unloadedmodules 플러그인

  • 언로드되었거나 숨겨진 드라이버 확인
  • 언로드된 모듈 목록과 개별 모듈의 언로드된 시간 표시
  • 드라이버를 빠르게 로드 및 언로드하여 모듈 목록에 나타나지 않는 루트킷을 탐지하는데 유용
vol_2.6.exe -f <메모리 이미지 파일> --profile=<프로파일 명> unloadedmodules

 

4) driverscan 플러그인

  • 드라이버 객체 정보를 담은 DRIVER_OBJECT라는 구조체에서 커널 모듈과 관련된 정보를 가져옴
  • 풀 태그 스캐닝을 사용하여 물리 주소 공간에서 드라이버 객체를 찾는다.
  • 루트킷이 modules와 modscan 플러그인에서 숨겨졌을 때 유용
vol_2.6.exe -f <메모리 이미지 파일> --profile=<프로파일 명> driverscan

 

참고) windbg에서 "lm k" 또는 "lm kv"명령어를 통해 커널 모듈 확인

 

5) moddump 플러그인

  • 악의적인 커널 모듈을 식별 후 추가 조사를 위해 덤프 뜰 때 사용
  • Base Address는 modules, modscan, driverscan에서 얻음
vol_2.6.exe -f <메모리 이미지 파일> --profile=<프로파일 명> moddump -b <Base Address> -D <dump directory>
Comments