DHCPスプーフィングとは
DHCPスプーフィングとは、不正な端末がDHCPクライアントやDHCPサーバになりすまし、ネットワークに被害を与える攻撃のことです。
攻撃者が不正なDHCPクライアントになりすます場合、正規のDHCPサーバに対して大量のDHCP要求(DISCOVERやREQUEST)を送りつけ、アドレスプールを枯渇させて正常なユーザがIPアドレスを取得できなくなる恐れがあります。
一方で攻撃者が不正なDHCPサーバになりすます場合、正規クライアントが送信するDHCP要求に対して偽の応答を返し、誤ったデフォルトゲートウェイやDNSサーバを通知します。その結果、ユーザの通信は攻撃者の管理下に流され、盗聴や改ざんの危険が生じます。
特にDHCPリクエストはブロードキャストで送信されるため、同じVLAN内であれば攻撃者は容易に応答できてしまう点が脆弱性となります。
Catalystスイッチでのスプーフィング対策
Catalystスイッチでは、DHCPスプーフィングを含むなりすまし攻撃に対して以下の機能を提供しています。これらは連携して動作するため、基本的にDHCPスヌーピングを有効にすることが前提となります。DHCPスヌーピングが生成する「バインディングテーブル」を利用することで、各種検証が可能になります。
| 機能 | 防御対象 | 説明 |
|---|---|---|
| DHCPスヌーピング | 不正なDHCPクライアントやDHCPサーバ | DHCPメッセージを監視し、DHCPサーバになりすました不正な応答や、大量リクエストを制御 |
| IPソースガード | 不正な送信元IPアドレス | DHCPスヌーピングのバインディング情報を基に、ポートから送出されるIPパケットの送信元IPを検証 |
| Dynamic ARP Inspection(DAI) | 不正なARPリプライ | DHCPスヌーピングの情報を参照し、ARPメッセージの正当性を検証してARPスプーフィングを防止 |
これらを正しく組み合わせることで、DHCPスプーフィングだけでなく、関連するIPアドレスなりすまし攻撃やARPスプーフィングも防ぐことができます。
DHCPスヌーピングとは
DHCPスヌーピングは、ネットワーク機器(スイッチ)がDHCPのやり取りを監視して、不正なDHCPサーバによる攻撃を防ぐためのセキュリティ機能です。特に、クライアントが本来受け取るべき正しいIPアドレスを、なりすましサーバに奪われる「DHCPスプーフィング攻撃」を防ぐ目的で使われます。
スイッチでDHCPスヌーピングを有効化すると、ポートごとに「信頼できる」か「信頼できない」かを区別する設定を行います。
信頼できるポート(Trusted)
- 本物のDHCPサーバが接続されるポートを指します。
- このポートから送られてくるDHCPメッセージはすべて許可されます。
信頼できないポート(Untrusted)
- 通常のPCやスマホなど、DHCPクライアントが接続されるポートを指します。
- このポートから送られるのは「DHCP要求(IPアドレスが欲しいというリクエスト)」のみ許可されます。
- 万一、クライアントに偽装した端末が不正なDHCP応答を送信しても、スイッチが破棄するため被害は防げます。
ここでのポイントは、「DHCPサーバに通じるポートだけをTrustedにしておく」ことです。そうすれば他のポートでどんな機器が接続されても、正規のクライアントは正しくIPアドレスを取得でき、不正な応答はブロックされます。試験ではこの仕組みを押さえておくことが非常に重要です。
バインディングテーブルの仕組み
DHCPスヌーピングが有効なスイッチは、DHCPのやり取りを記録して「バインディングテーブル」と呼ばれる一覧を作成します。ここには以下の情報が記録されます。
- クライアントのMACアドレス
- 割り当てられたIPアドレス
- リースの種類(動的か静的か)
- VLAN番号
- クライアントが接続しているスイッチのポート番号
この情報を基にして、スイッチは「そのポートに接続されている端末が正しいIPアドレスを使っているか」を確認します。もし不一致があれば、その通信は破棄されます。つまり、DHCPスヌーピングは「正しいクライアントとIPアドレスの対応関係」を保証する役割も持っています。
DHCP Option 82
さらに発展的な仕組みとして「DHCP Option 82」があります。これはスイッチがDHCPメッセージを中継する際に、追加情報を付け加える機能です。
具体的には、クライアントから送られた「DHCP Discover」メッセージに、次のような情報を付与してサーバへ転送します。
- スイッチ自身のMACアドレス
- クライアントが接続されているポート番号
これによって、同じスイッチに複数の端末が接続されていたとしても、DHCPサーバ側で「どのポートからの要求か」を識別でき、より厳密な管理が可能になります。
DHCPスヌーピングの設定手順
DHCPスヌーピングを利用するには、まず機能をスイッチ全体で有効化し、その後対象となるVLANやポートごとに詳細設定を行います。ここでは試験に頻出する基本の設定と、理解を深めるための任意設定を順を追って解説します。
グローバル設定
まずはDHCPスヌーピング機能をスイッチ全体で有効化します。
(config)# ip dhcp snooping
次に、どのVLANでDHCPスヌーピングを動作させるかを指定します。
(config)# ip dhcp snooping vlan vlan-id [ smartlog ]
smartlog を付与すると、ドロップされたパケット情報をNetFlow収集装置へ送信できます。
さらに、DHCPメッセージに対して Option 82 の挿入や削除を行う機能を有効化します。
(config)# ip dhcp snooping information option
インターフェイス設定
初期状態では、すべてのインターフェイスが「信頼できない(Untrusted)」として扱われます。したがって、DHCPサーバが接続されるポートを「信頼できる(Trusted)」に変更する必要があります。
(config)# interface interface-id
(config-if)# ip dhcp snooping trust
この設定により、そのポートから送られるDHCP応答は有効と判断されます。
設定例
以下は VLAN100・200・300 に対してDHCPスヌーピングを有効にし、
- Fa0/1 をクライアント用のUntrustedポートに設定
- Gi0/1 をDHCPサーバ用のTrustedポートに設定
する例です。また、Fa0/1には1秒間あたりのDHCP要求を30パケットまでに制限する設定を追加しています。
SW1(config)# ip dhcp snooping
SW1(config)# ip dhcp snooping vlan 100,200,300
SW1(config)# ip dhcp snooping information option
SW1(config)# interface fastethernet 0/1
SW1(config-if)# switchport mode access
SW1(config-if)# switchport access vlan 100
SW1(config-if)# spanning-tree portfast
SW1(config-if)# ip dhcp snooping limit rate 30
SW1(config)# interface gigabitethernet 0/1
SW1(config-if)# switchport mode trunk
SW1(config-if)# switchport trunk allowed vlan 100,200,300
SW1(config-if)# ip dhcp snooping trust
確認コマンド
設定後は以下のコマンドで動作状況を確認します。
show ip dhcp snooping
→ 有効状態、対象VLAN、Trustedポートの確認show ip dhcp snooping binding
→ 学習済みのバインディングテーブルの確認show ip dhcp snooping statistics
→ ドロップ数などの統計情報を表示show ip dhcp snooping database
→ バインディングテーブルの詳細状態を確認
任意の追加設定
より強固な運用を行う場合は、以下の設定も利用されます。
- 送信元MACアドレスの検証
DHCPパケット内のクライアントアドレスと実際の送信元MACを照合する(デフォルトで有効)(config)# ip dhcp snooping verify mac-address - Option 82のリモートID変更
デフォルトではスイッチのMACアドレスが使われますが、任意の文字列やホスト名に変更可能(config)# ip dhcp snooping information option format remote-id hostname - Option 82付きのパケットを受け入れる集約スイッチ設定
(config)# ip dhcp snooping information option allow-untrusted - DHCP要求レートの制限(DoS攻撃対策)
(config-if)# ip dhcp snooping limit rate 30 - 回線IDのカスタマイズ
デフォルトはvlan-mod-port形式だが任意文字列に変更可能(config-if)# ip dhcp snooping vlan vlan-id information option format-type circuit-id string CUSTOM-ID
バインディングテーブルの永続化
DHCPスヌーピングのバインディングテーブルは動的に作成されますが、スイッチ再起動で消えてしまいます。これを防ぐためには DHCPスヌーピングデータベースエージェントを利用し、保存先URLを指定します。
(config)# ip dhcp snooping database flash:dhcp_snoop.txt
こうすることで、スイッチ再起動後もバインディング情報を引き継げます。