@port139 Blog

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

NTFS 代替データストリームとは?

Windows NT の時代から NTFS ファイルシステムは“代替 データ ストリーム(Alternate Data Stream)”と呼ばれる機能を持っています。

【参照】プログラマから見た NTFS 2000 Part1: ストリームとハード リンク
http://www.microsoft.com/japan/msdn/windows/windows2000/ntfs5.asp

この機能により、一つのファイルが複数のデータストリームを持つことが可能になります。(※データストリームの最大数は?※)

NTFS 代替データストリーム(概念図)
http://forensics.sakura.ne.jp/PPT/NTFSADS.pdf

例えばこの機能は、Macintoshファイル・サービスにおいて「データ・フォークとリソース・フォークの保存」に利用されたり、サムネール画像のインデクシングに利用されたりします。
代替データストリームをテストするにはコマンドプロンプト(CMD.EXE)で以下のコマンドを実行します。

echo "Stream test" > a.txt:stream1.txt

このコマンドにより a.txt という空のファイルが作成されます。メモ帳で a.txt を開いてみればファイルの内容が何もないことが確認できます。

noteapd a.txt

次に同じくメモ帳から a.txt:stream1.txt の内容を確認してみます。

noteapd a.txt:stream1.txt

ファイルの内容として“Stream test”が保存されていることが確認できるはずです。
しかし、コマンドプロンプトエクスプローラから a.txt のファイル情報を確認しても、ファイルサイズは 0 バイトになっており、データストリーム stream1.txt の存在やサイズを確認することはできません。(巨大な画像ファイルやデータをストリームへ置かれても、メインストリームのファイルサイズしか見えません)

C:\>dir a.txt

C:\ のディレクトリ

2002/11/28 10:09 0 a.txt
1 個のファイル 0 バイト
0 個のディレクトリ 1,347,592,192 バイトの空き領域

このように、OS 標準コマンドからはデータストリームの存在やサイズを確認することができないことから、データストリームは“不正なデータ”や“悪意のあるプログラム(ウィルス等)”の隠し場所になる危険性があります。また、過去にはこの機能がセキュリティホール(JP188806)となったこともあります.
なお、データストリームにプログラムを配置し実行することも可能です。例えばメモ帳(notepad.exe)をデータストリームに配置し、起動するには以下のコマンドを実行します。

C:\>type c:\WINDOWS\NOTEPAD.EXE > a.txt:notepad.exe
C:\>start c:\a.txt:notepad.exe

タスクマネージャなどでプロセスを確認すれば、“a.txt:notepad.exe”というプロセスが起動されていることを確認できるはずです。もしそのようなプロセスがシステム上に存在する場合、データストリームに配置されたプログラムが起動されており、不審なプロセスとして疑う必要があるでしょう。

代替データストリームはディレクトリに対しても作成することが可能です。

echo test > "c:\Program Files:stream.txt"