Hacking Office Passwords
We hebben het al eens over het hacken van wachtwoorden gehad en de technieken die we hiervoor gebruiken. Er zijn een aantal bestanden die vaak beveiligd zijn met wachtwoorden. Denk aan ZIP, RAR, DOCX en XLSX. Over die laatste 2 documenten wil ik het hebben in deze relatief korte post. Het hacken van DOCX en XLSX wachtwoorden, ofwel Office wachtwoorden. Er is niets vervelender dan het verliezen van een wachtwoord waardoor je een belangrijk document niet meer kunt openen. In sommige gevallen kunnen we ons echter een weg naar binnen hacken en dat doen we zo:
Mocht je nog niet bekend zijn met het hacken van wachtwoorden en de terminologie die we hiervoor gebruiken lees dan eerst even deze post: https://jarnobaselier.nl/wachtwoorden-hacken-hoe-doen-we-het. Begrippen als “Hashcat”, “Brute-Force”, “Rainbow tables” en “Dictionary Attacks” hebben na het lezen een stuk meer inhoud.
Microsoft Office (Word, Excel, Powerpoint etc.) gebruikt een speciale techniek om gebruikersdocumenten te beveiligen met een wachtwoord. Deze techniek heet “Microsoft Office Password Protection” (MOPP <- Zelf verzonnen afkorting :-). Microsoft Office Password Protection biedt 2 soorten beveiliging aan, te weten:
- Wachtwoord bij het openen
- Versleuteling van het document
Documenten die beveiligd zijn met een “wachtwoord voor openen” hebben de volgende restricties:
- Microsoft Word: Word document kan gelezen maar niet bewerkt worden.
- Microsoft Excel: Bij Excel kan een “beveiliging tegen openen” bewerkrestricties geven op het gehele document, een specifieke workbook (tab) of individuele elementen in een workbook (b.v. cellen).
- Microsoft PowerPoint: PowerPoint presentatie kan gelezen maar niet bewerkt worden.
Wanneer een document beveiligd is met een wachtwoordbeveiliging tegen openen dan is dat een gemakkelijke beveiliging. Deze beveiliging is relatief simpel te verwijderen.
Het wordt echter wat lastiger wanneer een document versleuteld is en het wachtwoord benodigd is om het document te ontsleutelen. Een document dat beveiligd is met deze encryptie kan niet bekeken worden alvorens het juiste wachtwoord opgegeven wordt. Om deze beveiliging te blijven borgen verbeterd Microsoft periodiek het Office-coderingsalgoritme. Als we kijken naar de gebruikte coderingsalgoritmes dan zien we de volgende veranderingen:
- Office 2016 – 256-bit AES encryptie, SHA-1 Hash Algoritme en CBC (Cipher Block Chaining)
- Office 2013 – 128-bit AES encryptie, SHA-1 Hash Algoritme
- Office 2010 -AES encryptie, SHA-1 Hash Algoritme (100.000 conversions)
- Office 2007 -AES encryptie, SHA-1 Hash Algoritme (50.000 conversions)
- Office XP en 2003 – 40-bits password encryptie – Daarnaast is custom encryptie mogelijk
- Office 97 en 2000 – 40-bits password encryptie
- Office 95 en ouder – 16-bits password encryptie
Deze versleutelingsmechanismes zorgen ervoor dat moderne documenten (v.a. Office 2007) die versleuteld zijn zeer moeilijk te kraken zijn. De oudere documenten kunnen soms wat makkelijker gekraakt worden.
Er zijn een aantal mogelijke aanvallen om Office bestanden te hacken.
Een wachtwoord voor openen omzeilen / hacken:
1. ZIP – Met deze techniek verander je de documentextensie naar .ZIP en open het bestand in je zip applicatie. Browse naar het juiste bestand (Word: = verwijder de settings.xml – Excel: ga in de ZIP naar xl en open “workbook.xml” OF ga naar xl\worksheets en open de juiste sheet en verwijder de string “
2. Sla op als andere extensie – Deze optie werkt alleen bij beveiligde Word bestanden. Open het bestand en sla deze vervolgens op met “opslaan als” met een andere extensie zoals *.RTF. Open vervolgens de RTF in notepad en verwijder het wachtwoord door de string “{\*\passwordhash…}” te verwijderen OF de string “w:enforcement=”1″ te veranderen in “w:enforcement=”0″. Sla de wijziging op. Het nieuwe document zal deze beveiliging niet meer hebben.
3. Copy-Paste – Open het document als read-only en copy-paste de data naar een nieuw document. Wanneer het om beperkte data gaat is dit een prima optie.
4. Opslaan als nieuw document – Wanneer je het wachtwoord niet weet kun je het document wel openen, lezen en opslaan met “opslaan als”. Sla het document op als een document met een andere naam. Het nieuwe document zal deze beveiliging niet meer hebben.
5. Gebruik een geautomatiseerde tool – Let op, tools zijn vaak betaald en geven niet altijd het gewenste resultaat. Passper (https://passper.imyfone.com/unlock-word-document) is een van de vele tools die je hierbij kan ondersteunen.
6. Crack het wachtwoord – Later meer
Een wachtwoord verwijderen van een versleuteld bestand:
Zolang een document dus beveiligd is met een wachtwoord tegen modificatie valt het allemaal ontzettend mee en is daar gemakkelijk omheen te werken. Wanneer een document echter versleuteld is dan wordt het een heel ander verhaal. De kansen om dan zonder het correcte wachtwoord de inhoud van het document te herstellen is moeilijker en soms gewoon onmogelijk.
Op een versleuteld document kunnen aantal hacks worden toegepast om het document te herstellen. De volgende varianten zijn hierin mogelijk:
- Precomputation / Rainbow Table – Door precomputation toe te passen wordt er een lookup tabel gemaakt alvorens het werkelijke document gestart wordt zodat wachtwoorden vooraf bedacht en omgezet worden naar een lookup table. Wanneer het document gehackt wordt kan de lookup table gebruikt worden en zijn er geen resources meer nodig om wachtwoord-voor-wachtwoord de hash te berekenen. Met andere woorden, wij noemen dat het gebruik van een Rainbow Table.
- Brute-Force – Door eerst de hash van de encryptie uit het document te halen kunnen we hier een brute-force aanval op loslaten. Dat wil zeggen dat alle mogelijke combinaties geprobeerd worden op het document om te zien of de juiste combinatie ertussen zit. Dit kun je doen met een beperkte karakterset (b.v. alleen kleine letters) of een volledige karakterset (a-z | A-Z | 0-9 | *). Hoe meer karakters er gebruikt worden des te langer het “proberen” duurt. De snelheid van deen brute-force aanval kan versneld worden door gebruik te maken van meerdere CPU’s of GPU’s maar een wachtwoord langer dan 9 karakters is voor de meeste systemen onmogelijk om te kraken (duurt jaren). V.a. 12 karakters is het zelfs voor een supercomputer onmogelijk om het wachtwoord binnen aanzienlijke tijd te kraken.
- Dictionary Attack – Wanneer je in staat bent een woordenlijst (dictionary) te maken van mogelijke wachtwoorden dan kun je met deze lijst een dictionary attack uitvoeren. Dit betekend dat elke woord op de lijst geprobeerd wordt als wachtwoord. Omdat je vaak een lijst met “mogelijk gebruikte woorden” en hun combinaties kunt samenstellen is een dictionary attack veel sneller en veel effectiever dan een “domme” brute-force attack.
- Mask Attack – Een mask attack lijkt heel veel op een brute-force attack. Bij een mask attack zorgen we ervoor dat de keyspace van het potentiele wachtwoord verkleind wordt. Stel voor dat we het wachtwoord “2000Jarno” willen kraken. Bij een traditionele brute-force attack hebben we een tekenset nodig die alle hoofdletters, kleine letters en alle cijfers bevat (“mixalpha-numeric”). De wachtwoordlengte is 9, dus we moeten combinaties van 62 ^ 9 (13.537.086.546.263.552) doorlopen. Laten we zeggen dat we kraken met een snelheid van 100 M / s en deze brute-force attack dus 4 jaar duurt. Bij Mask attack nemen we de kennis mee over hoe mensen hun wachtwoorden meestal structureren. Het bovenstaande wachtwoord komt overeen met een eenvoudig en gebruikelijk patroon. Er werd een jaartal en vervolgens een naam gebruikt. We kunnen de aanval nu zo configureren dat we de hoofdletters alleen op de 5e positie proberen en om op de eerste 4 posities alleen cijfers te proberen. We kunnen nu dus de keyspace verkleinen tot 10 x 10 x 10 x 10 x 52 x 26 x 26 x 26 x 26 = 237.627.520.000 combinaties. Met dezelfde kraaksnelheid van 100 M / s duurt dit slechts 40 minuten.
- Secret Master Key – Je kunt MS Office applicaties voorzien van een secret master key. Dat betekend dat wanneer een document versleuteld wordt er tevens de secret master key zal functioneren om het document te ontsleutelen. Om dit te doen moet je over een PKI store beschikken, en vervolgens de public key informatie plaatsen op de client computers (via een regkey). Alle versleutelde documenten zijn dan te ontsleutelen met Microsoft DocRecrypt tool d.m.v. de private key. Deze attack vector kan een hacker ook toepassen op een client PC. Normaliter bij het herstellen van een versleuteld bestand is dit geen optie meer omdat deze implementatie in-place (en bekend) had moeten zijn voordat het document versleuteld werdt.
*Bottom-line: met een sterk wachtwoord is een versleuteld document nooit meer te openen / herstellen. De beste techniek die dan toegepast kan worden is social engineering en het “raden” van wachtwoorden (dictionary attacks). Daarnaast zijn moderne DOCX bestanden erg sterk tegen brute-force attacks. Vergelijk de gemiddelde “tries-per-seconds” van de volgende bestanden:
- DOCX – 23.000
- DOC – 12.000.000
- ZIP (256 AES) – 1.050.000
- ZIP – 4.500.000.000
Een brute-force op deze bestanden met een full character set (a-z | A-Z | 0-9 | *) zou met een wachtwoord van slechts 8 karakters de volgende tijd in beslag nemen:
- DOCX – 301 jaar
- DOC – 211 dagen
- ZIP (256 AES) – 7 jaar
- ZIP – 13.5 uur
Wanneer de wachtwoorden nog langer zouden zijn is het kraken absoluut onmogelijk. Een 10 karakter wachtwoord zou met een DOCX brute-force bijna 1200 jaar duren alvorens het wachtwoord gekraakt is.
Laten we zeggen dat het kraken van Office bestanden <2010 tot een wachtwoord van 8 tot 9 karakters relatief snel gaat (dagen) maar dat dit v.a. office 2010 documenten beduidend langer duurt, zeker als je tijdens het kraken geen GPU support hebt. Nu we weten wat we kunnen doen hebben we eigenlijk een paar opties:
- Upload je bestand online en laat deze tegen betaling kraken. Je ontvangt dan niet het wachtwoord maar wel een decrypted bestand. Let op, deze informatie is nu wel potentieel beschikbaar bij een externe partij. Persoonlijk vind ik dit de minst goede oplossing en ga hier ook geen sites voor adviseren.
- Koop een goede tool waarmee je brute-force attacks, dictionary attacks etc. kunt uitvoeren. Zorg er ook voor dat deze tool een goede GPU ondersteuning heeft. Een zeer goede tool voor deze taken is “Advanced Office Password Recovery” van Elcomsoft – https://www.elcomsoft.com/aopr.html. Het nadeel is dat een goede tool al snel 100 euro of meer kost.
- Doe het zelf met Hashcat.
Uiteraard gaan we dit helemaal zelf doen!
Deze procedure bestaat uit 2 stappen:
1. Het achterhalen van de hash. Dit doen we met de Office2John Python script (https://github.com/magnumripper/JohnTheRipper/blob/bleeding-jumbo/run/office2john.py).
2. Kraken van de hash. Dit doen we met onze favoriete password cracker, Hashcat!
Laten we een nieuwe directory aanmaken op het bureaublad waar we ons versleutelde bestand “DOCencrypt.doc” en alle overige bestanden in opslaan.
cd ~/Desktop mkdir WordDecrypt mv ~/Desktop/DOCencrypt.doc ~/Desktop/WordDecrypt cd ~/Desktop/WordDecrypt |
Nu downloaden Office2John in deze directory:
wget https://raw.githubusercontent.com/magnumripper/JohnTheRipper/bleeding-jumbo/run/office2john.py |
En vervolgens voeren we onderstaande commando uit om de hash van het Office bestand te verkrijgen:
python office2john.py DOCencrypt.doc > hash.txt |
Zoals je ziet hebben we de hash uit het DOC document gehaald. Deze ziet eruit als:
DOCencrypt.doc:$oldoffice$1*ad404cc86a24ed43bed47c50a3b9478b*27e16ef810d09dc1662bf0ba51a48be3*e56f5005d221065cb7d51d023c7350b8:::::DOCencrypt.doc |
Het eerste wat we moeten doen is deze hash “plakken” in Google. Bij een gemakkelijk wachtwoord kan het zijn dat de hash al bekend is en dat het bijbehorende wachtwoord te Googlen is. Als Google geen resultaten biedt kun je nog Rainbow Tables doorzoeken als je hierover beschikt. Als je hier echter geen resultaten in terug kunt vinden dan is het dus onze taak om de hash te kraken met John of Hashcat. Ik gebruik bij voorkeur Hashcat omdat Hashcat flexibeler is en meer varianten ondersteund.
Wat opvalt bij dit bestand is dat hier “$oldoffice$1” staat. Dit betekend simpelweg dat het een document is van een oudere versie van Office. Als we kijken welke decryptiemethode erbij hoort (via “hashcat –help” dan zien we dat dit optie “9700, 9710 of 9720” is.
Als we vervolgens kijken naar de Hashcat voorbeeld hashes (https://hashcat.net/wiki/doku.php?id=example_hashes) dan zien we hier de volgende opbouw:
We moeten dus optie “9700” hebben en de opbouw van de hash moet er als volgt uitzien:
$oldoffice$1*04477077758555626246182730342136*b1b72ff351e41a7c68f6b45c4e938bd6*0d95331895e99f73ef8b6fbc4a78ac1a |
Laten we de “hash.txt” kopiëren naar “hashorigineel.txt” en vervolgens ons “hash.txt” document aanpassen als in het voorbeeld (en dus de overige kolommen voor- en achter de hash verwijderen):
Nu we de hash in het juiste formaat hebben vastliggen kunnen we met Hashcat een aantal aanvallen uitvoeren. Maar alvorens we dat gaan doen eerst even een uitleg over de gebruikte flags:
- -a = Attack Mode:
0 = straight attack (dictionary)
1 = combination attack (dictionary & brute-force)
3 = Brute-Force attack
6 = Hybrid Wordlist + Mask attack
7 = Hybrid Mask + Wordlist Attack - -m = Hash type (we hebben net vastgesteld dat dit type 9700 is)
- -o = Output file als het wachtwoord gekraakt is
- -i = Increment – Bij brute-force. Begin met 1 karakter en werk omhoog naar het opgegeven aantal karakters
- -1 = Het character masker. Het karakter 1 is een variabele voor de gebruikte characters in de brute-force attack.
- –force = Gebruik CPU als de GPU niet ondersteund wordt
- –status = Update automatisch de status van het cracking proces
- –username = Deze flag zorgt ervoor dat alle usernames in de hash genegeerd worden (alleen als we de hash file niet opgeschoond hadden)
Laten we zeggen dat we een dictionary file toevoegen in de WordDecrypt folder genaamd “dictionary.txt”. Een dictionary attack op het bestand zal er dan als volgt uitzien:
hashcat -a 0 -m 9700 -o thisisthepassword.txt hash.txt ~/Desktop/WordDecrypt/dictionary.txt --force --status |
Als een dictionary attack niet succesvol is kunnen we een brute-force attack proberen. Dit commando ziet er als volgt uit:
hashcat -a 3 -m 9700 -o thisisthepassword.txt hash.txt -i -1 ?l?d ?1?1?1?1?1?1?1?1 --force --status |
Zoals al gezegd in de uitleg beteken “-i -1” dat het cracken begint bij 1 karakter en zich omhoog werkt naar het opgegeven aantal karakters. Vervolgens geven we het character mask op “?l?d”. Dit betekend dat het cijfer 1 alleen lowercase en decimalen karakters bevat die tijdens het brute-forcen gebruikt worden. Tenslotte geven we het brute-force masker op. Elk karakter is een ? gevolgd door het character mask. Als alle 8 karakters ge-brute-forced moeten worden met lowercase karkaters en decimalen (dus character mask 1) dan ziet dat er als volgt uit “?1?1?1?1?1?1?1?1”.
Sit back & relax… de computer doet nu het werk. Maar dat kan wel even duren!