ペンテスターのためのImpacket: パスワード変更技術
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
この記事では、Active Directory の誤設定がどのように悪用され、Impacket ツールキットを使用してユーザーのパスワードが強制的にリセットされるかを説明します。特に、 impacket-changepasswd ユーティリティに注目し、Reset Password ACE を利用してアカウントの乗っ取りを可能にします。この技術は、SMB-SAMR、RPC-SAMR、LDAP、Kerberos などの複数のプロトコルをサポートしています。
調査
報告書は、あるユーザーに他のアカウントオブジェクトのリセットパスワード権限が付与されたラボのシナリオを提示します。プレーンテキストの資格情報、Pass-the-Hash、Pass-the-Key、Kerberos TGT キャッシュの利用を含む複数の認証アプローチを通じて、異なるプロトコルを介してアカウントのパスワードを操作します。
軽減策
ディフェンダーは、BloodHound などのツールを使用して、Active Directory ACL を定期的に監査し、許可制限が緩いリセットパスワード権限を特定する必要があります。階層型管理モデルの適用と、Protected Users セキュリティグループの使用は、大幅に被曝を減少させます。LDAP サイニングの適用と、Credential Guard の展開も推奨されます。
対応
疑わしい活動が検出された場合、セキュリティチームは Windows イベント ID 4723, 4724, 4738, 4771、および 5136を調査する必要があります。アナリストは、パスワードリセットが承認されたかどうかを確認し、SAMR トラフィックや LDAP ディレクトリの変更が異常であるかどうかを確認する必要があります。直ちに行うべき行動として、影響を受けたアカウントの権限を監査し、潜在的に危険な管理ユーザーの資格情報をローテーションすることが含まれます。
攻撃フロー
この部分はまだ更新中です。通知を受け取るために登録してください
通知を受け取るシミュレーション実行
必要条件: テレメトリおよびベースラインの事前フライトチェックが通過していること。
合理的根拠: このセクションでは、検出ルールをトリガーするために設計された敵の技術(TTP)の正確な実行を詳述します。コマンドおよび説明文は、特定された TTP に直接反映され、検出ロジックによって期待される正確なテレメトリを生成することを目的とします。抽象的または無関係な例は、誤診につながります。
-
攻撃の概要とコマンド: 攻撃者は、委任された権限を持つユーザーアカウントを成功裏に侵害したか、ドメイン管理者レベルに特権を昇格させました。長期間の持続性を確保し、後の操作フェーズでの検出を回避するために、攻撃者は既知のサービスアカウントのパスワードをリセットすることに決めました。ネイティブの PowerShell ツール(
Set-ADAccountPasswordornet user)を使用して、攻撃者はService_SVCのパスワードを変更しようとします。この行為は「Living off the Land」テクニックの典型であり、日常的な管理タスクと混ざり合うように設計されている一方で、検出ルールがキャッチする特定の Windows セキュリティイベント ID (4724/4738) をトリガーします。 -
回帰テストスクリプト:
# シミュレーションスクリプト: PowerShell を使用したパスワードリセット # 注意: 適切な権限を持つ管理されたラボ環境で実行する必要があります。 $TargetUser = "Service_SVC" Write-Host "[*] ターゲットユーザーが存在するか確認しています..." -ForegroundColor Cyan if (Get-ADUser -Filter "SamAccountName -eq '$TargetUser'") { Write-Host "[+] ターゲットユーザー $TargetUser を発見しました。パスワードリセットシミュレーションを進めます..." -ForegroundColor Green # イベント ID 4724 / 4738 を生成中 try { $NewPassword = ConvertTo-SecureString "SimulatedPass123!" -AsPlainText -Force Set-ADAccountPassword -Identity $TargetUser -NewPassword $NewPassword Write-Host "[+] 成功: パスワードリセットがトリガーされました。セキュリティログでイベント ID 4724/4738 を確認してください。" -ForegroundColor Green } catch { Write-Host "[-] エラー: パスワードをリセットできませんでした。管理者/認可ユーザーとして実行していることを確認してください。" -ForegroundColor Red Write-Error $_ } } else { Write-Host "[-] エラー: ターゲットユーザー $TargetUser が見つかりませんでした。まずユーザーを作成してください。" -ForegroundColor Red } -
クリーンアップコマンド:
# クリーンアップスクリプト: 元の状態に復元 $TargetUser = "Service_SVC" $OriginalPassword = ConvertTo-SecureString "Original_Safe_Pass_2025!" -AsPlainText -Force Write-Host "[*] $TargetUser の元のパスワードを復元中..." -ForegroundColor Cyan Set-ADAccountPassword -Identity $TargetUser -NewPassword $OriginalPassword Write-Host "[+] クリーンアップ完了。" -ForegroundColor Green