代替データストリーム(ADS)について色々調べてみた

  • 9
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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と組み合わせて以下のようにコマンドを実行するとよい

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を削除したい場合は、以下のようにコマンドを実行するとよい

PowerShell
PS C:\test> Remove-Item foo -Stream hoge.txt

まとめ

活用方法としては、例えば、開発時に、ソースファイル(PHPなど)にリビジョン番号などのバージョン情報をADSとして付与しておけば、万が一、デプロイ後に現地でソース変更が発生した場合でも、開発環境へのマージがしやすくなりそうだと思いました。
ただし、マルウェアに悪用されるなどのケースも発生しているようなので、ADSは慎重に扱った方が良さそうです。

参考

Windows コマンドプロンプト ポケットリファレンス(書籍)
streamsコマンドでNTFSの代替データ・ストリーム情報を表示/削除する
Poison Ivyにみるマルウェアの隠し場所