Kerberos Double Hop Problem
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kerberosの「ダブルホップ」問題は、攻撃者が2つのホップを跨いで Kerberos認証を使用しようとする際に発生します。例えば、PowerShell/WinRMを使用する場合です。
Kerberosを通じて認証が行われると、資格情報はメモリにキャッシュされません。したがって、mimikatzを実行しても、ユーザーがプロセスを実行していても、そのマシン上でユーザーの資格情報を見つけることはできません。
これは、Kerberosで接続する際の手順が以下の通りだからです:
User1が資格情報を提供し、ドメインコントローラーがUser1にKerberosのTGTを返します。
User1がTGTを使用してServer1に接続するためのサービスチケットを要求します。
User1がServer1に接続し、サービスチケットを提供します。
Server1はUser1の資格情報やTGTをキャッシュしていないため、User1がServer1から別のサーバーにログインしようとすると、認証できません。
PCで制約のない委任が有効になっている場合、これは発生しません。なぜなら、サーバーはアクセスする各ユーザーのTGTを取得するからです。さらに、制約のない委任が使用されている場合、ドメインコントローラーを侵害する可能性があります。 制約のない委任のページでの詳細。
この問題を回避するもう一つの方法は、特に安全でない Credential Security Support Providerです。Microsoftによると:
CredSSP認証は、ローカルコンピュータからリモートコンピュータにユーザーの資格情報を委任します。この実践は、リモート操作のセキュリティリスクを高めます。リモートコンピュータが侵害された場合、資格情報が渡されると、その資格情報を使用してネットワークセッションを制御できます。
セキュリティ上の懸念から、CredSSPは本番システム、敏感なネットワーク、および同様の環境では無効にすることを強く推奨します。CredSSPが有効かどうかを確認するには、Get-WSManCredSSP
コマンドを実行できます。このコマンドはCredSSPの状態を確認することができ、WinRMが有効であればリモートで実行することも可能です。
ダブルホップの問題に対処するために、ネストされた Invoke-Command
を使用する方法が提示されています。これは問題を直接解決するものではありませんが、特別な設定を必要とせずに回避策を提供します。このアプローチでは、最初の攻撃マシンから実行されたPowerShellコマンドまたは最初のサーバーとの以前に確立されたPS-Sessionを通じて、二次サーバー上でコマンド(hostname
)を実行することができます。以下がその方法です:
代わりに、最初のサーバーとのPS-Sessionを確立し、Invoke-Command
を$cred
を使用して実行することが、タスクの中央集約に推奨されます。
ダブルホップ問題を回避するための解決策は、Enter-PSSession
と共にRegister-PSSessionConfiguration
を使用することです。この方法はevil-winrm
とは異なるアプローチを必要とし、ダブルホップの制限を受けないセッションを可能にします。
中間ターゲットのローカル管理者にとって、ポートフォワーディングはリクエストを最終サーバーに送信することを可能にします。netsh
を使用して、ポートフォワーディングのためのルールを追加し、転送されたポートを許可するWindowsファイアウォールルールを追加できます。
winrs.exe
は、WinRM リクエストを転送するために使用でき、PowerShell モニタリングが懸念される場合には、検出されにくいオプションとして機能する可能性があります。以下のコマンドは、その使用法を示しています:
最初のサーバーにOpenSSHをインストールすることで、ダブルホップの問題に対する回避策が有効になり、特にジャンプボックスシナリオに役立ちます。この方法では、Windows用のOpenSSHのCLIインストールと設定が必要です。パスワード認証用に設定されると、これにより中間サーバーがユーザーの代わりにTGTを取得できます。
最新のOpenSSHリリースzipをダウンロードしてターゲットサーバーに移動します。
解凍してInstall-sshd.ps1
スクリプトを実行します。
ポート22を開くためのファイアウォールルールを追加し、SSHサービスが実行中であることを確認します。
Connection reset
エラーを解決するには、OpenSSHディレクトリに対して全員が読み取りおよび実行アクセスを持つように権限を更新する必要があるかもしれません。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)