T1547.008 LSASS ドライバーのMITRE ATT&CKでの解説
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
この記事は、LSASSがセキュリティ関連のコンポーネントを読み込む方法を悪用して、Windowsシステム上で持続的で高権限の実行を得るために脅威アクターが使用するLSASSドライバー永続化サブテクニック、T1547.008について説明します。
調査
攻撃者は通常、SYSTEM権限を得ることから始め、ターゲットホストに悪意のあるDLLまたはドライバーを置き、LSASSがブート時に不正なコンポーネントを読み込むように、LSA構成内のレジストリキーを変更します。場合によっては、同じアプローチでドメインコントローラーサービスの拡張ポイントを悪用することもできます。
緩和策
防御者はLSAキーに影響を与えるレジストリの変更を監視し、ドライバーとDLLに対して厳格なコードサイニングを要求し、関連するレジストリパスの書き込み権限を制限し、LSASSプロセスによって読み込まれるコンポーネントに対して整合性モニタリングを適用する必要があります。
対応
疑わしいレジストリの変更や予期しないドライバーの読み込みが lsass.exe で検出された場合、そのホストを隔離し、クレデンシャル分析に焦点を当ててLSASSメモリを取得し、親プロセスを調査しながら変更されたレジストリの値を既知の良好な状態に戻します。
攻撃フロー
この部分をまだ更新中です。通知を受け取るためにサインアップしてください
私に知らせて検出
MSv1_0!SpAcceptCredentialsフックを使用した認証情報ダンピングの可能性(registry_event経由)
表示
永続性またはコード実行のためのLSASSを介したDLLの読み込みの可能性(registry_event経由)
表示
セキュリティサポートプロバイダー[SSP]に疑わしいライブラリを追加する(registry_event経由)
表示
検出するためのIOC(メール): MITRE ATT&CKのT1547.008 LSASSドライバー解説
表示
LSASSドライバー修正による永続的な実行の検出[Windowsレジストリエベント]
表示
シミュレーション実行
前提条件: テレメトリー&ベースラインプリフライトチェックが合格していること。
根拠: このセクションは、検出ルールを引き起こすための敵対者の技術(TTP)の正確な実行を詳述しています。コマンドと記述は、発見されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリーを生成することを目的とします。
-
攻撃の流れとコマンド:
- 準備 – 悪意のあるDLLをドロップ – 敵対者はDLL(
maliciousLSASS.dll)を作成し、それがLSASSによって読み込まれると、クレデンシャルハッシュを抽出し、それらを%TEMP%に書き込む。このDLLは被害者のワークステーションに舞台があります。 - レジストリ変更による永続性 – ネイティブ
reg.exeを使用して、攻撃者は悪意のあるDLLのフルパスをセキュリティパッケージのマルチ文字列値に追加し、LSASSがサービス開始時にそれを読み込みます。 - トリガー – 攻撃者は
LSASSサービスを再起動してパッケージを再読み込みさせる(システムの再起動が必要; テストではサービスを停止して再起動することでWinDefendサービス、これによりLSASSがセキュリティパッケージリストを再読み込みする)
- 準備 – 悪意のあるDLLをドロップ – 敵対者はDLL(
-
リグレッションテストスクリプト:
# ------------------------------------------------- # シミュレーション LSASS ドライバー永続化 (T1547.008) # ------------------------------------------------- $dllPath = "$env:USERPROFILEDesktopmaliciousLSASS.dll" # ダミーDLLファイルが存在することを確認(テスト用に空のプレースホルダー) if (-not (Test-Path $dllPath)) { New-Item -Path $dllPath -ItemType File -Force | Out-Null } # 元の値をバックアップ $regPath = 'HKLM:SYSTEMCurrentControlSetControlLsaSecurity Packages' $original = (Get-ItemProperty -Path $regPath -Name '(Default)' -ErrorAction SilentlyContinue).'(Default)' # 悪意のあるDLLパスを追加 $newValue = @() if ($original) { $newValue = $original -split "`0" } $newValue += $dllPath Set-ItemProperty -Path $regPath -Name '(Default)' -Value $newValue -Force Write-Host "[+] 悪意のあるDLLを含むようにセキュリティパッケージのレジストリ値を変更しました。" # オプション: 再起動せずにLSASSがパッケージを再読み込みするようにする(依存サービスを再起動) Restart-Service -Name WinDefend -Force -ErrorAction SilentlyContinue Write-Host "[+] サービスの再起動を要求し、LSASS再読み込みを誘発しました。" # ログ収集を許可するために一時停止 Start-Sleep -Seconds 10 # 元の値を復元(クリーンアップステップを別途実行) -
クリーンアップコマンド:
# ------------------------------------------------- # シミュレーション後のクリーンアップ # ------------------------------------------------- $regPath = 'HKLM:SYSTEMCurrentControlSetControlLsaSecurity Packages' # 以前にキャプチャした元のマルチ文字列値を復元(あれば) if ($original) { Set-ItemProperty -Path $regPath -Name '(Default)' -Value $original -Force } else { # 元々空の場合は値を完全に削除 Remove-ItemProperty -Path $regPath -Name '(Default)' -Force -ErrorAction SilentlyContinue } Write-Host "[+] 元のセキュリティパッケージレジストリ値を復元しました。" # ダミーDLLを削除 Remove-Item -Path "$env:USERPROFILEDesktopmaliciousLSASS.dll" -Force -ErrorAction SilentlyContinue Write-Host "[+] 一時的な悪意のあるDLLを削除しました。" # オプション: LSASSの状態を完全にリセットするためにホストを再起動(テストでは不要) # Restart-Computer -Force