SANSからの練習問題を試す フックの確認 (1)
これまでの手順により、"irykmmww"という不審なファイル名と同じドライバがある事が確認できました。
不審なカーネルモードのドライバとくればやはりRootkitなどを疑う事になるかと思います。RedLineでは、Hooksという項目があり、こちらでRootkitがよく使うフック手法をベースに確認ができるようになっています。
項目としては、IDT Hooks、SSDT Hooks、IRP Hooksの3種類を確認する事が可能になっています。
順番にフック状況を確認していきたいと思います。まずはITD Hooksの項目を確認してみますが、こちらは何もない様です。
次にSSDT Hooksを確認します。これは幾つか表示されてきますが、いずれもirykmmww.sysがntoskrnl.exeをフックしている事が分かります。
SSDTのHooked Functionとして表示されている項目は以下になります。
- NtDeviceIoControlFile
- NtEnumerateKey
- NtEnumerateValueKey
- NtOpenKey
- NtQueryDirectoryFile
- NtQuerySystemInformation
- NtQueryValueKey
これらは一般的にRootkitがファイルやレジストリを隠すために利用するシステムコールという感じですね。
それぞれの役割を正しく把握する意味で、内容をマイクロソフトのサイトなどで確認すべきだと思うのですが、名前だけで勝手に役割を推測して満足しているのは私の悪いところですね。
RedLineでは、OSが標準的に利用しているフックについてはノイズになるので表示しないような仕組みが導入されているそうで、Volatilityのssdtプラグインとでは表示されるデータ量(ノイズ部分)に差異が出てきます。Ver2.0のコマンドリファレンスにはssdt_exという似たような動作するコマンドがあるのですが、2.3で見当たらないのは無くなっているという事なんでしょうかね。
試しにVolatilityの ssdt プラグインの出力結果も確認してみます。(一部抜粋)
Entry 0x0042: 0xf836fe9c (NtDeviceIoControlFile) owned by irykmmww.sys
Entry 0x0043: 0x8060915a (NtDisplayString) owned by ntoskrnl.exe
Entry 0x0044: 0x805b38da (NtDuplicateObject) owned by ntoskrnl.exe
Entry 0x0045: 0x805e30ee (NtDuplicateToken) owned by ntoskrnl.exe
Entry 0x0046: 0x8060cbdc (NtEnumerateBootEntries) owned by ntoskrnl.exe
Entry 0x0047: 0xf83706dc (NtEnumerateKey) owned by irykmmww.sys
Entry 0x0048: 0x8060cbc0 (NtEnumerateSystemEnvironmentValuesEx) owned by ntoskrnl.exe
Entry 0x0049: 0xf837075e (NtEnumerateValueKey) owned by irykmmww.sys
Entry 0x004a: 0x805a91a6 (NtExtendSection) owned by ntoskrnl.exe
Entry 0x004b: 0x805e329a (NtFilterToken) owned by ntoskrnl.exe
Entry 0x004c: 0x8060c0f4 (NtFindAtom) owned by ntoskrnl.exe
Entry 0x004d: 0x8056bf68 (NtFlushBuffersFile) owned by ntoskrnl.exe
Entry 0x004e: 0x805abec4 (NtFlushInstructionCache) owned by ntoskrnl.exe
Entry 0x004f: 0x8061b026 (NtFlushKey) owned by ntoskrnl.exe
Volatilityでは、owned by ntoskrnl.exeとowned by win32k.sysも表示されるので、これらを除外した結果を確認する方が見やすくなりますね。
最後に IRP Hooksを確認してみます。こちらはアイテム数が 271 もありますが、まずはirykmmwwを検索してみてもマッチはありません。
課題としては、このIRP Hooksは一般的に良く使われていて、ここからノイズをフィルタしていく必要があるという点でしょうか。
SANS Blogの解説では、driverirp プラグインを使い、更に -r オプションにより tcpip に絞り込んで確認を行っているようです。
driverirpの結果には irykmmww も含まれています。
DriverName: irykmmww
DriverStart: 0xf836f000
DriverSize: 0x3900
DriverStartIo: 0x0
0 IRP_MJ_CREATE 0xf837105a irykmmww.sys
1 IRP_MJ_CREATE_NAMED_PIPE 0x804f355a ntoskrnl.exe
2 IRP_MJ_CLOSE 0xf837105a irykmmww.sys
3 IRP_MJ_READ 0x804f355a ntoskrnl.exe
4 IRP_MJ_WRITE 0x804f355a ntoskrnl.exe
5 IRP_MJ_QUERY_INFORMATION 0x804f355a ntoskrnl.exe
6 IRP_MJ_SET_INFORMATION 0x804f355a ntoskrnl.exe
7 IRP_MJ_QUERY_EA 0x804f355a ntoskrnl.exe
8 IRP_MJ_SET_EA 0x804f355a ntoskrnl.exe
9 IRP_MJ_FLUSH_BUFFERS 0x804f355a ntoskrnl.exe
10 IRP_MJ_QUERY_VOLUME_INFORMATION 0x804f355a ntoskrnl.exe
11 IRP_MJ_SET_VOLUME_INFORMATION 0x804f355a ntoskrnl.exe
12 IRP_MJ_DIRECTORY_CONTROL 0x804f355a ntoskrnl.exe
13 IRP_MJ_FILE_SYSTEM_CONTROL 0x804f355a ntoskrnl.exe
14 IRP_MJ_DEVICE_CONTROL 0xf837105a irykmmww.sys
15 IRP_MJ_INTERNAL_DEVICE_CONTROL 0x804f355a ntoskrnl.exe
16 IRP_MJ_SHUTDOWN 0xf837105a irykmmww.sys
17 IRP_MJ_LOCK_CONTROL 0x804f355a ntoskrnl.exe
18 IRP_MJ_CLEANUP 0x804f355a ntoskrnl.exe
19 IRP_MJ_CREATE_MAILSLOT 0x804f355a ntoskrnl.exe
20 IRP_MJ_QUERY_SECURITY 0x804f355a ntoskrnl.exe
21 IRP_MJ_SET_SECURITY 0x804f355a ntoskrnl.exe
22 IRP_MJ_POWER 0x804f355a ntoskrnl.exe
23 IRP_MJ_SYSTEM_CONTROL 0x804f355a ntoskrnl.exe
24 IRP_MJ_DEVICE_CHANGE 0x804f355a ntoskrnl.exe
25 IRP_MJ_QUERY_QUOTA 0x804f355a ntoskrnl.exe
26 IRP_MJ_SET_QUOTA 0x804f355a ntoskrnl.exe
27 IRP_MJ_PNP 0x804f355a ntoskrnl.exe