DHCPスヌーピングとは

DHCPスヌーピングは、レイヤ2スイッチでDHCPメッセージをチェックしてその整合性を確認するための機能です。DHCPスヌーピングによって、DHCPサーバを偽装するDHCPスプーフィングを防止できます。

スヌーピングは「覗き見る」という英単語「snooping」をカタカナ表記したものです。スプーフィングは「騙す」「なりすます」という英単語「spoofing」をカタカナ表記したものです。

DHCPスヌーピングの仕組み

DHCPスヌーピングを有効にすると、スイッチのインタフェースを2つの種類に分けます。

  • Trustポート
  • Untrustポート

Trustポートは、正規のDHCPサーバが接続されている方向のインタフェースです。Trustポートを設定で明示的に指定します。Trustポート以外のポートはUntrustポートになります。Untrustポートの先にはDHCPサーバが接続されているはずがないということになります。

Trustポートでは、DHCPメッセージのチェックを行いません。Untrustポートで受信したDHCPメッセージをすべてチェックします。DHCPスヌーピングの動作は、以下のように行います。

  • Untrustポートで受信するすべてのDHCPメッセージをチェックする
  • サーバから送信されるはずのOFFERとACKを破棄する
  • クライアントから送信されるDISCOVERのMACアドレスの整合性をチェックする
  • DHCPでリースされたIPアドレスとMACアドレスの対応をDHCPスヌーピングバインディングテーブルに保持する
図 DHCPスヌーピングの動作
図 DHCPスヌーピングの動作の概要

DISCOVERのMACアドレスのチェック

DISCOVERメッセージのMACアドレスの整合性のチェックについてもう少し詳しく見ておきましょう。UntrustポートでDHCPクライアントから送信されるDISCOVERのMACアドレスの整合性をチェックします。イーサネットヘッダの送信元MACアドレスとDISCOVERメッセージのclient hardware address(CHADDR)が一致しているかどうかです。一致していないと攻撃者が不正に作り出したDISCOVERメッセージとみなして破棄します。

図 MACアドレスの整合性チェック
図 MACアドレスの整合性チェック

DHCPスヌーピングバインディングテーブル

正規のDHCPサーバと正常にDHCPでIPアドレスなどを割り当てられると、レイヤ2スイッチのDHCPスヌーピングバインディングテーブルに割り当てたIPアドレスとMACアドレスの対応を保持します。

図 DHCPスヌーピングバインディングテーブル
図 DHCPスヌーピングバインディングテーブル

DHCPメッセージの制限

通常のレイヤ2スイッチはイーサネットヘッダのみを参照して、イーサネットフレームを転送します。その処理はハードウェア処理です。ところが、DHCPスヌーピングを有効にすると、DHCPメッセージの内容をチェックしなければいけなくなり、スイッチのCPUに負荷をかけてしまいます。多くのDHCPメッセージを送りつけて、スイッチのCPUに過剰な負荷をかける一種のDoS攻撃もあります。こうした過剰なDHCPメッセージに対応するために、受信するDHCPメッセージを制限します。

インタフェースで受信するDHCPメッセージのしきい値を設定します。しきい値を超えるDHCPメッセージを受信するとそのインタフェースをerr-disable状態にして、過剰なDHCPメッセージを受信しないようにできます。

図 DHCPメッセージの制限
図 DHCPメッセージの制限