DHCPスヌーピングの深淵:L2の信頼を再定義するパケットインスペクションの内部挙動
ネットワークエンジニアとして幾度となく修羅場をくぐり抜けてきた我々にとって、レイヤ2(L2)のブロードキャストドメインが持つ「性善説」ほど危ういものはない。
プラグ&プレイの利便性の裏で、ARPスプーフィングやDHCPスターベーション、そして最も静かに、しかし致命的にネットワークを蝕む「ローグDHCPサーバー(不正DHCPサーバー)」の脅威は、現代のエンタープライズネットワークにおいて決して無視できないリスクだ。
今回は、このL2の混沌に秩序をもたらすDHCPスヌーピング(DHCP Snooping)を取り上げる。単なる「Ciscoスイッチのセキュリティ機能の一つ」として片付けるにはあまりにももったいない、ASICレベルのパケット処理、バインディングデータベースの内部構造、そして実運用で踏み抜く地雷の回避策まで、プロトコルの深淵を覗いてみよう。
—
1. DHCPスヌーピングのアーキテクチャとパケットレベルの挙動
DHCPスヌーピングの本質は、L2スイッチのASIC(あるいはパケットプロセッサ)による動的なアクセス制御(Access Control)にある。
標準的なDHCPの4Wayハンドシェイク(DORA:Discover, Offer, Request, Acknowledge)を思い出してほしい。
1. DHCPDISCOVER(クライアントからブロードキャスト)
2. DOHCPOFFER(サーバーからユニキャストまたはブロードキャスト)
3. DHCPREQUEST(クライアントからブロードキャスト)
4. DHCPACK(サーバーからユニキャストまたはブロードキャスト)
このプロセスにおいて、攻撃者が自前のPCで軽快にDHCPサーバーデーモン(dnsmasqやWindows ServerのDHCPなど)を立ち上げ、ネットワーク内にDOHCPOFFERを撒き散らしたらどうなるか。クライアントは最速で応答した不正なサーバーからIPアドレスを取得し、デフォルトゲートウェイとして攻撃者のIPを設定されてしまう。いわゆる中間者攻撃(MitM)の完成だ。
信頼ポート(Trusted Port)と信頼不能ポート(Untrusted Port)の二分法
DHCPスヌーピングは、スイッチのポートを厳格に2つに分類する。
- 信頼ポート(Trusted Port): 正当なDHCPサーバーが接続されているアップリンクや、コアスイッチ間のトランクポート。すべてのDHCPメッセージの通過を許可する。
- 信頼不能ポート(Untrusted Port): エンドユーザーが接続するアクセスポート。ここから送信される
DHCPDISCOVERなどのリクエストは通過を許すが、サーバー側から返されるDOHCPOFFERやDHCPACKなどのレスポンスパケットが流れてきた瞬間、ハードウェアレベルで破棄(Drop)される。
しかし、防御はこれだけにとどまらない。DHCPスヌーピングが真価を発揮するのは、正当なDHCPACKを検知した際に生成される「DHCPスヌーピング・バインディング・データベース(DHCP Snooping Binding Database)」の構築にある。
—
2. 内部データベースと他のセキュリティ機能との共生
DHCPスヌーピングが捉えたトラフィックから、スイッチは以下の情報をメモリ上のデータベースにキャッシュする。
- クライアントのMACアドレス
- 割り当てられたIPアドレス
- リース期間(Lease Time)
- 該当ポート番号
- 所属VLAN ID
このデータベースは、単に「不正なDHCPサーバーを弾く」ためだけのものではない。IPソースガード(IP Source Guard: IPSG)やDAI(Dynamic ARP Inspection)といった、レイヤ2・レイヤ3のセキュリティスイート全体を駆動する「信頼の源泉(Single Source of Truth)」として機能する。
例えば、DAIはARPパケットの正当性を検証する際、ARPパケット内のIP-MACペアが、このDHCPスヌーピングデータベースに存在するかどうかをミリ秒単位で突合する。ここにエントリがないARPパケットは、ARPスプーフィングの踏み台とみなされて即座に破棄されるのだ。
—
3. 実践:Cisco IOS / Catalystスイッチにおける堅牢な設定実装
机上の空論はここまでにして、現場で即座に使えるプロダクションレベルの設定を見ていこう。
ここでは、一般的な企業ネットワーク(VLAN 10: データ用、VLAN 99: アップリンク/サーバー用)を想定したベストプラクティスを提示する。
!
! 1. グローバルでDHCPスヌーピングを有効化
ip dhcp snooping
!
! 2. 対象のVLANでスヌーピングをアクティブ化
ip dhcp snooping vlan 10,20,30
!
! 3. オプション82(リレーエージェント情報)の挿入動作の定義
! ※同一スイッチ配下のクライアント同士の場合、信頼不能ポートからの
! Option 82付きパケットをどう扱うかのポリシー(ここでは厳格にドロップ)
ip dhcp snooping information option strict-verify
!
! 4. アップリンクポート(正当なDHCPサーバー側)を信頼ポートに指定
interface GigabitEthernet0/1
description === Uplink to Core Switch / DHCP Server ===
switchport mode trunk
ip dhcp snooping trust
!
! 5. エンドユーザー向けアクセスポートの設定
interface range GigabitEthernet0/2 - 24
description === Access Ports for End-Users ===
switchport mode access
switchport access vlan 10
! - スヌーピングのレートリミットを設定(DHCPスターベーション攻撃対策)
! 1秒間に15パケットを超えるDHCPリクエストを検知した場合、ポートをエラードレイン(err-disable)にする
ip dhcp snooping limit rate 15
!
! 6. err-disableからの自動復帰タイマーの設定(必要に応じて)
errdisable recovery cause dhcp-snooping
errdisable recovery interval 300
!
ここで重要なのが、ip dhcp snooping limit rateの設定だ。悪意あるクライアントが数千の異なるMACアドレスを偽装してDHCPDISCOVERを連射し、スイッチのDHCPスヌーピング・テーブル(あるいはDHCPサーバーのプール)を枯渇させる「DHCPスターベーション攻撃」に対し、レートリミットは極めて有効な物理的防壁となる。
—
4. 現場で踏む地雷とトラブルシューティングの極意
完璧に見えるDHCPスヌーピングだが、実運用への導入時にはいくつかの「罠」が待ち受けている。プロトコルスペシャリストとしての経験則から、陥りがちなトラブルと対策を共有しよう。
トラップ1:無線APやレイヤ2スイッチ配下のクライアントがDHCP難民になる問題
ワイヤレスコントローラー(WLC)やカスケード接続されたエッジスイッチが途中に存在する場合、クライアントのMACアドレスとスイッチが直接認識するポートの間に「中継機器」が挟まる。
このとき、スイッチから見てすべてのトラフィックが単一のアップリンクポート(WLCやカスケードポート)経由に見えるため、DHCPスヌーピングが「あれ?このクライアント、どのポートに繋がっているんだ?」と混乱し、バインディングの整合性が崩れることがある。
対策:
中間にあるカスケードポートやWLC接続ポートもip dhcp snooping trustを設定し、さらに必要に応じてリレーエージェント情報(Option 82)の伝播を正しくハンドリングできるようにトポロジーを設計する。
トラップ2:DHCPバインディングデータベースの肥大化とメモリ枯渇
L2スイッチのASICやTCAM/CPUメモリは無限ではない。何千台ものIoTデバイスやゲストが頻繁に出入りする環境では、DHCPのリース切れ(Lease Expiry)に伴うデータベースのクリーンアップが追いつかず、メモリリークのような挙動を引き起こすことがある。
対策:
データベースのバックアップ先として、ネットワーク上のTFTPやFTPサーバーを指定し、スイッチのリロード後もバインディング情報を維持できるように永続化を図る。
! DHCPスヌーピングデータベースの外部エージェント設定例
ip dhcp snooping database flash:dhcp_snooping.db
ip dhcp snooping database write-delay 60
—
5. まとめ
DHCPスヌーピングは、単に「偽サーバーを追い出すための機能」ではない。それは、信頼性の低いレイヤ2セグメントにおいて、「誰がどのIPを所持しているか」というアイデンティティをハードウェアレベルで担保する、モダン・エンタープライズネットワークの基盤である。
パケットのライフサイクルを深く理解し、ASICの挙動に思いを馳せながら設計されたネットワークは、巧妙な内部不正やマルウェアの横展開をも許さない、揺るぎない堅牢性を手に入れる。
プロトコルの深淵を愛する者よ、あなたの足元のスイッチポートは、本当に信頼できる状態に設定されているだろうか? 今一度、コンフィグを見直してみる価値はあるはずだ。
コメント