[前に戻る: 実行時オプション]
[目次]
[次に進む: アンカーと名前付き (サブ) ルールセット]
PF: スクラブ (scrub: パケットの正規化)
目次
はじめに
「スクラブ (scrub)」とは、パケットの通常化を行うことですので、
パケットの最終目的地における (用語の) 解釈に一切の不明確さはありません。
scrub ディレクティブはまた、フラグメント (分断) 化されたパケットの再構成を行い、
ある種の形態の攻撃からいくつかのオペレーティングシステムを保護し、正しくない
フラグの組み合わせを持つ TCP
パケットを廃棄します。scrub ディレクティブの単純な形式は次のとおりです。
scrub in all
これはすべてのインターフェイス上の着信パケットに対してスクラブを行います。
あるインターフェイスに対してスクラブを行わないひとつの理由に、それが PF を通じて NFS を通すかどうか、
というのがあります。ある種の、OpenBSD ではないプラットフォームは、"フラグメント禁止" ビットをセットしているのに、
フラグメント化されているという、奇妙なパケットを送信 (そしてそれを期待) しますが、このパケットは
scrub によって、(適正に) 拒絶されます。これは、no-df オプションを使用することで
解決することができます。もうひとつの理由としては、いくつかの複数プレイヤー用ゲームを、scrub
が有効化された PF を通じてわたされると、接続上の問題が生ずる、というものです。
このような、あまり普通とは言えないような場合を除いて、すべてのパケットに対してスクラブを行うことは
強く推奨される行為です。
scrub ディレクティブのシンタクスは、フィルタリング
のシンタクスに非常によく似ており、このため、ある種のパケットに対して選択的にスクラブを行い、
他のパケットに対しては行わないようにしたりすることを簡単に実施することができます。
スクラブの原理や考え方についてのより詳しいことは、論文
Network Intrusion Detection: Evasion, Traffic Normalization, and
End-to-End Protocol Semantics を参照してください。
オプション
scrub には以下のようなオプションがあります。
- no-df
- フラグメント禁止ビットを IP パケットのヘッダから除去します。
ある種のオペレーティングシステムは、フラグメント禁止ビットをセットしているにも関わらず、
フラグメント化したパケットを生成することが知られています。これは、特に NFS
で真になります。scrub は、このようなパケットを no-df オプションが
指定されていない限り廃棄します。いくつかのオペレーティングシステムは IP
識別ヘッダフィールドのない、フラグメント禁止パケットを生成するので、
no-df を random-id とともに使用することを
推奨します。
- random-id
- IP 識別フィールドに予測可能な値を使用するオペレーティングシステムのために、
送出パケットの IP 識別フィールドの値をランダムな値で置換します。
このオプションは、オプショナルなパケットの再構成後の
フラグメント化されていない送出パケットに対してのみ適用されます。
- min-ttl num
- IP パケットヘッダ中の Time To Live (TTL) の値として
最小値を強制適用します。
- max-mss num
- TCP パケットヘッダ中の Maximum Segment Size (MSS) の値として
最大値を強制適用します。
- fragment reassemble
- フラグメント化された着信パケットをバッファリングし、そしてそれを
フィルタエンジンにわたす前に完全なパケットに再構成するためにバッファリングします。
この優位性は、完全なパケットを扱わなければならないフィルタルールだけを使用したり、
フラグメントを無視したりできることです。また、この不利な点は、フラグメント化された
パケットをバッファリングするのに必要なメモリ量が増加してしまうということです。
これは、fragment オプションが指定されていない場合にはデフォルトの挙動となります。
これはまた、NAT で fragment オプションだけが指定されている場合も同様です。
- fragment crop
- 二重のフラグメントを廃棄したり、いかなる重複部分も除去したりします。
fragment reassemble とは異なり、フラグメントはバッファリング
されることなく、着信後、直ちにわたされます。
- fragment drop-ovl
- すべての二重、あるいは重複フラグメントは、
その後に着信する関連フラグメントも含めて廃棄されるということを除いて、
fragment crop と同様です。
- reassemble tcp
- TCP 接続の状態を保存した正規化
scrub reassemble tcp を使用する際に、
in/out の方向が指定されていないかも知れません。
以下のような正規化が実行されます。
- 接続のどちらの側も、その IP の TTL を減少させることは
許可されていません。これは、ファイアウォールに到達して、その
保持する接続に関する状態の情報に影響を及ぼし、送信先のホストに
到達する前に破棄されるようなパケットを送信してくる攻撃者から
防御するための対策です。すべてのパケットの TTL は、その接続で
確認された最大値まで増加させられます。
- TCP のパケットヘッダの
RFC1323
のタイムスタンプを、乱数を使用して変調します。これにより、観察者が
ホストのアップタイムを推定しようとしたり、NAT ゲートウェイの後に
どれくらいの数のホストが存在するのかを推測しようとするのを防止することができます。
例:
scrub in on fxp0 all fragment reassemble min-ttl 15 max-mss 1400
scrub in on fxp0 all no-df
scrub on fxp0 all reassemble tcp
[前に戻る: 実行時オプション]
[目次]
[次に進む: アンカーと名前付き (サブ) ルールセット]
www@openbsd.org
Originally [OpenBSD: scrub.html,v 1.8 ]
$Translation: scrub.html,v 1.10 2004/01/03 05:24:39 toshi Exp $
$OpenBSD: scrub.html,v 1.9 2004/01/04 22:47:55 horacio Exp $