再利用された材料によるマルウェアキャンペーンの追跡
Detection stack
- AIDR
- Alert
- ETL
- Query
サマリー
このキャンペーンでは、BaseStart- と -BaseEnd タグの間に悪意のあるペイロードを隠したJPEG “キャリア” イメージが再利用されています。初期アクセスは細工された添付ファイルの中のMicrosoft Equation Editorの脆弱性(CVE-2017-11882)を通して行われ、HTAをダウンロードします。HTAはPowerShellを実行して .NET バイナリステージを取得します。同じイメージを多くのサンプルにわたって再利用することは、運用者が再利用可能なコンポーネントを頼りにしていることを示唆しています。
調査
研究者はEquation Editorのエクスプロイトを含むTELERADIO_IB_OBYEKTLRIN_BURAXILIS_FORMASI.xIsを観察しました。チェーンは悪意のあるIPからHTAを取得し、PowerShellを実行して別のIP上にある第二のペイロードをダウンロードします。最終ステージは、JPEGキャリアに埋め込まれBaseStart/-BaseEndの区切りを経由して回収される.NETバイナリです。同様のキャリアイメージが数十のVirusTotal提出物の中で見つかりました。
緩和策
CVE-2017-11882をパッチし、Officeを最新の状態に保ちます。HTAの実行をブロックまたは制限し、PowerShellスクリプトの署名を強制し、URL/IPフィルタリングを使用してホスティングインフラストラクチャへのアクセスを拒否します。
対応策
添付ファイルとHTAステージを検出して隔離し、特定されたIPへのPowerShellダウンロード活動について警告します。影響を受けたホストを隔離し、メモリフォレンジックスを実行してメモリ内の.NETペイロードを特定して削除してください。
“graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ffcc99 %% Nodes node_phishing[“<b>アクション</b> – <b>T1566.001 フィッシング: スピアフィッシング添付ファイル</b><br/><b>説明</b>: 悪意のある .xls ファイルが CVE-2017-11882 を利用しメールで送信されました。”] class node_phishing action node_user_exec[“<b>アクション</b> – <b>T1204.002 ユーザー実行</b><br/><b>説明</b>: 被害者が悪意のある添付ファイルを開きます。”] class node_user_exec action node_exploit_client[“<b>アクション</b> – <b>T1203 クライアント実行のためのエクスプロイト</b><br/><b>説明</b>: Equation Editorの脆弱性が悪意のあるコンテンツのダウンロードを引き起こします。”] class node_exploit_client action node_mshta[“<b>アクション</b> – <b>T1218.005 システムバイナリプロキシ実行: Mshta</b><br/><b>説明</b>: HTAファイルがmshta経由でダウンロードおよび実行されます。”] class node_mshta action node_powershell[“<b>アクション</b> – <b>T1059.001 コマンドおよびスクリプトインタープリタ: PowerShell</b><br/><b>説明</b>: リモートサーバーから取得されたPowerShellスクリプトが実行されます。”] class node_powershell action node_web_comm[“<b>アクション</b> – <b>T1102.003 ウェブサービス: 一方向コミュニケーション</b><br/><b>説明</b>: スクリプトがリモートサーバーからPNGイメージを取得します。”] class node_web_comm action node_stego[“<b>アクション</b> – <b>T1027.003 隠蔽ファイルまたは情報: ステガノグラフィー</b><br/><b>説明</b>: PNGにはBaseStartとBaseEndマーカーで区切られたBase64ペイロードが含まれています。”] class node_stego action node_dotnet[“<b>アクション</b> – <b>実行</b><br/><b>説明</b>: 埋め込まれた.NETバイナリペイロードがホスト上で実行されます。”] class node_dotnet process %% Connections node_phishing u002du002d>|次につながる| node_user_exec node_user_exec u002du002d>|次につながる| node_exploit_client node_exploit_client u002du002d>|次につながる| node_mshta node_mshta u002du002d>|実行する| node_powershell node_powershell u002du002d>|ダウンロードする| node_web_comm node_web_comm u002du002d>|取得する| node_stego node_stego u002du002d>|含む| node_dotnet “
攻撃フロー
検出
関連コマンドの検出による疑わしいLOLBAS MSHTA防御回避の行動 (via process_creation)
表示
疑わしいPowerShell文字列 (via powershell)
表示
疑わしいファイルダウンロードの直接IP (via proxy)
表示
疑わしいEquation Editorの子プロセス (via cmdline)
表示
疑わしいPowerShell文字列 (via cmdline)
表示
検出するべきIOC(宛先IP):再利用された素材によるマルウェアキャンペーンの追跡
表示
検出するべきIOC(送信元IP):再利用された素材によるマルウェアキャンペーンの追跡
表示
悪意のあるHTAおよびBase64イメージペイロード配信の検出 [プロキシ]
表示
Base64エンコード技術を用いたPowerShellペイロードの取得 [Windows PowerShell]
表示
シミュレーション実行
前提条件:テレメトリー&ベースラインの事前チェックが合格していること。
根拠:このセクションでは、検出ルールをトリガーするために設計された敵対者技術の正確な実行を詳述します。命令とナラティブは特定されたTTPを直接反映し、検出ロジックによって予想されるテレメトリーを正確に生成することを目指します。
-
攻撃のナラティブとコマンド:
敵対者は、悪意のあるHTAファイルを提供するクライアント側の脆弱性を悪用しました。HTAは、悪意のあるペイロード (例:Invoke-Expressionを起動するcalc.exe) をBase64でエンコードしたコマンドラインでPowerShellを起動します。ペイロードは文字列BaseStart-and-BaseEndの間にラップされており、攻撃者はオンザフライで確実に抽出できます。妥協されたホストで実行されるコマンドは次の通りです:powershell.exe -NoProfile -Command "$b='BaseStart-$( [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes('Start-Process calc.exe')) )-BaseEnd'; $payload=$b -replace '.*BaseStart-','' -replace '-BaseEnd.*',''; IEX ([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($payload)))"このコマンドラインは、
selection_base_startandselection_base_endの両方の条件を満たし、ルールを発火させます。 -
回帰テストスクリプト: 次の自己完結型のPowerShellスクリプトは悪意のある動作を再現し、上記でテレメトリーが有効になっている任意のWindowsホストで実行できます。
# 回帰テストスクリプト – 検出ルールをトリガーする # 1. Base64でエンコードされたペイロードを構築する (calc.exeを起動) $payload = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes('Start-Process calc.exe')) # 2. 区切り文字で完全なコマンドラインを組み立てる $cmd = "BaseStart-$payload-BaseEnd" # 3. 作成したコマンドラインでPowerShellを実行する $fullCommand = "powershell.exe -NoProfile -Command `"& {`$b='$cmd'; `$payload=`$b -replace '.*BaseStart-','' -replace '-BaseEnd.*',''; IEX ([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(`$payload)))`"" # 4. コマンドを実行する (これによりcalc.exeが起動する) Invoke-Expression $fullCommand -
クリーンアップコマンド: 不要なアーティファクトを削除し、必要であれば生成されたプロセスを終了します。
# クリーンアップ – まだ実行中であれば電卓を閉じ、コマンド履歴をクリアする Get-Process calc -ErrorAction SilentlyContinue | Stop-Process -Force # 現在のセッションのみでPowerShell履歴をクリアする (オプション) Remove-Item (Get-PSReadlineOption).HistorySavePath -ErrorAction SilentlyContinue