[サイトTop] [As/R Top] [ヘルプTop] [戻る]

小ネタ&珍しい機能

代替データストリームの危険性と、見つけ方/閲覧/一括削除機能

 代替データストリームは、特に目新しい情報ではありません。
 主にMicrosoft社が引き起こした社会情勢の変化により、近年かなり悪用事例が広まった手法ですので、警鐘を鳴らす意味も含めた記事になります。
 そのため、いささか大げさかつ、刺激的になるような表現を使用しておりますことを、あらかじめご承知おきください。
 また執筆時点での現状有姿を念頭に置いた記事ですので、早期に本記事が陳腐になることを切に願っております。


「代替データストリーム」って何がヤバいの?

 「代替データストリーム」ってそもそも何?という人が多いのは、致し方ありません。
 当たり前に使用されている頻度のわりに、この知名度のなさが一番ヤバいと言って差し支えありません。

 英語で言うと「Alternate Data Stream」で略してADSです。
 日本語で言うと、「代替データストリーム」「代替ストリーム」「副ストリーム」なんて呼ばれており、私も3種類ごちゃまぜで使ってます。
 前から思っていたのですが、この日本語訳のセンスがダメなんじゃなかろうかと、ずっと感じています。
 何を意味しているのか、さっぱり直感でピンときません。
 「データ」はともかく、「代替」とか「ストリーム」って何だよ!直感的じゃないよ!と思います。

 そして代替データストリームをエクスプローラーで閲覧することはできませんし、代替データストリームの内容を閲覧することを目的としたソフト、いわゆるビューアの類も見かけたことがありません。(メンテナンスするソフトは見つかりましたが)
 Wikipediaから引用させていただき・・・あれ?専用のページも執筆時点でないですね。
 ADSの曖昧性のページにちょろっと記載があるだけです。

Alternate Data Stream - 代替データストリーム。NTFSファイルシステムで一つのファイルに複数のストリームを持たせること。フォーク (ファイルシステム)を参照。

 というものです。
 きっとピンとこないと思います。



「代替データストリーム」とは

 現在のWindowsで標準になっている、ハードディスクなりSSDなりに、ファイルなどを書き込む仕組みがNTFSと呼ばれているファイルシステムでして、相当古くから組み込まれている仕組みです。
 個人的にはWindows NT 3.51あたりで使ったような記憶があるんですが、もっと前から存在していたと思います。
 このように何十年も前から、当たり前のように利用可能な機能でしたが、ほぼ利用されていなかった機能とも言えます。
 なぜなら代替データストリームを列挙したり、データサイズといった情報を取得するためのWindows APIの構成が、Vista以前はかなり奇妙な仕組みになってまして、普通のファイルの列挙よりも利用難易度が高いのです。
 そのため、対応したソフトが極端に少ない、といえます。
 更に付け加えると、NTFSの次世代といわれるReFSでもサポートされていますし、Apple社のHFSでも似た概念の物が存在しています。

 少々堅苦しい言い回しをします。
 「ファイル」というモノは、「ファイル名」という「ラベル」が付けられた、データの塊です。
 代替データストリームは「ファイル名」にぶら下がる、データではなく代替データストリーム名の「ラベル」であり、さらにデータの塊がぶら下がるイメージです。

 ファイルを示すようなアイコン画像で、紙のようなものが重なっているような画像ってあるじゃないですか。
 あれって、すごく「ファイル」の本質を示したものとなっています。
※画像は、こちらで「https://sozai.cman.jp/」配布されているものを加工させていただいています。



 訳の分からん単語が混じってますが、追々説明します。

 厳密な「ファイル名」というラベルの構成は以下のような形になります。
 [ドライブルート]\[ディレクトリ名]\[サブディレクトリ名]\[ファイル名]:[ストリーム名]:$DATA

 ディレクトリとサブディレクトリが別物というあたり、しれっと難易度が高いのですが、余談なのでさらっと触りだけ触れておきます。
 ドライブルートはCドライブの場合は「C:」のようにコロンがついてますし、ネットワークの場合は「\」になります。
 これはそのままUNC表記になります。
 例えばネットワークの場合、「ディレクトリ名」は「共有名」と呼ばれることがありますよね。
 ディレクトリとサブディレクトリの違いは、要するに仮想の物か否かなど、情報の管理エリアの違いという観点が一番大きいものです。
 私もうまく説明できなくて申し訳なく思っていますが「ファイル」も同様で、かなり概念的な要素が多いモノなのです。

 話がそれましたが、特に目立つのは末尾の「:$DATA」だと思います。
 これは、「データストリーム」として読みますよ、という目印の表記です。
 普通、こんなものは見たことがないと思いますが、単にエクスプローラーに表示する機能がなく、コマンドプロンプトでのDIRコマンドなどでも、表示させるオプションが後から作られたものなので知らない人が多いだけです。
 そしてコマンドの類でも対応していないものが多く存在し、一般人が利用するには極めてハードルが高いといえます。

 まずは、こちらのように1つのファイルに、5つのデータストリームが含まれている事例です。(無名1、代替4)
 コマンドプロンプトのDIRの/Rオプションで、表示させることができます。
 オプションの組み合わせの自由度が低いあたり、万全な対応じゃなさそうな感じがしてなりません。

 この「README.TXT」というファイルは中身に「ほげ」と書かれた4バイトのファイルですが、代替データストリームは11と表示されているのが「データサイズ」です。
 「データサイズ」と「ファイルサイズ」は違うモノなので、混同しないでください。
 これが4つで44バイトなので、合計48バイトのディスクを消費していると言えます。
 もちろんエクスプローラーで見ると、ファイルサイズのみしか表示されませんので、もちろんファイルサイズの表示は4バイトです。

 次にストリーム名は省略可能なので、みなさん省略して使っている、とも言えます。
 ただ、ほとんどのアプリが代替データストリームの書式のファイル名に対応していないという理由で、同じものとみなされないことは多いです。
 C:\memo\README.TXT
 C:\memo\README.TXT::$DATA
 これらは、これは同じものを指します。
 ストリーム名は複数持つことが可能でして、指定しないというものは、「無名ストリーム」と呼ばれるもので、ごく普通にファイルの中身が格納されています。

 こちらのスクリーンショットは、コマンドでファイルの中身を表示する2種類のコマンドを実行した例です。
 代替データストリーム指定に対応していない「type」コマンドと、対応している「more」コマンドを実行してみた結果になります。

 1つ目と2つ目で、OSのレベルでも代替データストリームに対応していないコマンドが存在する状況が、分かる事例です。
 代替データストリームなんて、30年くらいも前の技術なんで、typeコマンドが「まだ」対応してないだけ・・・なんて話ではないはずです。
 3つ目と4つ目のは、ファイル名と無名ストリームの出力なので、普通にファイルの中身が出力されているのが分かると思います。
 5つ目は、名前付きの代替データストリーム名を指定して出力しているので、ファイルの中身とは違うものが出力されてます。



「代替データストリーム」はセキュリティのために利用されているって本当?

 本当です。

 以下、極論かつ暴論の、個人的な見解ですので、話半分に聞いてください。

 道具に善悪など無く、使い道一つで善にも悪にもなります。
 例えば包丁という道具で美味しいご飯を作るか、人を刺すか、というのは使う側の問題なのです。
 利用事例の件数を観点に語ればではありますが、悪用事例の方が圧倒的に多いのでセキュリティ強化のために利用しているケースは、もはやレアケースと言えます。

 こんなデメリットが多い、中途半端な対応状況の仕組みに頼らなければならないセキュリティに、何の意味などあるのでしょうか?むしろ知名度が低すぎて危ないので、使えないようにした方がマシというものです。
 このようなアンチテーゼを提唱させていただきます。

 この節で言いたいことをまとめますと、メーカーやソフトによって異なる「謎のデータ」で話がストップするようでは話になりません。
 セキュリティというお題目で思考停止している結果が、乱用の温床になっていることを知るべきだと思います。

 以下、悪用事例を紹介しますが、知らなきゃ悪意にさらされて、自身が危険な状態にさらされていることにすら気が付きません。
 本稿の執筆時点(2023年4月)で、代替データストリームの中身を確認するすべがほとんどないという、我々が危うい世界にいることを理解いただけると、幸いです。
 またこの記事を書くに至った動機となります。



「代替データストリーム」は悪意あるウィルスの潜伏場所になってることが多い

 「代替データストリーム」にはテキストだけではなく、動画や画像やら、あまつさえexeファイルやら、ありとあらゆる形式のファイルを埋め込むことが可能です。
 つまり、ウィルスとかトロイの木馬とかランサムウェアとか、悪しき目的のプログラムファイルを埋め込むことが可能です。

 でも「所詮はデータだろ?実行できるわけじゃないし、そんなに危険わけがない」なーんて思ってたら、セキュリティに対する考えが甘すぎます。
 なんと、XP時代にはさらっと実行できたんですよ。
 「README.TXT」が謎の実行ファイルとして実行できるって、悪夢だと思いませんか?
 Windows XPは名作OSとも謳われますが、Microsoft社がXPのセキュリティがザルだ、穴だらけだ、時代遅れだとボロクソ言っていたのは、まぎれもない事実だったんです。

 さすがにVista以降は、そんな考えが足らない機能は削除されましたが、現時点でも別のコマンドの組合せで実行できます。
 悪用のハードルが上がってマシにはなってますが、まだまだ危うい状況にあるといって差し支えないでしょう。

 むしろ、そういったアプリが作れることを実証しちゃっているので「悪意のあるウィルス作者が悪用可能である」という話でもあります。
 もちろん私も作れますというか、すごい古典技術なので今時の人は戸惑ってしまうような微妙な難易度はありますけど、決して難しくないです。
 てか、上でmoreコマンドが使えるって書いてるのも、勘の良い人なら悪用方法を思いつきます。



「代替データストリーム」による個人情報の漏洩の例

 こちらのスクリーンショットを見てください。
 このテキストファイルの中身は、3.2KBのフラットなテキストですが、実際には4.7KBほどディスクを使用しています。
 こんなところでも、もれなく不正確です。
 「ディスク上のサイズ」はMBRに書かれて0になったり、クラスタサイズやセクタサイズに影響されるので、そもそもあてになる数字ですらありません。

 下の四角で括っている部分、いわゆるアクセスブロック属性と呼ばれるものです。
 外部のネットワークから複製されたという事を警告するものとなっています。

 これを、As/R Ver.15.3.1.0で実装されたファイル情報コマンドで見てみますと、

 アクセスブロック属性の正体はこのようになっており、「:Zone.Identifier:$DATA」と書いてあるのが、代替データストリームの名称です。
 この名称の代替データストリームの中身に何かしら書いてあると、プロパティ画面にアクセスブロック属性の項目が表示されるようになります。
 つまり、Zone.Identifierはセキュリティ利用事例の1つです。

 右側部分が代替データストリームのデータの内容をASCII形式でダンプしたものになります。
 このように、ファイルの中身とは全く関係ない、謎のデータが埋まっているのが確認できます。

 ちなみに代替データストリームに何が書いてあるのかは、非公開でして、正直何が何だか分かりません。
 ぶっちゃけWindows自身も中身をろくに確認してませんし、そもそもMicrosoft社の製品やバージョン違いでバラバラですので、中身を確認しようとしてもできるはずがありません。
 アプリごとに悪い意味でテキトーなので、冗談ではなく本当に「謎のデータ」なのです。

 代替データストリーム名がZone.Identifierの場合の、ZoneIdという番号は公開されているので紹介しておきますが、Microsoft社の今は亡きInternet Exploreの設定画面にあった、設定項目の順番順の値です。
 ご存じの方もいらっしゃると思いますが、Mark-of-the-webと呼ばれるもので、通称MOTW機能と呼ばれていた(死語なので過去形)ものです。
 クラウド化が進んだ昨今、この区分けの存在意義すら微妙ですし、多くのソフトがイントラネットだろうが、ローカルのループバックだろうが3をセットするといった雑な扱いなのと、いくらでも気付かれないように書き換えできる値なので、信用できる情報ではないと感じます。
 また、おそらく今では「信頼できないWebサイト」など、どういう基準なのかを語れる人も少ないと思います。(私も知りません)
0ローカルマシン
1イントラネット
2信頼できるWebサイト
3インターネット
4信頼できないWebサイト

 さて、このスクリーンショットの「謎のデータ」を良く読むと、ダウンロードURLとか、記事IDとか、アップロードした私のメールアドレスとか、ちょおま、ふざけんな私の勤務先の情報とか、入ってんじゃねーか・・・と、色々ヤバくてマズイ情報がモリモリが埋まってますので、黒塗りが多くてすみません。
 まぁ、これはMicrosoft社のTeamsに私がアップロードし(D&Dで貼り付けた)、私がダウンロードしたテキストファイルであるということ、個人を特定可能な各種情報や記事番号などの情報であることが分かります。
 ディレクトリ名にユーザーのメールアドレスを平文で使うといった雑な仕様を見ても、やっぱりMicrosoft社だしな、と納得してしまうあたりは私も毒されている自覚はあります。

 とりあえず代替データストリームに含まれている情報が、どういうモノかは、ある程度は伝わったと思います。
 これは決してTeamsが悪い、という訳ではありません。
 Edgeでダウンロードしたファイルにはダウンロードサイトとオリジナルファイル名が埋まっているのでリネームしてもバレますし、Sluckなどの他社製品でもダウンロードしたファイルには記事番号やらアカウント情報やら色々埋まっています。
 代替データストリームを利用しているソフトは、このように無造作かつ、断りもなく、いろんな情報をバンバンぶっこみやがりますので、油断ならんのです。
 ダウンロードしたファイルの正当性を示すという意味でこのような情報が埋まっているので、このことを良く知っておく必要があります。
 要するに、この埋まってる個人情報で、ピンポイントで私が特定できるわけでして「私が責任をもっているファイルですよ」と示されているという意味です。

 そして、このファイルを右クリックメニューから圧縮して、SNSなり、メールなり、USBメモリなりで誰かにその圧縮ファイルを渡したら、私の個人情報はダダ洩れになります、というオチです。
 まぁ今回は記事のために持ってきたサンプルなのですが、会社のPCとかの私的利用なんかバレたら最悪クビになるシナリオもあり得ますので、仕事とプライベートはきっちり線を引いて分離しておかないといけませんね、という一例でもあります。

 別のタイプの漏洩話で、Excelファイルのプロパティに書いた人の会社名とか、編集した人の名前とかが埋まってるってぇ、情報漏洩話はよく聞きます。
 存在しないハズの下請け・孫請けの存在がばれた、機密情報を漏らしちゃいけない国に発注していた、学校のレポートや国への補助金の申請書をコピペで作ってるのがばれた、なんて話はいくらでもあります・・・こうすると情報漏洩が良いことの様に聞こえてくるのが不思議ですね(苦笑)
 プロパティの情報とは異なりエクスプローラーだと代替データストリームを編集したり、削除したり、閲覧する機能はもちろん、そもそも存在を確認する術すらありません。
 困ったものです。

 せめて漏洩してることに気付ける仕組みというモノは、業界全体の課題だと思います。
 で、そんな経緯で情報漏洩があまりにも怖いので、「Delete」ボタンを押すことで代替データストリームを削除する機能を作ってしまいました。
 なお「よろしければご利用ください」というスタンスですが、もちろん悪用は厳禁です。
 ウチで配布しているソフトで法に触れる使い方は使用許諾条件で禁止してますので、悪しからず。

※補足1
代替データストリームを削除しても、物理的なディスクの使用領域は減りますが、ファイルサイズや、更新時刻のタイムスタンプは変化せず、見た目は一切変わりません。
※補足2
本稿執筆時点の現状有姿の状況をもとに執筆しておりますので、今後仕様変更される可能性はあります。




「代替データストリーム」を使用した悪意あるウィルスの運び方

 ここは現在も悪用事例が多いので、概要の説明にとどめさせていただきます。

 「代替データストリーム」はNTFSの機能を利用していることから、別のファイルシステムにファイルを移動させると、消えます。
 FATでフォーマットしたUSBメモリ、代替データストリームをサポートしてないNASとか、メールの添付ファイル等、いろいろ欠落する要因があります。
 悪人の立場になって、ウィルスを媒介させる手段を考えると、そういった特性を回避する手段を考える事になります。

 で、そこで着目されたのが、各種の圧縮ファイルやISOなどのディスクイメージです。
 最近のアーカイバは、圧縮されたファイルを復元する際に、代替データストリームも一緒に復元しちゃうんですよ。
 で、圧縮形式にもよりますが2014年ごろから、ぽつぽつと悪用されだしたようです。

 この悪用が大きく広まった契機は、昨年Microsoft社のOffice製品で、マクロの自動実行がデフォルトでOFFに設定されるようになったことです。
 この影響により、新たななウィルスの潜伏場所として目を付けられたのが代替データストリームでして、特に2022年ごろから実害や悪用事例の報告が増え、大きく警鐘が鳴らされるようになりました。
 そういった経緯で、うちでもガッツリ取り扱うような事態になったわけです。

 広く知られている圧縮ファイルの拡張子のタイプとしては
 「7Z」「ACE」「ARJ」「CAB」「GZ」「LZH」「RAR」「TAR」「VHD」「XZ」「ZIP」
 ディスクイメージだと
 「ISO」「UDF」「IMG」
 「VHD」とか両方にかかるものですが、この辺りが良く攻撃に使われるタイプです。

 念のための補足ですが、zipの名前変えただけの、jar(Javaのライブラリ)とか、apk(Androidのインストールイメージ)とか、edoc(電子ブック)とかxlsx(EXCEL文書)とか、docx(WORD文書)とか、こいつら全部だめですよ。
 tarやらzipはファイル名を変えただけの派生が数多く、「hoge.xlsx」を「hoge.zip」にリネームしてやれば、ごく普通の解凍ソフトで展開できます。

 ちなみに統合アーカイバプロジェクトのDLLを使っているものは、古典ゆえに良くも悪くも代替データストリームを付与されることは無いので安全・安心です。
 関係者の一人として片足突っ込んでる身としては、安全な圧縮・解凍ソリューションですよ、とアピールしておきます。
※ディスクイメージはどうしようもない気がしますが、近年の圧縮解凍ソフトには代替データストリームの取り扱いをどうするか設定があると思います。
 可能なら設定で入力/出力しないように運用することをお薦めします。



「代替データストリーム」を埋め込まれたファイルの見つけ方(As/R限定)

 上述のようにコマンドプロンプトから「Dir /R」とすれば見つけられますが、正直に言ってかなり厳しい状況だと思います。

As/Rでサムネイル表示させた例

As/Rの縮小画像を表示させた場合、このように初期値は代替データストリームの名称を黄色地に黒文字で表示しています。
これを無効にするには、オプション→リスト→アイコン→サムネイルで設定を切り替えれば、OFFにすることも可能です。

サムネイルを表示したままフォルダーを移動していくだけで、代替データストリームを含んでいるファイルを簡単に見つけられるでしょう。

※他所様のファイラーでもサムネイル表示に対応していると小耳にはさんだことがあります。
 当方では深追いしておらず、情報の真偽の確認はしていません。



「代替データストリーム」を一括で削除する方法(As/R限定)

 適当なファイルを選択した上で、メインメニュー→削除→代替データストリームの一括削除、を実行します。
 そうすると、このような画面が表示されるので、「代替データストリームの削除」ボタンを押すだけです。
 フォルダーを選択している場合「階層下も削除する」がONになっていると、下位階層もまとめて処理対象になります。


 あと、他のコマンドと同様にRemoveZoneID.exeを直接起動して、D&Dでこの一覧に追加する、という操作をしても処理可能です。
 個人的には、適当なキーやツールバーに割り当てておいて、機能をお手軽に呼び出せるようにしておくと何かと便利だと思っています。
 このコマンドを実行しても上で述べている通り、ディスクの占有サイズは変わりますが、ファイルサイズ、更新時刻などは変化しません。




このページを読んだ人向けの勉強用のメモ

 本音は自分で忘れない用の、おさらいと深堀りの勉強メモです。
  • 調べてみればすぐに分かると思いますが、悪用事例は既に膨大な数があります。
  • WindowsのNTFSの機能の一端であるため、消失の可能性が常に付きまといます。
  • 未対応ソフトがあまりにも多く、消失の可能性が常に付きまといます。
  • ロックの仕組みが無いため代替データストリームは良く破損します。
  • 「ファイルサイズ」には、代替データストリームの「データサイズ」は反映されません。
  • 代替データストリームに書きこんでも、消しても、更新時刻のタイムスタンプは変わりません。
  • コマンドプロンプトから「dir /r」で、カレントディレクトリにあるファイルの代替データストリームの列挙ができます。
  • コマンドプロンプトから、moreコマンドを使うことで、代替データストリームの内容をダンプすることも可能です。
  • PowerShellのコマンドや、Microsoft社が公開しているSysInternalsのstreams.exe(要別途ダウンロード)でメンテナンスすることもできます。
  • 代替データストリームのついたファイルを作る簡単な方法は、こんな感じでリダイレクトで流し込めば作れます。
    「ほげほげ」の部分をexeファイルの中身とかにすると、いかにお手軽に悪用できるか分かるかと思います。
    c:\>echo ほげほげ > README.TXT:あああ
    もちろん同じ方法で取り出すことも簡単です。