IPv6 RA DoS: “Ranjivost” koju je Microsoft zanemario

IPv6 je stvoren prije svega da bi riješio problem relativno malog broja IP adresa koje nudi IPv4, ali pored toga donosi i još neke druge inovacije. Tako na primjer, ukoliko je računar podešen da automatski uzima IP adresu, a ne može da pronađe DHCP server, on može poslati takozvanu RS (router solicitation) poruku kojom traži aktivne rutere na njegovom subnet-u. Ruter zatim odgovara sa RA (router advertisement) porukom preko koje klijent/računar saznaje opseg u kojem sebi može dodijeliti adresu, kao i adresu rutera (default gateway). Opisana metoda dobijanja IPv6 adrese se naziva Stateless Address Autoconfiguration (SLAAC).

RS i RA poruke se šalju putem Neighbor Discovery Protocol-a (NDP) koji IPv6 koristi za još neke namjene, kao što je npr. detekcija duplih adresa, saznvanje MAC adresa drugih računara (to više ne radi ARP okd IPv6)… Svaki ruter takođe povremeno šalje RA poruku svim klijentima, iako je oni ne traže.

Problem je u tome što IPv6 protokol ne definiše kako klijent treba da reaguje na RA poruku. To definiše operativni sistem.

Napad: nekada

Kada je problem otkriven, 2010. godine, većina operativnih sistema je sebi dodijeljivalo onoliko IP adresa koliko dobije RA poruka sa različitim informacijama o IP opsegu, bez obzira na to što klijent možda i nije slao RS poruke. Ako klijent dobije stotinu RA poruka sa različitim informacijama o IP opsegu, klijent će sebi dodijeliti stotinu IP adresa. Ako dobije hiljadu, sebi će dodijeliti hiljadu IP adresa. To znači da napadač, slanjem lažnih RA poruka, na vrlo jednostavan način može pokrenuti DoS napad koji će u roku od par sekundi srušiti sve računare koji su na istom layer 2 segmentu kao i on (i kod kojih je aktiviran IPv6 – što je npr. kod Microsoft-a slučaj od Viste pa na dalje). Zauzetost procesora napadnutih računara će prvo skočiti na 100% usled obrade velikog broja RA paketa, a zatim će napadnuti računari blokirati usled prepunjenosti radne memorije. Čak i ako napad traje samo nekoliko sekundi, blokirani računari će se morati restartovati “na dugme” da bi se odblokirali, ali ako napad nije prestao, ni to neće biti od pomoći.

Napad: sada

Da bih testirao “ranjivost” nekih aktuelnih operativnih sistema, koristio sam Kali Linux i alat flood_router26, koji je u mogućnosti da pošalje na hiljade lažnih RA paketa u jednoj sekundi (sve je bilo instalirano na virtuelnim mašinama u izlolovanom virtuelnom lan segmentu). Napad je vrlo jednostavan. Jendom komandom se napadaju svi računari koji su na istom layer 2 segmentu kao i računar koji izvršava napad (mada može i da se napada ciljano samo jedan računar):

flood_route26

Windows 7 (sa poslednjim update-om) je potpuno zablokirao poslije par sekundi, ali nakon što sam prekinuo slanje RA poruka sa Kali sistema, sistem se odblokirao. Nije bilo potrebe za restartom. Ispostavilo se da je Microsoft izbacio jedan update (KB2750841) koji obezbjeđuje da Windows 7 sebi dodjeljuje samo ograničen broj IPv6 adresa na osnovu RA poruka. Zbog toga više ne može doći do padanja sistema zbog prepunjavanje radne memorije, pa se samim tim ne mora restartovati računar kada se napad završi. Ali pored toga, Windows 7 i dalje analizira svaki RA paket koji stigne, što uzrokuje da dok god napad traje, procesor nema vremena bilo šta drugo da radi osim da analizira RA pakete koji pristižu, tj. računar poslije kraćeg vremena potpuno zablokira.

Nakon Windows-a 7, testirao sam Windows 8.1 i Windows 10 TP (Technical Preview). Situacija je u početku izgledala isto kao i kod Windows-a 7 i već sam bio napisao blog post sa takvim rezultatom. Ali mi je kasnije pala na pamet jedna stvar: testiranje sam radio na virtuelnoj mašini koja koristi vrtuelni procesor sa jednim jezgrom. Šta ako podesim da ima 2 ili 4 jezgra? Situacija je tada bila drugačija. Procesor više nije bio zauzet 100%, već je samo jedno jezgro procesora bilo zauzeto 100%, a ostala su bila rasterećena. Iako je i to znatno degradiralo performanse računara, on nije u potpunosti zablokirao. Napominjem da je takva situacija samo kod Windows-a 8.1 i 10, dok Windows-u 7 ni 4 jezgra nisu pomogla (on u potpunosti zablokira). Ovako je testiranje izgledalo na Windows-u 10 TP sa procesorom sa jednim jezgrom:

win10ipv6dos

Na lijevoj strani se vidi rezultat ipconfig komande, a na desnoj strani je task manager.

Windows Serverski operativni sistemi imaju slične probleme: Windows Server 2008 R2 se ponaša kao Windows 7, kao što se moglo i pretpostaviti, a Windows Server 2012 se ponaša kao Windows 8.1.

Na aktuelnim Ubuntu sistemima, situacija je znatno bolja. Taj operativni sistem takođe limitira broj IP adresa koje mogu biti dodijeljene na osnovu RA poruka, a limitira i procesorsko vrijeme koje posvećuje analizi RA poruka, ali znatno efikasnije nego Windows operativni sistemi. Broj IP adresa koje sebi dodjeljuje je znatno manji nego što je to slučaj kod Windows-a, a i ograničavanje procesorskog vremena koje dodjeljuje tim aktivnostima je znatno strožije. Čak i kod sistema sa jednim procesorom i jednim jezgrom nije dolazilo do većih degradacija performansi. Takva je makar situacija kod verzije 14.04.1 koju sam testirao, mada kod nekih starih verzija “ranjivost” ipak postoji.

Skoro je izvjesno da Microsoft problem sa Windows-om 7 neće rješavati. Pretpostavljam da je takva odluka donešena zbog toga što Microsoft želi uskoro da pošalje Windows 7 u penziju, ali i zbog toga što se ovaj napad može izvršiti samo lokalno, tj. sa istog layer 2 segmenta. Bez obzira na to, ne treba zaboraviti da je Windows 7 trenutno najzastupljenija verzija Microsoft-ovog operativnog sistema, a problem ni kod Windowsa 8.1 i 10 nije riješen na najbolji način.

Odbrana

Kad je u pitanju odbrana, prvo bi trebalo vidjeti kolika je mogućnost da budete meta ovakvom napadu i kakvu vam štetu može nanijeti. Sigurno neću strahovati od ovakvih napada kad je u pitanju kućni računar, a vjernovatno ni kad su u pitanju neke manje mreže. Ali ako su u pitanju velike mreže, pogotovo one sa velikim brojem računara po layer 2 segmentu ili kod kojih je uptime jako bitan, trebalo bi imati na umu ovu vrstu napada. Ima više načina na koje se ovaj napad može spriječiti (ako koristite “ranjiv” OS):

  • Blokiranje RA paketa preko klijentskog firewalla – Neki komercijalni softverski firewall-ovi (i neki koji dodju u paketu sa antivirus softverima) automatski blokiraju RA pakete. Windows advanced firewall-a ih ne blokira po default-u, ali se može relativno lako podesiti, kao što se vidi sa slike:ra
    Treba naravno imati na umu da klijent u tom slučaju neće biti u mogućnosti da sebi dodijeli adresu putem SLAAC-a, već će morati koristiti DHCP ili biti konfigurisan sa statičkom adresom.
  • Deaktiviranje IPv6 protokola – Ako ne koristite IPv6 protokol, mogli bi da razmislite da ga deaktivirate.
  • Deaktiviranje procesiranja RA poruka – Problem se može riješiti i tako što se procesuiranje samih RA poruka deaktivira u operativnom sistemu. Primjeri deaktivacije (po potrebi prepraviti nazive interfejsa):
    Komanda za Windows: netsh interface ipv6 set interface “Local Area Connection” routerdiscovery=disabled
    Komanda za Linux: sudo sysctl -w net.ipv6.conf.eth0.accept_ra=0 (ova komanda vrši deaktivaciju do restarta. Za permanentnu deaktivaciju bi parametar net.ipv6.conf.eth1.accept_ra=0 trebalo unijeti u /etc/sysctl.conf)
  • RA Guard – CISCO je razvio mehanizam odbrane pod nazivom RA Guard koji se koristi u mrežnoj opremi i koji treba da spriječi ovakve napade. Nisam imao prilike da testiram RA Guard, ali vidim da alat koji sam ranije pomenuo (flood_router26) ima i neke opcije za zaobilaženje RA Guard-a koristeći fragmentaciju paketa.

S obzirom da je ovaj napad jedino moguće pokrenuti lokalno, tj. kada je napadač zakačen na isti layer 2 segment kao i računari koje napada, treba voditi računa o kontroli pristupa lokalnoj mreži (zaštititi wifi pristupne tačne, koristiti port security ili 802.1x port based authentication protokol ako je to moguće…), a i o tome da se za napad ne mogu zloupotrijebiti već postojeći računari na mreži (ukloniti administratorska prava, isključiti boot sa cd-a i fleške…). To su sve mehanizmi koji nisu specifični za ovaj napad tako da neću ulaziti u detalje.

Ovo nije jedini sigurnosni problem koji sa sobom donosi IPv6 tako da će možda još poneki blog post biti posvećen IPv6 protokolu.

I kad ste već čitali dovde, lajkujte taman i facebook stranu ovog bloga: http://www.facebook.com/infosecme

Sve u ovom blogu je pisano u edukativne svrhe. Sve što radite, radite na sopstveni rizik.

Leave a comment