SOC Prime Bias: Critical

04 Nov 2026 11:45 UTC

ESC1およびESC8攻撃経路: ソーシャルエンジニアリングからAD CS悪用まで

Author Photo
SOC Prime Team linkedin icon フォローする
ESC1およびESC8攻撃経路: ソーシャルエンジニアリングからAD CS悪用まで
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

脅威アクターはソーシャルエンジニアリングを利用し、Microsoft Teamsを通じてITヘルプデスクのスタッフになりすましてリモートアクセスをQuick Assistで確立しました。アクセスを得た後、彼らは構成が不適切なActive Directory証明書サービス(AD CS)をESC1およびESC8の手法を通じて悪用し、権限を昇格させドメインレベルの認証を取得しました。この侵入により、不正な証明書登録、DCSync活動、およびその後のデータ流出が可能になりました。

調査

調査では、初期のTeamsフィッシングから後の証明書悪用に至る攻撃チェーンを再構築しました。アナリストは、リモートセッションのテレメトリー、ユーザー書き込み可能なディレクトリからの疑わしいランタイム実行、およびAD CSイベント(証明書登録要求とPKINITアクティビティを含む)を相関させました。認証されたIDと発信デバイスの不一致が、潜在的なNTLMリレー攻撃を特定するための重要なピボットになりました。

緩和策

組織は、未承諾のサポートリクエストに対して強力な検証手順を施行し、Microsoft Teamsでの外部アクセスを制限すべきです。技術的な緩和策としては、App Control for Businessを使用して無許可のランタイムをブロックし、AD CSを強化して認証用の拡張保護(EPA)と登録エンドポイントでのHTTPSを有効にすることが含まれます。登録サービスでNTLMを無効化し、定期的に証明書テンプレートの監査も実施することが重要です。

対応

不正な活動が検出された場合、対応者は直ちに影響を受けたワークステーションを隔離し、除外リスクのある侵害されたIDを確認すべきです。不正な証明書は撤回され、更新された撤回情報を公開する必要があります。アクティブなKerberosチケットは別途評価されるべきであり、証明書撤回は既存のTGTを無効化しません。また、自動的な混乱から除外されたアカウントには手動での封じ込めが割り当てられるべきです。

攻撃フロー

検出

システムネットワーク構成発見の可能性(cmdline経由)

SOC Primeチーム
2026年11月2日

Javaバイナリが異常な場所から実行された(process_creation経由)

SOC Primeチーム
2026年11月2日

代替のリモートアクセス/管理ソフトウェア(process_creation経由)

SOC Primeチーム
2026年11月2日

ドメインコントローラーの証明書要求イベント [ADCS](監査経由)

SOC Primeチーム
2026年11月2日

証明書要求イベント [ADCS](監査経由)

SOC Primeチーム
2026年11月2日

構成が不適切なADCSテンプレート使用 [ESC1/SAN](監査経由)

SOC Primeチーム
2026年11月2日

強要攻撃の可能性(監査経由)

SOC Primeチーム
2026年11月2日

疑わしい証明書関連のアクションの試行(監査経由)

SOC Primeチーム
2026年11月2日

PetitPotam/ADCS-ESC8攻撃の可能性の悪用 [MS-EFSRPC/ADCS-PKI](監査経由)

SOC Primeチーム
2026年11月2日

DCSync攻撃の可能性(監査経由)

SOC Primeチーム
2026年11月2日

Quick Assist不正アクセスの可能性(監査経由)

SOC Primeチーム, Elastic
2026年11月2日

IOC(HashSha256)検出対象:ヘルプデスクなりすましからAD CSの悪用へ:ESC1およびESC8侵入経路の調査

SOC Prime AIルール
2026年11月2日

証明書テンプレートの悪用およびNTLM認証リレー検出 [Microsoft Windowsセキュリティイベントログ]

SOC Prime AIルール
2026年11月2日

証明書ベースの認証悪用とLDAPSおよびSMB接続 [Windowsネットワーク接続]

SOC Prime AIルール
2026年11月2日

Teamsフィッシングと無許可アクセスのためのポータブルランタイム実行 [Windowsプロセス作成]

SOC Prime AIルール
2026年11月2日

シミュレーション実行

  • 攻撃の説明とコマンド: 敵対者はMicrosoft Teams経由でフィッシングキャンペーンを開始し、ITサポートになりすまします。彼らは被害者に「Quick Assist」を開くよう指示します。セッションが確立されると、攻撃者はリモートアクセスを利用してポータブル python.exe を偽装したディレクトリにドロップします: C:UsersAppDataRoamingKB。最終的に横移動を促進するため、攻撃者は systeminfo and ipconfig を実行してホスト上の偵察データを収集します。

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

    # シミュレーションスクリプト:Teamsフィッシング&ポータブルランタイム実行
    
    # 1. セットアップ:AppDataに「悪意のある」ディレクトリを作成
    $targetDir = "$env:APPDATAKB"
    if (!(Test-Path $targetDir)) { New-Item -Path $targetDir -ItemType Directory -Force }
    
    # 2. ポータブルランタイムをシミュレート(python.exeという名前のダミーファイルを作成)
    # 実際の攻撃では、これは実際のバイナリです。
    $dummyPython = Join-Path $targetDir "python.exe"
    New-Item -Path $dummyPython -ItemType File -Force
    
    # 3. ‘Teams’親プロセスがQuick Assistを生成することをシミュレート
    # 注意:1つのスクリプト内で実際のTeams.exeプロセスツリーを簡単に偽装することはできないため、
    # 高度なインジェクションを使用しないで、コマンドラインと期待される動作を
    # 論理的に模倣することでテレメトリをシミュレートします。
    
    Write-Host "[!] 攻撃シーケンスをシミュレート中..."
    
    # プロセスチェーンをシミュレートして検出ロジックをトリガー
    # 注意:特定のSigmaルールをトリガーするには、プロセス‘python.exe’が
    # テレメトリストリーム内で‘Teams.exe’の子として見られる必要があります。
    
    # ステップA:TeamsがQuick Assistを呼び出すことをシミュレート(テレメトリの手動シミュレーション)
    # 実際のテスト環境では、‘ProcessHacker’や‘Sysmon’のようなツールを使用して
    # 親PIDを操作することがありますが、このスクリプトではシーケンスを実行します。
    
    Start-Process "cmd.exe" -ArgumentList "/c echo Simulating Teams calling Quick Assist"
    
    # ステップB:特定のパスから‘ポータブルランタイム’を実行
    Start-Process -FilePath $dummyPython -ArgumentList "--version" -ErrorAction SilentlyContinue
    
    # ステップC:発見コマンドを実行
    Start-Process "cmd.exe" -ArgumentList "/c systeminfo"
    Start-Process "cmd.exe" -ArgumentList "/c ipconfig"
    Start-Process "cmd.exe" -ArgumentList "/c tasklist"
    
    Write-Host "[+] シミュレーション完了。SIEMでのアラートを確認してください。"
  • クリーンアップコマンド:

    # クリーンアップ:シミュレートされた悪意のあるディレクトリとファイルを削除
    $targetDir = "$env:APPDATAKB"
    if (Test-Path $targetDir) {
        Remove-Item -Path $targetDir -Recurse -Force
        Write-Host "[+] クリーンアップ成功:$targetDir が削除されました。"
    } else {
        Write-Host "[-] クリーンアップ失敗:ディレクトリが見つかりませんでした。"
    }