Windows コマンドプロンプト ポケットリファレンス(書籍)を読んでいると「代替データストリーム(ADS)」という用語が登場し、気になったので色々調べてみました。
代替データストリーム(ADS)って何?
1.NTFSファイルシステムのファイル/ディレクトリに保存できる、隠しファイル
2.1つのファイル/ディレクトリに対して複数のADSを保存できる
3.用途の例としては、インターネットからダウンロードしたファイルを開く時に警告画面を表示させる、など
4.Poison Ivy(トロイの木馬)などのマルウェアの隠し場所としても悪用されているらしい
5.streams.exeでADSの検索/削除が可能
6.Windows標準機能(コマンドプロンプト、PowerShell含む)でも、ADSの作成/検索/削除が可能
今回は、コマンドプロンプトとPowerShellを利用してADSの作成/検索/削除を行ってみた
※streams.exeを利用したADSの検索/削除の方法は、参考記事を参照
実行環境
OS:Windows 10 Home(64bit)
PowerShellバージョン:5.0
代替データストリーム(ADS)の作成
C:\test>mkdir foo
C:\test>echo bar>foo:hoge.txt
上記例では、ディレクトリfooを作成後、ディレクトリfooに「bar」という内容が書かれた「hoge.txt」という名称のADSを保存している
代替データストリーム(ADS)の検索
ADSを含むファイル一覧を表示させたい場合、以下のようにコマンドを実行するとよい
c:\test>dir /r
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 344F-DD0A です
c:\test のディレクトリ
2015/11/01 01:19 <DIR> .
2015/11/01 01:19 <DIR> ..
2015/11/01 01:16 <DIR> foo
5 foo:hoge.txt:$DATA
0 個のファイル 0 バイト
3 個のディレクトリ 68,721,668,096 バイトの空き領域
ADSの行だけを抽出したい場合、PowerShellと組み合わせて以下のようにコマンドを実行するとよい
PS C:\test> cmd /c 'dir /r' | ?{$_.Contains('$DATA')}
5 foo:hoge.txt:$DATA
ADSの内容を確認したい場合は、以下のようにコマンドを実行するとよい
C:\test>more < foo:hoge.txt
bar
代替データストリーム(ADS)の削除
ADSを削除したい場合は、以下のようにコマンドを実行するとよい
PS C:\test> Remove-Item foo -Stream hoge.txt
まとめ
活用方法としては、例えば、開発時に、ソースファイル(PHPなど)にリビジョン番号などのバージョン情報をADSとして付与しておけば、万が一、デプロイ後に現地でソース変更が発生した場合でも、開発環境へのマージがしやすくなりそうだと思いました。
ただし、マルウェアに悪用されるなどのケースも発生しているようなので、ADSは慎重に扱った方が良さそうです。
参考
Windows コマンドプロンプト ポケットリファレンス(書籍)
streamsコマンドでNTFSの代替データ・ストリーム情報を表示/削除する
Poison Ivyにみるマルウェアの隠し場所