Beperkt houdbaar

Door Slurpgeit op woensdag 23 januari 2013 22:57 - Reacties (40)
Categorie: -, Views: 10.431

Om maar even met de deur in huis te vallen, dit wordt een klein stukje over Windows, en hoe je van een account met beperkte rechten naar Administrator kan (Of, mocht je op een domein zitten, Domain Administrator, yay!). En nee, dit is niet om je te leren computers over te nemen, maar juist wat je moet doen om het te voorkomen ;).

Voor dit verhaal heb ik een Windows 7 VM gemaakt, met de standaardgebruiker "Henk":

https://dl.dropbox.com/u/7521450/blog/beperkt/henk.png

Henk wil graag administrator worden, anders kan hij SuperSexyCelebsNudeScreensaver.zip.png.scr.exe niet installeren, en dat zou toch jammer zijn. Er zijn meerdere manieren waarop hij dat kan doen.

Wachtwoorden kraken
Henk is niet helemaal vreemd met computers, en heeft ook wel wat ervaring met Linux. Ondanks dat zijn account enkel beperkte rechten heeft, kan hij de computer wel gewoon met een Live-CD van Ubuntu opstarten. En dat doet hij dan ook.

Als de computer eenmaal opgestart is, kopiŽert hij de volgende bestanden even naar een tijdelijke locatie (In vaktermen, /tmp):
  • C:\Windows\System32\Config\SAM
  • C:\Windows\System32\Config\SYSTEM
https://dl.dropbox.com/u/7521450/blog/beperkt/sam_system.png

Waarom? Omdat alle wachtwoorden voor de gebruikersaccounts in het SAM-bestand staan. Om deze uit te kunnen lezen heb je ook wat info uit het SYSTEM bestand nodig. Hiervoor heb je meerdere tooltjes, maar Henk gebruikt het gratis te verkrijgen creddump. Even uitpakken (En wellicht apt-get install python-crypto), en draaien met:

./pwdump.py /tmp/SYSTEM /tmp/SAM


En woei, hashes (Het wachtwoord in versleutelde vorm):

https://dl.dropbox.com/u/7521450/blog/beperkt/hashes.png

Het formaat in dit geval is:
Gebruikersnaam:User ID:LM Hash:NTLM Hash
Wat even belangrijk is om te weten, is dat een LM hash van aad3b435b51404eeaad3b435b51404ee, of een NTLM hash van c7f06f0db9d571cf0f4408b777af3616 ook wel bekend staat als leeg, niks, noppes nada. Zoals hier te zien is, heeft alleen Henk zijn wachtwoord opgeslagen in LM formaat. Dat is voor Henk heel slecht, maar voor iemand die zijn wachtwoord wil kraken heel, heel goed. Waarom, dat wordt ietwat veel om in dit verhaal uit te leggen, maar als je zin hebt: LM hash - Wikipedia.

Wat je voor dit verhaal moet weten, is dat LM hashes onwijs makkelijk te kraken zijn, en dat NTLM een stuk veiliger is. Ook staat het opslaan van LM hashes standaard uit vanaf Windows Vista. Toch zijn er bedrijven / systeembeheerders die dit nog gebruiken. Dus, herken jij jezelf in dit profiel? Soliciteer nu! Doe eens niet!.

Kraaktijd! De eerste poging is een gewone brute-force aanval met John the Ripper:

https://dl.dropbox.com/u/7521450/blog/beperkt/john.png
(De commandline spreekt voor zich in dit geval denk ik, kraak de LM hash in "/tmp/hash_van_henk" met john)

Vanwege de manier waarop LM hashing werkt, wordt het wachtwoord in twee delen gekraakt, en is de uitkomst altijd uppercase. Dus aan elkaar geplakt komt er een wachtwoord uit van W4CHTW00RDH3NK.

Helaas gaat Windows dat niet accepteren. Maar we kunnen dit wachtwoord wel gebruiken voor een aanval op het NTLM gedeelte van de hash. Het reeds achterhaalde wachtwoord zetten we in /tmp/wordlist, en voeren nog een aanval met John uit:

https://dl.dropbox.com/u/7521450/blog/beperkt/john_ntlm.png

Wat je hier ziet is John die de NTLM hash probeert te kraken met "W4CHTW00RDH3NK" als enige woord. --rules zorgt ervoor dat er enkele regels toegepast worden, waaronder het vervangen van hoofdletters met kleinere letters.

Dit hele proces neemt al snel 15 minuten of meer in beslag, en zoveel geduld opbrengen is lastig. Gelukkig hebben we de foto's rainbow tables nog! Wat rainbow tables precies zijn ga ik wederom niet uitleggen, maar mocht je het echt heel heel heel heul heul graag willen weten, zie dan hier. Het enige wat je nu moet weten, is dat het kraken van LM hashes met rainbow tables echt retesnel is. De tool in dit geval is rcracki_mt, en de command line is als volgt:

./rcracki_mt -f /tmp/hash_van_henk -t 4 /storage/RT/LM/lm_all-space#1-7_0/*
  • ./rcracki_mt - Programma
  • -f /tmp/hash_van_henk - De te kraken hash
  • -t 4 - Gebruik 4 threads (Is die dure CPU toch nog ergens goed voor)
  • ./rcracki_mt -f /tmp/hash_van_henk -t 4 /storage/RT/LM/lm_all-space#1-7_0/* - Gebruik alle tables in de map lm_all-space#1-7_0
Deze set rainbow tables bestaat uit:
  • lm_all-space#1-7_0
  • lm_all-space#1-7_1
  • lm_all-space#1-7_2
  • lm_all-space#1-7_3
Het pakketje is in totaal 34GB, en is gratis te downloaden. Leuk feitje is dat met deze tables de kans van kraken van een LM hash 99,9% is. En het is dan ook erg snel gedaan met het wachtwoord van Henk:

https://dl.dropbox.com/u/7521450/blog/beperkt/rcracki.png

Kijk, dat zien we graag. Klaar in minder dan een halve minuut, en rcracki_mt heeft zelf al uitgezocht hoe het zit met hoofdletters. Remember kids, a lazy hacker is a good hacker.

Helaas voor Henk, is het wachtwoord van MrAdmin niet in LM hash opgeslagen, en met je z'n eigen gekraakte wachtwoord kan hij niet zo veel (Maar het is wel verdomd handig voor dit verhaal). Hij kan de NTLM variant wel proberen te kraken, maar dat gaat waarschijnlijk aanzienlijker langer duren, dus tijd voor een ander truukje.

Sticky Keys
Ken je dat? Ben je lekker aan het gamen, krijg je opeens een piepje uit de krochten van de hel en / of pc-speaker, en dit venstertje gooit je game naar de taakbalk:

https://dl.dropbox.com/u/7521450/blog/beperkt/stickeykeys.png

Wat blijkt, na 5 keer op de shift toets drukken komt dit omhoog. Als je dat doet, opent Windows het programma C:\Windows\System32\sethc.exe, ook voordat een gebruiker ingelogd is, op het aanmeldscherm.

Omdat Henk toch nog in een Linux omgeving is, heeft hij niks met Windows permissions te maken, en kan hij gewoon het volgende doen:

https://dl.dropbox.com/u/7521450/blog/beperkt/sethc.png

Oftewel: verplaats sethc.exe naar sethc.exe.bak, en kopiŽer cmd.exe naar sethc.exe. Henk herstart de PC, en drukt bij het inlogscherm 5 keer op shift:

https://dl.dropbox.com/u/7521450/blog/beperkt/sethc_system.png

W00t! Een shell, op het inlogscherm, als NT AUTHORITY\SYSTEM (Hogere rechten bestaan niet op een Windows systeem). Zou ik explorer kunnen starten?:

https://dl.dropbox.com/u/7521450/blog/beperkt/explorer_starting.png

https://dl.dropbox.com/u/7521450/blog/beperkt/explorer_started.png

Hmm, een beetje vreemd, maar wel lekker. Een desktopomgeving in je aanmeldscherm! Maar, genoeg gespeeld, tijd voor de climax:

https://dl.dropbox.com/u/7521450/blog/beperkt/henk_admin.png

https://dl.dropbox.com/u/7521450/blog/beperkt/henk_admin_2.png

Profit! Henk is lid van de Administrator groep, en kan eindelijk zijn nieuwe screensaver installeren. Ook heeft Henk nu wat meer mogelijkheden om alsnog achter het wachtwoord van MrAdmin te komen.

Hij wacht tot MrAdmin een keer inlogt op de pc, en zich niet goed afmeld. Dan pakt Henk de onwijs handige tool wce. Wat kan WCE? Nou, dit:

https://dl.dropbox.com/u/7521450/blog/beperkt/wce.png

Ja, je ziet het goed. Zolang een gebruiker ingelogd is, of zolang er een service draait als een bepaalde gebruiker, kan WCE het wachtwoord plaintext uit het geheugen vissen. Oůk als het gaat om gebruikers in een Windows domein (Dus, Admins op Terminal Servers, niet doen hŤ?).

Kan dat niet makkelijker?
Ja hoor, veel makkelijker, er bestaat namelijk iets als kon-boot. Is niet gratis, maar wel very much handig. Want zodra je van de kon-boot cd opstart, kan je in alle accounts op de computer inloggen zonder een wachtwoord in te voeren, en wordt het sticky keys truukje van hierboven automatisch toegepast:



Maar ik kan helemaal niet van CD starten, maar onze beheerder heeft de computers wel zo ingesteld dat ze via PXE boot een image kunnen downloaden
Nou, dat maakt het nog een stukje makkelijker. De populaire tool Metasploit heeft hier namelijk een prachtige module voor:

https://dl.dropbox.com/u/7521450/blog/beperkt/pxexploit.png

Wat dit doet? Het start een eigen PXE server, een computer start er automatisch van op en er wordt een gebruiker "metasploit" toegevoegd, en lid gemaakt van de Administrator groep. Ook zet het een eventuele firewall uit, en installeert het een service waar metasploit naar kan verbinden om Meterpreter te starten op de machine (Een soort shell++, mocht je er meer over willen weten, even googlen ;)).

Wat in actie screenshots dan, voor die techneuten die nu nog steeds benieuwd zijn:

https://dl.dropbox.com/u/7521450/blog/beperkt/pxerun.png

https://dl.dropbox.com/u/7521450/blog/beperkt/pxedhcp.png

https://dl.dropbox.com/u/7521450/blog/beperkt/pxeattack.png

https://dl.dropbox.com/u/7521450/blog/beperkt/pxe2.png

https://dl.dropbox.com/u/7521450/blog/beperkt/pxe3.png

Dat allemaal automagisch, et voilŠ:

https://dl.dropbox.com/u/7521450/blog/beperkt/metasploituser.png

Hoe makkelijk wil je het hebben :Y).

Eek! (Tuuunununununuuu) Hoe voorkom ik dit?
  • Zorg (voor oudere operating systems en domeinen) dat het gebruik van LM hashes uit staat
  • Zet een wachtwoord op je BIOS.
  • Zorg dat het eerste boot device je HDD is.
  • Zorg eventueel voor disk encryptie
  • Don't be an idiot ;)

Wifileaks Pt. II

Door Slurpgeit op donderdag 3 januari 2013 20:20 - Reacties (50)
Categorie: -, Views: 16.434

Eigenlijk was ik al een hele tijd van plan dit blogje te schrijven, naar aanleiding van een comment op mijn vorige blog. Toen zag ik vandaag opeens dat de Consumentenbond mij al voor was. WTF! Oh well, dan heb ik nu wat extra draagvlak :).

Voor de technische voodoo begint, een kleine, maar nodige inleiding naar de wondere wereld van WPS. Het is ooit verzonnen om het makkelijk te maken nieuwe apparaten toe te voegen aan een netwerk met een onwijs lang WiFi wachtwoord, zonder dat elke keer in te hoeven tikken. Hiervoor zijn twee oplossingen bedacht.

De knop
Bij deze oplossing is het de bedoeling dat je een apparaat vraagt verbinding te maken met het netwerk, en als het apparaat het je hťťťťl lief vraagt, of je dan alsje- alsje- alsjeblieft de knop op je router of accesspoint wil indrukken. Op de Linksys router die ik voor dit verhaaltje gebruik ziet die knop er zo uit:

https://dl.dropbox.com/u/7521450/blog/wps/button.png

In principe is dit gewoon "veilig". Iemand die daar misbruik van wil maken moet namelijk al in je huiskamer staan, en dan heb je grotere kopzorgen dan je draadloze netwerk ;).

De PIN
Hier wordt het lachen geblazen. De tweede oplossing is namelijk het invoeren van de pincode die onderop je router / accesspoint staat, in het apparaat wat je wil verbinden. Een soort vervanging van je super lange wifi wachtwoord dus. Onderop mijn Linksys zit dan ook de volgende sticker:

https://dl.dropbox.com/u/7521450/blog/wps/pin.jpg

Okť, super. Acht karakters, dat is dus 10x10x10x10x10x10x10x10 (Of 10^8 voor jullie wiskundefreaks) = 100.000.000 combinaties. Uit ervaring kan ik je vertellen dat in een real-life situatie, het brute forcen van de PIN je ongeveer 4 seconden van je leven kost, per poging. Dat komt uit op een bruto van 12,7 jaar. Niet echt de moeite.

Toen dacht iemand bij de implementatie, dit kan handiger. In plaats van gewoon alle acht getallen goed of fout keuren bij een transactie, krijg je een andere reactie terug van het accespoint of de router als de eerste 4 karakters fout zijn, dan als dat deze juist zijn. Daarmee wordt het aantal pogingen al 10x10x10x10 + 10x10x10x10 (10^4 + 10^4) = 20.000 pogingen.

Maar, dat was nog niet handig genoeg. Het laatste getal van de 8 is geen willekeurig getal, maar een checksum van de eerste 7. Hoe deze berekend wordt is voor jullie als aanvaller niet heel belangrijk, maar deze is dus te berekenen aan de hand van de eerste 7 karakters. Klinkt ingewikkeld, maar kijk even mee lieve kijkbuiskinders. De uiteindelijke formule voor het maximaal aantal pogingen (van 00000000 - 99999999) wordt dus 10x10x10x10 + 10x10x10 (10^4 + 10^3, het laatste getal van de 8 is namelijk voor elke combinatie te berekenen.) = 11.000.

Dat zijn zo'n 99.989.000 benodigde pogingen minder die nodig zijn om de juiste PIN te vinden. In tijd uitgedrukt wordt dat in plaats van 12,7 jaar, bij 4 seconden per pin, zo'n 12,2 uur. Dat is een aardig verschil, en gewoon in ťťn dag te doen. Als je dan ook nog eens een net iets betere WiFi stick / antenne regelt, kan je de tijd bijna halveren naar 2 seconden per pin (6 uur). En dat is om van 00000000 naar 99999999 te gaan. Dus als jouw pincode 12344321 is, ben je aardig snel de spreekwoordelijke Sjaak.

Is het dan echt zo erg?
Ondertussen is het wel bekend dat ik een groot fan van plaatjes ben, dus dit is een screenshot van alle accesspoints die ik kan ontvangen, waar WPS ingeschakeld staat (Gemaakt met een tooltje genaamd "Wash", later meer daarover):

https://dl.dropbox.com/u/7521450/blog/wps/wash.png

Of tenminste, dit is wat er op mijn scherm paste, de lijst gaat nog door. Al deze netwerken zijn met 95% zekerheid kwetsbaar voor deze aanval. Het enige belangrijke punt is dat het bereik goed genoeg is voor de WPS transacties.

Voor de tweakers onder ons, in Wireshark ziet een accesspoint met WPS ingeschakeld er zo uit:

https://dl.dropbox.com/u/7521450/blog/wps/wps_wireshark.png

Oke, en dan?
Enter reaver-wps. Een tooltje speciaal gemaakt om deze aanval uit te voeren. Gebundeld met reaver-wps is een tooltje genaamd "Wash", wat kan scannen naar netwerken met WPS ingeschakeld.

Voor deze demo heb ik zelf een Linksys E3000 ingesteld als accesspoint, met de laatste standaard firmware (Versie 1.0.0.4), netwerknaam "Henk" (Omdat waarom niet?). Die kan je in het screenshot hierboven ook terug vinden. Vervolgens gooi ik het volgende commando in mijn Ubuntu terminal:

reaver -b 00:25:9C:**:**:** -c 11 -vv --dh-small --no-nacks -i mon0


Huh, wasda?
  • reaver - Naam van het programma
  • -b 00:25:9C:**:**:** - MAC Adres van het accesspoint (Gewoon te zien in tooltjes als Wash en airodump-ng, geanonimiseerd voor dit verhaal ;))
  • -c 11 - Het kanaal van het accesspoint, in dit geval 11. Deze optie is niet nodig, maar kan de aanval wat versnellen als het accesspoint toch niet automatisch van kanaal wisselt.
  • -vv - Geef me meer output! Ik wil zoveel mogelijk info terugzien.
  • --dh-small - Gebruik een kleinere Diffie–Hellman key om de transactie te versleutelen. Verlaagt de CPU load op het aan te vallen accesspoint en verhoog de snelheid van de aanval
  • --no-nacks - Stuur geen NACK pakketje terug als de volgorde van de pakketjes door elkaar loopt. Niet echt spannend om de precieze betekenis te weten, als je maar onthoud dat sommige accesspoints met deze optie veel sneller aangevallen kunnen worden.
  • -i mon0 - De WiFi interface om te gebruiken voor de aanval, in mijn geval mon0.
Dan krijg je het volgende te zien:

https://dl.dropbox.com/u/7521450/blog/wps/part1.png

Het belangrijke gedeelte heb ik hier even omcirkeld. Wat je hier ziet is dat na de "M4 Message" het accesspoint een "WSC Nack" terug stuurt. Wat dat is, is niet heel belangrijk, maar onthou even dat dat nu na M4 komt.

Na een paar uur proberen, gaat reaver uiteindelijk de eerste 4 cijfers goed raden. Dan ziet de uitkomst er opeens zo uit:

https://dl.dropbox.com/u/7521450/blog/wps/part2.png

De oplettende lezer heeft het natuurlijk allang gezien, maar er is iets anders. Waar de "WSC Nack" net al na de "M4 Message" kwam, komt hij nu pas na de "M6 message". Hieraan is te zien of de eerste 4 cijfers van de PIN kloppen of niet.

Op dit punt zal het percentage van reaver naar 90% springen, en gaat hij proberen de rest goed te raden. Uiteindelijk worden alle 8 cijfers goed geraden en krijg je dit te zien:

https://dl.dropbox.com/u/7521450/blog/wps/part3.png

De "M" messages lopen door tot 7, en het accesspoint geeft netjes de WPA sleutel af. Om Po maar eens te quoten: "Uh-oh".

Wat kan je nu dan?
Het eerste wat je te binnen schiet is natuurlijk gewoon aanmelden op dat netwerk. Maar ja, dan wat? Uit m'n hoofd, dit:
  • Scannen in het netwerk om te kijken of er kwetsbare computers zijn om op in te breken.
  • Dingen als ARP Spoofing gaan inzetten om al het verkeer om te leiden en af te luisteren.
  • DHCP Instellingen aanpassen om al het verkeer via je eigen router te laten lopen.
  • DNS Servers aanpassen naar eigen beheerde DNS servers.
  • Etc.
De mogelijkheden zijn op dit moment al redelijk uitgebreid. Maar je hoeft niet eens inloggen om schade aan te richten. Je hebt nu de WPA(2) sleutel, dus je kunt ook gewoon passief al het verkeer tussen dat accesspoints en de clients opslaan, en later ontsleutelen met de WPA(2) sleutel. Wireshark heeft hier bijvoorbeeld gewoon een optie voor.

Best een serieus lek dus, en al relatief oud. Ik heb er zelfs een jaar geleden al over geschreven. Maar het blijkt nog steeds onwijs makkelijk te misbruiken.

Boeiend, ik heb het uit staan.
Zeker weten? Bij oudere Linksys modellen (<e4200, en zelfs daar pas vanaf een nieuwere firmware), zijn de enige opties:

https://dl.dropbox.com/u/7521450/blog/wps/wps.png

en

https://dl.dropbox.com/u/7521450/blog/wps/manual.png

Je zou denken dat WPS bij optie twee uit staat, toch? Niet dus. Ik kan m'n aanval nog steeds draaien, en zelfs mijn telefoon weet me te vertellen dat WPS beschikbaar is:

https://dl.dropbox.com/u/7521450/blog/wps/android.png

Maar ik gebruik MAC Filtering op mijn netwerk, en mijn SSID is verborgen, dus puh
Tja, dan zet ik airodump-ng een minuutje aan en zie ik welke clients er met jouw netwerk verbinden.

Dan weet ik welk MAC adres in ieder geval toegestaan is, en die client stuurt ook nog eens jouw netwerknaam mee zodat ik die ook gelijk weet. Vervolgens is een MAC adres veranderen onder linux een kwestie van 1 commando ( macchanger --mac 00:11:22:33:44:55, mocht je het willen weten ;))

Argh, wat moet ik doen dan
Tja, je kŠn wachten tot de fabrikant een nieuwe firmware uitbrengt waar WPS helemaal uit kan, maar de echte tweaker zet natuurlijk gewoon een custom firmware op de router waar WPS helemaal niet in zit. Verder, hopen en bidden dat je provider het snel voor je oplost. Want op dit moment staat je draadloze netwerk gewoon zo goed als compleet open, ook met MAC filtering en een hidden SSID.