Die Herausforderung war: "Schreiben Sie eine tcpdump / WinDump Filter, ICMPv6 Multicast Listener Pakete erfassen wird." Ich habe ein umfangreiches Schreiben auf, was die Antwort so komplex. Wenn Sie IPv6 und wissen wollen einfach nur die Antwort, bis zum Ende zu springen.
Zunächst einige Hintergrundinformationen
Steinar machte einige Bemerkungen zu den vorherigen Posts und war 100% auf Kurs. Wenn Sie sie lesen und dachte: "Wow, das ist wirklich chaotisch klingt", Sie verstehen die Tragweite des Problems als auch. ![]()
Protokoll Vs. Next Header-Feld
Mit IPv4 hatten wir die Optionen Feld. Dies könnte dazu führen, den IP-Header von 20 Byte bis so groß wie 60 Bytes in der Größe wachsen. Mit IPv6 gibt es nicht mehr ein Feld Optionen und der Header ist 40 Bytes eine feste Größe. Als Optionen erforderlich sind, verwenden wir Erweiterungs-Header, um sie zu identifizieren. Dies wirft eine interessante Kurve Ball an uns, weil mit IPv4 Protokoll-Feld (Byte 9) würde (fast) immer identifizieren die obere Ebene Transport (TCP, UDP, etc.). Mit IPv6 der nächsten Header-Feld (Byte 6) könnte identifizieren die obere Schicht transportieren, oder es könnte eine Erweiterung Header, die eine bestimmte Anzahl von Optionen umfassen wird zu identifizieren.
Hier ist eine Liste von einigen IPv6 Header-Erweiterung Sie den Weg laufen könnte, als auch die RFCs, dass sie zu definieren:
| Option # | Option Beschreibung | RFC |
| 0 | Hop-by-Hop | 2460 |
| 6 | TCP | 793 |
| 17 | UDP | 768 |
| 43 | Routing | 5095 |
| 44 | Zersplitterung | 2460 |
| 50 | ESP | 4303 |
| 51 | AH | 4302 |
| 58 | ICMPv6 | 4443 |
| 59 | Kein nächsten Header | 2460 |
| 60 | Zieloptionen | 2460 |
| 135 | Mobilität | 3775 |
IPv6 nicht die Anzahl der Erweiterungs-Header Sie in einem einzigen packet.There verwenden können, ist allerdings eine veröffentlichte "empfohlene Reihenfolge", wie die Header beschaffen sein müssen. Die Reihenfolge lautet:
- IPv6-Header
- Hop-by-Hop Options
- Routing Header
- Fragment Header
- AH
- ESP
- Destination Options
- Mobility-Header
- TCP/UDP/ICMPv6
Notieren Sie sich diese Liste ist "empfehlenswert", aber nicht zwingend. Ein IPv6-Host muss die Header in was auch immer damit waren sie empfangen werden. Das heißt, Sie werden wahrscheinlich feststellen, Anbieter im Anschluss an diese Liste aber nicht die Angreifer. Ich habe persönlich gesehen, Geräte handeln beginnen wirklich seltsam, wenn man mit dem Kopf, um Durcheinander. In der Tat habe ich über eine ganze Menge "IPv6 kompatibel Code", die nicht umgehen kann, wenn die bevorzugte Reihenfolge nicht verwendet wird laufen.
Chasing The Protocol Header
Also mit IPv6 können wir mehrere Header hinter dem IPv6-Header. Wenn das klingt wie ein neues Konzept, ist es eigentlich nicht. In der Tat haben Sie wahrscheinlich mit ihm arbeitete bereits. Wenn Sie IPSec Implementierung der beiden möglichen Sicherheits-Protokolle ESP und AH. Diese wurden tatsächlich von IPv6 geliehen und massiert, um auf IPv4 arbeiten. Beide AH-und ESP gehören eine Next Header-Feld zu identifizieren, welche Art von Paket sind sie protecting.This als Protokoll Verkettung bezeichnet wird, wie Sie effektiv mehrere Header sitzt hinter der Schicht 3-Protokoll-Header.
So um herauszufinden, was Obergeschoss Transport (TCP, UDP, etc.) verwendet wird, müssen Sie unter Umständen über mehrere Header suchen, bevor Sie die Antwort zu finden. Dies wird als "Jagd nach dem Header" genannt, und tcpdump / WinDump uns eine Filter-Option, um diese Aufgabe durchzuführen. Sie können fimiliar mit dem Proto-Filter. In der IPv4-Welt, wenn ich sage:
ip proto tcp
Das Filter liest "check byte 9 der IPv4-Header und, wenn der Wert gleich 6 (Protokoll für TCP), auf der Packung überein". Dieser Filter ist nicht so effektiv in der IPv6-Welt natürlich auch, weil Byte 6 der IPv6-Header der oberen Schicht Transport identifizieren könnten, oder es könnte nur identifizieren, eine optionale Erweiterung Header, die verwendet wird. Um dieses Problem zu lösen, wurde die protochain Filter eingeführt. Schreiben:
ip6 protochain tcp
Liest als "Check-Byte 6 der IPv6-Header, um zu sehen, wenn der Wert gleich 6 ist. Wenn Sie stattdessen ein Wert, der eine optionale Erweiterung Header identifiziert finden, überprüfen Sie die Verlängerung Header der nächsten Header-Feld für einen Wert von 6 Jahren. Wenn Sie mehrere optionale Erweiterungs-Header zu finden, immer wieder das letzte Test, bis Sie die letzte Erweiterung header "zu finden.
Ganz einfach auf Englisch zu schreiben, aber das ist ein Albtraum, in Code umzusetzen. Die meisten optionalen Erweiterungs-Header sind variabel in Länge, die nur erhöht die Komplexität. Ich habe einige Tests mit gemacht Scapy und man kann tatsächlich sehen, der Unterschied in der Leistung, wenn protochain aufgerufen wird. In der Tat könnte man wahrscheinlich einen ziemlich guten Job der Dosierung ein IDS / IPS mittels Pressen zu viel nutzlose Verlängerung Header verarbeiten.
Writing unseren Filter
So unser erstes Problem in schriftlicher Form die Herausforderung Filters ist, dass die ICMPv6 Header kann nicht richtig angezeigt, nachdem der IPv6-Header. Wir müssen aufpassen, für die Erweiterung Header. In der Tat RFC 2710 lautet: "Alle MLD-Nachrichten in diesem Dokument beschriebenen Produkte sind mit einem Link-lokale IPv6-Quell-Adresse, eine IPv6-Hop Limit von 1, und eine IPv6-Router Alert Option geschickt [RTR-ALERT] in einer Hop-by-Hop Options-Header. "Dies bedeutet, dass unsere Multicast Listener-Paket benötigt, um eine Hop-by-Hop Extension Header mit dem Router Alert Option gesetzt haben. In diesem Sinne sollte unser erstes überprüft werden:
ip6 protochain icmp6
Um zu gewährleisten, suchen wir nur an ICMPv6-Pakete. Jetzt ist es nur eine Frage der Kontrolle, ob der Typ-Feld (Byte 0) bis 130 (Multicast Listener Query) oder 131 (Multicast Listener-Bericht) gesetzt ist. Dies bringt uns zu unserem zweiten Problem jedoch. In der IPv4-Welt, die ich tun kann, a:
icmp [0] = <type Wert interest>
Wenn ich dies mit icmp6 bekomme ich die Meldung:
[Root @ fubar ~] # tcpdump-nn icmp6 [0] = 130
tcpdump: IPv6 Protokoll der oberen Schicht wird nicht durch proto [x] unterstützt
Mit anderen Worten, kann ich nicht verwenden Offsets mit icmp6 nach bestimmten Werten suchen. WinDump und tcpdump als IPv6 kompatibel beworben, aber erwarte nicht, dass alle die gleiche Funktionalität haben Sie mit IPv4 zu bekommen. YUCK!
Also, was sollen wir tun? Wir müssen zurückgreifen auf Referenzierung der Wert aus einer ip6 ausgeglichen. Mit anderen Worten, wir müssen über die IPv6-Header zu messen, durch die erforderlichen Hop-by-Hop-Header und in die ICMPv6-Header zu sehen, ob der Typ-Feld auf 130 oder 131 eingestellt wird. Einige Dinge zu berücksichtigen:
- IPv6-Header ist 40 Bytes in eine feste Größe
- Hop-by-Hop-Header ist variabel, aber 4 Bytes mit Router Alert gesetzt
- Das Typ-Feld ist Byte 0 im ICMPv6 Header
Hier ist also das, was wir am Ende mit:
ip6 protochain icmp6 und (ip6 [44] = 130 oder ip6 [44] = 131)
Puh! Wir finally got it! Oder haben wir?
Q: Was passiert, wenn das Paket über zusätzliche Header-Erweiterung?
A: Unser Filter wird nicht funktionieren.
Q: Was ist, wenn die Hop-by-Hop-Header hat mehr Optionen als Router Alert eingestellt?
A: Unser Filter wird nicht funktionieren.
Q: Können wir die beiden oben genannten Probleme?
A: Erst tcpdump / WinDump Filterung IF / THEN Schleife Unterstützung hinzu.
Wenn wir also in den normalen ML-Verkehr aufnehmen möchten, werden die oben genannten Filter funktionieren. Wenn wir aber zu versichern, wir fangen Angreifer Verschlagenheit sowie möchten, wird der Filter nicht zu fliegen.
Was ist, wenn wir versuchen, etwas wie dieses:
tcpdump-nn-s 1500-x ip6 protochain icmp6 | grep-i-Multicast> multicast.txt
und dann benutzen Sie einfach Wireshark ist text2cap Werkzeug, um es zu konvertieren Format Libpcap? Das Problem hier ist, werden wir bekommen nur die Header-Informationen. Grep passt auf die Zusammenfassung Linie, die das Wort "Multicast" enthält, aber dann überspringen alle Hex darunter die eigentliche Inhalt des Pakets ist.
So die endgültige Antwort ist: "Ich kann nicht Theyâ von Haya" ![]()
So was, wenn Sie wirklich brauchen, um in der Lage sein, um diesen Verkehr zu sehen? Bis Unterstützung für IPv6 reift, ist die einzige 100%-Methode, um alle ICMPv6 Verkehr zu packen und dann manuell durch sie zu sortieren.
Zumindest ist das meine Meinung. Wenn jemand tatsächlich kommen kann, mit einer 100% funktionierende Lösung, würde ich gerne davon hören.



