1. ホーム
  2. networking

[解決済み] 未知の拡張子を含むIPv6拡張ヘッダのパース

2022-09-20 07:10:45

質問

私は非常に単純なネットフィルターを書いていて、ICMPv6 タイプ、TCP/UDP ポート番号などのようなものに一致するように IPv6 ヘッダーを解析したいところに到達しています。

そこで、私は IPv6 パケットの形式 を深く読んでいるのですが、なんだか...その...。何度も何度も読み返して、自分が本当に正しく読んでいるのか確認したようなものです。 40バイトの固定ヘッダーから始めて、その次のヘッダーフィールドを見なければならないようです。そして、次のヘッダの次のヘッダフィールドを見るというように、リンクリストのように最後まで見なければならないのです。もしペイロードがあれば、それは後に続きます。

問題は、固定ヘッダにも拡張ヘッダにも長さのフィールドがないことです。このリンクリストを最後まで追いかけることができるように、拡張ヘッダーの種類とそのサイズのテーブルを用意しなければなりません。

これは奇妙な、おそらくは無謀な設計だと思います。認識できない拡張ヘッダー タイプに遭遇した場合はどうすればよいでしょうか。どうしたらよいでしょうか。私はその長さを知りません。ネットフィルタがパケットを許可すると、攻撃者が偽のヘッダタイプを含めることによってネットフィルタを回避することを許してしまうので、私はパケットを投げ出してブロックしなければならないのでしょう。 しかし、それは、プロトコルが拡張された場合、新しい拡張を使用するために、これまでに書かれた IPv6 ヘッダー解析ソフトウェアのひとつひとつが同時に更新されなければならないことを意味します。

では、使用している拡張子を知らない場合、どのようにIPv6ヘッダーを解析すればよいのでしょうか。その長さを知らないので、未知の拡張子のヘッダーをスキップするにはどうしたらよいでしょうか?

どのように解決するのですか?

解析できないものに遭遇した場合、すでに解析したものをもとに判断したり、行動を起こしたりしなければなりません。

IPv6 では、各拡張ヘッダーがパケットの残りの部分を "ラップ"するので、デザインはそのようになります。ルーティング ヘッダー、聞いたことのないヘッダー、ペイロードの順に表示された場合、ペイロードを解析することはできません。ペイロードの意味は、原則的に、解釈する方法がわからないヘッダーに依存します。

ルーターはそのようなパケットをルーティングすることができますが、それは彼らが必要とするのはルーティングヘッダだけだからです。ディープ パケット インスペクション ガジェットなどは多くのことを知る必要がありますが、それはいずれにせよ彼らの宿命です。

追加で編集しました。この設計は、ミドルボックスは自分が知っていることだけを変更できることを意味します。もしミドルボックスが知らないヘッダーを見つけたら、2 つのオプションしかありません。拒否するか、パスするかです。IPv4では、未知の拡張を削除し、残りを渡すこともできます。IMO では、この特性により、設計が拡張可能でなくなるのではなく、むしろ拡張可能になります。