23 stycznia 2011

Wstęp do (nie)bezpieczeństwa IP Next Generation

Od wielu lat słyszymy już, że pula dostępnych adresów IP (w czwartej wersji tegoż protokołu) nieubłaganie wyczerpuje się. Zgodnie z niektórymi raportami organizacji IANA, sytuacja jest już co najmniej krytyczna. Niezależnie jednak od słuszności tego typu ocen i przewidywań, z pewnością już dziś warto zainteresować się protokołem IPv6. Spójrzmy więc na kilka praktycznych kwestii związanych z tematyką bezpieczeństwa IP Next Generation.

Protokół IPv6 (ang. Internet Protocol version 6), znany również jako IPNG (ang. Internet Protocol Next Generation), nie jest oczywiście niczym nowym, bowiem wyniki pierwszych prac nad tym standardem pojawiły się już w 1995 roku. Pomimo upływu wielu lat, wciąż na co dzień korzystamy jednak z IPv4, natomiast wiedza na temat IPv6 (nawet wśród osób zawodowo związanych z IT i/lub sieciami komputerowymi) jest zazwyczaj znikoma. Spójrzmy więc na kilka podstawowych informacji na temat internetowego protokołu nowej generacji oraz spróbujmy w sposób praktyczny rozpocząć własną przygodę z bezpieczeństwem IPv6.

Prace nad IPv6 rozpoczęły się przede wszystkim ze względu na problem małej ilości adresów obsługiwanych przez starą wersję protokołu. Otóż IPv4 wykorzystuje 32-bitowe adresowanie, co daje nam do dyspozycji (w praktyce nie wszystkie adresy możemy wykorzystać na potrzeby globalnej komunikacji) zaledwie nieco ponad 4 miliardy (2^32=4294967296) adresów. Problem ten ostatecznie ma rozwiązać 128-bitowe adresowanie zastosowane w IPv6, dzięki któremu otrzymujemy naprawdę ogromną (2^128) przestrzeń adresową. Pomijając dalsze nudne rozważania teoretyczne, przejdźmy do praktyki.

Adres IPv6 reprezentowany jest w postaci heksadecymalnej, z dwukropkiem co 16 bitów, np. 2001:0db8:0000:0000:0000:0000:1428:57ab. Dozwolone jest skrócenie jednego bloku zer (nie dotyczy zer na końcach sekcji) na podwójny dwukropek, początkowe zera w grupach również mogą być opuszczane, w związku z czym poniższe sposoby zapisu są prawidłowe i równoznaczne:
  • 2001:0db8:0000:0000:0000:0000:1428:57ab
  • 2001:0db8:0:0:0:0:1428:57ab
  • 2001:0db8:0:0::1428:57ab
  • 2001:0db8::1428:57ab
  • 2001:db8::1428:57ab
Adres IPv6 może zostać zapisany w notacji CIDR, np. 2002:0db8:1234::/48 (gdzie 48 oznacza prefiks). Jeżeli zaś zachodzi potrzeba podania portu docelowego (np. w adresie URL), adres IPv6 otaczany jest nawiasami kwadratowymi, przykładowo:
  • http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:443/
Skoro jednak nasz ISP nadal zapewnia nam adres oraz komunikację jedynie z wykorzystaniem IPv4, to w jaki sposób możemy już dziś wkroczyć do świata IPv6? Okazuje się, że jest to całkiem proste. Wystarczy tylko skorzystać z darmowej usługi utworzenia tunelu IPv4-IPv6. Przykładem takiej usługi jest Hurricane Electric Free IPv6 Tunnel. Po dokonaniu rejestracji, wszystko sprowadza się praktycznie do podania naszego publicznego adresu IPv4 (w celu pomyślnego utworzenia tunelu, wskazany przez nas interfejs sieciowy musi grzecznie odpowiadać na komunikaty ICMP Echo Request, czyli mówiąc po ludzku musi być pingowalny):
W taki oto prosty sposób powstanie nasz tunel:
Teraz musimy już tylko zachęcić nasz system operacyjny do skorzystania z tunelu. Przykładowo w Windows 7 osiągniemy to za pomocą następujących poleceń:

netsh interface teredo set state disabled
netsh interface ipv6 add v6v4tunnel IP6Tunnel 79.191.225.158 216.66.84.46
netsh interface ipv6 add address IP6Tunnel 2001:470:1f14:12a7::2
netsh interface ipv6 add route ::/0 IP6Tunnel 2001:470:1f14:12a7::1

Natomiast systemy spod znaku sympatycznego pingwina, powinny zadowolić się następującą sekwencją poleceń:

modprobe ipv6
ip tunnel add he-ipv6 mode sit remote 216.66.84.46 local 79.191.225.158 ttl 255
ip link set he-ipv6 up
ip addr add 2001:470:1f14:12a7::2/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip -f inet6 addr

W tej chwili powinniśmy już mieć kontakt ze światem IPv6, co możemy przetestować na przykładzie któregoś z adresów znalezionych tutaj.

Jak się okazuje, większość narzędzi znanych i wykorzystywanych przez osoby zainteresowane bezpieczeństwem systemów i sieci komputerowych, od dawna wspiera już IPv6. Spójrzmy na kilka prostych przykładów:
  • ping6 ipv6.google.com
  • ping -6 ipv6.google.com
  • nslookup -type=AAAA ipv6.google.com
  • nmap -PN -6 -p1-10000 ipv6.google.com
  • http://[2001:4860:800f::67]/ (w taki sposób należy wpisywać w przeglądarkach internetowych adresy IPv6)
Przy pomocy powyższych podstawowych narzędzi możemy przykładowo stwierdzić, że dany host za pośrednictwem IPv6 udostępnia całemu światu więcej rozmaitych usług w stosunku do usług dostępnych po IPv4 (np. w wyniku błędnej konfiguracji samego systemu lub reguł zapory), co może potencjalnie zostać wykorzystane przez intruza.

Dostępnych jest oczywiście również wiele bardziej zaawansowanych narzędzi. Przykładowo twórcy słynnej hydry (grupa The Hacker's Choice) udostępnili pod tym adresem cały pakiet interesujących i niedawno zaktualizowanych narzędzi do testowania bezpieczeństwa IPv6. Warto jednak zauważyć, że specyfika protokołu nowej generacji może znacznie utrudniać lub nawet uniemożliwiać niektóre testy bezpieczeństwa lub ataki. Wyobraźmy sobie przykładowo wykonanie zadania przeskanowania całego zakresu (lub choćby obszernego fragmentu) adresów IPv6!

Wszystkich, których temat bezpieczeństwa IPv6 naprawdę zainteresował, zachęcam ponadto do odwiedzenia witryny IPv6 Security, w ramach której Joe Klein zgromadził sporą dawkę interesujących informacji z tegoż zakresu. Warto również zainteresować się prezentacją z niedawnej konferencji 27th Chaos Communication Congress o wdzięcznym tytule Recent advances in IPv6 insecurities:


Na koniec zachęcam wszystkich czytelników do podzielenia się własnymi dotychczasowymi doświadczeniami z zakresu (nie)bezpieczeństwa IPv6!