Kerberos Double Hop Problem

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

はじめに

Kerberosの「ダブルホップ」問題は、Kerberos認証を2つのホップを介して、例えばPowerShell/WinRMを使用しようとするときに発生します。

Kerberosを介した認証が行われると、資格情報メモリにキャッシュされません。したがって、mimikatzを実行しても、ユーザーの資格情報をマシンで見つけることはできません。

これは、Kerberosで接続する際に次の手順が実行されるためです:

  1. User1が資格情報を提供し、ドメインコントローラーがUser1にKerberos TGTを返します。

  2. User1はTGTを使用してServer1に接続するためのサービスチケットを要求します。

  3. User1はServer1に接続し、サービスチケットを提供します。

  4. Server1にはUser1の資格情報やUser1のTGTがキャッシュされていないため、Server1から2番目のサーバーにログインしようとすると、認証できません

制約のない委任

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
}

回避策

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}
}

リモート PSSession の確立

最初のサーバーとの PS-Session を確立し、$cred を使用して Invoke-Command を実行することが、タスクを一元化するために提案されています。

PSSession 構成の登録

ダブルホップ問題をバイパスする解決策として、Register-PSSessionConfigurationEnter-PSSession を使用する方法があります。この方法は 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

ポートフォワーディング

中間ターゲットのローカル管理者の場合、ポートフォワーディングを使用してリクエストを最終サーバーに送信できます。 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のインストール手順

  1. 最新のOpenSSHリリースzipをダウンロードして、対象サーバーに移動します。

  2. zipファイルを解凍し、Install-sshd.ps1スクリプトを実行します。

  3. ポート22を開くためのファイアウォールルールを追加し、SSHサービスが実行されていることを確認します。

Connection resetエラーを解決するには、アクセス許可を更新してOpenSSHディレクトリで誰もが読み取りおよび実行アクセスを許可する必要がある場合があります。

icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T

参考

htARTE(HackTricks AWS Red Team Expert)を使用して、ゼロからヒーローまでAWSハッキングを学ぶ
  • サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンを入手したり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!

  • The PEASS Familyを発見し、独占的なNFTsコレクションをご覧ください

  • 公式PEASS&HackTricks swagを入手してください

  • 💬 Discordグループに参加するか、telegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。

  • ハッキングトリックを共有するために、hacktricks repo およびhacktricks-cloud repo にPRを提出してください。

Last updated