メモリダンプからいろいろと情報を取得するフォレンジックツール「Volatility tool」というものがあるようなので、CentOS 7に試しにインストールしてみる。
メモリダンプを解析できるOSは結構種類があるようで、LinuxだけではなくWindows、Mac OS Xも解析可能なようだ。
1.インストール
まずは、以下のコマンドで前提となるパッケージ類を導入する。
yum install git
以下のコマンドでVolatility toolをインストールする。
git clone https://github.com/volatilityfoundation/volatility.git
cd volatility/
python ./setup.py install
2.メモリダンプの解析
インストールが完了したら、実際にメモリダンプの解析をしてみよう。
こちらに各OSのサンプルがあるので、適当に好きなファイルをダウンロードしてこよう。
vol.py imageinfo -f メモリダンプPATH
[root@BS-PUB-WEBTOOL-TEST01 volatility]# wget http://amnesia.gtisc.gatech.edu/~moyix/ds_fuzz_hidden_proc.img.bz2
--2016-08-22 18:26:11-- http://amnesia.gtisc.gatech.edu/~moyix/ds_fuzz_hidden_proc.img.bz2
amnesia.gtisc.gatech.edu (amnesia.gtisc.gatech.edu) をDNSに問いあわせています... 143.215.130.152
amnesia.gtisc.gatech.edu (amnesia.gtisc.gatech.edu)|143.215.130.152|:80 に接続しています... 接 続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 60878947 (58M) [application/x-bzip2]
`ds_fuzz_hidden_proc.img.bz2' に保存中
100%[=====================================================>] 60,878,947 3.35MB/s 時間 23s
2016-08-22 18:26:35 (2.52 MB/s) - `ds_fuzz_hidden_proc.img.bz2' へ保存完了 [60878947/60878947]
[root@BS-PUB-WEBTOOL-TEST01 volatility]# bzip2 -dc ds_fuzz_hidden_proc.img.bz2 > ds_fuzz_hidden_proc.img
[root@BS-PUB-WEBTOOL-TEST01 volatility]# vol.py imageinfo -f ds_fuzz_hidden_proc.img
Volatility Foundation Volatility Framework 2.5
*** Failed to import volatility.plugins.registry.shutdown (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.getservicesids (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.timeliner (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.malware.apihooks (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.malware.servicediff (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.userassist (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.getsids (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.shellbags (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.evtlogs (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.tcaudit (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.dumpregistry (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.lsadump (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.malware.threads (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.mac.apihooks_kernel (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.registry.amcache (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.mac.check_syscall_shadow (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.malware.svcscan (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.auditpol (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.ssdt (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.registry.registryapi (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.mac.apihooks (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.envars (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.shimcache (ImportError: No module named Crypto.Hash)
INFO : volatility.debug : Determining profile based on KDBG search...
Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)
AS Layer1 : IA32PagedMemoryPae (Kernel AS)
AS Layer2 : FileAddressSpace (/root/volatility/ds_fuzz_hidden_proc.img)
PAE type : PAE
DTB : 0x319000L
KDBG : 0x80545b60L
Number of Processors : 1
Image Type (Service Pack) : 3
KPCR for CPU 0 : 0xffdff000L
KUSER_SHARED_DATA : 0xffdf0000L
Image date and time : 2008-11-26 07:46:02 UTC+0000
Image local date and time : 2008-11-26 02:46:02 -0500
上のコマンドで、メモリダンプからOSの種類とCPUの数などが読み取れる。
ここで分かったOSの種類を指定して、動作していたプロセスなどを確認する。
vol.py --profile=OS種類 pslist -f メモリダンプPATH
[root@BS-PUB-WEBTOOL-TEST01 volatility]# vol.py --profile=WinXPSP3x86 pslist -f ds_fuzz_hidden_proc.img
Volatility Foundation Volatility Framework 2.5
*** Failed to import volatility.plugins.registry.shutdown (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.getservicesids (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.timeliner (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.malware.apihooks (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.malware.servicediff (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.userassist (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.getsids (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.shellbags (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.evtlogs (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.tcaudit (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.dumpregistry (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.lsadump (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.malware.threads (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.mac.apihooks_kernel (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.registry.amcache (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.mac.check_syscall_shadow (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.malware.svcscan (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.auditpol (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.ssdt (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.registry.registryapi (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.mac.apihooks (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.envars (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.shimcache (ImportError: No module named Crypto.Hash)
<span style="color: #ff0000;">Offset(V) Name PID PPID Thds Hnds Sess Wow64 Start Exit
---------- -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0x819cc830 System 4 0 51 254 ------ 0
0x817e4670 smss.exe 360 4 3 19 ------ 0 2008-11-26 07:38:11 UTC+0000
0x8181bd78 csrss.exe 596 360 10 322 0 0 2008-11-26 07:38:13 UTC+0000
0x8182b100 winlogon.exe 620 360 16 503 0 0 2008-11-26 07:38:14 UTC+0000
0x8183ba78 services.exe 672 620 15 245 0 0 2008-11-26 07:38:15 UTC+0000
0x817dbc30 lsass.exe 684 620 21 347 0 0 2008-11-26 07:38:15 UTC+0000
0x81859d70 svchost.exe 844 672 19 198 0 0 2008-11-26 07:38:18 UTC+0000
0x8183d360 svchost.exe 932 672 10 229 0 0 2008-11-26 07:38:18 UTC+0000
0x818a2300 svchost.exe 1064 672 63 1308 0 0 2008-11-26 07:38:20 UTC+0000
0x817f7da0 svchost.exe 1164 672 5 77 0 0 2008-11-26 07:38:23 UTC+0000
0x8180e6f0 svchost.exe 1264 672 14 209 0 0 2008-11-26 07:38:25 UTC+0000
0x817ca478 explorer.exe 1516 1452 12 362 0 0 2008-11-26 07:38:27 UTC+0000
0x816e75e8 spoolsv.exe 1648 672 12 112 0 0 2008-11-26 07:38:28 UTC+0000
0x816af860 VMwareTray.exe 1896 1516 1 26 0 0 2008-11-26 07:38:31 UTC+0000
0x816af448 VMwareUser.exe 1904 1516 1 28 0 0 2008-11-26 07:38:31 UTC+0000
0x816a13c0 VMwareService.e 1756 672 3 45 0 0 2008-11-26 07:38:45 UTC+0000
0x816557e0 alg.exe 512 672 6 105 0 0 2008-11-26 07:38:53 UTC+0000
0x81643b28 wuauclt.exe 1372 1064 8 225 0 0 2008-11-26 07:39:38 UTC+0000
0x8164e3a8 wscntfy.exe 560 1064 1 31 0 0 2008-11-26 07:44:57 UTC+0000</span></pre>
…VMwareとか動かしてたのかな?
そのほか、pstree(プロセスツリー)、connscan(netstatに相当する情報)、connections(プロセスの接続情報)などを指定して情報が得られる。
```shell
[root@BS-PUB-WEBTOOL-TEST01 volatility]# vol.py --profile=WinXPSP3x86 pstree -f ds_fuzz_hidden_proc.img | grep -v Failed
Volatility Foundation Volatility Framework 2.5
Name Pid PPid Thds Hnds Time
-------------------------------------------------- ------ ------ ------ ------ ----
0x819cc830:System 4 0 51 254 1970-01-01 00:00:00 UTC+0000
. 0x817e4670:smss.exe 360 4 3 19 2008-11-26 07:38:11 UTC+0000
.. 0x8182b100:winlogon.exe 620 360 16 503 2008-11-26 07:38:14 UTC+0000
... 0x8183ba78:services.exe 672 620 15 245 2008-11-26 07:38:15 UTC+0000
.... 0x816e75e8:spoolsv.exe 1648 672 12 112 2008-11-26 07:38:28 UTC+0000
.... 0x81859d70:svchost.exe 844 672 19 198 2008-11-26 07:38:18 UTC+0000
.... 0x8180e6f0:svchost.exe 1264 672 14 209 2008-11-26 07:38:25 UTC+0000
.... 0x818a2300:svchost.exe 1064 672 63 1308 2008-11-26 07:38:20 UTC+0000
..... 0x8164e3a8:wscntfy.exe 560 1064 1 31 2008-11-26 07:44:57 UTC+0000
..... 0x81643b28:wuauclt.exe 1372 1064 8 225 2008-11-26 07:39:38 UTC+0000
.... 0x817f7da0:svchost.exe 1164 672 5 77 2008-11-26 07:38:23 UTC+0000
.... 0x816557e0:alg.exe 512 672 6 105 2008-11-26 07:38:53 UTC+0000
.... 0x8183d360:svchost.exe 932 672 10 229 2008-11-26 07:38:18 UTC+0000
.... 0x816a13c0:VMwareService.e 1756 672 3 45 2008-11-26 07:38:45 UTC+0000
... 0x817dbc30:lsass.exe 684 620 21 347 2008-11-26 07:38:15 UTC+0000
.. 0x8181bd78:csrss.exe 596 360 10 322 2008-11-26 07:38:13 UTC+0000
0x817ca478:explorer.exe 1516 1452 12 362 2008-11-26 07:38:27 UTC+0000
. 0x816af448:VMwareUser.exe 1904 1516 1 28 2008-11-26 07:38:31 UTC+0000
. 0x816af860:VMwareTray.exe 1896 1516 1 26 2008-11-26 07:38:31 UTC+0000
[root@BS-PUB-WEBTOOL-TEST01 volatility]# vol.py --profile=WinXPSP3x86 connscan -f ds_fuzz_hidden_proc.img | grep -v Failed
Volatility Foundation Volatility Framework 2.5
Offset(P) Local Address Remote Address Pid
---------- ------------------------- ------------------------- ---
0x019cfbf0 192.168.101.128:1035 192.168.101.1:445 4
0x01a4abd0 192.168.101.128:1040 192.168.101.1:139 4
0x01a52b38 192.168.101.128:31337 192.168.101.1:1158 1696
[root@BS-PUB-WEBTOOL-TEST01 volatility]# vol.py --profile=WinXPSP3x86 connections -f ds_fuzz_hidden_proc.img | grep -v Failed
Volatility Foundation Volatility Framework 2.5
Offset(V) Local Address Remote Address Pid
---------- ------------------------- ------------------------- ---
0x81852b38 192.168.101.128:31337 192.168.101.1:1158 1696
0x817cfbf0 192.168.101.128:1035 192.168.101.1:445 4
問題の発生した際にメモリダンプを取るような運用が必要にはなるけど、いろいろなOSに対応しててこれだけ見れるなら中々よさそう。