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