Parsen von IPv6-Erweiterungsheadern, die unbekannte Erweiterungen enthalten
Schreibe ich eine sehr einfache Netto-filter, und immer, wo ich will, um zu analysieren IPv6-Header übereinstimmen Dinge wie ICMPv6-Typen, TCP/UDP-port-Nummern, etc.
So, ich bin beim Lesen über die IPv6 Paket format in die Tiefe, und ich bin ein bisschen wie... naja... ich habe irgendwie gelesen hatte, es über und über erneut, um sicherzustellen, dass ich war tatsächlich Lesen es richtig.
Es scheint mir, dass Sie mit zu beginnen haben die 40-byte fixed-header und einen Blick auf seine next header-Feld. Dann haben Sie Blick auf das next header - Feld Nächster header, und so weiter, wie eine verknüpfte Liste, bis Sie das Ende erreichen. Wenn es die Nutzlast, wird es Folgen.
Das problem ist, dass es gibt keine Länge-Feld entweder in den festen Kopf oder das extension-Header. Sie haben eine Tabelle der extension header Typen und deren Größen, so dass Sie jagen diese Link-Liste am Ende.
Dies erscheint mir als eine seltsame, vielleicht auch eigenwilligen design. Was ist, wenn ich auf eine unbekannte extension-header geben? Was muss ich tun? Ich weiß nicht, seine Länge. Ich glaube, ich habe zu werfen das Paket aus und blockieren es, da in ein Netz-filter, so dass das Paket durch die ein Angreifer zu entziehen, das Netz filtern, indem Sie eine gefälschte header-Typ. Aber das bedeutet, dass, wenn das Protokoll wird immer erweitert, jedes einzelne Stück des IPv6-header-parsing-software, die jemals geschrieben werden müssen gleichzeitig aktualisiert, wenn die neue Erweiterung verwendet werden.
Also, wie kann ich analysieren, IPv6-Header, wenn ich nicht weiß die Erweiterungen Sie verwenden? Wie kann ich direkt einen header für eine unbekannte Erweiterung, da ich nicht weiß, seine Länge?
InformationsquelleAutor der Frage AdamIerymenko | 2013-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie laufen in etwas, das man nicht analysieren kann, müssen Sie Ihre Entscheidung treffen, oder führen Sie Ihre Aktion basierend auf dem, was Sie haben bereits analysiert.
Das design ist so, weil in IPv6 jede extension header "Packungen" den rest des Pakets. Wenn Sie den routing-header, dann ein paar header, die Sie noch nie gehört haben, dann wird die Nutzlast, dann kann man nicht Parsen der Nutzlast. Die Bedeutung der Nutzlast richtet sich im Prinzip auf den Kopf-Sie weiß nicht, wie zu interpretieren.
Router verlegen können solche Pakete, weil alles, was Sie brauchen, ist die routing-header. Deep packet inspection-Geräte und dergleichen müssen eine Menge zu wissen, aber das ist dann Ihr Schicksal sowieso.
Bearbeitet, um hinzufügen: Dieses design bedeutet, dass middleboxes können nur ändern, was Sie wissen. Wenn eine middlebox sieht ein Kopf-Sie weiß es nicht, dann hat es nur zwei Optionen: Ablehnen oder weitergeben. In IPv4, könnte es auch entfernen, das unbekannte Erweiterung und pass auf den rest. IMO diese Eigenschaft macht das design eher mehr als weniger erweiterbar.
InformationsquelleAutor der Antwort arnt
Vom RFC 2460:
InformationsquelleAutor der Antwort Oliver Charlesworth
Falsch, weil:
Nur der Ziel-host erlaubt ist zu verwerfen, die basierend auf unbekannte Header-Erweiterungen (mit einer Ausnahme erwähnt in die Frage, die Sie verlinkten)
Wenn Ihr neue header extension ist optional (es musste besser sein), erhalten Sie eine ICMP-Fehlermeldung darüber und können es erneut versuchen, ohne es.
InformationsquelleAutor der Antwort Andreas Klöckner
Update RFC 6564 deckt in diesem Fall. Es legt genau das Szenario, das Sie beschreiben, und legt ein format für jede neue extension-Header (falls überhaupt definiert), die middleboxes wie Ihr werden in der Lage sein, mit zu arbeiten, zumindest für einige Zeit.
Beachten Sie, dass es ist nicht beabsichtigt, zu erweitern, IPv6-durch die Schaffung neuer extension-Header, aber durch das hinzufügen von neuen Ziel-Optionen. Es sollte trivial sein, oder zumindest viel einfacher für Sie mit unbekanntem Ziel Optionen.
InformationsquelleAutor der Antwort Michael Hampton