@port139 Blog

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

Windows 7 ハードリンクファイル

昨日、「ぷりはっしゅ」ツールについて立ち話をしてる中で、Windows 7 の Notepad.exe がハードリンクされているという話題が出ていたので確認。Windows NT の頃からではないかと思いますが、Notepad.exe は Winodws フォルダと windows\system32 フォルダの両方に同じファイル(ファイル名が大文字か小文字かの違い)で存在していますが、Windows 7 ではハードリンクでこれらが処理されているということを教えていただきました。(確認していませんけど、Windows Vistaとかからすでにそうなんですかね?)
で、早速確認してみたところ、Windows 7 Ent 環境では下記 4つの Notepad.exe の存在が確認できます。いずれの Notepad.exe もMD5ハッシュ値は d378bffb70923139d6a4f546864aa61c になり、中身はまったく同じになります。

(1)C\Windows\notepad.exe
(2)C\Windows\System32\notepad.exe
(3)C\Windows\winsxs\x86_microsoft-windows-notepad_31bf3856ad364e35_6.1.7600.16385_none_6ef0e39ed15350e4\notepad.exe
(4)C\Windows\winsxs\x86_microsoft-windows-notepadwin_31bf3856ad364e35_6.1.7600.16385_none_42a023025c60a33a\notepad.exe

これらのファイルのうち、(1)〜(3)は(4)の Notepad.exe へのハードリンクで構成されているようにEnCase画面上では表示されます。(MFTレコード番号はいずれも同じ)ただし、これはEnCase画面上でのお話で、$FILE NAME属性の並びを見てみると、(4)、(3)、(2)、(1)の順序で並んでおり、単にEnCaseはMFTレコードの先頭から順に解釈していく中で、最初に出てくる(4)の $FILE NAME を先頭として取り扱い、以降の$FILE NAMEをハードリンク扱いしているように見受けられます。これら4つの$FILE NAME属性が持つタイムスタンプを確認すると、(1)と(2)が先に出来てから、(3)、(4)のハードリンクが作成されたように推測されます。ハードリンクを作成した場合に、初期のファイルの$FILE NAME属性がリストの最後になるように属性が追加されていくのかどうかは検証が必要かもしれません。(以前にXPとかで試した時には違ったような気が...)

EnCase の画面上では Original Pathカラムか、GPSバーでハードリンク先のファイル名を確認することができます。
EnCaseの場合にはDescriptionカラムで「File, Archive, Hard Linked」という表示になるので、他のファイルについても、Descriptionカラムで Hard Linked を使いコンディションからフィルタしてみると、約4千4百くらいの(主にシステム)ファイルがハードリンクしているようです。
MFTレコード上では、FILEレコードのオフセット 0x12(18)の2バイトがハードリンクのカウント数ということで、Notepad.exe では 4 となっています。

FSUTILツールでハードリンクが確認できるか?というのも話題に出ていたのですが、fsutil hardlink list コマンドでいけるみたいですね。表示されるリストの順番は MFT レコードの $FILE NAME属性の並び順みたいですね。

C:\Windows\system32>fsutil.exe hardlink list c:\Windows\notepad.exe
\Windows\winsxs\x86_microsoft-windows-notepadwin_31bf3856ad364e35_6.1.7600.16385_none_42a023025c60a33a\notepad.exe
\Windows\winsxs\x86_microsoft-windows-notepad_31bf3856ad364e35_6.1.7600.16385_none_6ef0e39ed15350e4\notepad.exe
\Windows\System32\notepad.exe
\Windows\notepad.exe

参照されている winsxs フォルダ内のファイルが何用かについては、以下のURLが参考になると思います。ちょっと前に丁度調べていたんですが...

The Secret Of Windows Vista / Windows 7 Winsxs Folder.
http://www.winvistaclub.com/f16.html

Side-by-side Assemblies
http://msdn.microsoft.com/en-us/library/aa376307(VS.85).aspx

side-by-side 実行
http://msdn.microsoft.com/ja-jp/library/8477k21c(VS.80).aspx

Twitterで教えていただいたURLを追記:
マイクロソフトのEngineering Windows 7 ブログ
http://blogs.msdn.com/e7jp/archive/2008/12/06/9181705.aspx