NTLM 中継と認証の強制
NTLM relay(NTLM 中継)は、クライアントから受け取った NTLM 認証を別サービスへ転送し、転送先でそのクライアントの権限として認証させる攻撃手法です。パスワードや NT ハッシュ(NT hash)を直接盗むのではなく、進行中の challenge-response を中継します。
周辺の用語は次のように分けると整理しやすいです。
| 用語 | 役割 |
|---|---|
| Responder | LLMNR/NBT-NS/mDNS/WPAD/SMB/HTTP などに応答し、NetNTLMv2 response を取得する listener。 |
| Coercer | RPC interface などを使い、対象ホストから attacker 側へ outbound authentication を発生させるツール。 |
| ntlmrelayx | SMB/HTTP などで NTLM を受け取り、LDAP/LDAPS/SMB/HTTP などの別サービスへ relay するツール。 |
Responder と名前解決のフォールバック
Section titled “Responder と名前解決のフォールバック”Windows は DNS で名前解決できない場合、構成によって LLMNR、NBT-NS、mDNS、WPAD などの fallback を使います。Responder はこれらの問い合わせに「その名前は自分だ」と応答し、対象に SMB/HTTP などで接続させます。
Windows host -> DNS で名前解決に失敗Windows host -> LLMNR/NBT-NS で周囲に問い合わせResponder -> 対象名は自分だと応答Windows host -> SMB/HTTP で接続Responder -> NetNTLMv2 response を取得Responder が成立するには、対象から listener へ通信が戻れる必要があります。同一 broadcast segment では LLMNR/NBT-NS が効きやすい一方、routed network や pivot 環境では、対象が到達できる listen address を選ぶことが重要です。
Coerced authentication は、対象ホストに UNC path(例: \\listener\share\file.txt)などを処理させ、対象自身の machine account(例: WEB01$)として outbound NTLM 認証を発生させる考え方です。
代表的な系統には PetitPotam、PrinterBug、DFSCoerce などがあります。いずれも「対象に attacker 側の path を開きに行かせる」という構造は似ています。
attacker -> RPC endpoint を呼び出すtarget -> \\listener\share へアクセスしようとするtarget -> listener に machine account として NTLM 認証するrelay -> 受け取った NTLM を別サービスへ転送するCoercer 側で ERROR_BAD_NETPATH や NO_AUTH_RECEIVED のような表示が出ても、別 method で認証が発生していることがあります。成功判断は、listener 側に目的の account が来たか、relay 先で認証が成功したかで行います。
ntlmrelayx が中継する場所
Section titled “ntlmrelayx が中継する場所”ntlmrelayx は attacker 側で SMB/HTTP server として待ち受け、受け取った NTLM を別の target service に転送します。
machine account --SMB NTLM--> attacker:445 / ntlmrelayxntlmrelayx --relay-----> ldaps://dc.example.localLDAP modify --effect----> AD object attribute の変更relay 先で何ができるかは、転送された account が relay 先サービス上で持つ権限に依存します。たとえば LDAP/LDAPS relay では、条件が揃うと computer object の RBCD(Resource-based Constrained Delegation)設定など、AD object attribute の変更につながります。
待ち受けアドレスの注意点
Section titled “待ち受けアドレスの注意点”coercer -l のような listener 指定は「target が接続し返す宛先」です。attacker から target へ届く IP ではなく、target から attacker へ戻れる IP を指定する必要があります。
確認ポイント:
- VPN の再接続後に古い tunnel IP を使っていないか。
- pivot 先から見える interface の IP を listener にしているか。
- port 445/80/8080 などが firewall や既存 service で塞がれていないか。
- HTTP/WebDAV relay の場合、対象側で WebClient service や proxy/firewall が通信を許すか。
- SMB relay の場合、relay 先で SMB signing が必須になっていないか。
- LLMNR/NBT-NS/WPAD など不要な名前解決 fallback を無効化する。
- SMB signing、LDAP signing、LDAP channel binding、Extended Protection for Authentication(EPA)を有効化する。
- 不要な RPC interface や Print Spooler など、coercion に使われやすい service を制限する。
- machine account の権限、RBCD、委任設定を棚卸しする。
- NTLM 認証の使用状況を監査し、Kerberos を優先できる構成に寄せる。

