14 KiB
Kerberosダブルホップ問題
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのスワッグを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
はじめに
Kerberosの「ダブルホップ」問題は、攻撃者がKerberos認証を使用して2つのホップを介して攻撃しようとした場合に発生します。たとえば、PowerShell/WinRMを使用する場合です。
Kerberosを介した認証が行われると、資格情報はメモリにキャッシュされません。したがって、mimikatzを実行しても、ユーザーの資格情報はマシンに存在しません。
これは、Kerberosで接続する場合の手順です。
- ユーザー1が資格情報を提供し、ドメインコントローラがユーザー1にKerberos TGTを返します。
- ユーザー1はTGTを使用して、Server1に接続するためのサービスチケットを要求します。
- ユーザー1はServer1に接続し、サービスチケットを提供します。
- Server1には、ユーザー1の資格情報やユーザー1のTGTがキャッシュされていません。そのため、Server1から2番目のサーバーにログインしようとすると、ユーザー1は認証できません。
制約のない委任
PCで制約のない委任が有効になっている場合、これは発生しません。なぜなら、サーバーはそれにアクセスする各ユーザーのTGTを取得するからです。さらに、制約のない委任が使用されている場合、それを介してドメインコントローラを侵害する可能性があります。
制約のない委任ページで詳細を確認してください。
CredSSP
この問題を回避するために、システム管理者に提案される別のオプションは、明らかに安全ではない Credential Security Support Providerです。CredSSPを有効にすることは、さまざまなフォーラムで何年も言及されてきた解決策です。Microsoftからの引用:
「CredSSP認証は、ユーザーの資格情報をローカルコンピュータからリモートコンピュータに委任します。この方法は、リモート操作のセキュリティリスクを増加させます。リモートコンピュータが侵害された場合、資格情報が渡されると、ネットワークセッションを制御するために資格情報が使用される可能性があります。」
本番システム、機密ネットワークなどでCredSSPが有効になっている場合は、無効にすることをお勧めします。CredSSPのステータスを確認する簡単な方法は、Get-WSManCredSSP
を実行することです。WinRMが有効になっている場合、リモートで実行することもできます。
Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
Get-WSManCredSSP
}
回避策
Invoke Command
この方法は、二重ホップの問題を「一緒に動作させる」方法であり、必ずしも解決するものではありません。構成に依存せず、攻撃ボックスから簡単に実行できます。基本的には**ネストされたInvoke-Command
**です。
これにより、2番目のサーバーで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
とともに実行することもできます。ただし、攻撃ボックスから実行することで、タスクを集中化することができます。
# From the WinRM connection
$pwd = ConvertTo-SecureString 'uiefgyvef$/E3' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
# Use "-Credential $cred" option in Powerview commands
PSSessionの構成を登録する
**evil-winrm
を使用する代わりに、Enter-PSSession
コマンドレットを使用することで、Register-PSSessionConfiguration
**を使用して再接続し、ダブルホップ問題をバイパスすることができます。
# Register a new PS Session configuration
Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username
# Restar WinRM
Restart-Service WinRM
# Get a PSSession
Enter-PSSession -ConfigurationName doublehopsess -ComputerName <pc_name> -Credential domain_name\username
# Check that in this case the TGT was sent and is in memory of the PSSession
klist
# In this session you won't have the double hop problem anymore
ポートフォワーディング
中間ターゲットであるbizintel: 10.35.8.17にローカル管理者権限があるため、リクエストを最終/3番目のサーバーであるsecdev: 10.35.8.23に送信するためのポートフォワーディングルールを追加できます。
netshを使用して、ワンライナーを作成してルールを追加できます。
netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
以下は、Kerberosのダブルホップ問題に関する内容です。
最初のサーバーはポート5446でリッスンし、ポート5985(WinRMとも呼ばれる)にリクエストを転送します。
次に、Windowsファイアウォールに穴を開けます。これは、迅速なnetshのワンライナーで行うこともできます。
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446
セッションを確立し、最初のサーバーに転送します。
winrs.exe
**winrs.exe
**を使用すると、WinRMのポートフォワーディングリクエストも動作するようです。PowerShellが監視されていることを認識している場合、これはより良いオプションです。以下のコマンドは、hostname
の結果として「secdev」を返します。
winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname
Invoke-Command
と同様に、攻撃者はシステムコマンドを引数として簡単にスクリプト化することができます。一般的なバッチスクリプトの例である_winrm.bat_:
OpenSSH
この方法では、最初のサーバーボックスにOpenSSHをインストールする必要があります。Windows用のOpenSSHのインストールは、完全にCLIで行うことができ、それほど時間もかかりません - さらに、マルウェアとして検出されることもありません!
もちろん、特定の状況では実現が困難であったり、手間がかかったり、一般的なOpSecのリスクがある場合もあります。
この方法は、ジャンプボックスのセットアップ時に特に有用です - それ以外のネットワークにアクセスできない状況で。SSH接続が確立されると、ユーザー/攻撃者はセグメント化されたネットワークに対して必要なだけNew-PSSession
を発行することができ、ダブルホップの問題に突入することなく処理することができます。
OpenSSHでパスワード認証を使用するように構成されている場合(キーまたはKerberosではなく)、ログオンタイプは8、つまり_ネットワーククリアテキストログオン_です。これはパスワードがクリアテキストで送信されることを意味するものではありません - 実際にはSSHによって暗号化されます。到着時には、認証パッケージを介してクリアテキストに復号化され、セッションのためのジューシーなTGTをさらに要求するためです!
これにより、中間サーバーはあなたの代わりにTGTを要求して取得し、中間サーバーにローカルに保存することができます。その後、セッションはこのTGTを使用して追加のサーバーに対して認証(PSリモート)することができます。
OpenSSHのインストールシナリオ
最新のOpenSSHリリースzipをgithubからダウンロードし、攻撃ボックスに移動させるか、直接ジャンプボックスにダウンロードします。
zipファイルを適当な場所に解凍します。次に、インストールスクリプトInstall-sshd.ps1
を実行します。
最後に、ポート22を開くためのファイアウォールルールを追加します。SSHサービスがインストールされていることを確認し、それらを起動します。これらのサービスは、SSHが動作するために実行されている必要があります。
Connection reset
エラーが表示される場合は、ルートのOpenSSHディレクトリでEveryone: Read & Executeを許可するために権限を更新してください。
icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
参考文献
- 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/
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンやHackTricksのPDFをダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。