攻撃の核となる難読化されたJavaScript
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
フィッシングメールがRARアーカイブ内の悪意のあるJavaScriptファイルを配信し、Formbookマルウェアの実行で終わる感染チェーンが始まります。起動後、このスクリプトは複数のファイルを共用フォルダに書き込み、スケジュールされたタスクを通じて持続性を確立し、AES暗号化されたコンテンツを復号化して悪意のある.NET DLLを読み込みます。そのDLLは MSBuild.exe プロセスに注入され、その後の実行を続け最終マルウェアステージを展開します。このキャンペーンにはETWとAMSIの修正を含む検出回避の手法も組み込まれています。
調査
分析中、研究者たちはJavaScriptドロッパー cbmjlzan.JSを特定し、15分ごとにコピーされたスクリプトを実行するように構成されたスケジュールされたタスクを発見しました。また、画像ファイル内に隠されたbase64エンコードされたデータをデコードするPowerShellコマンドを追跡しました。復号化されたコンテンツは、Formbookを配信するために注入された.NET DLLを明らかにしました。さらに、調査と検出開発のためにファイルパスやタスク名、暗号素材を含む追加の指標が抽出されました。 MSBuild.exe and used to deliver Formbook. Additional indicators, including file paths, task names, and cryptographic material, were extracted to support deeper investigation and detection development.
緩和策
組織は信頼されていないJavaScriptファイルや、ユーザーがアクセス可能なディレクトリから起動されるPowerShellスクリプトの実行をブロックし、異常またはランダムに見える名前で作成されたスケジュールされたタスクを注意深く監視するべきです。実行制御はマルウェアの連鎖を防ぐために適用されるべきです。また、セキュリティツールはDLLインジェクションの挙動や、ETWとAMSIの改ざん、既知のFormbook関連の署名を検出する必要があります。ユーザーの意識を向上させるためのトレーニングもフィッシング添付ファイルによるリスクを減らすために重要です。 MSBuild.exe to prevent abuse in malware chains. Security tooling should also detect DLL injection behavior, ETW and AMSI tampering, and known Formbook-related signatures. User awareness training remains important to reduce the risk posed by phishing attachments.
対応
防御者は特定されたJavaScriptファイルまたは関連するスケジュールされたタスクが現れたときにアラートを生成し、影響を受けたエンドポイントを隔離して、解析のための揮発性証拠を収集するべきです。悪意のあるファイルは削除され、スケジュールされたタスクは削除され、完全な実行フローを理解するために注入されたDLLを完全に調査されるべきです。侵害されたシステムコンポーネントは、整合性を確保するために再構築または復元されるべきです。また、関連するIOCは、より広範なセキュリティコミュニティと共有され、他者が同様の活動を検出するのに役立つようにすべきです。
graph TB %% Class definitions classDef action fill:#ffcccc classDef tool fill:#99ccff classDef process fill:#ffff99 classDef file fill:#ccffcc classDef malware fill:#ffcc99 %% Nodes email_phishing[“<b>アクション</b> – <b>T1566.001 添付ファイル付きフィッシング</b><br/>悪意あるRAR添付ファイルがメールで送信”] class email_phishing action tool_wsh[“<b>ツール</b> – <b>名前</b>: Windows Script Host (JavaScript)<br/><b>技術</b>: T1559.001 Component Object Model”] class tool_wsh tool action_copy[“<b>アクション</b> – <b>T1559.001 Component Object Model</b><br/>スクリプトをC:\\Users\\Public\\Librariesへコピー”] class action_copy action action_sched[“<b>アクション</b> – <b>T1053 スケジュールタスク</b><br/>永続化のためタスク作成”] class action_sched action tool_ps[“<b>ツール</b> – <b>名前</b>: PowerShell<br/><b>技術</b>: T1059.001 コマンドインタプリタ”] class tool_ps tool action_decode[“<b>アクション</b> – <b>T1027.004 実行後コンパイル</b> & <b>T1140 復号/デコード</b><br/>Base64デコードとAES復号”] class action_decode action action_patch[“<b>アクション</b> – <b>T1027.005 インジケータ除去</b><br/>ETWおよびAMSIパッチ適用”] class action_patch action file_dll[“<b>ファイル</b> – <b>名前</b>: Orio.png(暗号化.NET DLLを含む)<br/><b>技術</b>: 隠しペイロード”] class file_dll file process_msbuild[“<b>プロセス</b> – <b>名前</b>: msbuild.exe<br/><b>技術</b>: T1127.001 開発ツールプロキシ実行”] class process_msbuild process action_inject[“<b>アクション</b> – <b>T1055.001 プロセスインジェクション</b><br/>msbuild.exeへDLL注入”] class action_inject action malware_formbook[“<b>マルウェア</b> – <b>名前</b>: Formbook<br/><b>ソース</b>: Brio.png埋め込みペイロード”] class malware_formbook malware %% Edges / Flow email_phishing –>|delivers| tool_wsh tool_wsh –>|uses COM to| action_copy action_copy –>|leads to| action_sched tool_wsh –>|launches| tool_ps tool_ps –>|executes| action_decode tool_ps –>|applies| action_patch action_decode –>|produces| file_dll action_patch –>|prepares environment for| file_dll file_dll –>|loaded by| process_msbuild process_msbuild –>|receives| action_inject action_inject –>|extracts final payload from| malware_formbook
攻撃フロー
検出
疑わしいPowerShell文字列(cmdline経由)
表示
疑わしいPowerShell文字列(PowerShell経由)
表示
LOLBAS WScript / CScript(プロセス作成経由)
表示
パブリックユーザープロファイルからの疑わしい実行(プロセス作成経由)
表示
PowerShellからの疑わしい.NETメソッドの呼び出し(PowerShell経由)
表示
パブリックユーザープロファイル内の疑わしいファイル(ファイルイベント経由)
表示
難読化されたJavaScript持続と悪意のあるペイロードインジェクション [Windowsプロセス作成]
表示
復号化のための難読化されたPowerShellの実行 [Windows PowerShell]
表示
シミュレーション実行
前提条件: テレメトリー&ベースラインプレフライトチェックが合格していること。
推論:このセクションは、検出ルールをトリガーするために設計された敵の手法(TTP)の正確な実行を詳述します。コマンドとナarratorは識別されたTTPsを直接反映し、検出ロジックが期待する正確なテレメトリーを生成することを目的としています。
-
攻撃の説明&コマンド:
低特権アカウントを侵害した攻撃者は、悪意のあるペイロードをダウンロードすることを望み、それがBase64文字列として妥協されたスクリプトリポジトリに保存されています。検出を避けるために、攻撃者は1つのPowerShellワンライナーを作成し、(1) Base64文字列をデコードし、(2) それを通して呼び出し、iexおよび(3) さらに埋め込まれたデータを復号化するためにAESオブジェクトを作成します。正確なコマンドラインはルールのリテラルに合うように書かれています。powershell C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Noexit -nop -c iex([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(('REPLACED_STRING'.Replace('VFHDVXDJCF',''))))) ; $aes_var = [System.Security.Cryptography.Aes]::Create()- 攻撃者は正当なBase64ペイロードで
REPLACED_STRINGを取って代わり、既知のマーカーを取り除いた後(VFHDVXDJCF). - The
-Noexit -nop -cスイッチはプロンプトと実行ポリシーのバイパスを抑制し、検出条件と一致します。 - The
$aes_var変数名は、第二の選択肢に合うようにリテラルとして保持されています。
- 攻撃者は正当なBase64ペイロードで
-
リグレッションテストスクリプト: 以下のPowerShellスクリプトは、制御された方法で正確なコマンドラインを再現し、SIEMが同一のテレメトリーを受信することを保証します。
# リグレッションテストスクリプト – 検出をトリガー $payload = "U2FtcGxlIEJhc2U2NCBTdHJpbmc=" # "Sample Base64 String" $marker = "VFHDVXDJCF" $obfuscated = $payload.Replace($marker, "") # 検出で使用される.Replaceをシミュレート $command = @" C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Noexit -nop -c iex([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(('${obfuscated}'.Replace('VFHDVXDJCF',''))))) ; $aes_var = [System.Security.Cryptography.Aes]::Create() "@ # 作成されたコマンドラインを実行 Invoke-Expression $command -
クリーンアップコマンド: 残っているAESオブジェクトを削除し、生成されたPowerShellセッションを停止します。
# クリーンアップ – もしまだ実行中なら子PowerShellプロセスを終了 Get-Process -Name powershell -ErrorAction SilentlyContinue | Where-Object { $_.Path -like "*WindowsPowerShellv1.0powershell.exe" } | Stop-Process -Force # 任意で一時変数をクリア Remove-Variable -Name payload, marker, obfuscated, command -ErrorAction SilentlyContinue