@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"

代替データストリームを検出するには?

NTFS 代替データストリームは OS 標準のコマンドやツールでは検出することができません。そこで、インターネット上から入手可能なツールを利用する必要があります。
代替データストリームの存在を検出することができるツールには以下があります。

lfnutils (Long File Name Utilities) ※お奨め※
http://www.monyo.com/technical/products/lfnutils/

LADS
http://www.heysoft.de/Frames/f_sw_la_en.htm

Streams
http://www.sysinternals.com/utilities/streams.html

Crucial ADS
http://www.crucialsecurity.com/products/index.html

NTFS ADS Check
http://www.diamondcs.com.au/index.php?page=archive&id=ntfs-streams

ここで紹介したツールの一部は、非常に長いファイル名に対応できないものがあります。個人的には lfnutils に含まれる streamls.exe の使用をお奨めします。
The SleuthKit や EnCase、FTK のようなコンピュータ・フォレンジックツールを利用すれば簡単に確認することができます。

なお、NTFS 代替データストリームの追加/変更/削除を常時監視する場合には、Tripwire for Servers を利用することができます。

Tripwire for Servers
http://www.tripwire.co.jp/products/servers/index.html

代替データストリームを削除する

代替データストリームを持つファイルから、メインストリーム以外のデータストリームを削除するには、メインストリームの内容を別のファイルとして出力した後、元のファイルを削除します。

例) a.txt にストリーム notepad.exe を作成し、それを削除する
type c:\WINDOWS\NOTEPAD.EXE > a.txt:notepad.exe
type a.txt > a_backup.txt
delete a.txt
rename a.backup.txt a.txt

lfnutils に含まれる lfndel.exe を利用することで、指定したデータストリームを削除することができます。

例)streamls を利用してデータストリームを確認し、ストリーム c.txt だけを ldel で削除する
streamls.exe a.txt
    Stream 7 b.txt
    Stream 7 c.txt

lfndel.exe a.txt:c.txt

代替データストリームの表示・コピー

代替データストリームを持つファイルから、メインストリーム以外のデータストリームを別のファイルとしてコピーするには、lfnutils に含まれる lfntype.exe を利用します。
lfnutils に含まれている lfntype.exe を利用してデータストリームの内容を抽出するには、以下のように実行します。

lfntype.exe a.txt:b.txt > c.txt

これにより、ストリーム( b.txt )の内容が c.txt として保存されます。ファイルへリダイレクトしない場合には標準出力へデータストリームの内容が表示されます。
Special Thanks to TAKAHASHI Motonobu.

XP SP2以降での使われ方

Windows XP SP2 以降からは、IE でダウンロードしたファイルのゾーン情報(ZoneId)を保存するために代替データストリームが利用されています。*1

C:\bin>streamls.exe c:\lfnutils-1.0.lzh
FILE: c:\lfnutils-1.0.lzh
Zone.Identifier

C:\bin>lfntype.exe c:\lfnutils-1.0.lzh:Zone.Identifier
[ZoneTransfer]
ZoneId=3

過去に問題が指摘されていますが、これについては SecuLog さんのところを参照ということで。

http://www.7th-angel.net/seculog/item/859

代替データストリームへのハードリンク

NTFS のハードリンク機能を使いデータストリームを使うことができるか?について、id:hasegawayosukeさんが実験されていますので下記参照ということで。

NTFS の ADS にはハードリンク経由ではアクセスできない?
http://d.hatena.ne.jp/hasegawayosuke/20050906#1125995216

代替データストリームに関係したリンク

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

105763 HOWTO: Use NTFS Alternate Data Streams
http://support.microsoft.com/default.aspx?scid=KB;en-us;q105763

W2K.Stream
http://www.symantec.com/region/jp/sarcj/data/w/w2k.stream.html

M-034: Window File Wiping Utilities Miss Alternate Data Streams
http://www.ciac.org/ciac/bulletins/m-034.shtml

NTFS Multiple Data Streams
http://www.ntfs.com/ntfs-multiple.htm

The Dark Side of NTFS (Microsoft’s Scarlet Letter)
http://www.securitydocs.com/library/683

Hidden NTFS Alternate Data Streams (ADS) Explained - Are You At Risk?
http://www.diamondcs.com.au/streams/streams.htm

2808 Alternate Data Stream tool.
http://www.jsiinc.com/SUBF/TIP2800/rh2808.htm

4961 The Indexing Service adds data streams to image files?
http://www.jsiinc.com/subj/tip4900/rh4961.htm

Testing freeware ADS detection programs
http://lists.jammed.com/forensics/2001/12/0010.html

FAQ: Alternate Data Streams in NTFS
http://www.heysoft.de/nt/ntfs-ads.htm

Windows, NTFS and Alternate Data Streams
http://www.giac.org/certified_professionals/practicals/gsec/0715.php

あなたのパソコン、まだFATなんですか? NTFSのススメ
NTFSの便利な拡張機能を使いこなすためのオンラインソフト
http://www.forest.impress.co.jp/article/2002/12/05/ntfs.html

[damedame:220] NTFSのファイル名長についてのだめだめ
http://damedame.monyo.com/ml/archive/200/220.html

[damedame:221] NTFSのストリームについてのだめだめ
http://damedame.monyo.com/ml/archive/200/221.html