Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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にみるマルウェアの隠し場所

minr
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away