ARPスプーフィングを無力化せよ:DAIとDHCPスヌーピングで築く「信頼のレイヤー2」
ネットワークエンジニアの諸君、今日もパケットの海を航海しているか?
大規模な社内LANやデータセンターで、突然の通信断や「なぜか特定のPCだけ通信が遅い」という謎の現象に悩まされたことはないだろうか。その犯人の多くは、ネットワークの常識を逆手に取った「ARPスプーフィング(ARPポイズニング)」だ。
今日は、そんな卑劣な中間者攻撃(MITM)を、スイッチの物理ポートレベルで封殺するDAI(Dynamic ARP Inspection)について、実務的な知見を交えて深掘りしていく。
—
1. なぜARPスプーフィングは「無敵」なのか
ARP(Address Resolution Protocol)というプロトコルは、インターネット黎明期の「信頼」を前提に設計された古き良き遺産だ。本来、ARP応答は「自分宛てのもの」を待つものだが、仕様上、「問われてもいないのに送りつけられたARP応答」を、ホストは律儀にキャッシュ(ARPテーブル)へ書き込んでしまう。
攻撃者はこれを利用する。デフォルトゲートウェイになりすました偽のARP応答をブロードキャストし、被害者のトラフィックを一度自分のPCに引き寄せる。これがMITMの入り口だ。この「性善説」に基づいた脆弱性を、どうやってネットワーク機器で制御するか。それがDAIの役割である。
—
2. DAIを支える「信頼の背骨」:DHCPスヌーピング
DAIは単独では機能しない。DAIは「このMACアドレスとIPアドレスのペアは本当に正しいのか?」を判断するために、DHCPスヌーピングバインディングデータベースという「正解リスト」を参照する。
DHCPスヌーピングを有効にすると、スイッチはDHCPのやり取り(DORAプロセス)を監視し、どのポートにどのIP/MACが割り当てられたかを記録する。DAIは、この記録と照合できないARPパケットを「不審者」として即座に破棄(ドロップ)するわけだ。
—
3. 実践:CiscoスイッチでのDAI構築プロセス
理論を語るだけでは現場は救えない。実際にCisco Catalystスイッチでの実装例を見ていこう。
手順1: DHCPスヌーピングの有効化
まずは信頼の基礎を固める。
! DHCPスヌーピングを有効化
ip dhcp snooping
! 該当VLANで有効化
ip dhcp snooping vlan 10,20
! アップリンク(信頼するポート)には必ず設定を忘れないこと!
interface GigabitEthernet0/1
description Uplink to Core Switch
ip dhcp snooping trust
手順2: DAIの有効化
次に、ARPの検閲を開始する。
! VLAN 10でDAIを有効化
ip arp inspection vlan 10
! アップリンクポートはARPパケットも信頼する
interface GigabitEthernet0/1
ip arp inspection trust
この設定を入れた瞬間、DHCPでIPを取得していない端末や、勝手に静的IPを割り振った端末からのARPパケットは、スイッチによって即座にブロックされる。
—
4. Webエンジニアが知るべき「検証」の作法
インフラ運用の現場では、DAIが有効な環境でサーバーを立てる際、意図せず通信がブロックされることがある。そんな時、curlやPythonを使って疎通確認を試みる前に、まずはスイッチ側でパケットが「落とされていないか」を確認する手順が不可欠だ。
スイッチ側のデバッグコマンド
DAIでパケットがドロップされたかどうかは、以下のコマンドで一目瞭然だ。
# 破棄されたパケット数を確認する
show ip arp inspection statistics
もし Dropped のカウンターが増えていたら、それは間違いなくDAIによるブロックだ。その場合、以下の手順で原因を切り分ける。
1. クライアントがDHCPでIPを取っているか? (静的IPの場合は arp access-list で許可リストを作る必要がある)
2. スイッチのバインディングテーブルに登録されているか? (show ip dhcp snooping binding)
Pythonによる簡単なARPスキャン(実験用)
攻撃者がどのようなパケットを送るのか、Scapyなどのライブラリを使って挙動を理解しておくことも重要だ。
from scapy.all import ARP, send
# 偽のゲートウェイ情報を送りつける(悪用厳禁)
# 攻撃対象のIP: 192.168.1.5, ゲートウェイ: 192.168.1.1
packet = ARP(op=2, pdst="192.168.1.5", psrc="192.168.1.1", hwdst="AA:BB:CC:DD:EE:FF")
send(packet)
このようなパケットを投げた際、DAIが有効なポートであれば、スイッチは容赦なくこのパケットを破棄し、管理者にログを出力してくれるはずだ。
—
現場のエンジニアへのアドバイス
DAIを導入すると、確かにネットワークは強固になる。しかし、「信頼できるポート(trust)」の設定を忘れると、ネットワーク全体が孤立するという恐怖のダウンタイムが待っている。
1. 段階的な導入: まずは ip arp inspection logging dhcp-drop を有効にし、ログを見ながら徐々に適用範囲を広げること。
2. 静的IPの扱い: サーバーやプリンタなど、固定IP運用の機器には arp access-list を作成し、明示的に許可を与えること。
ネットワークは「魔術」ではない。パケットという名の事実が、設定ファイルというルールに従って流れているだけだ。仕様書の行間を読み、現場のログを信じろ。そうすれば、どんな難解なトラブルも必ず解き明かせるはずだ。
また次回の「深淵」で会おう。健闘を祈る。
コメント