インメモリーローダーがScreenConnectをドロップ

Author Photo
SOC Prime Team linkedin icon フォローする
インメモリーローダーがScreenConnectをドロップ
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

ThreatLabz は、偽の Adobe Acrobat Reader のダウンロードから始まり、最終的に正規のリモートアクセスツール ScreenConnect の導入に至るマルチステージ攻撃チェーンを特定しました。このオペレーションは、強力に難読化された VBScript ローダーに依存しており、PowerShell コマンドをトリガーして Google Drive から C# ソースコードを取得、メモリ内で直接コンパイルし、最終ペイロードをディスクにドロップすることなく .NET ローダーを起動します。そのローダーは、プロセスマスカレーディングを適用し、PEB 構造を変更し、自動昇格された COM オブジェクトを悪用してより高い権限を取得し、ScreenConnect を被害者のホストにインストールします。

調査

研究者たちは、VBScript が Chr() 難読化を通じてどのようにそのコマンドを組み立てるかを概説しました。一方 PowerShell はペイロードをメモリ内で完全に取得しコンパイルしてディスクアーティファクトを最小化します。インメモリ .NET ローダーは、反射を使用して埋め込まれたアセンブリを実行します。追加の分析では、マルウェアが NtAllocateVirtualMemory を呼び出し、PEB フィールドを書き換えて winhlp32.exe を偽装し、COM 自動昇格を利用してユーザーアカウント制御を回避し、昇格された特権で実行を続行することが示されました。

緩和策

防御者は、悪意のあるダウンロードドメインへのアクセスをブロックし、PowerShell と VBScript の実行に厳格な制御を適用する必要があります。セキュリティチームは、疑わしい COM オブジェクトの作成、予期しない PEB 改ざん、その他のインメモリ実行の濫用を監視する必要があります。正当なリモート管理ツール(ScreenConnect など)へのアクセスは、承認されたユーザーと信頼されたワークフローに厳しく制限することにより、無許可のインストールのリスクを軽減するべきです。

対策

このアクティビティが検出された場合、影響を受けたシステムを即座に隔離し、悪意のあるプロセスを停止し、侵入の一環としてインストールされた ScreenConnect コンポーネントを削除してください。ファイルレス実行チェーンの証拠を回収するために、揮発性メモリアーティファクトに重点を置いたフォレンジック分析を行います。潜在的に露出した資格情報をリセットし、COM 自動昇格の濫用に関するログを確認し、観測されたコマンドラインパターン、ローダーの挙動、関連するファイル名の命名規則を特定するように検出を更新してください。

graph TB classDef action fill:#99ccff classDef builtin fill:#ffcc99 classDef file fill:#ccffcc action_user_exec[“<b>アクション</b> – T1204.002 ユーザー実行:悪意のあるファイル<br/>偽AdobeサイトからVBScriptをダウンロード”] class action_user_exec action file_vbscript[“<b>ファイル</b> – Acrobat_Reader_V112_6971.vbs”] class file_vbscript file action_vbscript_interpret[“<b>アクション</b> – T1059.005 VBScript実行<br/>PowerShellを起動”] class action_vbscript_interpret action tool_powershell[“<b>ツール</b> – PowerShell”] class tool_powershell builtin action_powershell_exec[“<b>アクション</b> – T1059.001 PowerShell実行<br/>C#をメモリ内コンパイル”] class action_powershell_exec action file_staging[“<b>ファイル</b> – Google Drive”] class file_staging file action_reflective_loading[“<b>アクション</b> – T1620 リフレクティブロード”] class action_reflective_loading action action_process_injection[“<b>アクション</b> – T1055.002 プロセスインジェクション”] class action_process_injection action action_masquerade[“<b>アクション</b> – T1564.010 プロセス偽装”] class action_masquerade action action_appdomain_hijack[“<b>アクション</b> – T1574.014 AppDomainハイジャック”] class action_appdomain_hijack action action_rat_install[“<b>アクション</b> – T1219 RATインストール”] class action_rat_install action tool_screenconnect[“<b>ツール</b> – ScreenConnect”] class tool_screenconnect builtin action_user_exec –>|downloads| file_vbscript file_vbscript –>|executes| action_vbscript_interpret action_vbscript_interpret –>|launches| tool_powershell tool_powershell –>|executes| action_powershell_exec action_powershell_exec –>|downloads| file_staging action_powershell_exec –>|compiles| action_reflective_loading action_reflective_loading –>|loads| action_process_injection action_process_injection –>|modifies| action_masquerade action_masquerade –>|enables| action_appdomain_hijack action_appdomain_hijack –>|facilitates| action_rat_install action_rat_install –>|installs| tool_screenconnect

攻撃フロー

シミュレーション実行

前提条件: テレメトリとベースラインの事前フライトチェックが通過している必要があります。

理由: このセクションは、検出ルールをトリガーするために設計された敵対的技術 (TTP) の正確な実行を詳述しています。コマンドとストーリーは、特定された TTP を直接反映し、検出ロジックによって期待される正確なテレメトリを生成することを目指します。

  • 攻撃ストーリーとコマンド:
    敵は ScreenConnect MSI を取得しました(フィッシング添付ファイルで提供されることが多い)。ユーザーの操作を避けるために、信頼された msiexec.exe バイナリを使用してサイレントインストールを実行します。また、 ShellExec.exe プロキシを示し、単に引数を msiexecに転送します。どちらのコマンドも、コマンドラインにリテラル文字列「ScreenConnect」を埋め込み、ルールの条件を満たします。

    1. MSI を被害者ホストにコピーする (T1025 をシミュレーション)。

    2. msiexec.exe を介してサイレントインストールを実行する msiexec:

       msiexec.exe /i "C:TempScreenConnect.msi" /quiet /norestart
    3. 次の方法で同じインストールを実行する ShellExec.exe (ホスト上にある場合):

       ShellExec.exe /i "C:TempScreenConnect.msi" /quiet /norestart

    これらのアクションは、ルールが発火する Sigma ルールで イメージ is *msiexec.exe or *ShellExec.exe and コマンドライン が「ScreenConnect」を含む Windows Event 4688 エントリを生成します。

  • 回帰テストスクリプト:

    #=============================================================
    # ScreenConnect インストールシミュレーション – Sigma ルールをトリガー
    #=============================================================
    $msiPath = "C:TempScreenConnect.msi"
    
    # MSI が存在することを確認する (プレースホルダー – 実際のテストでは最初にファイルをドロップ)
    if (-Not (Test-Path $msiPath)) {
        Write-Error "ScreenConnect MSI が $msiPath に見つかりません"
        exit 1
    }
    
    # 1. msiexec を使用してサイレントインストール
    Write-Host "[*] msiexec を介して ScreenConnect をインストール中..."
    Start-Process -FilePath "$env:SystemRootSystem32msiexec.exe" `
                  -ArgumentList "/i `"$msiPath`" /quiet /norestart" `
                  -Wait -NoNewWindow
    
    # 2. ShellExec を使用したサイレントインストール(存在する場合)
    $shellExec = "$env:ProgramFilesScreenConnectShellExec.exe"
    if (Test-Path $shellExec) {
        Write-Host "[*] ShellExec を介して ScreenConnect をインストール中..."
        Start-Process -FilePath $shellExec `
                      -ArgumentList "/i `"$msiPath`" /quiet /norestart" `
                      -Wait -NoNewWindow
    } else {
        Write-Warning "ShellExec.exe が見つからないため、2番目のインストールをスキップ。"
    }
    
    Write-Host "[+] シミュレーション完了。アラート確認のために SIEM を確認してください。"
  • クリーンアップコマンド:

    # ScreenConnect アンインストール (登録されている製品 GUID を使用、必要に応じて調整)
    $productGuid = (Get-ItemProperty "HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall*" |
                    Where-Object { $_.DisplayName -like "*ScreenConnect*" }).PSChildName
    
    if ($productGuid) {
        Write-Host "[*] ScreenConnect のアンインストール中 (GUID: $productGuid)..."
        & "$env:SystemRootSystem32msiexec.exe" /x $productGuid /quiet /norestart
    } else {
        Write-Warning "ScreenConnect 製品 GUID が見つからないため、手動でのクリーンアップが必要な場合があります。"
    }
    
    # コピーした MSI ファイルの削除
    Remove-Item -Path "C:TempScreenConnect.msi" -Force -ErrorAction SilentlyContinue
    Write-Host "[+] クリーンアップ完了。"