みむらです。
続けてフォレンジック 300 の “ログインパスワードを解明せよ “ について
解説いたします。
問題としては 1GB のメモリダンプイメージが渡されます。
メモリダンプと言いますのは、
純粋にそのときにメモリにあったデータを出力したもので、
今回のようにシステム全体のメモリを取る場合には、
DumpIt というようなツールや、
システムをクラッシュさせて取得する方法があります。
メモリダンプはアプリケーションやシステムの解析目的に用いられ、
たとえばマルウェアが動作している時にメモリダンプを取って調査する
というようなことも行われます。
今回の場合は、このメモリダンプのイメージから
ログインパスワードに関する情報を抽出し、解析して求めることが解法となります。
まず volatility というツールを用いて、データを抽出します。
ダウンロードは次のリンクより。
volatility – An advanced memory forensics framework – Google Project Hosting
ログインパスワードに関する情報はレジストリ上にありますので、
メモリ上のレジストリハイブの場所を求めます。
この際、問題においてシステムは Windows 7 ServicePack 1 x86 であることが
明記されていますので、解析時のプロファイルには “Win7SP1x86” を用います。
#volatility hivelist -f memorydump2.bin --profile=Win7SP1x86 Volatility Foundation Volatility Framework 2.3.1 Virtual Physical Name ---------- ---------- ---- 0x9ff5a3c0 0x37fbb3c0 \SystemRoot\System32\Config\SECURITY 0x9ffc03a0 0x30e243a0 \SystemRoot\System32\Config\SAM 0x8f60c568 0x04bbc568 [no name] 0x8f61c008 0x005d2008 \REGISTRY\MACHINE\SYSTEM 0x8f6448d8 0x04b3c8d8 \REGISTRY\MACHINE\HARDWARE 0x90659650 0x199c0650 \??\C:\Windows\ServiceProfiles\NetworkService\NTUSER.DAT 0x906d8008 0x13200008 \??\C:\Windows\ServiceProfiles\LocalService\NTUSER.DAT 0x93cf5008 0x38814008 \Device\HarddiskVolume1\Boot\BCD 0x93d479d0 0x388c19d0 \SystemRoot\System32\Config\SOFTWARE 0x989bc008 0x37920008 \SystemRoot\System32\Config\DEFAULT 0x9e6e69d0 0x005469d0 \??\C:\Users\forensics\ntuser.dat 0x9efe5650 0x028aa650 \??\C:\Users\forensics\AppData\Local\Microsoft\Windows\UsrClass.dat
実行しますとこのようになります。
このうち SAM と SYSTEM の情報が必要ですので、
これらの仮想アドレス (Virtual) の値をメモし、実際に出力を行います。
なお今回のシステムの場合
SAM は 0x9ffc03a0
SYSTEM は 0x8f61c008
になります。
# volatility hivedump -f Memorydump2.bin --profile=Win7SP1x86 -y 0x8f61c008 -s 0x9ffc03a0 Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: forensics:1000:aad3b435b51404eeaad3b435b51404ee:98ffdb1b29e7c88954326cd4011141d8:::
実行しますとこのような結果が表示されます。
あとは、ophcrack などの解析ソフトに与えることで、
ものの数秒で答えが見つかります。
ここまで早く見つかるのは、NTLM ハッシュというのが、
パスワード文字列を UTF-16 LE で表現したものに MD4 ハッシュを掛けただけのものであることに由来します。
ophcrack ではハッシュ値と平文の逆引き表を持っており、今回はそれを用いてパスワードを求めました。もちろん、この逆引き表に含まれていなかった場合は求めることは出来ません。
ですが、今回の場合は “Kani3” という短いパスワードであったためにテーブル内に含まれており、ハッシュ値から求めることができました。
一般にこういう解析に対しては、ハッシュを生成する際にパスワードにソルトと呼ばれるランダムな文字列を生成し、パスワード文字列につけてハッシュを生成することが一般的な対策であり、
これをすることにより、パスワードの文字列長を伸ばしたときと同じ効果が得られ、テーブルによる攻撃を難しくさせます。
閑話休題。
ということで、この問題については答えは次の通りとなります。
答え:Kani3