@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

PyCryptoのコンパイル済みバイナリ(Windows用)

動かすにはモジュールとして PyCrypto が必要ということなんですが、このモジュールどうやらコンパイルが必要な様子。コメント欄によると、コンパイル済みのWindows用バイナリが下記URLにあるということで、Python 2.6用のバイナリをダウンロード。

PyCrypto 2.0.1
Prebuilt Python Binaries
http://www.voidspace.org.uk/python/modules.shtml#pycrypto

インストールは単にEXE(pycrypto-2.0.1.win32-py2.6.exe)を実行すればPython 2.6フォルダの既定のパスに入れてくれます。

メモリダンプに含まれるレジストリの解析

メモリフォレンジック ツール Volatility Framework のプラグインとして、メモリイメージ内に存在するレジストリを確認できるものがあります。このプラグインを使うと、win32dd などでダンプした物理メモリイメージファイルに含まれるレジストリを確認することが可能になり、更に SAM キーからハッシュ値や LSA のダンプを行うことが可能です。*1

Memory Registry Tools!
http://moyix.blogspot.com/2009/01/memory-registry-tools.html
Registry Code Updates
http://moyix.blogspot.com/2009/01/registry-code-updates.html

Volatility Framework を Windows 上で動かす(試す)場合には、Python 2.6.1 をインストールし、The Volatility Framework が動作可能な状態にします。手元では Python 3.0 だとうまく動いてくれないので、2.6.1 を利用しています。

*1:HDDイメージがあればそっちからやった方が早いんではないのか?という噂はありますが、それはそれとしてメモリイメージでも可能っては、クラッシュダンプやハイバネーションファイルでもいけるのではないかという点では範囲が広がりますやね

volreg-0.2のインストール

volreg-0.2.zipファイルを展開すると、forensics,memory_objects,memory_plugins の三つのフォルダが作成されます。それぞれのフォルダにあるファイルを、Volatility-1.3_Beta配下にある該当フォルダ配下にコピーします。プラグインを認識しているかどうかは、Supported Plugin Commands に hashdump などが表示されるかで確認できます。

        Supported Plugin Commands:
                cachedump       Dump (decrypted) domain hashes from the registry
                hashdump        Dump (decrypted) LM and NT hashes from the registry
                hivelist        Print list of registry hives
                hivescan        Scan for _CMHIVE objects (registry hives)
                lsadump         Dump (decrypted) LSA secrets from the registry
                memmap_ex_2     Print the memory map
                printkey        Print a registry key, and its subkeys and values

                pslist_ex_1     Print list running processes
                pslist_ex_3     Print list running processes
                usrdmp_ex_2     Dump the address space for a process

hashdmp など追加したプラグインを認識できていることが確認できたら、実行してみます。

メモリイメージ上のハイブ位置を確認する

まず hivescan を実行し、ハイブのオフセット位置を確認します。コマンドラインとしては以下になります。

volatility hivescan -f RAMイメージファイル名.dmp

実行するとオフセット位置が表示されます。手元では VMware上のWindows XP Sp2(メモリ 382M)で作成した物理メモリのイメージファイルに対して実行したところ、以下の結果が表示されました。

Offset (hex)
50928480 0x3091b60
50934640 0x3093370
53414752 0x32f0b60
137409032 0x830b208
137410224 0x830b6b0
140522312 0x8603348
140786528 0x8643b60
176403168 0xa83b2e0
176603144 0xa86c008
183324680 0xaed5008
197058952 0xbbee188
203182920 0xc1c5348
208904200 0xc73a008
214981472 0xcd05b60
225348448 0xd6e8b60
237789704 0xe2c6208
237790896 0xe2c66b0
238197600 0xe329b60
249588576 0xee06b60
263824200 0xfb9a348
303197024 0x12126b60
314991112 0x12c66208
314992304 0x12c666b0
330853216 0x13b86b60
348459400 0x14c51188
350638920 0x14e65348

メモリサイズが 2GB など大きい場合には、かなりの時間を必要とします。
得られたオフセット位置を使い、hivelist コマンドでそれぞれのハイブのアドレスを確認します。オフセット位置の指定は -o オプションになりますが、先頭のアドレスを指定すれば OK です。

volatility hivelist -f c:\temp\physmem.bin -o 50928480

Address      Name
0xe1cbe008   \Documents and Settings\test\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
0xe2086b60   \Documents and Settings\test\NTUSER.DAT
0xe1aba188   \Documents and Settings\LocalService\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
0xe1a90008   \Documents and Settings\LocalService\NTUSER.DAT
0xe18c32e0   \Documents and Settings\NetworkService\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
0xe18bd008   \Documents and Settings\NetworkService\NTUSER.DAT
0xe15b0208   \WINDOWS\system32\config\software
0xe1370348   \WINDOWS\system32\config\default
0xe1372b60   \WINDOWS\system32\config\SAM
0xe15b06b0   \WINDOWS\system32\config\SECURITY
0xe1271b60   [no name]
0xe1018370   \WINDOWS\system32\config\system
0xe1008b60   [no name]

この結果で、SYSTEM と SAM ハイブの仮想アドレスが確認できました。

メモリイメージ内のレジストリからハッシュ値をダンプする

メモリイメージファイル内の SAM レジストリからハッシュをダンプするには、hashdump コマンドを使います。すでに SYSTEM と SAM ハイブの仮想アドレスを入手できているので、それらのオフセット位置を指定します。今回のイメージでは -y 0xe1018370 -s 0xe1372b60 を指定することになります。

volatility hashdump -f c:\temp\physmem.bin -y 0xe1018370 -s 0xe1372b60

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HelpAssistant:1000:d22c0a7b8a52d2ec30035dbc450518c8:bba958d7f6af008992fe7e53b7a77c17:::
SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:77d0a577852566378aedb69af041b85c:::
test:1003:133839b0814f0bfa6591bb5472a3ad4a:83bf2cde68e3f9a7b9415c1dc4a835e8:::

ハッシュ値が表示されました。Administratorアカウントのパスワードは空なので見慣れたハッシュ値が表示されていますが、この中では test アカウントがパスワード設定されています。
取得したハッシュ値が、正しい値かどうか確認するため、とりあえず<2021/9/7リンク先がサポート詐欺サイトになっていたようですので削除しました>サイトを使い LANMAN ハッシュを 解析してみます。
すると結果として「133839B0814F0BFA6591BB5472A3AD4A = FORENSICS」ということで、正しくパスワード(ハッシュ)が解析されていることが確認できました。

SAMやハッシュ値に関する資料

以前は結構 Windows のパスワード ハッシュ(NTLM、LANMAN)に関する資料が Web 上にあった気がするのですが、いざ探すとよさげなのがありませんね。探し方が悪かったらしい。

第9回 人の造りしもの――“パスワード”の破られ方と守り方
http://www.atmarkit.co.jp/fsecurity/rensai/view09/view01.html

Windows の認証に関する基本的な動作なのでもう少し資料があってもよさそうな気がするのですが、きっと塩月さんのところにあるのではないかと思ったりしたのですが(笑)
きっとこのコースの中では解説されていると思われるので、興味のある方は受講されてはどうか思う今日この頃です。

Windowsセキュリティコース
http://www.sec-pro.net/training.html