Archive for Dezember, 2009

ICMPv6 Challenge - Antworten

13. Dezember 2009

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.

IP Lookup Completed

10. Dezember 2009

Just finished ein neues Tool namens IP Lookup, dass ich den Apple App Store eingereicht. Mit etwas Glück wird es das Licht der Welt in der nächsten Woche oder so sehen.

Ich weiß, es gibt viele TCP / UDP-Port Referenzen gibt. Ich habe versucht, dass es das Beste vollständige Liste zur Verfügung. Derzeit gibt es über 12.000 Einträge und ich bin immer noch wachsenden Liste.

Eines der Features, die ich wirklich bin total aufgedreht ist die Echtzeit-Suche. Wie Sie in dem, was du suchst eingeben, wird die Liste in Echtzeit gefiltert, so dass Sie die Ergebnisse sehen können.

screenshot-2

Weitere Informationen finden Sie auf meiner gefunden werden Mobile Security Hack Website.

Und nun zurück zu Ihrem privaten Free Lehrmaterial. ;)

ICMPv6 Challenge - Hinweise

9. Dezember 2009

OK, hier ist ein Hinweis auf die Sie in die richtige Richtung weisen.

Die Herausforderung war: "Schreiben Sie eine tcpdump / WinDump Filter, ICMPv6 Multicast Listener Pakete erfassen wird."

Klingt einfach, nicht wahr?

Mit ein wenig Hilfe von Google finden Sie, dass der "Typ" für Multicast Listener 130 ist, und die ICMPv6 Typ-Feld wird das erste Byte in der Kopfzeile. So sollte dies so einfach sein wie:

tcpdump-nn-p-v-s 0 icmp6 [0] = 130

wenn Sie den Befehl ausführen Sie zurück zu bekommen:

tcpdump: IPv6 Protokoll der oberen Schicht wird nicht durch proto [x] unterstützt

Mit anderen Worten, können Sie mit "icmp6", um alle ICMPv6 Pakete zu sehen, aber Sie können nicht verwenden, um auf einem der ICMPv6-Header-Felder zu filtern.

Also brauchen wir einen "Plan B". Finde heraus, Plan B und du hast die Herausforderung gelöst. :)

ICMPv6 Herausforderung

4. Dezember 2009

Aufbauend auf den IPv6 Herausforderung vom letzten Mal habe ich ein neues für Sie: Schreiben Sie eine tcpdump / WinDump Filter, ICMPv6 Multicast Listener Pakete erfassen wird.

Das ist es! Ziemlich einfach, oder? ;)

Weekend Challenge - Antworten

3. Dezember 2009

Nun, es ist jetzt Donnerstag so dass ich dachte seine Zeit, um die Antworten auf letzte Wochenende der Herausforderung Beitrag. ;)

Erstens, warum sollte man auch über IPv6 egal, ob du nicht angefangen haben, setzt es? Ich fühlte mich viel die gleiche Weise, bis ich IPv6 als eine verdeckte Kommunikationskanal innerhalb eines Client-Netzwerk verwendet gefunden. Die Daten wurden dann durchgeführt, um die Internet via Teredo geschoben. Wenn Sie nicht vertraut mit der Technik sind, hat Scott Hogg einige hervorragende Beiträge zum Thema.

Also selbst wenn Sie derzeit nicht über IPv6, lohnt es sich, fang an zu schneiden die Heilung auf die Technologie als auch gerade für sie in Ihrem lokalen Netzwerk.

So zu überprüfen, war die Herausforderung:

Schreiben Sie eine tcpdump oder WinDump Filter, der den gesamten Datenverkehr mit einer IPv6-Quelladresse des Jahres 2001 wird zu erfassen: db8:: 10 bis 2001: db8:: 20.

Es gibt ein paar Einschränkungen mit dem Schreiben dieses Filters. Die ersten paar deckte ich in den letzten Beitrag. Die letzte, die ich kannte, aber nie wirklich gedacht, war ein Problem, bis ich die Arbeit mit IPv6 ziemlich stark begonnen, ist, dass tcpdump / WinDump nur lassen Sie 1, 2 oder 4 Byte Masken. Während wir also lieben würde, dies mit einer ersten Filter Aussage "ip6 [08.14] =" zu lösen, können wir nicht, weil wir zu 4 Byte begrenzt. Es gibt in der Tat eine Möglichkeit, dies zu umgehen, aber ich werde darauf zurückkommen.

Also hier ist der Filter, mit denen ich gearbeitet habe:

(Ip6 [08.04] = 0x20010db8 und ip6 [12.04] = 0 und ip6 [16.04] = 0 und (ip6 [20.04]> = 0 × 0010 und ip6 [20.04] <= 0050 ))

Bit lang, aber es funktioniert. Elizabeth kam mit einer Lösung, die viel eleganter als meine eigene ist:

src net 2001: db8:: / 122 und ip6 [23]> = 0 × 10 & & ip6 [23] <= 0 × 20

So, indem Sie mit der Libpcap Format, sie ist in der Lage, meine ersten drei Aussagen miteinander zu kombinieren. Nicht zu einer Größe Königin sein, aber das macht ihre Lösung ist viel kürzer als die meinige. In diesem Fall ist das eine gute Sache. :)

Das ist alles. Ich werde nach einem anderen IPv6-Typ Herausforderung von morgen.

Call Me Crazy ...

1. Dezember 2009

aber ich habe beschlossen, ein Podcast mit dem PaulDotCom Mannschaft zu tun. Oh lass den Wahnsinn ergeben.

Es wird an diesem Freitag werden um 8:30 EST. Weitere Details finden Sie hier:

http://www.pauldotcom.com/

Wenn Sie noch nie in haben abgestimmt, haben Sie keine Ahnung, was Sie vermissen. Sicher Netzwerksicherheit ist eine ernste Angelegenheit, aber man muss einen Sinn für Humor aus über den Rand zu halten. Die Podcasts sind eine gute Quelle für Nachrichten und Informationen mit einer guten Mischung aus Lachen auf der Seite hinzugefügt. Think "Monty Python meets Dick Cheney ... mit Bier" und Sie bekommen die Idee zu bekommen. ;)

Hoffe, Sie in tune!

Weekend Challenge - Tipps

1. Dezember 2009

Wow, ist das Zirpen der Grillen ohrenbetäubend. Sicherlich hat jemand die Fähigkeiten, die uns durch dieses Dilemma zu bekommen? ;)

OK, einige Hinweise Sie durch die Herausforderung zu bekommen. Beginnen wir mit der Lösung dieses wie eine IPv4-Adresse zu starten und dann werden wir unseren Weg in IPv6 arbeiten. Nehmen Sie den Adressbereich wollen wir erfassen ist 192.168.1.10 - 192.168.1.20. Das große Problem ist die IPs nicht auf einer geraden Byte-Grenze. Wir könnten etwas tun:

src net 192.168.1.0/27

aber das würde uns Adressen von 0,0 bis 0,31, mehr IPs als wir eigentlich sehen wollte. Zur Lösung dieses Problems werden wir brauchen, um einige Operatoren und Primitiven verwenden. Eine Möglichkeit ist:

(Ip [12] = 192 und ip [13] = 168 und ip [14] = 1 und (ip [15]> = 10 und ip [15] <= 20))

Beginnend mit dem innersten Klammern, liest die obige Aussage "Byte 15 muss größer als oder gleich 10, aber es muss auch weniger als oder gleich 20 ist. Wenn diese Aussage wahr ist, stellen Sie sicher, Byte 12 ist gleich 192, wird Byte 13 gleich 168 und Byte 14 ist gleich 1 ist. "

Können wir verkürzen dieser Ausdruck? Absolut! Zuerst müssen wir es aber Hex umwandeln. Warum Hex? Wenn ich eine Aussage wie schreiben "ip [12.02] =" tcpdump davon aus, dass das Ergebnis einer 16-Bit-Zahl, nicht zwei 8-Bit-Zahlen. Aus diesem Grund können Sie so etwas wie "tcp [2:2] = 12345" zu schreiben und zu arbeiten. tcpdump wandelt die zwei Bytes zu einem 16-Bit-Wert und vergleicht sie gegen den Wert, den Sie angegeben. Durch die Umstellung auf Hex wir dieses Problem zu vermeiden. Also:

192.168.1.10 = 0xC0A8010A

192.168.1.20 = 0xC0A80120

Jetzt schreiben wir einfach unser Ausdruck:

ip [12.04]> = 0xC0A8010A und ip [0.04] <= 0xC0A80120

Das ist alles dort ist zu ihm.

Während IPv4 verwendet 4-Byte-Adressen verwendet IPv6 16 Byte. Da die Adressen so lang sind, schreiben wir sie in Hex, um Speicherplatz zu sparen. So die Adressen Ich habe Ihnen in der Herausforderung waren:

2001:0 db8: 0000:0000:0000:0000:0000:0010

2001:0 db8: 0000:0000:0000:0000:0000:0020

Beachte, dass ich zunächst nicht schreiben sie auf diese Weise. Es gibt ein paar Konventionen, die Sie verwenden, um Platz zu sparen kann beim Schreiben einer IPv6-Adresse. Erstens können wir abschneiden führenden Nullen. Also:

2001:0 db8: 0000:0000:0000:0000:0000:0010

wird:

2001: db8: 0000:0000:0000:0000:0000:10

Jetzt sehen alle, die Nullen in der Mitte? Wir können hacken Sie sie auch. Wenn Sie sehen "::" das bedeutet, in diesem Raum mit genügend Nullen füllen, um die Adresse wieder zu erweitern out bis 16 Byte. So in dieser Trick auch hinzufügen, und wir bekommen:

2001: db8:: 10

Weit einfacher zu schreiben. Der Nachteil ist, kann man nur entfernen Sie eine Gruppe von Nullen mit dem doppelten Doppelpunkt Trick. Betrachten Sie die folgende Adresse:

2001:: 1234:: 10

Wir haben keine Ahnung, wo die Byte-Reihenfolge statt "1234" in der Adresse. Es beginnen überall von Byte 6 bis Byte 12.

Bei der Arbeit mit IPv4 verwenden tcpdump und WinDump das Protokoll Stichwort "ip", wie in den obigen Beispielen gezeigt. Die IPv6 Kompliment, das "ip6". Wo ist die Quell-Adresse Feld im IPv6-Header? Nun, ich kann Ihnen nicht alles beantwortet, oder es ist nicht mehr eine "Herausforderung" :)