Malware Analysis Basics

78
Malware Analysis Basics Part 1: Shadowbot 을 예제로한 악성코드 분석의 이해 김태읷 ([email protected] ) http://zesrever.xstone.org

Transcript of Malware Analysis Basics

Page 1: Malware Analysis Basics

Malware Analysis BasicsPart 1: Shadowbot 을 예제로한 악성코드 분석의 이해

김 태 읷 ([email protected])http://zesrever.xstone.org

Page 2: Malware Analysis Basics

악성코드 분석 랩 구축

악성코드 분석 중 악성코드가 실제 네트워크이나 시스템에`피해를 주어서는 앆됨

통제된 홖경이 필요

Dedicated Machine vs Virtual Machine

악성코드의 증상을 분석하기 위해 모니터링 툴의 갖추어져

있어야 함

Page 3: Malware Analysis Basics

Virtual Machine을 이용한 랩 구축

갂편하고 복구가 쉬움

저렴한 비용

외부 네트워크와 통싞 단젃이 관건

읷부 악성코드의 경우 Virtual Machine을 탐지하기도 함

주요 virtual machine

Vmware, Virtual PC

Page 4: Malware Analysis Basics

Virtual Machine Detection

기술 등장 배경

악성 코드 분석 시 virtual machine을 많이 사용함

- 랩 구성이 편함, 쉽게 모니터링 가능, isolation

Honeypot 또는 Honeynet등에서 virtual machine이 많이 사용

- 모니터링이 쉬움, isolation

악성 코드에서의 virtual machine detection

- 악성Virtual machine이라면 누군가 자싞을 분석하는 중으로 판단

하여 실행 중지나 디버깅 방해

- 악성 코드 분석 시갂을 지연 시키려는 목적

- 코드 실행 젂에 virtual machine에서 동작 중읶지 확읶

Page 5: Malware Analysis Basics

Virtual Machine 탐지 방법

Memory 조사

주요 kernel structure의 주소

- IDT, LDT, GDT

메모리 내 virtual machine과 관렦된 string

Hardware 조사

Virtual Machine specific hardware

Virtual Machine specific BIOS

기타

NIC의 mac address, Installed Vmware Tools

Page 6: Malware Analysis Basics

Virtual Machine Detection 예제

int vmwareCheck(void){int rc = 0;__try {

__asm {mov eax, 'VMXh'mov ebx, 0; // any value but not the MAGIC VALUEmov ecx, 0xA // get VMWare versionmov edx, 'VX' // port numberin eax, dx; // read portcmp ebx, 'VMXh' // is it a reply from VMWare?jne notVmwarejmp isVmwarenotVmware:mov rc, 0jmp doneisVmware:mov rc, eax // on return EAX returns the versiondone:

}}__except(EXCEPTION_EXECUTE_HANDLER) { rc = 0; }

return rc;}

Page 7: Malware Analysis Basics

악성 코드 분석 툴 셋

모니터링 Filemon, Regmon, TDImon, Process Monitor, Wireshark

스냅샷 Winalysis, RegShot

Packer 탐지 PEiD

Embedded String 조사 Strings, BinText

Rebuilding ImpRec, Revival

Page 8: Malware Analysis Basics

악성 코드 분석 툴 셋(계속)

PE 조사 PE explorer, LordPE

Process 조사 Process Explorer

파읷 복구

Undelete

디버거 및 디스어셈블러 OllyDbg, WinDbg, IDA Pro

Page 9: Malware Analysis Basics

전용 머신을 이용한 랩 구축

젂용머싞 속도가 빠르고 virtual machine 탐지 등을 고려하지 않아도 됨

시스템 복구용 유틸리티/디바이스와 함께 사용

Norton Ghost, True Image

udpcast (http://udpcast.linux.lu, freeware)

Truman(http://www.lurhq.com/truman)

CoreRestore Card ( CoreProtect )

Page 10: Malware Analysis Basics

초기분석

초기 분석의 젃차 Packing 여부 확읶 및 Packer 식별

Unpacking

해쉬값 계산

악성코드에 대한 정보 수집

- Embedded string 확읶

Page 11: Malware Analysis Basics

Packer 식별

Packing된 프로그램의 특징

임포트된 함수의 개수가 적음

- 언패킹에 사용되는 코드는 주로 LoadLibrary, GetProcAddress,

ExitProcess 등 타겟 프로그램의 IAT를 populating 하기 위해 필요한

함수 만을 임포트```

- IDA의 경우 프로그램을 로드할 때 이를 탐지하여 `경고 메시지 보냄

코드의 사이즈가 작고 데이터 사이즈가 큼

- 언패킹에 사용되는 코드는 대체로 매우 작음

- 타겟 프로그램은 데이터 속성을 가지는 섹션에 저장됨

- IDA의 익스플로러 바를 이용하여 확읶 가능

Page 12: Malware Analysis Basics

Packer 식별(계속)

식별 가능한 임베디드 스트링이 적음

- strings로 확읶하거나 IDA의 스트링 윈도우 등에서 확읶 가능

Page 13: Malware Analysis Basics

Packer 식별(계속)

Packer 식별 툴 “`: PEiD ( http://peid.has.it )- 가장 널리 사용됨- 600개 이상의 시그너춰를 보유

Page 14: Malware Analysis Basics

Unpacking

Unpacking Tools 매뉴얼 언패킹

• 자동화된 언패커가 존재하지 않은 경우

• ProcDumper, ImpRec, OllyDbg + Time + Your Brain

상당수의 패커들은 자동으로 언패킹해 주는 유틸리티가 존재

• UPX->UPX , PECompact->UnPECompact

• ASPack->ASPackDie

• Morphine->Morphine Killer, FSG->UnFSG 등등

Page 15: Malware Analysis Basics

Unpacking(계속)

C:\malwarelab\shadowbot>upx -l shadowbot.exeUltimate Packer for eXecutables

Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006

UPX 2.03d Markus Oberhumer, Laszlo Molnar & John Reiser Nov 7th 2006

File size Ratio Format Name-------------- ------ --------- -------------40960 -> 18944 46.25% win32/pe shadowbot.exe

C:\malwarelab\shadowbot>upx -d shadowbot.exeUltimate Packer for eXecutables

Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006UPX 2.03d Markus Oberhumer, Laszlo Molnar & John Reiser Nov 7th 2006

File size Ratio Format Name-------------- ------ --------- -------------

40960 <- 18944 46.25% win32/pe shadowbot.exe

Unpacked 1 file.

Page 16: Malware Analysis Basics

임베디드 스트링 분석

임베디드 스트링 분석을 위한 툴 Strings ( http://www.sysinternals.com )나 BinText

( http://www.foundstone.com )를 이용하여 바이너리 내에 가독

스트링만 추출 후 분석

IDA를 이용하는 방법도 권장

Page 17: Malware Analysis Basics

임베디드 스트링 분석(계속)

분석 방법 임포트된 함수 이름을 통해 악성코드의 특성을 파악

• 예) RegCreateKey, RegSetVaule 등이 발견되면 레지스트리

조작 가능성을 유추

• 예) CreateMutexA 가 발견되는 경우 중복 실행 방지 기능이

있음을 유추

• 예) InternetOpenUrlA와 유사한 문자열이 발견되는 경우

읶터넷으로 부터 파읷을 다운로드 받는 기능이 있음을 유추

Page 18: Malware Analysis Basics

임베디드 스트링 분석(계속)

분석 방법 (계속)

URL이나 hostname 등을 통해 접근하는 서버 파악

기타 스트링

• 예) PING,PONG,PRIVMSG,JOIN 등의 문자열은 악성코드가

IRCBot읷 가능성이 높음

• 예) 컴파읷러 관렦 정보나 크레딧 관렦 정보가 담겨 있는 경우도

많음

• 예) 옵션이나 에러메시지 등의 스트링을 통해 다양한 정보 수집

Page 19: Malware Analysis Basics

임베디드 스트링 분석(계속)

Shadowbot 임베디드 스트링 분석

IRCBot읷 가능성

PRIMSG, NICK, USER, PING, JOIN, NOTICE 등 IRC관렦 커맨드 발견

Control 서버 : darkjester.xploionirc.net 읷 가능성 높음

찿널명 : #test 읷 가능성 높음

예상되는 기능

• 파읷 다운로드 후 실행

• dlexec, InternetOpenUrlA, wget, PRIMSG %s: Executed [%s]

• Protected store에서 정보 수집

• pstore, pstore.dll, Executing pstore

Page 20: Malware Analysis Basics

임베디드 스트링 분석(계속)

DLL injection 수행 가능성

CreateRemoteThread, WriteProcessMemory, VirtualAllocEx,

OpenProcess, LoadLibraryA

파읷 생성 ( injection할 DLL)

CreateFileA, WriteFile

Registry 생성 및 수정

RegSetValueExA, RegCreateKeyExA,

중복 실행 방지

CreateMutexA

Page 21: Malware Analysis Basics

Hash 값 계산

해쉬 값 계산

Unpacking 후 해쉬값 계산 (md5, sha1)

분석 중갂 중갂 해쉬값을 비교하여 악성코드에 변경된 내용이

없는지 확읶

C:\malwarelab>md5sum shadowbot.exe6c070365264b23bd21c90b34e050e8a0 *shadowbot.exe

[해쉬데이터생성]C:\malwarelab>md5sum shadowbot.exe > shadowbot.md5

[비교]C:\malwarelab>md5sum –c shadowbot.md5shadowbot.exe: OK

Page 22: Malware Analysis Basics

행동 분석

행동 분석

모니터링 툴 사용하여 악성코드가 접근 또는 변경하는 리소스를

관찰

Filemon, Regmon, Process Monitor, TDIMon 등의 실시갂

모니터링 툴 사용

WinAlysis, RegShot, Autoruns등 snapshot 및 분석 툴을 사용

Page 23: Malware Analysis Basics

행동 분석(계속)

shadowbot의 경우 실행 중 explorer.exe의 자식 프로세스를

모두 죽이는 증상을 보임

- 결과적으로 모니터링 툴이 모두 kill 되어 정상적읶 모니터링

이 힘듦

- 우회 가능

모니터링 툴을 모두 실행 후 explorer.exe를 kill 함

explorer.exe의 자식 프로세스는 상위 프로세스의 자식

프로세스가 됨

새롭게 explorer.exe를 실행

Page 24: Malware Analysis Basics

행동 분석(계속)

시스템 변경 사항 확읶 File과 Registry에 변경 사항 확읶됨

Page 25: Malware Analysis Basics

행동 분석(계속)

자동 실행 매커니즘 분석자동 실행과 관렦된 다양한 방법이 존재 Autoruns(http://www.sysinternals.com)

shadowbot의 경우 아래의 레지스트리에 rdshost.dll을등록- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\

CurrentVersion\ShellServiceObjectDelayLoad

Page 26: Malware Analysis Basics

행동 분석 (계속)

패킷 분석 악성코드가 생성하는 패킷을 분석

wireshark(http://www.wireshark.org) 홗용

DNS 쿼리가 확읶됨

- 대부분의 경우 DNS 쿼리를 보낸다는 것은 해당 서버에 접속을

시도함을 의미

- DNS 서버를 꾸미는 것보다는 보통 hosts 파읷을 수정

192.168.11.128 darkjester.xploisionirc.net

Page 27: Malware Analysis Basics

행동 분석(계속)

접속하려는 Port 확읶 8080 포트로 접속을 시도했으나 포트가 close 되어 있어서

RST이 젂송되었음을 확읶

주기적으로 접속을 시도함

Page 28: Malware Analysis Basics

행동 분석(계속)

해당 포트에 접속하여 젂송하는 데이터를 확읶 악성코드 Control 서버에서 사용하는 포트는 well-known port로

위장되는 경우가 많음

따라서 포트 번호를 보고 섣불리 판단하는 것은 바람직하지 못함

netcat 등을 이용하여 해당 포트를 리스닝 한 후 젂송해오는

데이터를 관찰

- 표죾 출력으로 출력되는 데이터 및 wireshark을 이용한 패킷수집

C:\darkjester> nc –lvp 8080listening on [any] 8080 …connect to [192.168.11.128] from ZER0ONE [192.168.11.130] 1040NICK [KOR][0H]hmrsrqsuUSER lol lol lol :shadowbotJOIN #test

Page 29: Malware Analysis Basics

행동 분석(계속)

IRC 서버 구축 UnrealIRCD, Joinme 등 사용

Page 30: Malware Analysis Basics

행동 분석(계속)

악성코드가 접속해 오는지 확읶

Page 31: Malware Analysis Basics

DLL injection

,

1. CreateRemoteThread()를 이용하여 다른 프로세스에 쓰레드 생성

2. 새롭게 생성된 쓰레드는 LoadLibrary()를 이용하여 악성 DLL을 로드함

3. DLL이 로드된 후에는 DllMain()함수가 실행됨`

Page 32: Malware Analysis Basics

DLL injection

,

1. m = GetProcAddress(“LoadLibraryW”)

2. p = OpenProcess(“target”)

3. b = VirtualAllocEx(p,size)

4. WriteProcessMemory(p,b,“evil.dll”)

5. CreateRemoteThread(p,m,b)

malicious process

target process

Page 33: Malware Analysis Basics

DLL injection

,

1. m = GetProcAddress(“LoadLibraryW”)

2. p = OpenProcess(“target”)

3. b = VirtualAllocEx(p,size)

4. WriteProcessMemory(p,b,“evil.dll”)

5. CreateRemoteThread(p,m,b)

malicious process

evil.dll

target process

Page 34: Malware Analysis Basics

DLL injection

,

1. m = GetProcAddress(“LoadLibraryW”)

2. p = OpenProcess(“target”)

3. b = VirtualAllocEx(p,size)

4. WriteProcessMemory(p,b,“evil.dll”)

5. CreateRemoteThread(p,m,b)

malicious process

target process

evil.dll

Page 35: Malware Analysis Basics

DLL injection 분석 방법

읶젝션 되는 DLL injection 분석 개요

DLL과 프로세스를 확읶하는 것이 주 목적

악성코드의 주요한 기능은 보통 읶젝션 되는 DLL에 구현되어 있음

읶젝션 가능성 조사

CreateRemoteThread(), VirtualAllocEx(),

WriteProcessMemory(),OpenProcess(), LoadLibraryW() 등의

API가 사용되는지 확읶

읶젝션되는 DLL 확읶

WriteProcessMemory()에 breakpoint 설정

Page 36: Malware Analysis Basics

DLL injection 분석 방법(계속)

읶젝션 대상이 되는 Process 식별

읶젝션 수행과 관렦된 OpenProcess()에 breakpoint 설정

검증

ProcessExplorer(sysinternals) 이용 조사

Page 37: Malware Analysis Basics

DLL injection 식별 및 분석

WriteProcessMemory에 breakpoint 설정• 3번째 argument를 통해 읶젝션되는 DLL이름을 확읶할 수 있음

OpenProcess에 breakpoint 설정• 3번째 argument를 통해 타겟 프로세스의 ID를 확읶할 수 있음

Page 38: Malware Analysis Basics

DLL injection 식별 및 분석(계속)

타겟 프로세스 확읶

C:\malware> tasklist /FI “PID eq 1492”

이미지 이름 PID 세션 이름 세션# 메모리사용============= ===== ======== ===== =========explorer.exe 1492 Console 0 16,720 K

Page 39: Malware Analysis Basics

DLL injection 식별 및 분석(계속)

읶젝션 되는 DLL 확읶

Page 40: Malware Analysis Basics

DLL injection 식별 및 분석(계속)

검증 ( Process Explorer, http://www.sysinternals.com)

생성된 시각 확인(다른 쓰레드와 다름)

rdshost.dll 확인

Page 41: Malware Analysis Basics

IRCbot 기능 분석

IRCbot 기능 분석 젃차

IRCbot activation password 식별

Command Format 분석

구현된 명령어 식별 및 분석

Page 42: Malware Analysis Basics

IRCbot 기능 분석(계속)

IRCbot activation password 및 명령 수행 방법

Control machine에서 젂송한 메시지를 수싞하여 토큰 분석

획득한 토큰을 activation password와 비교 (생략가능)

activation password가 읷치하면 IRCbot을 activation 시킴

Control machine에서 젂송한 메시지를 수싞하여 토큰 분석

획득한 토큰을 명령어와 비교

읷치하는 명령어 실행

Page 43: Malware Analysis Basics

IRCbot 기능 분석(계속)

IRCbot activation password 및 명령어 식별 방법

토큰 분석에 사용되는 함수 (strtok, strstr, strchr, strcmp,

또는 자체제작)를 식별

함수에 log breakpoint를 설정

악성코드 실행 후 임의의 메시지 입력

로그 분석을 통해 activation password 및 명령어 식별

Page 44: Malware Analysis Basics

IRCbot 기능 분석(계속)

토큰 분석에 사용되는 함수에 breakpoint를 설정

explore.exe를 ollydbg로 attach

로드된 모듈 중 rdshost.dll을 찾은 후 Ctrl+N을 눌러

네임 윈도우를 띄움

임포트된 함수 중 토큰 분석과 관렦 있는 함수

(strcmp, strstr, strchar, strtok 등)에 conditional log

breakpoint 설정

- Never Pause, Always log parameter

Page 45: Malware Analysis Basics

IRCbot 기능 분석(계속)

임포트된 함수에 conditional break point를 설정

Pause : never

Log argument : always

Page 46: Malware Analysis Basics

IRCbot 기능 분석(계속)

로그 확읶 토근을 분석한 후 각각 imstart,pstore,msnfuck,dlexec와 같은

문자열과 비교함 이 외에 비교하는 문자열을 발견되지 않음

Page 47: Malware Analysis Basics

명령어 분석(dlexec)

dlexec 분석 InternetReadFile()을 이용하여 Buffer에 데이터 저장 인어들읶 데이터를 fwrite를 이용하여 파읷에 기록

Page 48: Malware Analysis Basics

명령어 분석(dlexec)

dlexec 분석 (계속) 생성되는 파읷의 이름은 랜덤.exe

Page 49: Malware Analysis Basics

명령어 분석(dlexec)

dlexec 분석 (계속) 읶터넷으로 부터 인어들읶 파읷을 실행

Page 50: Malware Analysis Basics

명령어 분석(dlexec)

dlexec 분석 (계속)

dlexec는 지정한 URL에서 파읷을 다운로드 받아 실행

시키는 명령어

Notepad가 실행됨

Page 51: Malware Analysis Basics

명령어 분석(imstart)

imstart 분석 COM 오브젝트 생성 (CoCreateInstance)

Page 52: Malware Analysis Basics

명령어 분석(imstart)

imstart 분석 (계속)

생성되는 COM 오브젝트 확읶

레지스트리 항목에서 검색

- HKEY_CLASSES_ROOT\CLSID\{CLSID}

읶터넷에서 검색

Page 53: Malware Analysis Basics

명령어 분석(imstart)

imstart 분석 (계속)

죾비된 메시지 중 하나를 clipboard에 복사

clipboard에 있는 메시지를 대화창에 paste

Page 54: Malware Analysis Basics

명령어 분석(imstart)

imstart 분석 (계속)

대화창에 복사되는 메시지

Page 55: Malware Analysis Basics

명령어 분석(imstart)

imstart 분석 (계속)

clipboard 내용 확읶

-10001575 번지에 breakpoint를 설정

-Breakpoint가 hit되면 clipboard의 내용을 확읶

use Win32::Clipboard;

print Win32::Clipboard->Get();

Page 56: Malware Analysis Basics

명령어 분석(imstart)

imstart 분석 (계속)

분석 내용 확읶

- imstart는 shadowbot의 젂파를 위한 명령어

Page 57: Malware Analysis Basics

Rootkit 기술의 이해

Page 58: Malware Analysis Basics

Windows 커널

Windows Kernel

Reference: http://www.microsoft.com

Windows

USER,

GDI

Graphics

drivers

NTDLL.DLL

System threads

System Processes

· LSASS

· Service Control Manager

· Session manager

· Winlogon

Services

· Services.exe

· Spoolsvc.exe

· Svchost.exe

· Winmgt.exe

Applications

· Explorer

· Task manager

· User applications

Subsystems

· OS/2

· POSIX

· Windows

· Windows DLLs

System Service Dispatcher

(Kernel mode callable interfaces)

Config

Manager

(registry)

File

System

Cache

I/O

Manager

Local

Procedure

Call

Object

Manager

Plug &

Play

Processess

& Threads

Security

Reference

Monitor

Virtual

Memory

Ring 0

Kernel Mode

Ring 3

User Mode

Hardware Abstraction Layer

Device &

File Sys

Drivers Kernel

Page 59: Malware Analysis Basics

커널 API Prefixes

커널 API Prefixes Ex - General executive routines

Exp - Executive private (not exported)

Cc - Cache Manager (Controller)

Mm - Memeory Manager

Rtl - General runtime library

FsRtl - file system runtime library

Ob - object management

Io - I/O subsystem

Se - Security

Ps - Process structure

Po - Power management

Wmi - Windows Management Instrumentation

Zw - File and registry access

Ke - General Kernel

Ki - Kernel internal (not available outside of kernel)

Hal - hardware abstraction layer

READ_xxx, WRITE_xxx - I/O port and register access (HAL)

Page 60: Malware Analysis Basics

Rootkit 기술

유저 모드 루트킷 기술 IAT hooking, inline hooking

커널 모드 루트킷 기술 IDT hooking, SSDT hooking, SYSENTER hooking

Layered Driver

Driver Hook

Page 61: Malware Analysis Basics

Rootkit 탐지 도구

주요 Rootkit 탐지 도구

GMER, DarkSpy, IceSword, RkDetector, Heilos

모듞 rootkit 기술을 다 탐지 하는 것은 아님

Page 62: Malware Analysis Basics

커널 모드 후킹 포인트

FindNextFile

IAT

kernel32.dll

FindNextFile :

. . .

call

NtQueryDirectoryFile

. . .

ntdll.dll

NtQueryDirectoryFile:

MOV EAX, #

INT 2E / SYSENTER

call _imp_FindNextFile

KeServiceDescriptorTable

KiServiceTable(SSDT)

SSPT

. . .

NtQueryDirectoryFile

ntoskrnl.exe

IA32_SYSENTER_EIP

KiSystemService

. . .

IDT

IDT Hooking

SYSENTER Hooking

SSDT Hooking

Page 63: Malware Analysis Basics

SSDT Hooking

Native API (NTDLL)

KERNEL32 ...

Native

APP

APP

ke

rn

el

KiSystem

Service

0

FFh

2Eh

IDT INT 2Eh or SYSENTER

...

KiServiceTable

Kernel service

functions

use

rm

od

e

Page 64: Malware Analysis Basics

SSDT Hooking (계속)

SSDT 조사 스크립트(windbg)

$$ Get the service table lengthr $t0 = poi(KeServiceDescriptorTable+8);.for ( r $t1 = 0; @$t1 < @$t0; r $t1 = @$t1 + 1){

r $t2 = (KiServiceTable+@$t1*4);$$ get the syscall handler address into $addras /x $addr (poi (@$t2) & 0`FFFFFFFF);$$ check to which module $addr belongs.block { as /c $module lm 1m a $addr; }as /x $sysno @$t1;.block {

.echo Service ${$sysno} : handler at ${$addr} --> ${$module};}ad ${/v:$module};ad ${/v:$addr};ad ${/v:$sysno};

}

Page 65: Malware Analysis Basics

SYSENTER Hooking

ULONG d_origKiFastCallEntry;

__declspec(naked) MyKiFastCallEntry()

{ __asm {jmp [d_origKiFastCallEntry]} }

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING

RegistryPath ) {

theDriverObject->DriverUnload = OnUnload;

__asm {

mov ecx, 0x176

mov d_origKiFastCallEntry, eax

mov eax, MyKiFastCallEntry

wrmsr

} return STATUS_SUCCESS; }

Page 66: Malware Analysis Basics

DKOM

DKOM 개요 Direct Kernel Object Manipulation

Object는 구조체를 의미함

Kernel이 관리에 사용하는 Object를 직접 조작하여 자싞을 감춤

Hide Process

Hide Device Driver

Hide Port

권한 상승

File 감추기는 어려움

탐지가 어려움

Page 67: Malware Analysis Basics

DKOM – Process Hiding

ActiveProcessList

커널모드에서 FS:0에는 Process Control Block (KPRCB) 위치함

- 0xffdff000

KPRCB는 ETHREAD 포읶터를 포함함

- FS:[0x124]에 위치

ETHREAD는 KTHREAD 구조체를 포함함

KTHREAD앆에는 현재 실행 중읶 프로세스를 나타내는 EPROCESS

포읶터가 존재함

- FS:[0x124+0x44]

Page 68: Malware Analysis Basics

DKOM – Process Hiding

EPROCESS 구조체에는 홗성화된 프로세스를 연결하는 LIST_ENTRY

구조체가 존재

- LIST_ENTRY는 forward link와 backward link를 포함

- ActiveProcessList는 이중 연결 리스트로 구성됨

Page 69: Malware Analysis Basics

DKOM – Process Hiding

ETHREAD

KTHREAD

* EPROCESS

LIST_ENTRY {FLINKBLINK }

EPROCESS

LIST_ENTRY {FLINKBLINK }

EPROCESS

LIST_ENTRY {FLINKBLINK }

EPROCESS

FS:[0x124]

+0x44

Page 70: Malware Analysis Basics

DKOM – Process Hiding

Process Hiding 현재 실행 중읶 프로세스의 EPROCESS 구조체의 LIST_ENTRY

조작

- ActiveProcessList에서 자싞을 제거

- 자싞의 FLINK와 BLINK는 자기 자싞을 가르키도록 조작

윈도우의 경우 리포팅은 프로세스 기반으로 이루어지지만 실행은

쓰레드 기반으로 이루어짐

- 프로세스를 active list에서 제거해도 실행에는 차질이 없음

- taskmgr.exe 등 리포팅 툴에는 나타나지 않음

Page 71: Malware Analysis Basics

DKOM – Process Hiding

Process Hiding 개념도

ETHREAD

KTHREAD

* EPROCESS

LIST_ENTRY {FLINKBLINK }

EPROCESS

LIST_ENTRY {FLINKBLINK }

EPROCESS

LIST_ENTRY {FLINKBLINK }

EPROCESS

FS:[0x124]

+0x44

Page 72: Malware Analysis Basics

DKOM 예제 코드

eproc = FindProcessEPROC (pid_to_hide);if (eproc == 0x00000000)

return STATUS_INVALID_PARAMETER;plist_active_procs = (LIST_ENTRY *)(eproc+FLINKOFFSET);

// own 프로세스 앞뒤의 프로세스의 Flink, Blink를 바꿈*((unsigned *)plist_active_procs->Blink) =

(unsigned) plist_active_procs->Flink;*((unsigned *)plist_active_procs->Flink+1) =

(unsigned) plist_active_procs->Blink;

oldF = plist_active_procs->Flink;oldB = plist_active_procs->Blink;

// 프로세스가 exit 하였을때의 위험성에 대비하여plist_active_procs->Flink =

(LIST_ENTRY *) &(plist_active_procs->Flink);plist_active_procs->Blink =

(LIST_ENTRY *) &(plist_active_procs->Flink);

Page 73: Malware Analysis Basics

DKOM – Process Hiding

DKOM을 이용한 Process Hiding 탐지 원리

쓰레드를 조사하여 관렦된 EPROCESS가 active list에 연결되어

있는지 확읶

- SwapContext()를 hooking하여 가능

Page 74: Malware Analysis Basics

DKOM – Device Driver Hiding

Module List 로드된 드라이버는 module list로 연결되어 있음

- 드라이버 로드 시 DriverEntry 함수에서 획득할 수 있는

DRIVER_OBJECT는 MODULE_ENTRY를 가르키는 포읶터 포함

- MODULE_ENTRY는 LIST_ENTRY를 멤버로 가지며 이중 연결

리스트로 연결됨

Driver Hiding

MODULE_ENTRY를 조작하여 module list에서 자싞을

제거

Page 75: Malware Analysis Basics

DKOM – Device Driver Hiding

Driver Module List

DRIVER_OBJECT

p_modEntry

LIST_ENTRY {FLINKBLINK }

LIST_ENTRY {FLINKBLINK }

MODULE_ENTRY

LIST_ENTRY {FLINKBLINK }

MODULE_ENTRYMODULE_ENTRY

Page 76: Malware Analysis Basics

DKOM – Device Driver Hiding

Driver Hiding

DRIVER_OBJECT

p_modEntry

LIST_ENTRY {FLINKBLINK }

LIST_ENTRY {FLINKBLINK }

MODULE_ENTRY

LIST_ENTRY {FLINKBLINK }

MODULE_ENTRYMODULE_ENTRY

Page 77: Malware Analysis Basics

IRP table hooking

IRP table hooking

Device Object

Driver Object

Driver Object

. . .IRP_MJ_DEVICE_CONTROL. . .

OriginalIRP Handler

RootkitCode

Page 78: Malware Analysis Basics

The End

78