@port139 Blog

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

Windows レジストリ アーティファクトの参考書籍、2015年ならどれ?

Windows レジストリのアーティファクトについて良い本はないですか?という質問も良くいただく質問だったりしますが、日本語の書籍や関連資料ですぐに思いつくものがなく、良い回答が出来ていないと個人的に感じている部分だったりします。

Windowsのレジストリに特化している書籍としては洋書になりますが、RegRipperの著者Harlan Carvey氏の「Windows Registry Forensics」があります。先日、Blogの方にこの書籍の改定についての話題が出ており、(2015年中に出るかは分かりませんが)改訂版が出るようですので、これはちょっと期待してしまいます。 

Windows Registry Forensics: Advanced Digital Forensic Analysis of the Windows Registry

Windows Registry Forensics: Advanced Digital Forensic Analysis of the Windows Registry

 

 Windowsレジストリについては、書籍から入るよりも RegRipper がパース対象としているデータ項目として何があるのかを丁寧に見ていくのが一番参考になるのではないでしょうか?、RegRipper を実際に使ってみて、対象レジストリキーや値、その出力結果を読み解いていくのが参考資料としては良い気がしています。

RegRipperはパースする対象とプラグインによっては日本語文字列の扱いに問題があり、出力結果が文字化けしたり、そもそも処理段階で欠落する事があります。(日本語が関係ない場合には、それも特に困らないと思います)

RegRipperをベースに、Unicodeの処理を適切に行うように改良したものとしては、KaniRegがあります。KaniRegは基本的にRegRipperベースですが、プラグインの処理で日本語の扱いに問題がある箇所を極力対応できるようにしてくれています。極力と書いているのは、元々のプラグイン側での処理が適当だとカバーしきれず限界があるところもあり、そのあたりはReadmeの制限事項などから読み取れます。

下記はKaniReg 1.1.2 のReadmeから部分的に引用していますが、稀に誤ったパスが出力されるケースがあるなど、注意しておくべき項目があります。(これをKaniRegだけの制限と考えるべきではなく、他のパースツールでは同様のエラー発生時に実装をどうしているのか?ということを考慮する必要があります)

【ShellBagについて】
■RegiRipperの動作・仕様
・対象ハイブ:XP→NTUSER.DAT、Vista以降→UsrClass.dat
・Vista、Win7、及びWin2008R2のみに対応(bit数は記載なしのため不明)
・処理中にパースに失敗しても処理を継続する仕様のため、稀に誤ったパスが出力される可能性あり。
 (正:C:\AAAA\BBBB¥CCCC → BBBBが取得不可の場合の出力:C:\AAAA\CCCC)

■KaniRegの動作・仕様・RegRipperとの相違点など
・XP及びWin8のパースに暫定対応(Win7と共通する構造のキーのみパースされる)。
・XP及びWin8でパース未対応のデータを検知出来た場合、「パース不可」の文言を挿入。
 (出力例:「C:\AAAA\パース不可\CCCC」)
・XPの一部のデータにて、文字化けを確認済み。(Win7との構造の相違が原因?)
 →切り出すデータが長過ぎるため、本来文字でない余ったバイトがデタラメな文字に変換される。
 (出力例:「デスクトップ」が「デスクトップ獀敨汬㈳搮汬」となるなど)

 

レジストリではUnicode(UTF-16LE)でデータが保存されているのが通常です、最近のツールは Unicode 対応により文字化けせずに対応できる場合もありますが、日本語を必要としていない作者の場合、英数字以外はゴミとして落としているケースもあります。

この為、出力結果が正しいか?という点では、目視での確認や検証も必要になります。レジストリのキーや値を解釈して表示しているので、パース結果に誤りがあるかはレジストリエディタなりで自分で確認できます。値がバイナリデータで構造を保存しているケースでは、目視でパースする必要が出てきますが、慣れていないと厄介かもしれません。

 

これから取り組む若手に言えることがあるとすれば、一種類のパース結果だけで信用せずに、2種類、できれば Unicode 対応しているツールで比較を行った方がよいよ、という事くらいかと思います。(商用製品になりますが、個人的には TZworks の出力結果は化けないので結構気にいっています)

基本的には諸先輩方が必要な項目はパースするようなツールを提供してくれていますので、自力でレジストリ内のバイナリデータをパースしなければいけない領域はかなり限られると思いますし、その場合でも Google で検索すればすぐに答えが出てくるのではないでしょうか。

レジストリを今から深く探求したい!といったモチベーションがある場合には、新しく出る Windows 10 辺りのレジストリがどの様になっているかを調べ、従来値との比較結果を世界にフィードバックすると喜ぶ人が多いのではないでしょうか。(プログラム実行に関連した部分からまずは着手とか)

特にバイナリ値でデータ構造が変化している箇所があれば、その中身をいち早く解析する事は面白いネタにもなると思います。

ただ、日本語で書いても反応ないと思いますから、英語でBlogに書いて、英語で Twitter に投げておくと拾ってくれる可能性が高まります。