Kerberos Double Hop Problem
Reading time: 9 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Introduction
Kerberosの「ダブルホップ」問題は、攻撃者が2つのホップを跨いでKerberos認証を使用しようとするときに発生します。例えば、PowerShell/WinRMを使用する場合です。
Kerberosを通じて認証が行われると、資格情報はメモリにキャッシュされません。したがって、mimikatzを実行しても、ユーザーがプロセスを実行していても、そのマシンにユーザーの資格情報は見つかりません。
これは、Kerberosで接続する際の手順が以下の通りだからです:
- User1が資格情報を提供し、ドメインコントローラーがUser1にKerberosのTGTを返します。
- User1がTGTを使用してServer1に接続するためのサービスチケットを要求します。
- User1がServer1に接続し、サービスチケットを提供します。
- Server1はUser1の資格情報やUser1のTGTをキャッシュしていません。したがって、Server1からUser1が2番目のサーバーにログインしようとすると、認証できません。
Unconstrained Delegation
PCで制約のない委任が有効になっている場合、これは発生しません。なぜなら、サーバーはアクセスする各ユーザーのTGTを取得するからです。さらに、制約のない委任が使用されると、そこからドメインコントローラーを侵害する可能性があります。
制約のない委任ページの詳細。
CredSSP
この問題を回避するもう一つの方法は、特に安全でない Credential Security Support Providerです。Microsoftによると:
CredSSP認証は、ローカルコンピュータからリモートコンピュータにユーザーの資格情報を委任します。この実践は、リモート操作のセキュリティリスクを高めます。リモートコンピュータが侵害された場合、資格情報が渡されると、その資格情報を使用してネットワークセッションを制御できます。
セキュリティ上の懸念から、CredSSPは本番システム、敏感なネットワーク、および同様の環境では無効にすることを強く推奨します。CredSSPが有効かどうかを確認するには、Get-WSManCredSSP
コマンドを実行できます。このコマンドはCredSSPの状態を確認することができ、WinRMが有効であればリモートで実行することも可能です。
Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
Get-WSManCredSSP
}
Workarounds
Invoke Command
ダブルホップの問題に対処するために、ネストされた Invoke-Command
を使用する方法が提示されています。これは問題を直接解決するものではありませんが、特別な設定を必要とせずに回避策を提供します。このアプローチでは、最初の攻撃マシンから実行されたPowerShellコマンドまたは最初のサーバーとの以前に確立されたPS-Sessionを通じて、二次サーバー上でコマンド(hostname
)を実行することができます。以下はその方法です:
$cred = Get-Credential ta\redsuit
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
}
代わりに、最初のサーバーとのPS-Sessionを確立し、Invoke-Command
を$cred
を使用して実行することが、タスクを中央集約するために推奨されます。
PSSession構成の登録
ダブルホップ問題を回避するための解決策は、Enter-PSSession
とともにRegister-PSSessionConfiguration
を使用することです。この方法はevil-winrm
とは異なるアプローチを必要とし、ダブルホップの制限を受けないセッションを可能にします。
Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username
Restart-Service WinRM
Enter-PSSession -ConfigurationName doublehopsess -ComputerName <pc_name> -Credential domain_name\username
klist
PortForwarding
中間ターゲットのローカル管理者にとって、ポートフォワーディングは最終サーバーにリクエストを送信することを可能にします。netsh
を使用して、フォワーディング用のルールを追加し、フォワードされたポートを許可するWindowsファイアウォールルールを追加できます。
netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446
winrs.exe
winrs.exe
は、WinRM リクエストを転送するために使用でき、PowerShell の監視が懸念される場合には、検出されにくいオプションとして機能する可能性があります。以下のコマンドは、その使用法を示しています:
winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname
OpenSSH
最初のサーバーにOpenSSHをインストールすることで、ダブルホップの問題に対する回避策が有効になり、特にジャンプボックスシナリオに役立ちます。この方法では、Windows用のOpenSSHのCLIインストールと設定が必要です。パスワード認証用に構成されると、これにより中間サーバーがユーザーの代わりにTGTを取得できるようになります。
OpenSSH インストール手順
- 最新のOpenSSHリリースzipをターゲットサーバーにダウンロードして移動します。
- 解凍して
Install-sshd.ps1
スクリプトを実行します。 - ポート22を開くためのファイアウォールルールを追加し、SSHサービスが実行中であることを確認します。
Connection reset
エラーを解決するには、OpenSSHディレクトリに対して全員が読み取りおよび実行アクセスを持つように権限を更新する必要があるかもしれません。
icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
References
- https://techcommunity.microsoft.com/t5/ask-the-directory-services-team/understanding-kerberos-double-hop/ba-p/395463?lightbox-message-images-395463=102145i720503211E78AC20
- https://posts.slayerlabs.com/double-hop/
- https://learn.microsoft.com/en-gb/archive/blogs/sergey_babkins_blog/another-solution-to-multi-hop-powershell-remoting
- https://4sysops.com/archives/solve-the-powershell-multi-hop-problem-without-using-credssp/
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。