代替データストリーム(Alternate Data Stream)の悪用
以下のブログ記事では、Alternate Data Stream の概念と、過去および最近の不正使用について紹介しています:これは、ファイルシステムに悪意のあるペイロードを隠すための技術です。古い技術と思われるかもしれませんが、現在でも実際の攻撃に使用されています。
代替データストリーム(Alternate Data Stream)とは?
Alternate Data Stream (ADS) とは、NTFS ファイルシステム(Windows の主要なファイルシステム形式)が、ファイルに通常使用されるデフォルトのストリームに加えて、異なるデータストリームを保存する機能のことです。この機能が開発された当初は、macOS の Hierarchical File System (HFS) に対応することが主な目的でした。
NTFS ファイルシステムでは、ファイルに属性が付いています。今回の対象となる属性は、ファイルのデータストリームを格納するための $DATA 属性です。
かつては、正規のファイルの ADS 内に悪意のあるペイロードを格納することが一般的でした。しかし今日では、多くのセキュリティソリューションが ADS の検出とスキャンを行います。しかし、この記事でご紹介するのは、ADS が、ユーザーやさまざまなセキュリティ製品から隠されたまま、ペイロードを実行するために依然として使用できるということです。
この記事では簡単にするために、すべての例が Windows の標準ツールに基づいています。
ADS の使用方法
古き良き時代の Windows Vista では、ADS(Alternate Data Streams)は、マルウェア開発者が悪意のあるコードを隠すための一般的な手法でした。代替データストリームは、正規のファイルの中に悪意のある破損ファイルを押し込むことで、その存在を隠すために効果的に使用されていました。 代替データストリームにマルウェアを入れることで、Windows ファイルには、正規のファイル情報や指示だけでなく、悪意のあるファイルの情報も含まれるようになります。ハッカーが Alternate Data Stream に置いた悪意のあるコードを実行するには、mklink コマンドを使ってシンボリックリンクを作成する必要がありますが、これを行うには、そのマシンの管理者権限が必要となります。通常のユーザーでは、管理者として操作する必要がないことを考えると、ハッカーは管理者権限のないマシンに着陸したと仮定してターゲットに近づく傾向があります。
列挙 – $DATA の下のメインストリームは、空の文字列 ( “”、無名のストリームとも呼ばれます) です。このストリームは、ファイルの通常のストリームを含むために使用されます。
以下は、PowerShell でファイルのデータ ストリームを列挙する例です。
dir /R や SysInternals\streams.exe を使って、ファイルの ADS を列挙したり、ディレクトリに再帰的に列挙したりすることもできます。
上記のように、ファイルには名前のないストリームしか含まれていません。
しかし、この技術にはいくつかの正当な用途があるため、時には正当なファイルの中に ADS が見つかることもあります。
以下は、PowerShell で ADS を使ってファイルのデータストリームを列挙する例です。
これも ADS:ゾーンの正当な使用例です。Identifier。このフィールドは、ファイルのソースの信頼度を示します。これは、macOS に対応したブラウザの使い方を「検疫ビット」として保存するものです。
作成 – ADS には正当な用途もありますが、悪意のあるペイロードの保存にも使用できます。攻撃者は、ペイロードを無名のストリームに保存するよりも、この方法を好むかもしれません。その理由は、ペイロードの存在がユーザから隠蔽されるからです。Explorer.exe からはアクセスできません(また、表示されるファイルのサイズには ADS のサイズは含まれません)。また,デフォルトでは, ADS は dir コマンドで表示されません(ただし,/R フラグで ADS が表示され,Windows Vista から適用されています)
ADS の作成は非常に簡単です。
type コマンドによる ADS の作成例を示します:
Windows XP までは、start コマンドで ADS を実行することができました。しかし、それ以降のバージョンの Windows のでは、それができなくなりました。
データへのアクセス – ADS を悪用は、ADS を読み込んで実行する方法が複数あるため、依然として関連性の高い脅威です。
最初の利用法は、データへのアクセスです。ADS の内容には簡単にアクセスできます。以下は、PowerShell を使った例です:
実行 – データを読むだけでなく、実行することも可能です。ADS を start コマンドで実行することはできませんが、例えば、WMI などの他のプログラムから実行することは可能です。
“wmic process call creates” – WMI でプロセスを実行します。また、ADS を実行することもできます。例:
ADS を直接実行するために、Windows の正当なネイティブ・ツールがあります。例えば、DLL を ADS 内に保存し、rundll32.exe を介して DllMain から呼び出すことができます。また、HTA をADS 内に保存し、mshta.exe を介して呼び出すことができます。
ADS を悪用した悪質なキャンペーン
Windows は、ADS 内に存在する脅威をなんとか処理しているように見えるかもしれません。しかし、いまだに ADS を悪用するマルウェア・ファミリーが数多く存在します。
2017 年のもう一つの例は、行動にステルス性を加えて悪意ある活動を隠すために、攻撃シーケンスに 2 つの ADS を使用したランサムウェア「BitPaymer」です。1つ目の ADS は、ネットワーク共有を取得するために “net view” コマンドを実行するために作成され、次に 2 つ目の ADS は、ディスクとネットワーク共有上のデータをスクランブルします。
結論として言えることは、ADS の悪用は現在でも通用するテクニックだということです。確かに、最近の Windows バージョンでは、ADS の機能が制限され、強化されています。しかし、Power-Shell や WMI などの Windows のネイティブツールの基本的なコマンドや、Windows のコマンドラインの知識があれば、脅威者は ADS を継続して攻撃に活用することができます。興味深いことに、ADS を利用した最近のキャンペーンはかなり洗練されており、ディスク上の永続的なファイルの使用を最小限に抑える傾向があると考えられます。