Het gebeurt ons allemaal weleens -- de lockout van een systeem doordat het admin password vergeten of kwijt is. Hoe netter we met passwords omspringen, hoe groter de kans. Dan is het een opluchting te weten dat we altijd wel weer binnen kunnen komen.
| posted on Sat, 01 May 2004, 00:00 | weblog | rss | spin-off | comments |
Een PC is per definitie overgeleverd aan de genade van diegenen die er fysiek toegang tot hebben. Op zich is dat ook niet zo erg in normale gevallen -- zolang er maar geen onopgemerkte toegang mogelijk is over het netwerk zit je in de regel wel goed. En omdat veiligheid niet op obfuscatie van kennis gebaseerd moeten zijn, zijn de toegangsmiddelen algemeen bekend -- en documenteren we ze hier ook gewoon.
Wat volgt is een bundeltje technieken om passwordgebaseerde toegang tot systemen te herstellen. Helaas is dit toepassingsgbied wel zo divers dat een algemeen toepasbare handleiding niet te geven is, het blijft dus vaak prutsen, maar de tools kunnen daarbij erg nuttig zijn. Houd er alleen wel rekening mee dat ze ook schadelijk kunnen zijn -- niet alle tools zijn gebouwd met alle varianten op systemen in gedachten. Gebruik is uiteraard altijd voor eigen risiko.
Passwords zijn bedoeld voor een eenvoudige vergelijking en het handige daaraan is dat het mogelijk is ze eerst nog door een datamangel te halen alvorens die vergelijking uit te voeren. Bijvoorbeeld door een secure hash. Deze extra stap is interessant omdat het de mogelijklheid biedt om niet het letterlijke password op te slaan in het systeem, slechts een code die er (onomkeerbaar) uit af te leiden is.
Helemaal fraai is het wanneer bij het instellen van het password ook nog een willekeurige code, de zogenaamde salt, wordt toegevoegd. Hierdoor zal hetzelfde password er op verschillende plekken anders uitzien, zodat een inbreker niet eens kan afleiden dat twee passwords dezelfde zijn, omdat de salts doorgaans verschillend zijn en dus ook de afgeleide code.
Hoewel dit soort schema's een fraaie bescherming biedt tegen het achterhalen van een password, zelfs door de systeembeheerder, is het natuurlijk altijd mogelijk een vergeten password te overschrijven met een nieuw, door op de juiste plaats de juiste bytes te overschrijven. En daar is nooit iets tegen te doen -- het is altijd mogelijk bytes op een harde schijf te schrijven, mits er maar fysieke toegang tot het systeem mogelijk is.
Fysieke toegang betekent in de praktijk dat je alles kunt -- want hoe goed je een systeem ook dichttimmert, een gemiddelde PC is niet bestand tegen bootende CD's, omgeprikte harde schijven en desnoods schroevendraaiers en blikopeners om kasten te openen. Hoewel dat de veiligheid nogal relativeert geeft het wel hoop voor dat ene, verloren password!
De toegang tot de root-account op Linux (of soortgelijke Unix systemen) is gemakkelijk genoeg te verkrijgen. In principe hoef je alleen maar te booten van een drive die je rootrechten geeft, en daarna staat het je vrij andere schijven in te mounten, om daar met UID 0 ofwel als root mee te doen wat je wenst.
Vrijwel elke machine is bereid van CDROM of floppy te booten. Een installatie-CD van je favoriete Linux-distro in de drive, rebooten, en loop na de eerste opstartfasen de CTRL+ALT+Fn toetsen af op zoek naar een shell die root access geeft. Direkter nog is het te booten vanaf een volledig op CD geplaatste distro zoals Knoppix.
Al wat de (tijdelijke) systeembeheerder hoeft te doen om bijvoorbeeld het root password op een Linux systeem aan te passen is op een rootshell een simpele reeks commando's in te geven:
mkdir -p /lux mount /dev/hda2 /lux chroot /lux passwd (tik het nieuwe root password) exit umount /lux
Hierin is aangenomen dat hda2 de root partitie is, waar de passwordfiles op staan. Na deze acties volstaat rebooten om met het nieuwe root password in te loggen.
Dat dit zo gemakkelijk gaat is overigens geen specifiek zwak van Linux, of welk ander operating systeem dan ook. De informatie voor passwordcontrole staan uiteraard op de schijf, en het is onmogelijk ze verborgen te houden. Immers, de processor (waarvan de werking algemeen bekend is) moet de passwords kunnen vinden, dus iedereen die in de voetsporen van de processor treedt kan altijd de passwords terugvinden. Beschermen van de opbergplek heeft dus niet veel zin, en zou door de extra complexiteit juist kansen op gaten introduceren.
Wel is het bijvoobreeld nuttig om passwords onder Linux in een file /etc/shadow op te slaan in plaats van in /etc/passwd, want die laatste moet altijd publiek leesbaar blijven en dat zou onnodige hints over passwords weggeven aan iedereen die zich toegang tot de machine verschaft. Wie deze omzetting nog niet heeft gemaakt, kan dat alsnog regelen met het commando pwconv. In het password-veld in /etc/passwd komt dan een enkele letter x te staan als signaal dat het desbetreffende password in de alleen voor root toegankelijke /etc/shadow file staat.
Zoals uit bovenstaande duidelijk zal zijn, is ook op Windows een Adminstrator password te overschrijven. Weliswaar is het daar wat meer weggestopt dan op Linux, maar dat is eigenlijk vooral het gevolg van een binair fileformaat en een tussen Windows-versies soms iets andere file-locatie. Gegeven zo'n binaire file zijn er tools om ze aan te passen, bijvoorbeeld chntpw die te downloaden is van de locatie in de onderstaande links.
Wij klommen wederom in Knoppix, downloadden de source code van de website (zie de links) en slaagden er met een kleine correctie in de tool te bouwen en op te starten:
unzip chntpw-030126.zip ed chntpw.c 108d wq gcc -I. -o chntpw *.c -lcrypto mount /mnt/hda1 cd /mnt/hda1/windows/system32/config cp sam sam.bup ~/chntpw sam
Het laatste commando vraagt om het gewenste nieuwe password. In de commando's staat hda1 voor de naam van de Windows-drive, SAM is de passwordfile, en de naam windows moet soms door winnt vervangen worden. Wie deze aanpak vanuit Linux niet nodig vindt kan ook gewoon een bootdisk image (floppy of CD) downloaden vanaf de website trouwens.
Merk op dat we een backup van SAM naar SAM.BUP hebben gemaakt. Je weet maar nooit. Je kunt dit ook gebruiken om te zien of de file is aangepast:
diff sam sam.bup
Als dit niets zegt is er geen verschil, anders zie je
Binary files sam and sam.bup differ
Terugzetten van de oude file kan ook vanuit Knoppix, met
cp sam.bup sam
Op de nieuwere Windows versies worden files in EFS overigens beschermd op basis van het password. Dat houdt in dat het veranderen van het password wel toegang geeft als administrator, maar dat daarmee alle gecodeerde files niet op straat liggen.
Een krachtige methode misschien, maar hij werkt alleen voor lokale passwords die een machine beschermen; het herstel van een password op een Domain Controller is lastiger.
De reden dat het lastiger is om toegang tot een Domain Controller te krijgen is dat het inloggen op zo'n machine niet met het lokale password van de Administrator kan. Het password wordt namelijk in AD opgeslagen. Dat is snel genoeg te omzeilen, door na een reboot op F8 te drukken en te kiezen voor een start in Directory Service Restore Mode. Windows start in safe mode, en laat de Adminstrator inloggen met het lokale password. En die konden we al aanpassen als dat nodig was.
Mocht dat niet werken dan kun je nog proberen binnen te komen door de registry te editen met chntpw, omdat die ook een mode kent om algemene registry files te bewerken, ook nu weer zonder tussenkomst van Windows. Wat je zoekt is de registry file C:Documents and SettingsDefault Userntdata.dat, overeenkomend met HKEY_USERSDefault onder REGEDIT.EXE op Windows zelf. Zoek Control PanelDesktop en maak daar de volgende instellingen (noteer de oude, en kopieer de oude registry file naar een backup):
Veldnaam: | Waarde: |
---|---|
SCRNSAVE.EXE | CMD.EXE |
ScreenSaveTimeOut | 15 |
ScreenSaveActive | 1 |
Ongeacht of je dit in Windows zelf of onder Knoppix hebt ingesteld, je doet nu een reboot, wacht het inlogscherm af en in plaats van te proberen in te loggen wacht je 15 seconden, totdat de ingestelde screensaver opstart -- en door bovenstaande instellingen is dat tijdelijk de gewone Administrator commandline. Tik nu een speciaal reparatiecommando in de systeemdirectory:
CD \WINDOWS\SYSTEM32 MMC DSA.MSC
Blader vervolgens binnen het eigen domein naar de Administrator onder Users, en gebruik Reset Password onder het Action menu. Na deze herstelwerkzaamheden zul je weer de oude screensaver waarden willen terugzetten, doorgaans:
Veldnaam: | Waarde: |
---|---|
SCRNSAVE.EXE | LOGON.EXE |
ScreenSaveTimeOut | 900 |
ScreenSaveActive | 0 of 1 |
Wie gewone gebruikers wil uitsluiten van alternatieve bootmedia zoals floppy en CDROM, die zal dat moeten aangeven in de BIOS en daar een password op zetten. Zo'n password wordt, hoe kan het ook anders, opgeslagen in het stukje CMOS-geheugen dat op moderne operating systemen van gewone gebruikers afgescherm blijft.
Wanneer we wel gewoon als systeembeheerder op zo'n systeem kunnen inloggen, maarals we niet meer bij de BIOS kunnen, dan is het password daarvan nog wel te kraken. Daarvoor is de utility CmosPwd geschikt. Het gaat daarbij werkelijk om het kraken van het password, want dat wordt doorgaans letterlijk opgeslagen of met een simpel om te keren CRC gecodeerd.
De manier waarop het password precies in het CMOS-geheugen staat opgeslagen verschilt per BIOS-type en -versie, dus die gegevens moeten we tijdens de boot even oppikken. Daarna draaien we de CmosPwd utility, en krijgen we een lijst die per BIOS-type een rijtje vermoede passwords suggereert, elk genoteerd tussen blokhaken. Aangezien meerdere passwords dezelfde CRC-waarde kunnen hebben (...) zullen de passwords niet altijd bekend voor te komen. Tik nummers bij voorkeur in op het numerieke toetsenbord met NumLock aan.
Om deze tool te kunnen runnen onder Knoppix halen we de source tgz op van de desbetreffende website, en we voeren het volgende uit:
tar -xzvf cmospwd-4.3.tgz cd cmospwd-4.3 gcc -o cmospwd cmospwd.c sudo ./cmospwd
Dit levert per BIOS regels op zoals
Award 4.5x/6.0 [123123][332211][112233]
Schrijf alle mogelijkheden op, soms doet de ene het wel en de andere niet. Reboot de machine, druk op DEL. Rien ne va plus!
Als nou helemaal niets werkt dan kun je met dezelfde utility ook nog proberen het CMOS geheugen botweg te wissen. Dit vult alle locaties met nullen, zodat alle instellingen in de BIOS verloren gaan, inclusief van die dingetjes als het verwisselen van je floppies en de geometrie van harde schijven. De tool kan alleen nog wel proberen de klok ongemoeid te laten. Het wissen van CMOS doe je met
sudo ./cmospwd /k
Overigens kunnen deze technieken op een laptop weleens falen. Op zulke systemen is het namelijk minder voor de hand liggend om een tweede batterij in te bouwen die het CMOS geheugen in stand houdt, zoals gebruikelijk op een desktop-PC. In laptops wordt vaak gewerkt met EEPROM of flash geheugen in plaats van CMOS RAM.
Natuurlijk is het beter altijd een rescue-floppy te maken die helpt dit soort problemen te voorkomen. Maar die werkt in de praktijk nooit als je hem nodig hebt. Ook zijn er een paar trucs die dit type problemen helpt voorkomen.
Op NT en Server kun je meerder gebruikers in de groep met Administrators opnemen. Op Unix bereik je hetzelfde door meerdere accounts aanmaken met verschillende namen maar alle met uid 0 en gid 0, ofwel met rootrechten. Elk van die accounts kan een eigen password krijgen, met als gevolg dat ze door meerdere mensen afzonderlijk benaderd kunnen worden. De kans dat drie mensen tegelijkertijd hun password voor systeembeheer vergeten is veel kleiner dan voor een enkeling. Idem de kans op vakantie, ontslag, coma en dergelijke.
Een ultieme oplossing om een desktopsysteem dicht te timmeren is er eigenlijk niet, zo zal uit dit verhaal blijken. Nu is de gemiddelde desktopgebruiker doorgaans van goede wil, waardoor hij niet dit soort hackerige tools zal willen draaien, dus in de praktijk doet het er niet echt toe.
Om het zo lastig mogelijk te maken timmer je natuurlijk de adminsitratieve toegang tot een systeem dicht. Ook het uitschakelen van boots via floppy, CDROM en USB-stokjes zijn wel zo handig, alleen zul je dan de BIOS ook moeten vergrendelen. Die combinatie van maatregelen maakt het in elk geval onmogelijk om lokale toegang te krijgen zonder kraakpogingen te ondernemen, of de kast te openen.
In extreme gevallen wil je nog verder gaan. Als een systeem echt bewijsbaar veilig moet zijn, bijvoorbeeld omdat het digitale handtekeningen zet zoals bij OpenFortress of misschien wel een hippe notaris, dan zul je het fysiek onbereikbaar moeten maken. Jawel, de computer moet dan ingebouwd worden in een kluis. Laten we voor desktop-PC's maar niet zo ver gaan, maar ons wel realiseren hoe ver de bescherming van passwords daarop reikt!
Deze reeks is gedurende 2004 verschenen in NetOpus. De reeks staat als geheel onder http://rick.vanrein.org/blog/netopus/bootstrapper