SOC Prime Bias: 重大

18 Feb 2026 13:42 UTC

再利用された材料によるマルウェアキャンペーンの追跡

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon フォローする
再利用された材料によるマルウェアキャンペーンの追跡
shield icon

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ペイロードを特定して削除してください。

攻撃フロー

シミュレーション実行

前提条件:テレメトリー&ベースラインの事前チェックが合格していること。

根拠:このセクションでは、検出ルールをトリガーするために設計された敵対者技術の正確な実行を詳述します。命令とナラティブは特定された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_start and selection_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