ネットワークの「信頼」をハッキングから守る:DAI(Dynamic ARP Inspection)の深淵
ネットワークエンジニアとして現場に立っていると、OSI参照モデルの第2層(データリンク層)がいかに「性善説」で成り立っているかを痛感させられます。特にARP(Address Resolution Protocol)は、その最たる例です。
「俺がそのIPアドレスを持っているぞ」というARP応答を、ネットワーク機器が何の疑いもなく信じ込んでしまう。この脆弱性を突くのが「ARPスプーフィング(中間者攻撃)」です。通信を盗聴され、改ざんされ、最悪の場合はサービスダウンに追い込まれる。これを防ぐための切り札が、今回解説する DAI(Dynamic ARP Inspection) です。
—
DAIが解決する「ARPスプーフィング」の構造
ARPには「ステートフルな検証機能」がありません。攻撃者が自分をゲートウェイだと偽るARPパケットをネットワークに流すと、クライアントのARPキャッシュは簡単に書き換えられてしまいます。
DAIは、この「嘘つき」を見抜くために、DHCPスヌーピング(DHCP Snooping) によって構築された信頼できるデータベースを活用します。
1. DHCPスヌーピング: DHCPのやり取りを監視し、どのMACアドレスにどのIPが割り当てられたかをスイッチが学習する。
2. バインディングデータベース: その対応関係を「信頼できる情報源(Binding Database)」として保持する。
3. DAIの介入: 到着したARPパケットの「送信元IP」と「送信元MAC」をデータベースと照合し、一致しないパケットを即座に破棄(Drop)する。
—
実践:DAIを導入する現場のステップ
DAIを有効にするには、下準備としてDHCPスヌーピングが動作していることが大前提です。ここではCisco Catalyst環境を想定した構成例を紹介します。
1. DHCPスヌーピングとDAIの有効化
まずは、トラスト(信頼)境界の設定が重要です。アップリンク側のポートはDHCPサーバーやコアスイッチに繋がっているため、検査せずに通す「トラスト設定」を忘れてはいけません。
# DHCPスヌーピングを有効化
ip dhcp snooping
ip dhcp snooping vlan 10,20
# DAIを有効化
ip arp inspection vlan 10,20
# アップリンクポートは信頼する(ここを忘れると通信が死にます!)
interface GigabitEthernet0/1
ip dhcp snooping trust
ip arp inspection trust
2. 注意すべき「レート制限」の罠
DAIはCPUベースの処理であるため、ARPパケットが大量に流れるとスイッチのCPUが悲鳴を上げます。これを防ぐためにレート制限をかけるのが運用の鉄則です。
# アクセスポート(PC接続用)でのレート制限設定
interface GigabitEthernet0/2
# 1秒間に15パケットを超えたらポートをシャットダウンして保護する
ip arp inspection limit rate 15
—
開発エンジニアが知っておくべき「通信の揺らぎ」
インフラ担当でないエンジニアの方々も、Web APIの通信が突然断絶する原因としてDAIを意識しておくべきです。例えば、静的IPアドレスを固定で割り当てているサーバがネットワークに追加された場合、DHCPスヌーピングのデータベースに載っていないため、DAIによってすべてのARPが破棄され、疎通不能になります。
もし「サーバ間通信が突然通らなくなった」というトラブルに遭遇したら、以下の手順でトラブルシューティングを行ってください。
Pythonを用いたARP監視(簡易チェッカー)
ネットワーク内で異常なARPが発生していないか、あるいはDAIでブロックされているパケットを特定するために、scapy を使ってパケットをキャプチャしてみるのも有効です。
from scapy.all import sniff, ARP
def arp_monitor_callback(pkt):
if ARP in pkt and pkt[ARP].op == 2: # ARP応答のみ監視
print(f"ARP応答受信: {pkt[ARP].psrc} is at {pkt[ARP].hwsrc}")
# 特定のインターフェースでARPを監視し、なりすましの兆候を探る
sniff(filter="arp", store=0, prn=arp_monitor_callback, iface="eth0")
—
現場の教訓:運用で詰まらないために
最後に、僕が数々の現場で学んだ「DAI運用のコツ」を共有します。
- 静的IPの扱い: DHCPを使わないプリンタやサーバがある場合は、
ip arp inspection validate src-mac等のコマンドで詳細なチェックを調整するか、DHCPスヌーピングの静的バインディングを手動で追加してください。 - ログを監視する:
loggingを有効にして、どのMACが拒否されているかをSIEM等で可視化しましょう。攻撃の予兆を早期発見できます。 - 「とりあえず全許可」は厳禁: トラブルシューティング時に焦って
no ip arp inspection vlanを打つのは最終手段です。まずは特定のインターフェースでtrustを外して詳細を切り分けましょう。
ネットワークは「信頼」を前提に動いていますが、その信頼を裏付けるための「仕組み」を設計するのは我々エンジニアの役目です。DAIを正しく設定し、堅牢なレイヤー2環境を構築してください。
それでは、また次回の深淵でお会いしましょう。健闘を祈ります。
コメント