@port139 Blog

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

2005年11月5日セキュ蕎麦資料

今頃かよ!という噂もありますが、前々回*1のセキュ蕎麦の資料を以下の URL に置きました。*2

Time Stamp vs Time Stomp
http://forensics.sakura.ne.jp/PPT/20051105-soba-ihara.pdf

Metasploit Anti-forensics homepage で公開されている timestomp というツールの影響と、NTFS でタイムスタンプを記録している『$STANDARD_INFORMATION (0x10)』と『$FILE_NAME (0x30)』の関係について簡単に調べてみたものです。

*1:残念ながら今回のには参加できなかった・・・

*2:っていうか、すっかり忘れていたのを、tessy さんのところを読んで思い出したしだいですが・・・

スライド3 timestomp

timestomp はフォレンジック調査においてタイムスタンプが使われるのに対抗するための Anti-forensics ツールで、MACE タイムスタンプを表示・変更することが可能なツールです。平たく言えばタイムスタンプの変更ツールなわけですが、1601年〜30827年の任意の時刻を MACE に設定できます。(一般的なタイムスタンプ変更ツールが E を変更できないのに対して timestomp では可能)
「-b」オプションを使うと、タイムスタンプをまったく「無し」にすることもできちゃいます。NTFS の CI と FN の関係、timestomp の動作については下記の資料で解説されていますのでそちら参照ということで。*1

The Metasploit Anti-Forensics Project v2
http://www.metasploit.com/projects/antiforensics/BlueHat-Metasploit_AntiForensics.ppt

単に timestomp を使っても消えてないタイムスタンプとして FN がありますよ〜というのが上記資料でも解説されています。
そこで、SI と FN の関係を記録されているデータから追っかけてみたのが今回の資料だったりするわけです。

*1:手元の XP で timestomp を日本語・英語版OSの両方で試したのですが、一部のオプションがうまく動いてくれず

スライド4

ファイル名:MACE.txt の $MFT レコードを 16進形式で表示しているところですが、UTF-16LE で 0xF2 の辺りからファイル名が記録されているのがわかるかと思います。このファイル名を記録している属性値($FILE_NAME)が持つタイムスタンプが少し上にあり、さらに上にあるのが$STANDARD_INFORMATION の値です。*1
ファイル名が一つだけであれば、通常は SI のタイムスタンプと、FN のタイムスタンプの二つが $MFT のレコードに保存されている形になります。

*1:データの最下部にある$STANDARD_INFORMATIONの文字列はファイルの中身です, 0D0Aの改行で終わってます

スライド5

ファイル MACE.TXT に対して、NTFS ハードリンクを設定したところです。*1
ちょっとわかりにくいかもしれませんが、赤字で「30」となっている箇所が $FILE_NAME の属性値を示しており、MACE.txt と hardlink.txt の二つの $FILE_NAME 属性がこのレコードには存在していることを確認できます。
MACE.txt の $FILE_NAME 属性が持つタイムスタンプが最も古いものになりますが、これは MACE.txt が作成された時のタイムスタンプになっています。*2
これに対して、hardlink.txt のタイムスタンプは、ハードリンクが作成された時点で SI が持っていたタイムスタンプが記録されています。SI の値は現在のタイムスタンプになります。

*1:葉っぱさんのやり方を見習って?「fsutil hardlink create hardlink.txt MACE.txt」で作成

*2:移動などがあればその時刻になるので、必ずしも作成された時刻を示すわけではありません

スライド6 SI と FN の変化

順を追って SI と FN の変化を見ていきます。

  1. ファイルを新規に作成すると、SI と FN には作成日時として同じ値が記録される
  2. ハードリンクを作成すると、 FN2 にその時点の SI の値が記録される
  3. ファイル(FN1)を移動すると、その時点の SI が FN に記録される
  4. SI は適宜更新され最新のタイムスタンプを記録していく

$FILE_NAME は FN 毎に更新されるので、FN2 を移動した場合には、FN2 の FN にその時点の SI が記録されるだけで、FN1 の FN には影響を与えません。
いずれもしても、最新のタイムスタンプは SI に記録されていきます。