コンテンツにスキップ

NTLM relay(NTLM 中継)は、クライアントから受け取った NTLM 認証を別サービスへ転送し、転送先でそのクライアントの権限として認証させる攻撃手法です。パスワードや NT ハッシュ(NT hash)を直接盗むのではなく、進行中の challenge-response を中継します。

周辺の用語は次のように分けると整理しやすいです。

用語役割
ResponderLLMNR/NBT-NS/mDNS/WPAD/SMB/HTTP などに応答し、NetNTLMv2 response を取得する listener。
CoercerRPC interface などを使い、対象ホストから attacker 側へ outbound authentication を発生させるツール。
ntlmrelayxSMB/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 は attacker 側で SMB/HTTP server として待ち受け、受け取った NTLM を別の target service に転送します。

machine account --SMB NTLM--> attacker:445 / ntlmrelayx
ntlmrelayx --relay-----> ldaps://dc.example.local
LDAP modify --effect----> AD object attribute の変更

relay 先で何ができるかは、転送された account が relay 先サービス上で持つ権限に依存します。たとえば LDAP/LDAPS relay では、条件が揃うと computer object の RBCD(Resource-based Constrained Delegation)設定など、AD object attribute の変更につながります。

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 を優先できる構成に寄せる。