Windows OSのファイルシステムであるNTFSには
ADS(代替データストリーム)という機能がある。
これは元々、Windows OSがインターネット上からダウンロードしたファイルに
Tagをつけるための機能として備わっていた。
インターネット上からダウンロードしたファイルは、ZoneIdentifierという
データストリームタグをつけて、判別できるようにしている。
例えば、13720110006.pdf というファイルをインターネットからダウンロードしたとすると
13720110006.pdfというファイルが保存される際、13720110006.pdf:Zone.Identifier:$DATA
というデータストリームが作成される。
dirコマンドに /r のオプションをつけることで確認ができる。
C:\Users\****\Downloads>dir /r
C:\Users\****\Downloads のディレクトリ
2021/01/22 17:43 1,233,916 13720110006.pdf
26 13720110006.pdf:Zone.Identifier:$DATA
1 個のファイル 1,233,916 バイト
0 個のディレクトリ 132,648,939,520 バイトの空き領域
データストリームはファイルに付与される情報のため、ファイルそのものを調べても出てこない。
またファイルシステムが付与する情報のため、別のPCなどに移動すると消えてしまう。
データストリームの中身を見るには、< (入力のリダイレクト) を使用する。
例:
13720110006.pdf:Zone.Identifier:$DATA の中身を確認したい場合、
C:\Users\****\Downloads>more < 13720110006.pdf:Zone.Identifier:$DATA
[ZoneTransfer]
ZoneId=3
のようにコマンドを実行することで確認できる。
ZoneId=3 というのは、インターネットからダウンロードしたファイルというのを示している。
■本題
ZoneIdentifierはADSの一種であり、任意のデータストリームを作成することができる。
temp.txt というファイルを作り、任意のデータストリームを作成
C:\Users\kyuta\Downloads>echo This is sample > temp.txt
次にこの temp.txt に hidden_data というデータストリームを付与する。
やり方はいくつかあるが、最も簡単と思われるやり方が以下
C:\Users\****\Downloads>echo "This is the secret message" > temp.txt:hidden_data
hidden_data に "This is the secret message" というデータを付与した。
temp.txt:hidden_data というデータはHDD上に存在しているが、通常は見えない。
C:\Users\****\Downloads>dir temp.txt
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は C236-DF96 です
C:\Users\****\Downloads のディレクトリ
2022/05/31 20:46 17 temp.txt
1 個のファイル 17 バイト
0 個のディレクトリ 132,645,076,992 バイトの空き領域
dir /r コマンドで、存在を確認できる。
C:\Users\****\Downloads>dir /r temp.txt
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は C236-DF96 です
C:\Users\****\Downloads のディレクトリ
2022/05/31 20:46 17 temp.txt
31 temp.txt:hidden_data:$DATA
1 個のファイル 17 バイト
0 個のディレクトリ 132,645,601,280 バイトの空き領域
temp.txt の中身は、元のまま
C:\Users\****\Downloads>type temp.txt
This is sample
hidden_data データストリームに秘密のデータを隠しておける
C:\Users\****\Downloads>more < temp.txt:hidden_data:$DATA
"This is the secret message"
ここまでが導入部分
では実際攻撃に利用される場合はどうか。
悪用を防ぐため、詳細は省くが文字列だけでなくデータそのものを書き込めるため
例えばとあるプログラムのデータ丸ごとこのADSに書いておき、特定のタイミングだけ
データを取り出して実行するようにすれば、見かけ上は存在しない悪意のあるプログラムを
隠すことができる。
このテクニックは、MITRE ATT&CK の以下のタクティクス、テクニックに分類される
Tactic: Defense Evasion
Hide Artifacts: NTFS File Attributes
参考:https://attack.mitre.org/techniques/T1564/004/
興味のある方は、深掘りいただければと思う