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"