Volatility 사용법 – Windows 메모리 포랜식 분석

Volatility – 메모리 분석

Volatility는 Volatile Systems https://www.volatilesystems.com/default/volatility 회사에서 공개한 메모리 덤프 분석 도구이다. 사고 머신의 메모리 덤프를 편리하게 분석할 수 있는 도구 중 이만큼 확장성과 유연성을 겸비 도구를 찾아보기 어려울 만큼 상당한 분석력을 자랑한다.

Volatility는 파이션(Vbscript와 함께 분석가들이 많이 사용하는 스크립트 언어, http://www.python.org)으로 개발된 도구로, 현재 2.0 버전까지 존재하며, 윈도우7까지 지원한다.

본 도구은 파이션을 설치하고 사용하는 버전과 파이션 없이 바로 사용할 수 있는 Standalone 형 이렇게 2종류로 제공되며, 사용자 취향에 따라 골라 사용하면 된다(기능상의 차이는 존재하지 않지만, 파이션 버전의 경우 용도에 맞도록 수정을 가할 수 있고, 본 도구의 메모리 검색 형식에 대해 구조를 분석해 볼 수 있다).

여기서는 Standalone형을 이용하여 메모리 덤프로부터 정보를 수집하고, 해당 옵션에 대한 분석은 파이션 파일을 확인하여 메모리로부터 값을 검출하는 방식에 대해 이해해 보자.

Connscan 확장 명령은 메모리로부터 연결하였던 네트워크 정보를 확인할 수 있다. 이 정보는 바로 PoolTag의 TCPT 풀 메모리를 확인한 이후 _TCPT_OBJECT 오브젝트를 통해 확인하는 구조이다.

Volatility 사용법 – Windows 메모리 포랜식 분석

[그림] Volatility는 각 플러그인을 통해 메모리 덤프에서 원하는 데이터를 추출할 수 있다

즉 Volatility에서는 메모리 내 구조체 정보를 제공하고, 이를 확장 명령을 통해 커널 구조체를 이용하여 필요한 정보를 추출하는 에드온 형식의 확장성이 유연한 도구인 것이다.

대부분 실행 환경과 관련된 옵션으로 –f –v, –output-file= 이외에는 몰라도 크게 이상이 없는 옵션들이며, 어려운 옵션이 없어 쉽게 이해가 갈 것이다.

앞서 메모리 수집 도구를 이용하여 수집해 놓은 메모리 덤프를 이용해 함께 진행하면서 확인해 보도록 하자. 여기서는 Volatility의 Standalone형으로 진행할 예정이며, Standalone형은 EXE 형태로 이미 플러그인 들이 다 들어있는 상태이다. 그럼 각 옵션에 대해 진행 확인해 보도록 하자. 자주 사용하는 명령의 경우 예제를 표시하거나, 붉은색으로 표시하였다.

bioskbd: 키보드 버퍼에 입력된 내용이 있을 경우 표시

connections: 네트워크 연결 정보를 표시한다(XP만 사용 가능).

// 메모리 덤프 당시 접근했던 경로를 확인할 수 있다. 66.55.10.11로 80 포트 접근이므로 웹을 이용했음을 짐작할 수 있다.
C:\>volatility.exe connections -f phy.dmp

Volatile Systems Volatility Framework 2.0

Offset(V) Local Address Remote Address Pid

———- ————————- ————————- ——

0xf8492460 10.0.2.15:1355 65.55.10.11:80 34972

0xf8802280 10.0.2.15:1344 65.55.10.11:80 20568

0xf84c3310 10.0.2.15:1348 112.175.42.64:80 1256

..중략

[실습] 네트워크 접근 정보를 확인할 수 있다

connscan: _TCPT_OBJECT 오브젝트를 이용하여, 연결 현황 표시(TCP만 표시)

C:\>volatility connscan -f phy.dmp

Volatile Systems Volatility Framework 2.0

Offset Local Address Remote Address Pid

———- ————————- ————————- ——

0x0148a838 10.0.2.15:1404 65.98.21.152:80 10360

0x01501aa0 10.0.2.15:1405 65.98.21.152:80 10360

0x0150b008 10.0.2.15:1410 65.98.21.152:80 10360

0x0154b318 10.0.2.15:1374 65.55.239.163:80 10360

0x01574500 10.0.2.15:1406 65.98.21.152:80 10360

0x01598dc0 10.0.2.15:1390 183.111.23.49:80 10360

0x01657ae8 10.0.2.15:1389 207.46.49.132:80 10360

…중략

[실습] 세션별 접근 정보를 확인 가능하다

crashinfo: Crash-dump인 경우 해당 메모리 덤프 정보 표시

dlldump: DLL리스트로 확인된 주소를 이용하여 DLL을 추출

dlllist: 각 프로세스마다 사용하던 DLL을 표시, 프로세스에서 사용하던 파라미터도 확인 가능하다. 만약 후킹한 Dll 등 정상적이지 않은 Dll을 등록하였다면 이를 통해 확인할 수 있다.

C:\>volatility dlllist -f phy.dmp

Volatile Systems Volatility Framework 2.0

************************************************************************

System pid: 4

Unable to read PEB for task.

************************************************************************

smss.exe pid: 576 ß Smss 프로세스가 사용한 Dll 리스트를 확인할 수 있다.

Command line : \SystemRoot\System32\smss.exe

Base Size Path

0x48580000 0x00f000 \SystemRoot\System32\smss.exe

0x7c930000 0x09b000 C:\WINDOWS\system32\ntdll.dll

************************************************************************

csrss.exe pid: 648

Command line : C:\WINDOWS\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16

Service Pack 3

Base Size Path

0x4a680000 0x005000 \??\C:\WINDOWS\system32\csrss.exe

0x7c930000 0x09b000 C:\WINDOWS\system32\ntdll.dll

0x75a80000 0x00b000 C:\WINDOWS\system32\CSRSRV.dll

0x75a90000 0x010000 C:\WINDOWS\system32\basesrv.dll

0x764c0000 0x054000 C:\WINDOWS\system32\winsrv.dll

0x77e20000 0x049000 C:\WINDOWS\system32\GDI32.dll

0x7c800000 0x130000 C:\WINDOWS\system32\KERNEL32.dll

0x77cf0000 0x090000 C:\WINDOWS\system32\USER32.dll

0x62340000 0x009000 C:\WINDOWS\system32\LPK.DLL

0x73f80000 0x06b000 C:\WINDOWS\system32\USP10.dll

0x77f50000 0x0a8000 C:\WINDOWS\system32\ADVAPI32.dll

0x77d80000 0x092000 C:\WINDOWS\system32\RPCRT4.dll

0x77ef0000 0x011000 C:\WINDOWS\system32\Secur32.dll

0x75de0000 0x0af000 C:\WINDOWS\system32\sxs.dll

0x76d90000 0x022000 C:\WINDOWS\system32\Apphelp.dll

0x77bb0000 0x008000 C:\WINDOWS\system32\VERSION.dll

************************************************************************

winlogon.exe pid: 672

Command line : winlogon.exe

Service Pack 3

…중략

[실습] 프로세스 세부 정보 확인

driverscan: _DRIVER_OBJECT의 구조체를 이용하여 사용하던 드라이버 리스트를 확인할 수 있다. 커널 드라이버를 해킹 용도로 생성한 경우에 이를 통해 의심되는 드라이버를 확인할 수 있다.

C:\>volatility.exe driverscan -f phy.dmp | more

Volatile Systems Volatility Framework 2.0

Offset Obj Type #Ptr #Hnd Start Size Service key Name

0x0199cf38 0xf889b900 3 0 0xf3ad8000 12160 ‘mouhid’ ‘mouhid’

‘\\Driver\\mouhid’

0x01b85ce0 0xf889b900 3 0 0xf382d000 172416 ‘kmixer’ ‘kmixer’

‘\\Driver\\kmixer’

0x01bd0340 0xf889b900 4 0 0xf3ba8000 10368 ‘HidUsb’ ‘HidUsb’

‘\\Driver\\HidUsb’

0x01cd0358 0xf889b900 3 0 0xf78ae000 2944 ‘Null’ ‘Null’

‘\\Driver\\Null’

0x01d06b10 0xf889b900 3 0 0xf73a6000 34560 ‘Wanarp’ ‘Wanarp’

‘\\Driver\\Wanarp’

0x01d3b3b8 0xf889b900 3 0 0xf73f6000 63744 ‘Cdfs’ ‘Cdfs’

‘\\FileSystem\\Cdfs’

0x01d3b7e0 0xf889b900 12 0 0x00000000 0 ‘\\Driver\\Win32k’ ‘Win32k’

‘\\Driver\\Win32k’

…중략

[실습] 드라이버 모듈 리스트 확인

Filescan: _FILE_OBJECT를 이용하여 메모리 풀에 할당된 파일 리스트를 표시한다. 시스템이 사용한 파일 리스트를 확인할 수 있어, 이 역시 의심되는 악성/해킹 파일을 찾는 데 도움을 준다.

C:\>volatility.exe filescan -f phy.dmp | more

Volatile Systems Volatility Framework 2.0

Offset(V) Obj Type #Ptr #Hnd Access Name

0x0143a2a8 0xf889b560 1 0 R–r-d ‘\xeb\x9f\x90\xee\x89\xaa\xee\xa5\xb8\xee

\x86\xa9DOWS\\system32\\wmvcore.dll’

0x0143a740 0xf889b560 1 1 —— ‘\\ROUTER’

0x0143ac70 0xf889b560 1 0 R–rw- ‘\\WINDOWS\\system32\\mydocs.dll’

0x0143ad78 0xf889b560 1 0 R–r– ‘\xec\xa7\x90\xee\x88\x84INDOWS\\pchealth

\\helpctr\\DataColl\\CollectedData_147.xml’

0x0143b568 0xf889b560 1 0 R–rwd ‘\xe7\xb3\x88\xee\x86\x87INDOWS\\system32

\\neth.dll’

0x0143c5f8 0xf889b560 1 1 RW-rw- ‘\\Documents and Settings\\Administrator\

\Local Settings\\Temporary Internet Files\\Content.IE5\\index.dat’

0x01445168 0xf889b560 1 0 -W-r– ‘\xe9\x89\xb0\xee\x89\xb8\xe5\xbc\x88\xee

\x84\xa2tem Volume Information\\_restore{3B15DA26-F469-4CB6-A823-2B2303D55D60}\\

RP23\\snapshot\\_REGISTRY_MACHINE_SECURITY’

0x01445320 0xf889b560 1 0 R–rwd ‘\xe8\xaa\xa0\xee\x85\xa3\xe2\xae\x88\xee

\x84\xbeDOWS\\system32\\winsta.dll’

0x014457e0 0xf889b560 1 0 R–rwd ‘\xea\x80\x88\xee\x88\xbfINDOWS\\system32

\\net.exe’

…중략

[실습] 열려있던 파일 정보를 확인할 수 있다

Getsids: 각 프로세스의 소유자를 표시한다.

C:\>volatility.exe getsids -f phy.dmp | more

Volatile Systems Volatility Framework 2.0

System (4): S-1-5-18 (Local System)

System (4): S-1-5-32-544 (Administrators)

System (4): S-1-1-0 (Everyone)

System (4): S-1-5-11 (Authenticated Users)

smss.exe (576): S-1-5-18 (Local System)

smss.exe (576): S-1-5-32-544 (Administrators)

smss.exe (576): S-1-1-0 (Everyone)

…중략

[실습] 각 프로세스의 소유자 정보

Handles: 각 프로세스별 사용 핸들 리스트를 출력한다.

// 핸들 정보를 통해 프로세스가 접근한 파일, 실행 명령등, 심지어 후킹 DLL도 확인 할 수 있다.
C:\>volatility.exe handles -f phy.dmp | more

Volatile Systems Volatility Framework 2.0

Offset(V) Pid Type Details

0xf88b09b0 4 Process System(4)

0xf88b02b0 4 Thread TID 12 PID 4

// 레스지스트리 키 접근 정보들을 확인 할 수 있다.

0xe12be150 4 Key MACHINE\SYSTEM\CONTROLSET001\CONTROL\SESSIO

N MANAGER\MEMORY MANAGEMENT\PREFETCHPARAMETERS

0xe100e470 4 Key

0xe12d4758 4 Key MACHINE\SYSTEM\WPA\PNP

0xe12d2418 4 Key MACHINE\HARDWARE\DESCRIPTION\SYSTEM\MULTIFU

NCTIONADAPTER

0xe12ca268 4 Key MACHINE\SYSTEM\WPA\KEY-4F3B2RFXKC9C637882MB

M

0xe12db440 4 Key MACHINE\SYSTEM\SETUP

0xe12bf168 4 Key MACHINE\SYSTEM\WPA\MEDIACENTER

0xe12d5418 4 Key MACHINE\SYSTEM\WPA\SIGNINGHASH-V44KQMCFXKQC

TQ

0xe1020880 4 Key MACHINE\SYSTEM\CONTROLSET001\CONTROL\PRODUC

TOPTIONS

0xe12dc490 4 Key MACHINE\SYSTEM\CONTROLSET001\SERVICES\EVENT

LOG

// 이외에도 파일 접근 정보, 로드한 DLL등의 정보도 확인이 가능하다.

0xf88a76d0 4 Event ‘TRKWKS_EVENT’

0xf862f5f8 4 File

0xf87db860 4 File ‘\\WINDOWS\\system32\\config\\SECURITY’

0xf88955a8 4 Thread TID 96 PID 4

0xf88c9838 4 Event ‘VxKernel2VoldEvent’

0xe100ef40 4 Directory ‘WinDfs’

0xf8889b88 4 Thread TID 104 PID 4

0xe101c018 4 Directory ‘Harddisk0’

0xe12ea860 4 Directory ‘Harddisk1’

0xf880c330 4 Process msdtc.exe(2000)

0xf8466688 4 File

0xf84eee38 4 File

…중략

[실습] 프로세스별 사용 핸들 정보를 확인할 수 있다

Hashdump: 패스워드 해쉬 (LM/NTLM) 값을 메모리로부터 출력(hivelist와 함께 사용)한다. 이를 이용해 계정 정보를 확인할 수 있다.

// 잠시 후 나오는 하이브 리스트를 이용해 해쉬 덤프할 메모리 위치를 확인한다.
C:\>volatility.exe hivelist -f phy.dmp

Volatile Systems Volatility Framework 2.0

Virtual Physical Name

0xe1be0008 0x0f9e4008 \Device\HarddiskVolume1\Documents and Settings\Administr

ator\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat

0xe1be3758 0x0f956758 \Device\HarddiskVolume1\Documents and Settings\Administr

ator\NTUSER.DAT

0xe186da58 0x0e47aa58 \Device\HarddiskVolume1\Documents and Settings\LocalServ

ice\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat

0xe1865b60 0x0e430b60 \Device\HarddiskVolume1\Documents and Settings\LocalServ

ice\NTUSER.DAT

0xe17c95e8 0x0d6ec5e8 \Device\HarddiskVolume1\Documents and Settings\NetworkSe

rvice\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat

0xe1841008 0x0df78008 \Device\HarddiskVolume1\Documents and Settings\NetworkSe

rvice\NTUSER.DAT

0xe1433b60 0x0baf0b60 \Device\HarddiskVolume1\WINDOWS\system32\config\software

0xe143c008 0x0bb3d008 \Device\HarddiskVolume1\WINDOWS\system32\config\SAM

0xe1432758 0x0baef758 \Device\HarddiskVolume1\WINDOWS\system32\config\default

0xe1433008 0x0baf0008 \Device\HarddiskVolume1\WINDOWS\system32\config\SECURITY

0xe12c5b60 0x02916b60 [no name]

0xe1036b60 0x026c5b60 \Device\HarddiskVolume1\WINDOWS\system32\config\system

0xe102e008 0x0267e008 [no name]

0xe0cb19bc 0x00cb19bc [no name]

C:\>volatility.exe hashdump -f phy.dmp -y 0xe1036b60 -s 0xe143c008

Volatile Systems Volatility Framework 2.0

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c08

9c0:::

Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

HelpAssistant:1000:1b264b738374de52f32d392eb34a53fd:3718dd891cc039bb9f162af7a24d

f20e:::

SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:8b60703a1461b36e50ada491c

d022793:::

ASPNET:1003:be4e61895c323ecfe356fea586efeb0d:4c5a67749b6acd2ba8f6a518dd7222df:::

[실습] 하이브 파일 정보를 통해 계정정보를 확인할 수 있다

Hibinfo: 최대절전모드의 메모리덤프인 경우 정보 출력

hivedump: 하이브된 파일에서 레지스트리 키값을 출력한다.(hivelist 와 함께 사용하기바란다.) 메모리에서 파일로 추출이 가능하다.

// 앞서 확인한 하이브파일 리스트에서 SAM 파일 정보를 확인해 보자.
C:\>volatility.exe hivedump -f phy.dmp -o 0xe143c008

Volatile Systems Volatility Framework 2.0

Last Written Key

2011-06-20 05:56:35 \SAM

2011-06-20 05:56:35 \SAM\SAM

2011-06-20 05:56:35 \SAM\SAM\Domains

2011-09-29 08:23:38 \SAM\SAM\Domains\Account

2011-06-20 06:46:34 \SAM\SAM\Domains\Account\Aliases

2011-06-20 06:46:38 \SAM\SAM\Domains\Account\Aliases\000003E9

2011-06-20 06:46:38 \SAM\SAM\Domains\Account\Aliases\Members

2011-06-20 06:46:38 \SAM\SAM\Domains\Account\Aliases\Members\S-1-5-21-120266062

…중략

[실습] SAM 레지스트리 키 정보를 확인할 수 있다

Hivelist: 조금 전에 예제에서 계속 다룬 레지스트리 하이브 리스트 출력한다.

C:\>volatility.exe hivelist -f phy.dmp

Volatile Systems Volatility Framework 2.0

Virtual Physical Name

0xe1be0008 0x0f9e4008 \Device\HarddiskVolume1\Documents and Settings\Administr

ator\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat

0xe1be3758 0x0f956758 \Device\HarddiskVolume1\Documents and Settings\Administr

ator\NTUSER.DAT

0xe186da58 0x0e47aa58 \Device\HarddiskVolume1\Documents and Settings\LocalServ

…중략

[실습] 메모리에 존재하는 하이브 리스트의 위치를 알려준다

hivescan: _CMHIVE 오브젝트를 이용하여 하이브 검색 (레지스트리 하이브)

imagecopy: RAW 이미지로 메모리 이미지 복사

imageinfo: RAW 이미지 형식인 경우 덤프 정보 표시

C:\>volatility.exe imageinfo -f phy.dmp

Volatile Systems Volatility Framework 2.0

Determining profile based on KDBG search…

Suggested Profile(s) : WinXPSP3x86, WinXPSP2x86 (Instantiated with Win

XPSP2x86)

AS Layer1 : JKIA32PagedMemory (Kernel AS)

AS Layer2 : FileAddressSpace (C:\phy.dmp)

PAE type : No PAE

DTB : 0x39000

KDBG : 0xe0b6ede0L

KPCR : 0xffdff000L

KUSER_SHARED_DATA : 0xffdf0000L

Image date and time : 2011-10-14 09:08:35

Image local date and time : 2011-10-14 09:08:35

Number of Processors : 1

Image Type : Service Pack 3

[실습] 메모리 덤프 생성된 시스템의 정보를 파악할 수 있다

kdbgscan: KDBG 값을 검색하여 덤프한다.

kpcrscan    : KPCR 값을 검색하여 덤프한다.

lsadump: 레지스트리의 LSA secrets값을 덤프한다(1부의 Pwdump에서 다루었다).

memdump: 프로세스 메모리를 덤프한다.

memmap: 메모리의 매핑정보를 출력한다.

moddump: 커널 드라이버를 실행파일로 덤프한다.

modscan: 메모리 덤프의 _LDR_DATA_TABLE_ENTRY 개체 저옵를 출력한다.

modules: 로드된 모듈 정보를 출력한다.

mutantscan: _KMUTANT 오브젝트 정보를 출력한다.

netscan: 윈도우 비스타, 2008 혹은 7의 네트워크 연결과 소켓정보를 출력한다.

printkey: 레지스트리 키 정보를 출력한다.

// 확인 가능한 레지스트리 키 값을 보여준다.
C:\>volatility.exe printkey -f phy.dmp | more

Volatile Systems Volatility Framework 2.0

Legend: (S) = Stable (V) = Volatile ß S는 비 휘발성 값이고, V는 윈도우 구동시에 이용되는 임시 값을 의미한다.

—————————-

Registry: \Device\HarddiskVolume1\WINDOWS\system32\config\system

Key name: $$$PROTO.HIV (S)

Last updated: 2011-10-11 06:28:12

Subkeys:

(S) ControlSet001

(S) ControlSet002

(S) LastKnownGoodRecovery

(S) MountedDevices

(S) Select

(S) Setup

(S) WPA

(V) CurrentControlSet

Values:

—————————-

Registry: \Device\HarddiskVolume1\Documents and Settings\Administrator\Local Set

tings\Application Data\Microsoft\Windows\UsrClass.dat

Key name: S-1-5-21-1202660629-813497703-1060284298-500_Classes (S)

Last updated: 2011-10-14 01:46:07

…중략

[실습] 레지스트리 키 정보를 확인할 수 있다

procexedump: 프로세스를 파일로 덤프한다. 메모리에서 의심 프로세스를 발견하였을 때, 이 명령을 통해 파일로 생성하여 Ollydbg와 같은 디버깅 도구를 이용해 분석할 수 있다.

C:\>volatility.exe procexedump -p 896 -f phy.dmp -D f:\

Volatile Systems Volatility Framework 2.0

************************************************************************

Dumping VBoxService.exe, pid: 896 output: executable.896.exe

C:\>dir f:\executable.896.exe

Volume in drive F is Data

Volume Serial Number is 72BD-AA69

Directory of f:\

2012-02-17 ?? 11:15 1,015,808 executable.896.exe ß 다음으로 진행되는 procmemdump와 비교해보자

1 File(s) 1,015,808 bytes

0 Dir(s) 165,726,240,768 bytes free

[실습] 프로세스를 파일로 생성한다

procmemdump: 프로세스 메모리를 덤프한다. 위 명령과 차이점은 빈공간을 포함하여 생성한다.

C:\>volatility.exe procmemdump -p 896 -f phy.dmp -D f:\

Volatile Systems Volatility Framework 2.0

************************************************************************

Dumping VBoxService.exe, pid: 896 output: executable.896.exe

C:\>dir f:\executable.896.exe

Volume in drive F is Data

Volume Serial Number is 72BD-AA69

Directory of f:\

2012-02-17 ?? 11:20 1,036,288 executable.896.exe ß procexedump보다 생성 용량이 크다.

1 File(s) 1,036,288 bytes

0 Dir(s) 165,741,064,192 bytes free

[실습] 메모리에서 프로세스를 파일로 내보낼수 있다

pslist: EPROCESS 구조체를 통해 현재 구동 중인 프로세스를 확인한다. 기본적으로 사용해야 할 명령이다.

C:\ >volatility pslist –f phy.dmp

Volatile Systems Volatility Framework 2.0

Offset(V) Name PID PPID Thds Hnds Time

———- ——————– —— —— —— —— ——————-

0xf88b09c8 System 4 0 54 435 1970-01-01 00:00:00

0xf873ab48 smss.exe 576 4 3 19 2011-10-11 06:28:18

0xf8608128 csrss.exe 648 576 12 462 2011-10-11 06:28:19

0xf85f6020 winlogon.exe 672 576 19 516 2011-10-11 06:28:19

0xf85db880 services.exe 720 672 17 347 2011-10-11 06:28:19

0xf85aada0 lsass.exe 732 672 22 371 2011-10-11 06:28:19

0xf85e3550 VboxService.exe 896 720 8 106 2011-10-11 06:28:19

0xf85ceca8 svchost.exe 944 720 20 202 2011-10-11 06:28:19

…중략

[실습] 메모리 덤프 당시 실행중이던 프로세스 리스트를 확인할 수 있다

psscan: _EPROCESS를 이용하여 프로세스 리스트를 출력한다. 이를 이용하면 DKOM 탐지가 가능하여, 루트킷으로 감춘 프로세스뿐만 아니라 종료한 프로세스도 탐지할 수 있다.

pstree: 트리 형태로 프로세스 리스트를 출력한다.

sockets: 오픈된 소켓 정보를 출력한다. TCP뿐만이 아니라, UDP소켓도 함께 확인할 수 있다.

C:\>volatility.exe sockets -f phy.dmp

Volatile Systems Volatility Framework 2.0

Offset(V) PID Port Proto Address Create Time

———- —— —— ——————- ————– ————————–

0xf8588260 1132 123 17 UDP 10.0.2.15 2011-10-11 06:28:30

0xf8588260 4 0 47 GRE 0.0.0.0 2011-10-11 06:28:31

0xf83a6c58 20568 1344 6 TCP 0.0.0.0 2011-10-12 06:38:05

0xf8480cf8 1256 1348 6 TCP 0.0.0.0 2011-10-12 20:55:54

0xf8480cf8 732 500 17 UDP 0.0.0.0 2011-10-11 06:28:30

0xf7df2708 1184 1233 17 UDP 0.0.0.0 2011-10-12 02:21:57

0xf85b08d8 4 445 6 TCP 0.0.0.0 2011-10-11 06:28:18

0xf85b08d8 1184 1051 17 UDP 0.0.0.0 2011-10-11 07:25:43

0xf85fae98 1036 135 6 TCP 0.0.0.0 2011-10-11 06:28:19

0xf7da4e98 10360 1363 17 UDP 127.0.0.1 2011-10-14 01:45:54

0xf8691d08 1240 1900 17 UDP 10.0.2.15 2011-10-11 06:28:31

0xf8691d08 740 1025 6 TCP 127.0.0.1 2011-10-11 06:28:31

0xf8586c20 4 139 6 TCP 10.0.2.15 2011-10-11 06:28:23

0xf8586c20 732 0 255 Reserved 0.0.0.0 2011-10-11 06:28:30

0xf85adbf8 1132 123 17 UDP 127.0.0.1 2011-10-11 06:28:30

0xf85c2588 4 137 17 UDP 10.0.2.15 2011-10-11 06:28:23

0xf7f0e888 10184 1291 17 UDP 127.0.0.1 2011-10-12 03:15:09

0xf84a91f0 1184 1030 17 UDP 0.0.0.0 2011-10-11 06:

…중략

[실습] 소켓의 생성 시간과 동작 상황을 확인할 수 있다

sockscan: _ADDRESS_OBJECT 개체를 이용하여 소켓정보를 출력한다(TCP 소켓만 확인가능).

ssdt: SSDT 테이블을 표시한다, 이를 이용해 SSDT 변조 여부를 확인할 수 있다.

C:\>volatility.exe ssdt -f phy.dmp

Volatile Systems Volatility Framework 2.0

SSDT[0] at e0b046a8 with 284 entries

Entry 0x0000: 0xe0bb1df5 (NtAcceptConnectPort) owned by ntoskrnl.exe ß Ntoskrnl.exe가 제공하는 API임을 확인할 수 있다.

Entry 0x0001: 0xe0b9b0f1 (NtAccessCheck) owned by ntoskrnl.exe

Entry 0x0002: 0xe0ba9999 (NtAccessCheckAndAuditAlarm) owned by ntoskrnl.exe

Entry 0x0003: 0xe0bb3130 (NtAccessCheckByType) owned by ntoskrnl.exe

Entry 0x0004: 0xe0bafa83 (NtAccessCheckByTypeAndAuditAlarm) owned by ntoskrnl.exe

Entry 0x0005: 0xe0c5a07e (NtAccessCheckByTypeResultList) owned by ntoskrnl.exe

Entry 0x0006: 0xe0c5c207 (NtAccessCheckByTypeResultListAndAuditAlarm) owned by ntoskrnl.exe

Entry 0x0007: 0xe0c5c250 (NtAccessCheckByTypeResultListAndAuditAlarmByHandle)owned by ntoskrnl.exe

Entry 0x0008: 0xe0b9c6e4 (NtAddAtom) owned by ntoskrnl.exe

Entry 0x0009: 0xe0c6b047 (NtAddBootEntry) owned by ntoskrnl.exe

Entry 0x000a: 0xe0c59835 (NtAdjustGroupsToken) owned by ntoskrnl.exe

Entry 0x000b: 0xe0baf0a1 (NtAdjustPrivilegesToken) owned by ntoskrnl.exe

…중략

[실습] SSDT 정보를 출력한다

strings: 메모리 덤프 내 스트링 값을 검색하여 출력해 준다(값이 매우 방대하다).

thrdscan: _ETHREAD 오브젝트를 이용하여 실행중이던 스레드 표시한다.

userassist: Userassist 레지스트리 키 정보를 출력한다. Userassist 대해서는 3부 21장의 사용자 추적에서 자세히 다룬다. 요약하면, 사용자가 윈도우 실행시 사용했던 히스토리를 확인할 수 있다. 메모리를 통해서도 Userassist 값을 확인할 수 있다는 정도만 알아두자.

C:\>volatility.exe userassist -f phy.dmp

Volatile Systems Volatility Framework 2.0

—————————-

Registry: \Device\HarddiskVolume1\Documents and Settings\Administrator\NTUSER.DA

T

Key name: Count

Last updated: 2011-10-14 09:03:50 ß 생성 시간

Subkeys:

Values:

REG_BINARY UEME_CTLSESSION :

0000 65 4E 64 0E 12 00 00 00 eNd…..

REG_BINARY UEME_RUNPIDL:%csidl2%\Windows Media Player.lnk :ß 위 시간에 미디어 플레이어를 실행했음을 알 수 있다.

ID: 1

Count: 14

Last updated: 2011-06-20 06:58:29

0000 01 00 00 00 13 00 00 00 A0 5A C4 75 17 2F CC 01 ………Z.u./..

REG_BINARY UEME_RUNPIDL:%csidl2%\Windows Messenger.lnk :

ID: 1

Count: 13

Last updated: 2011-06-20 06:58:29

…중략

[실습] 유저 활동 정보가 저장되는 Userassist 정보를 확인할 수 있다

vadinfo: VAD 정보를 화면에 출력한다.

vadtree: 프로세스별 사용한 VAD를 트리형태로 출력한다.

vaddump: VAD의 메모리 내용을 파일로 덤프한다. VAD는 2부에서 진행하였다.

C:\>volatility.exe vadtree -f phy.dmp

Volatile Systems Volatility Framework 2.0

************************************************************************

Pid: 4

7ffe0000 – 7ffe0fff

00010000 – 00042fff

7c930000 – 7c9cafff

00070000 – 00070fff

04250000 – 0464ffff

00080000 – 0047ffff

04bf0000 – 04feffff

************************************************************************

…중략

C:\>volatility.exe vaddump -f phy.dmp -p 4 –dump-dir f:\

Volatile Systems Volatility Framework 2.0

Pid: 4

************************************************************************

…중략

[실습] VAD 정보를 확인후 해당 프로세스에서 사용한 VAD를 파일로 생성할 수 있다

vadwalk: VAD 트리구조의 정보를 테이블 구조 혹은 ASCII 형식으로 변환해 준다.

부분 확인 옵션들은 이 정도로 가능하며, 플러그인 형식으로 추가할 수 있어, 이외에도 유용한 플러그인들이 있는지 Volatile 홈페이지에 방문해서 확인해 보는것도 좋다.

Volshell

Volatile는 위 플러그인 이외에도 메모리 덤프를 Windbg와 같이 커맨드라인을 가지고 명령을 진행할 수있다. 프로세스 리스트와 구조체 확인 등의 작업이 가능하다. 하지만 제약도 많으므로 사용을 추천하지는 않는다.

C:\>volatility.exe volshell -f phy.dmp

Volatile Systems Volatility Framework 2.0

Current context: process System, pid=4, ppid=0 DTB=0x39000

Welcome to volshell! Current memory image is:

file:///C:/phy.dmp

To get help, type ‘hh()’

//먼저 사용가능한 도움말을 확인해 보자.

>>> hh()

ps() : Print a process listing.

cc(offset=None, pid=None, name=None) : Change current shell context.

dd(address, length=128, space=None) : Print dwords at address.

db(address, length=128, width=16, space=None) : Print bytes as canonical hexdump

.

hh(cmd=None) : Get help on a command.

dt(objct, address=None) : Describe an object or show type info.

list_entry(head, objname, offset=-1, fieldname=None, forward=True) : Traverse a

_LIST_ENTRY.

dis(address, length=128, space=None) : Disassemble code at a given address.

For help on a specific command, type ‘hh(<command>)’

// 실행중이던 프로세스 리스트를 확인하자.

>>> ps()

Name PID PPID Offset

System 4 0 0xf88b09c8

smss.exe 576 4 0xf873ab48

csrss.exe 648 576 0xf8608128

winlogon.exe 672 576 0xf85f6020

services.exe 720 672 0xf85db880

lsass.exe 732 672 0xf85aada0

…중략

// 2부에서 EPROCESS 구조체에 대해 다루었다. Mdd 프로세스의 EPORCESS 구조체 정보를 확인해보자.

>>> dt(‘_EPROCESS’, 0xf86805f0)

[_EPROCESS _EPROCESS] @ 0xF86805F0

0x0 : Pcb 4167566832

0x6c : ProcessLock 4167566940

0x70 : CreateTime 2011-10-14 09:08:35

0x78 : ExitTime 1970-01-01 00:00:00

0x80 : RundownProtect 4167566960

0x84 : UniqueProcessId 23488

0x88 : ActiveProcessLinks 4167566968

0x90 : QuotaUsage –

0x9c : QuotaPeak –

0xa8 : CommitCharge 149

0xac : PeakVirtualSize 17903616

0xb0 : VirtualSize 16265216

0xb4 : SessionProcessLinks 4167567012

0xbc : DebugPort 0

…중략

[실습] 쉘 모드도 제공하지만 많은 기대는 하지 말자

윈도우 메모리를 분석한다면 Volatillity를 이용해 간편하게 확인할 수 있는 만큼 메모리 포랜식 용도로 Volatility의 유용함을 확인할 수 있었다.

Kernel Memory Space Analyzer(kanalyze)
Microsoft에서 제공하는 메모리 분석 도구로서 volatillity와 성격이 다르다. 장애 상황시 이를 이용하여 커널 메모리 덤프를 효과적으로 분석할 수 있도록 도와준다. 단 kanalyze는 비스타 이상 버전에서는 사용할 수 없다. 해당 도구를 아래 위치에서 다운로드 가능하다.

http://www.microsoft.com/download/en/details.aspx?id=15877

이 도구를 사용하기 위해서는 Debugging Tools for Windows 6.5.3.8 32-bit 버전(http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.5.3.8.exe)을 먼저 설치하고 Windbg 설치 디렉토리에 Kanalyze를 붙여넣도록 하자(이 작업을 진행하지 않으면, 프로시저 시작 위치를 찾을 수 없는 오류가 발생한다).

기본적인 심볼 설정과 플러그인 설정들은 되어 있으므로 설치후 바로 Kanalyze.exe를 실행하여 크래쉬 메모리 덤프를 분석해 볼 수 있다.

아래 그림은 Kanalyze를 실행했을 때의 메인 화면으로, 새로운 덤프를 분석하거나, 기존 분석 내용을 다시 볼 수 있다. Kanalyze는 커널 개체들의 정보를 나열해 주기 때문에, 빠른 분석보다는 커널 역분석 용도로 사용하기를 권장한다.


↓Windbg 설치 디렉토리에 복사한후 Kanalyze 실행한다.


[그림] 커널 메모리 덤프의 대해 각 구조체를 구분하여 보여준다

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.