Alternate Data Streams (ADS)

CTF と Pentesting 環境における ADS の実用的かつ基本的なアプリケーション

では、代替データストリーム (ADS) とは何でしょうか?

これは、Macintosh の階層型ファイル システム (HFS) との互換性を高めるために、NT ファイル システム (NTFS) として知られる New Technology ファイル システムに追加された機能で、平たく言えば、Mac (Apple) と PC (Windows) の両方でファイルをより簡単に使用できるようにするものです。

どのように動作し、なぜそれを気にする必要があるのでしょうか。

通常、何かをファイルに保存するとき、たとえば .txt ファイルでは、ファイルの内容(アスキー テキスト)を Windows がデフォルト ストリームとして認識するデータ ストリームに保存しているので、次にファイルを開くときは同じストリームにアクセスしてデータを表示することになります。

Secret.txt Notepad

Secret.txt Notepad

Secret.txt Notepad

Thanks.txt Secret.txt notepad.txt notepad.txt

しかし、あなたが気づいていないデータがファイル内にあるとしたらどうでしょうか。

そこで、代替データ ストリームが活躍するのです。exe (Command Prompt) を使用して例を示しますが、CLI (Command Line Interface) を理解しやすくするため、Power Shell を使用しても同じ結果を得ることができます。

そこで、コマンド プロンプトを使用して自分のディレクトリの内容を表示すると、自分の secret.

dir
command prompt

command prompt

これは普通のファイルのようですが、もし私のコマンドに /r を追加したらどうでしょうか?

dir /r
Command prompt dir /r

Command prompt dir /r

ここで、同じディレクトリにもともと作った secret.C と同じプレフィックスで別のファイルを見てみることにします。

コマンドに /r を追加することにより、両方のファイルが同じディレクトリにあることがわかりますが、secret.txt しか表示されないことがわかります。

両方のコマンドの出力を比較すると、secret.txt ファイルはまだ 33 バイトですが、secret.txt:evil.txt は 74 バイトで secret.txt の 2 倍以上になっていることも確認できます。

# First Command
dir# Second Command
dir /r
Command Prompt dir and dir /r

Command Prompt dir and dir /r

これで、より正確に両方のコマンドの情報を確認でき、より明確に変化を確認できることになりました。

  • 両方の出力は、ディレクトリ内に2つのファイルしかないと言い、同じサイズを与えます。それは、secret.txtとsecret.txt:evil.txtが異なるファイルではなく、同じファイルであり、データが別々のストリームに保存されているからです。
  • ディレクトリ内の総使用領域とシステムで利用できる領域は依然として同じままです。

両者の内容を一緒に見てみましょう。

両者を見ながら、内容が異なることがわかりますが、ファイルの名前の違いも確認でき、複数の目的で別のデータストリームに情報を簡単に格納できることがわかります。 NTFSファイルシステムでは、データストリームはFileName:StreamName:StreamTypeという基本的な命名規則に従っています。つまり、NTFSファイルシステムにおけるsecret.txtのフルネームは、secret.Txtとなります。txt::$DATA

メモ帳で開かずに両方を表示する別の方法は次のとおりです。

# View secret.txt
type secret.txt# View Alternate Data Stream
more < secret.txt:evil.txt