#crimediggers 2016 – Deel 2 – Wouters kamer

Tweakers en de politie hebben ook dit jaar weer een versie van crimediggers ontwikkeld. Het is de bedoeling dat je online een fictieve zaak oplost van de politie. De politie wil hiermee talent binnenhalen voor de digitale recherche. Iedereen mag meedoen, zelfs ik. De opdrachten zijn echter gericht op mensen die zeer handig zijn met een computer (understatement). Met enkel kennis van Office-applicaties kom je niet zo ver 🙂

Dit is deel 2 van 4 delen:

#crimediggers 2016 – Deel 1 – Autowrak
#crimediggers 2016 – Deel 2 – Wouters kamer
#crimediggers 2016 – Deel 3 – Hotelkamer
#crimediggers 2016 – Deel 4 – Rechtzaak

 

In het vorige deel blijkt dat de driver box voorbereid is door Wouter. Daarom staan we nu op z’n kamer.

Let op: spoilers ahead!

Wouters kamer – Zwarte markt

We moeten op zoek naar de voornaam van de opdrachtgever van Wouter. Wouter moet op de een of andere wijze gecommuniceerd hebben met z’n opdrachtgever. Spoiler: de cactus is een dood spoor. Op de papieren sporen is niet veel te vinden. Dan kijken we maar naar Wouters computer. Het bestandje wat je daar kunt downloaden bestaat uit een lijstje onion-domeinnamen. Deze kun je alleen benaderen via TOR omdat het nodes zijn bĂ­nnen het TOR-netwerk. Loop door de domeinnamen heen. De eerste die mij opvalt is ‘mrktpn5qmjgqzxgq.onion – Market’. Dat blijkt inderdaad een interessante pagina te zijn bestaande uit versleutelde berichten als we die invoeren in een TOR-browser:

We komen direct een bekende naam tegen alhoewel Wouter z’n handle niet consistent spelt. Als we Wouters private key kunnen vinden dan kunnen we de berichten van GummiB ontsleutelen en daar staat misschien meer informatie in over de identiteit van GummiB. GummiB moet de public key van Wouter gebruikt hebben anders kan Wouter de berichten onmogelijk ontsleutelen. Bij de sporen moeten we dus op zoek naar de private key. Het USB-stickje (robotje) lijkt mij een goede kandidaat voor de opslag van wat private keys. En inderdaad, in het zip-bestandje bevinden zich tien RSA private keys. Maar welke is de juiste?

Er zijn hier verschillende manieren om te checken welke private key de juiste is. Ik noem er twee.

Manier 1 – een Ruby scriptje

Dit scriptje heb ik wat snel in elkaar gezet maar de eerlijk gebiedt te zeggen dat het zonde van je tijd is om voor een eenmalige en specialistische actie een script te schrijven. Maar het is weer een beetje oefening extra.

Zorg dat je de twee base64 gecodeerde berichten opslaat in losse bestanden. Vervolgens voor je het volgende uit:

Manier 2 – de Shell

Enigszins in sneltreinvaart met behulp van de OpenSSL CLI:

Splits de tien private keys in swordfish.bundle op in tien losse bestanden, bijvoorbeeld 1.pem, 2.pem, 3.pem, etc.

Bewaar de twee berichten van GummiB in twee losse bestanden, bijvoorbeeld ciphertext_b64_0 en ciphertext_b64_1.

Converteer de beide ciphertexten naar binair formaat:

Voer per private key het onderstaande uit. Zolang de private key ongeldig is, krijg je een foutmelding. In het andere geval krijg je de ontsleutelde tekst te zien. Uiteindelijk is de zevende private key de juiste om beide ciphertexten mee te ontsleutelen.

Afronden

We hebben een link van de fotowebsite Flickr te pakken. Als we die openen dan zien we een bekend kaartje. Je moet een beetje rondklikken in het account van Gummi Bear om het juiste bericht in beeld te krijgen. Klik eerst op ‘Gummi Bear’. Klik vervolgens op de tab ‘Favorites’. Je ziet dan 2 jongens naar een vliegtuig kijken. Klik op die foto. Scroll naar beneden en daar zien we dat Gummi Bear z’n identiteit geeft door het bovenste bericht af te sluiten met Sjors Keuninge.

Kortom, de voornaam van GummiB, de opdrachtgever, is Sjors.

Wouters kamer – Telefoonnummer opdrachtgever

We gaan een zoektocht ondernemen naar het telefoonnumer van Wouters opdrachtgever. In de driver box uit deel 1 zat nog een sim-kaartje die we niet hebben bekeken. Via die sim-kaart is de driver box vermoedelijk op afstand bediend of uitgelezen. Bij de sim-kaart is een .zip-bestandje te downloaden. De inhoud bestaat uit twee bestanden die vermoedelijk versleuteld gezien de inhoud en de extensie .enc. Maar welke versleutelingsmethode is gebruikt, is zo niet af te leiden uit de bestandjes.

We zullen dus op zoek moeten naar informatie over de versleutelingsmethode en nog belangrijker, de ontsleuteling.

Wanneer we kijken naar de sporen dan ligt er nog een tablet te wachten op onderzoek. Daar kun je een zip-bestandje vandaan downloaden. Deze is echter beveiligd en versleuteld met een wachtwoord. Ik heb kort gezocht naar een wachtwoord maar in dit geval probeer ik altijd de good old brute force methode. Je weet nooit of brute force iets oplevert en tijdens het kraken kun je rustig verder uitzoeken of het wachtwoord af te leiden is. De computer doet z’n werk wel. Voor brute force cracks is ‘John the Ripper’ nog altijd een van de beste stukjes software. Die gaan we nu ook inzetten.

John heeft een password hash nodig, die extracten we eerst uit het zip-bestand:

Vervolgens laten we John dit brute forcen:

Nou, dat duurde niet echt lang. Na 8 seconden weet John te vertellen dat het wachtwoord 1475963 is. De makers van crimediggers hebben hier aangestuurd op een brute force 🙂

De inhoud van het zip-bestandje blijkt een aanwijzing te bevatten over hoe de versleutelde bestanden op het sim-kaartje ontsleuteld kunnen worden:

Om het onderste openssl commando te kunnen uitvoeren moeten we eerst een SHA1-hash uitrekenen van enkele cijfers en het IMEI-nummer. Bij het sim-kaartje staat bij de sporen ook een IMEI-nummer genoemd. Die kunnen we gebruiken. Een enkele regel Ruby rekent de hash voor ons uit:

Deze hash gebruiken we om de sms.csv.enc bestandjes te ontsleutelen die we gevonden hebben aan het begin van dit hoofdstuk:

Enkel een van de twee bestandjes kunnen ontsleuteld worden. We hebben echter genoeg informatie. De driverbox heeft van 30 maart t/m 9 april sms’jes gestuurd naar 06-25293xxx met statusinformatie over de auto.