0x7DD

31 Mrt
31 maart 2013

Geek content aheadIn de afgelopen drie weken was Team High Tech Crime van de Nationale Politie hard bezig met het werven van mensen. Centraal stond de Cybercrime Challenge 0x7DD. Eigenlijk een soort een CTF (capture the flag) waar je drie weken over mocht doen en waarmee je kon laten zien hoe goed je wel niet was. Het werd gelanceerd tijdens een Tek Tok in Den Haag, waar ik ook gezellig bij was.

In de challenge stond ransomware centraal: virussen waarbij de gebruiker moet betalen om weer toegang te krijgen tot zijn of haar computer. De ‘rechercheur’ (ik dus) moest het meesterbrein achter de operatie te zien achterhalen.

Inmiddels is de challenge voorbij en in deze blogpost zal ik uitleggen hoe ik alles op heb gelost. Leuk om te lezen, handig om te vergelijken met hoe jij het hebt gedaan en misschien nuttig voor als je volgend jaar zelf mee wilt doen. Op sommige vragen zijn waarschijnlijk meerdere oplossingen mogelijk, zolang je maar op hetzelfde antwoord uitkomt!

Level 1: WHOIS

Vraag 1: Wat is de naam van de gijzelingsmalware die door Miss M wordt verkocht?

Het enige aanknopingspunt voor deze vraag was de volgende tekst, die op een nieuwsgroep zou zijn geplaatst:

Друзья! Развертывание вымогателей в Западную Европу больше не является проблемой, благодаря нашей уникальной бэкэнда вредоносных программ: H4ck3nb3rg версии 0x7DD. Многие наши клиенты уже стали миллионерами. Наша программа подходит поймать проигравших, которые используют Windows, Mac и Android. Наши программные блоки системы с помощью наших состоянии современных ботнетов. Он будет отображать экран по умолчанию или изображение по вашему выбору. Система может быть разблокирована, заплатив сумму в MeKash ваучеры или законных счетов с авторитетными европейскими банками, такими как оранжевым львов диване, BAN-бродят и Arbo банка. Новый H4ck3nb3rg 0x7DD не обнаруживается по поддержанию правопорядка!Ежемесячно лицензия стоит 5000 евро, доставка через наш. Лука-сайте Tor. Оплата с помощью кредитной карты от всех. Только три лицензии осталось!

Miss M.

Deze opdracht is makkelijk genoeg: voer dit aan Google Translate en er komt een prachtig vertaald stuk tekst uit. Ook zonder vertaling kun je er overigens vrij eenvoudig uithalen dat het juiste antwoord ‘H4ck3nb3rg’ is.

Vraag 2: Wat is het e-mailadres van Miss M?

Een interessante vraag, want dat blijkt niet uit de tekst. Onhandig is ook dat de opdracht niet de bron van het nieuwsgroepbericht geeft, dus daar is verder ook niets meer uit terug te leiden. Googlen op de oorspronkelijke tekst levert alleen maar vertaalsites op (en een heleboel spoilers). Een Googletje op alleen ‘H4ck3nb3rg’ lijkt echter wel wat op te leveren: een Pastebin-pagina met de volgende inhoud:

Delivered-To: <M8R-vftnqj@mailinator.com>
Received: from 193.200.198.87 ([193.200.198.87])
        by mail.mailinator.com with SMTP (Postfix)
        for M8R-vftnqj@mailinator.com;
        Fri, 22 Feb 2013 10:09:01 +0000 (UTC)
Received: by 193.200.198.87 with SMTP id j8so54729qah.8
        for <M8R-vftnqj@mailinator.com>; Fri, 22 Feb 2013 02:09:01 -0800 (PST)
MIME-Version: 1.0
X-Received: by 10.224.185.141 with SMTP id co13mr800511qab.33.1361527741255;
 Fri, 22 Feb 2013 02:09:01 -0800 (PST)
Received: by 10.49.71.168 with HTTP; Fri, 22 Feb 2013 02:09:01 -0800 (PST)
Date: Fri, 22 Feb 2013 11:09:01 +0100
Message-ID: <CAM-WngbS18XMX6utu-r3QzGf_34g25Z-E_Q2J5+m2z4h4hPrJg@mail.gmail.com>
Subject: H4ck3nb3rg
From: Miss M <missm7dd@gmail.com>
To: Undisclosed Recipients
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Friends! Deploying ransomware to Western Europe is no longer a problem, thanks to our unique malware backend: H4ck3nb3rg. Many of our customers have already become millionaires. Our software is suitable to catch losers who use Windows, Mac or Android. Our software blocks the system by using our state-of-the-art botnet. It will display a default screen or an image of your choice. The system can only be unlocked by paying an amount in MeKash vouchers or to legitimate accounts with reputable European banks such as GNI, BAN-ROAM and Arbo Bank. The new H4ck3nb3rg is not detectable by Law Enforcement! A monthly license costs 5000 euro, delivery through our .onion-site at Tor. Please have someone’s credit card ready. Only three licenses left!

Miss M

Naast dat we hier meteen de vertaling van het bericht hebben, hebben we hier ook het e-mailadres van Miss M: “missm7dd@gmail.com”.

Vraag 3: Vanaf welk IP adres is de e-mail verzonden?

Nu we de originele e-mail hebben, is dit makkelijk te beantwoorden. E-mailheaders bevatten altijd de servers waar ze langs zijn gekomen, in omgekeerde volgorde. Van onder naar boven komen we eerst een aantal interne IP-adressen tegen (10. nog wat); het eerste ‘echte’ IP-adres dat we zien is 193.200.198.87.

Vraag 4: Waar staat de M in Miss M voor?

Eén van de eerste dingen die ik deed met het IP-adres was een traceroute opvragen. Dit geeft aan hoe het IP-adres vanaf jouw computer bereikt wordt. De traceroute leverde één spannend ding op: 193.200.198.87 wijst naar missmonotropa.com. Het antwoord op deze vraag is dan ook ‘Monotropa’.

Vraag 5: Wat is de echte naam van MissMonotropa?

Het eerste dat ik deed was een WHOIS (domeinregistratiegegevens) opvragen van missmonotropa.com. De titel van dit level lijkt hier heel erg naar te hinten. Hieruit bleek helaas niets bijzonders; deze domeinnaam was blijkbaar geregistreerd door Certified Secure.

Oké, wat nu? Het is wel opvallend dat de vraag is gesteld zonder spatie tussen ‘Miss’ en ‘Monotropa’. Bovendien stond in de vorige challenge (van 2012) Twitter erg centraal. Mijn eerste vermoeden was dan ook: zou het een Twitter-naam zijn? Blijkbaar wel. Gelukkig zijn er niet veel tweets op het account, en deze springt er dan ook al snel met kop en schouders bovenuit:

De moeder van Miss Montropa spreekt haar dochter aan met ‘Liselotte’ en heeft als achternaam ‘Landervore’. Het antwoord is dan ook ‘Liselotte Landervore’.

Gefeliciteerd, rechercheur. Je hebt level 1 succesvol afgerond. De basis is erg belangrijk in het opbouwen van een dossier, want deze gegevens komen in het onderzoek en voor de rechtbank steeds terug. En ook andere politiemensen kunnen gegevens uit dit onderzoek nodig hebben. Die weten ze vanaf nu te vinden. Nu kunnen we dus echt van start!

Level 2: Find’r

De titel van dit level lijkt direct te verwijzen naar de volgende vraag:

Vraag 6: Onder welke naam heeft Liselotte Landervore een Flickr account?

Op Flickr zoeken naar de volledige naam levert niets op, maar met een Google-zoekopdracht naar ‘Liselotte Landervore’ komen we al snel uit op Tweakers.net, een van de partners in deze challenge. Hier heeft Liselotte een aantal reacties geplaatst; doorklikkende naar haar profiel en via haar GoT-reacties komen we uit bij deze reactie, waarin wordt gelinkt naar deze foto op het profiel van monomiss19:

ccc1

Het juiste antwoord is dan ook ‘monomiss19’.

Vraag 7: Op welk adres woont Liselotte Landervore?

De photostream op Flickr waar deze foto in zit heet ‘Thuis’; een duidelijke indicatie dat deze foto’s rondom het huis van Liselotte zijn genomen. Het enige leesbare op de foto is dat dit genomen is aan de ‘Silostraat’. In Nederland zijn er volgens Google Maps twee Silostraten: één in Rotterdam en één in Winterswijk; het is al snel duidelijk dat die in Winterswijk wordt bedoeld. Uit de overige foto’s blijkt dat het gaat om het hoekhuis van de Landbouwstraat op de Korenstraat; uit Maps volgt dat het hier gaat om de Korenstraat 2. Het juiste antwoord is dan ook ‘Korenstraat 2, Winterswijk’.

Gefeliciteerd. Je hebt level 2 succesvol afgerond. Je bent geslaagd als tactisch rechercheur. Door handig openbare bronnen te combineren heb je het onderzoek definitief aan het rollen gekregen! We weten nu wie de ransomware verspreidt. Maar opereert onze verdachte alleen?

Level 3: Hold the Phone

Dit level begint met een korte uitleg dat Liselotte niet het meesterbrein kan zijn en dat we een tap aan gaan vragen op het verkeer van haar om het brein te achterhalen. Om dit te kunnen doen, moeten we een bevel invullen. Hierin zitten verstopt een aantal vinkjes waarin je aan kunt geven welke data je wilt hebben; we vinken gewoon alles aan. Daarop krijgen we een bestand ter download aangeboden. Dit bestand bevat een aantal pcap-bestanden die we met Wireshark moeten openen.

Vraag 8: Wat is de nickname van het brein achter de ransomware organisatie?

Door het grootste bestand (internet.pcap) heen scrollend, zag ik vooral veel TCP- en DNS-pakketten. Dat is logisch, want dit is een gewone internetsessie. Verder ook veel HTTP-verkeer, en opvallend genoeg en gespot omdat het aan het einde van het bestand voorkomt, ook XMPP-verkeer. XMPP is een chatprotocol, erg interessant voor onze doeleinden dus. Een filter op ‘xmpp.message’ is dan ook snel gebouwd: het eerste berichtje dat te zien is, is het volgende:

XMPP Protocol
  MESSAGE [type="chat"]
    from: vultura@h4ck3nb3rg/BitlBee
    to: missmonotropa@h4ck3nb3rg/1685730595136168031238802
    type: chat
    BODY [value="hey"]
      value: hey

De rest van het gesprek gaat als volgt:

< hey
> hi :*
< j ben te laat
> sry, tentamen
< ok
> harvest staat klaar
< kom mr door
> maar was niet zo goede week
< ??
> is weinig betaald
> 3x ofzo
< wtf
< moet minstens 20k euro zijn
< k zie tog hoeveel ze klikken!!1!
< j fokt niet met me
< dan lig j eruit
> heb je ff
< nee
< ben j nog
< LISELOTT!
< ???
> ben ik weer
> heb nu goede harvest
> had verkeerd gekeken
< LOL JY DURFT
< WAT HEB J AAN
> lol
> hier is de updated tc
< WERKT NIET
< MET JE JABBERPASS TOG???
> ja
> ehm capslock? ;)
< lol
< was k vergeten
< ok is open
> ok
< nice
< lopen binne >;D
> moet nu koken
< wrom zit die hidden er nog in?
> kak
> sorry
> niemand die het ziet
< jy ben gevaarlijk
> niet voor jou..
< weet ik niet
< mr j ben het waart
> :*

Duidelijk het gesprek tussen twee criminelen: tussen Vultura en Miss M. Het antwoord op deze vraag is dus ‘Vultura’.

Gefeliciteerd. Je hebt level 3 succesvol afgerond. Je hebt bewezen dat je de basisvaardigheden van een digitaal rechercheur onder de knie hebt. Met de tactische informatie en de juiste tapgegevens heb je een solide zaak om verder op te rechercheren. Want we zijn er nog niet. Ben jij de ultieme digitaal rechercheur? Hiervoor zal je, alleen of samen, alles uit de kast moeten trekken …

Level 4: Brute Force

Het level begint met de uitleg dat Liselotte is aangehouden en dat er een geheugendump is gemaakt en een TrueCrypt container is aangetroffen. Daarnaast is er een ‘briefing’ over de zaak-IJsvogel:

Vraag 9: Naar welk rekeningnummer werd door Vultura op 25 februari 2013 een bedrag van 5.000 dollar overgemaakt?

Het doel lijkt duidelijk: gebruik de geheugendump en de TrueCrypt-container om de vraag te beantwoorden. Er leek heel erg gehint te worden op een ‘zwakheid’ in TrueCrypt waarbij je met een tool de keys van een TrueCrypt-container uit het geheugen kunt halen. Aan de hand van een aantal instructies op een andere website wist ik een aantal sleutels te achterhalen:

$ ./aeskeyfind memory.raw
f2805b4dd46de488d739265b56da4287
059d3622a2e6646c04f23d81f58afeb0

Maar het is me tot op heden compleet onduidelijk wat ik met deze keys zou moeten. Een andere site raadde het gebruik van Passware aan, maar die tool wist zich helemaal geen raad met de container.

Terug naar af dus. Ik wist me te herinneren dat het wachtwoord van de TrueCrypt-container volgens de chat hetzelfde zou zijn als dat van Jabber. Bovendien stond dit bericht ook in het pcap-bestand:

XMPP Protocol
  MESSAGE [type="chat"]
    from: h4ck3nb3rg
    to: missmonotropa@h4ck3nb3rg/1685730595136168031238802
    type: normal
    BODY
      value: Message of the day:

      - there are no rules

      - allowed password format: ^[a-zA-Z0-9., _-]{4,6}$

Dat beperkt het aantal mogelijkheden voor een wachtwoord wel, maar er staat nergens het begin van een sessie in de pcap. Gelukkig is er nog een tweede pcap: die van de mobiele telefoon. Hierin begint er wel een sessie:

XMPP Protocol
  IQ [id="2" type="set"]
    id: 2
    type: set
    QUERY [xmlns="jabber:iq:auth"]
      xmlns: jabber:iq:auth
      USERNAME
        CDATA: missmonotropa
      DIGEST
        CDATA: b8f6a6eb3bd3f928647ce6b8b787eddb5dc13a74
      RESOURCE:
        CDATA: old-client

Het wachtwoord (maar dan gehasht en gesalt) is b8f6a6eb3bd3f928647ce6b8b787eddb5dc13a74. Om dit te decrypten moeten we even weten hoe XMPP werkt: de digest is SHA1(concat(sid, password)), waarbij sid het sessienummer is (en dat is in dit geval 3807744839, zo blijkt uit de pcap).

Met een simpel Python-scriptje zouden we nu het wachtwoord kunnen achterhalen:

import hashlib, itertools, math

charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_., "
hash = "b8f6a6eb3bd3f928647ce6b8b787eddb5dc13a74"
salt = "3807744839"

total = math.factorial(len(charset)) /  math.factorial(len(charset)-6)
i = 0

for word in itertools.permutations(charset, 6):
    if i % 100000 == 0:
        print str(round(float(i) / total * 100, 2)) + "% " + "".join(word)
    if hashlib.sha1(salt+"".join(word)).hexdigest() == hash:
        print "found",  "".join(word)
        break
    i += 1

Dit script is verre van perfect: het duurt zo’n 5 uur om een antwoord te vinden met dit script. Daarnaast neemt het script aan dat het wachtwoord zes tekens is en dat er geen dubbele letters in zitten. Het werkt veel beter om de GPU te gebruiken, en omdat SHA1(concat(salt, password)) een vrij standaardmethode is om te hashen, kunnen we hiervoor oclHashcat-plus gebruiken:

$ ./oclHashcat-plus64.bin -m 120 -a 3 b8f6a6eb3bd3f928647ce6b8b787eddb5dc13a74:3807744839 ?a?a?a?a?a?a

Hier geven we op dat het om algoritme 120 (sha1($salt.$pass)) gaat, dat we gebruik maken van brute force (-a 3), wat de bekende waarden zijn en wat het verwachte patroon is (6 alfanumerieke karakters). Dit geeft in minder dan een paar minuten de oplossing:

b8f6a6eb3bd3f928647ce6b8b787eddb5dc13a74:3807744839:u9.fwh

Als je oclHashcat niet aan de praat krijgt, is er nog altijd het internet om je van dienst te zijn: al snel blijkt dat ‘3807744839u9.fwh’ de reverse van de hash is; het wachtwoord van de TrueCrypt-drive is dus ‘u9.fwh’.

Met dit wachtwoord kunnen we eenvoudig de inhoud laden. Eén van de bestanden daarop is transactions.png:

transactions

Het antwoord is dus blijkbaar 6049474.

Vraag 10: Welk IRC kanaal wordt gebruikt door Vultura en Miss M?

Op de TrueCrypt-schijf komen we nog een aantal pdf’jes tegen, maar niet het antwoord op deze vraag. Maar in het chatgesprek werd er nog gesproken over “die hidden”… is er dan nog een verborgen TrueCrypt-drive? Daar hebben we helemaal geen wachtwoord van gezien…

Gelukkig zit er een hint in het YouTube-filmpje dat we eerder hadden gezien: een spatie achter het wachtwoord onthulde een verborgen TrueCrypt-schijf in de zaak-IJsvogel. Wellicht dat dat hier ook werkt… En ja hoor, het wachtwoord ‘u9.fwh ‘ laat een andere TrueCrypt-drive zien. Hierop treffen we een tweetal bestanden aan: ‘crypto’ dat een programmaatje blijkt te zijn, en ‘config’ met deze inhoud:

/*
 * irssi config voor wekelijkse meeting
 */

servers = (
  {
    address = "54.228.228.142";
    port = "50255";
    use_ssl = "yes";
    ssl_verify = "no";
    autoconnect = "yes";
    chatnet = "BOT";
    password = "GKqifIEeQhpgPv3po6R7m3Vv";
  }
);

chatnets = {
  BOT = {
    type = "IRC";
  };
};

channels = (
  { name = "#VrD8r4Nv"; chatnet = "BOT"; autojoin = "Yes"; },
);

Dit is blijkbaar een configuratiebestand van het IRC-chatprogramma irssi. Het vertelt ons de verbindingsgegevens van een IRC-server, en een kantaal op die server: ‘#VrD8r4Nv’. Dit is dan ook het juiste antwoord.

Gefeliciteerd. Je hebt level 4 succesvol afgerond. Je hebt alles in je om een goed digitaal rechercheur te worden. Tot slot krijg je de kans om echt indruk op ons te maken. In de eindronde kun je laten zien dat je allang bij het Team High Tech Crime had moeten werken! Haal alles uit de kast en identificeer het brein achter de organisatie. Zorg jij ervoor dat de politie een eind kan maken aan de verspreiding van deze ransomware?

Level 5: Endboss

Het allerlaatste en het moeilijkste level van de challenge, met een vraag die weinig hints biedt:

Vraag 11: Wat is de laatst bekende hostname van Vultura?

Het lijkt duidelijk dat we in moeten loggen op de IRC-server om hier achter te komen. Op IRC is het echter nogal een chaos:

irssi

Wat moeten we hier nou mee? Naar aanleiding van een tip heb ik het ‘/who’-commando uitgevoerd, dat de lijst van alle gebruikers in het kanaal laat zien, inclusief hun omschrijvingen. Dit is de uitvoer (met wat geknip om het kort te houden en om overige deelnemers buiten beschouwing te laten):

-!-  #VrD8r4Nv ixuvcdfg  H+  0  ~ixuvcdfg@no.ip [None]
-!-  #VrD8r4Nv furwjfdt  H+  0  ~furwjfdt@no.ip [None]
-!-  #VrD8r4Nv zqlihxyp  H+  0  ~zqlihxyp@no.ip [None]
-!-  #VrD8r4Nv xuiwgkmw  H+  0  ~xuiwgkmw@no.ip [None]
-!-  #VrD8r4Nv puspsyix  H+  0  ~puspsyix@no.ip [None]
-!-  #VrD8r4Nv wcyfvsgw  H+  0  ~wcyfvsgw@no.ip [None]
-!-  #VrD8r4Nv izzhtwbe  H+  0  ~izzhtwbe@no.ip [None]
-!-  #VrD8r4Nv jobpdsbs  H+  0  ~jobpdsbs@no.ip [None]
-!-  #VrD8r4Nv kajjisyj  H+  0  ~abpfehoh@no.ip [control bot]
-!-  #VrD8r4Nv CHANSERV  H*@ 1  chan@services.int [channel registration service]

Hieruit springt duidelijk dat er een ‘control bot’ is op deze IRC server. De naam van de bot verandert elke keer, maar de beschrijving blijft hetzelfde. Openen we een chat met kajjisyj, dan krijgen we dit te zien:

 <ralphje> help
 <kajjisyj> dfI8J5hkgaQ6vtYtKK2d7Qlou650S9m1FZ697bZ01TCOTnCTWtyCzqyZe9UV4bBHZN9nkm4j/2PyZ/0L6ga3AQ==

Dat lijkt op Base64-encoding, dus het eerste dat ik deed was dit decoden. Daar komt alleen maar onleesbare troep uit. De eerste paar bytes van deze troep zijn ook geen bekende header van een compressieformaat (zoals in de challenge van 2012), dus daar kunnen we niet veel mee.

Wellicht hebben we wat aan het crypto-bestand. Het lijkt erop dat we dit uit moeten voeren op Linux, en inderdaad gebeurt er wat:

$ ./crypto
password:

1. encrypt
2. decrypt
0. quit
menu: 2

msg: dfI8J5hkgaQ6vtYtKK2d7Qlou650S9m1FZ697bZ01TCOTnCTWtyCzqyZe9UV4bBHZN9nkm4j/2PyZ/0L6ga3AQ==
decrypted: <troep>

Na wat spelen lijkt het erop dat de uitvoer van het programma afhankelijk is van het ingevoerde wachtwoord. Pas als we het juiste wachtwoord hebben, kunnen we lezen wat de bot teruggeeft.

Dat deed me denken aan de memory dump van eerder: het programma moet ergens zijn wachtwoord in het geheugen opslaan als hij gaat versleutelen of ontsleutelen: het wachtwoord hoeft immers maar één keer op te worden gegeven aan het programma. Als het ‘crypto’-programma draaide op het moment dat de dump werd gemaakt, kunnen we dus het juiste wachtwoord achterhalen.

We kunnen deze memory dump uitlezen met Volatilitux, een afgeleide van Volatility, maar dan geschikt voor Linux (en zonder uit te hoeven zoeken wat de juiste profile is van het besturingssysteem). Als eerste kijken we naar de lijst van processen dat draaide op het moment dat de dump werd gemaakt:

$ ./volatilitux.py -f memory.raw pslist
Name                PID       PPID
swapper             0         0
init                1         0
kthreadd            2         0
migration/0         3         2
ksoftirqd/0         4         2
...
sshd                849       780
bash                850       849
crypto              866       850

Daar zit ons crypto-programmaatje ook bij, dus met een simpel commando’tje kunnen we nu het geheugen van het proces naar een bestand schrijven:

$ ./volatilitux.py -f memory.raw memdmp -p 866 -o 866.dump
266240 bytes dumped to 866.dump

Dit bestand is wat aan de grote kant, zeker als we geen idee hebben waar we precies naar zoeken. (Een strings op de dump levert niet veel op.) Omdat we zelf het programmaatje hebben, kunnen we echter wel vergelijkingsmateriaal krijgen. We weten dan precies waar we moeten zoeken naar het wachtwoord. Om dat te doen startte ik het crypto-bestand op en voerde ik het wachtwoord ‘abcdefg’ in. In een ander venster deed ik dit:

# ps aux | grep crypto
11403  0.0  0.0   1060   260 pts/0    S+   12:47   0:00 ./crypto
# cat /proc/11403/maps
08048000-0810a000 r-xp 00000000 ca:02 1507341         /home/crypto
0810a000-08115000 rw-p 000c1000 ca:02 1507341         /home/crypto
08115000-08117000 rw-p 08115000 00:00 0
08624000-08646000 rw-p 08624000 00:00 0               [heap]
f7f7f000-f7f81000 rw-p f7f7f000 00:00 0
f7f81000-f7f82000 r-xp f7f81000 00:00 0               [vdso]
ff86d000-ff882000 rw-p 7ffffffea000 00:00 0           [stack]

Hiermee hebben we de geheugenlocaties van de heap en de stack van mijn eigen crypto-programma achterhaald. De heap en de stack zijn de enige aannemelijke plaatsen voor het opslaan van het wachtwoord. Deze kunnen we vrij eenvoudig dumpen:

# gdb --pid 11403
(gdb) dump memory /tmp/stack-abcdefg 0xff86d000 0xff882000
(gdb) dump memory /tmp/heap-abcdefg 0x08624000 0x08646000

Als we dit openen met een hex editor en we zien dan in de stack op een gegeven moment dit verschijnen:

10 58 62 08 9C 33 0E 08 07 00 00 00 58 29 2E 6D  .Xb..3......X).m
7A 23 67 63 3C 77 30 66 56 6D 2E 42 42 4D 56 6D  z#gc<w0fVm.BBMVm
54 7A 21 66 32 47 69 74 71 4C 4E 28 2E 36 4E 62  Tz!f2GitqLN(.6Nb
38 3B 4A 53 6B 34 3F 46 26 4C 42 21 52 77 6D 5F  8;JSk4?F&LB!Rwm_
50 6D 25 61 6E 6D 34 64 72 62 46 25 51 73 66 68  Pm%anm4drbF%Qsfh
67 6A 41 58 23 39 57 5C 3E 78 5D 6F 4E 29 53 23  gjAX#9W\>x]oN)S#
76 57 3D 43 23 51 2C 74 6C 2B 79 42 24 3E 63 44  vW=C#Q,tl+yB$>cD
2D 5D 55 2F 75 32 6B 6C 63 27 60 37 2F 6D 6D 2A  -]U/u2klc'`7/mm*
23 30 26 5A 3A 66 53 5F 70 2B 26 4D 61 62 63 64  #0&Z:fS_p+&Mabcd
65 66 67 66 3D 75 72 2E 60 39 44 5C 5F 33 49 5D  efgf=ur.`9D\_3I]
3E 55 6C 78 48 77 63 31 2A 51 35 6D 37 51 4A 5B  >UlxHwc1*Q5m7QJ[
38 2E 46 54 5C 72 3C 41 30 5F 57 48 4B 59 2A 42  8.FT\r<A0_WHKY*B
33 75 40 34 4C 28 45 55 59 59 47 49 36 95 32 79  3u@4L(EUYYGI6•2y
54 17 3F B1 3C 5C BF 30 60 53 C3 E5 6E FA 71 FB  T.?.<\.0`S..n.q.
27 F5 CC 2C 9B D4 90 00 25 B5 99 A9 63 54 46 6C  '..,....%...cTFl
55 47 63 7A 53 6A 45 3D 00 0B 88 FF 00 4A FD CF  UGczSjE=.....J..

We zien hierin duidelijk ons wachtwoord terug. Na wat ander vergelijkingsmateriaal te hebben gemaakt met verschillende lengtes van het wachtwoord, lijkt het erop dat de string ‘cTFlUG’ altijd even ver van het begin van het wachtwoord af staat. Een vergelijkbaar stuk hexadecimale code is dan ook eenvoudig terug te vinden in de memory dump van Miss M:

10 D8 91 09 9C 33 0E 08 12 00 00 00 5C 70 39 71  .....3......\p9q
5F 75 59 74 6F 3D 49 75 53 6D 6C 51 45 72 5E 2F  _uYto=IuSmlQEr^/
6D 28 61 78 21 55 65 3B 60 3D 4B 75 66 64 46 24  m(ax!Ue;`=KufdF$
38 58 77 2C 74 46 5A 4C 6C 25 22 37 51 60 79 43  8Xw,tFZLl%"7Q`yC
67 5F 74 42 6E 5E 5C 53 54 2C 27 3F 49 4C 42 3A  g_tBn^\ST,'?ILB:
29 3F 46 22 3E 59 4D 2F 5E 29 45 68 42 78 64 62  )?F">YM/^)EhBxdb
5C 5E 29 29 75 64 5B 4F 4A 62 6D 4C 67 35 66 70  \^))ud[OJbmLg5fp
2D 65 71 4A 43 78 58 5A 5A 57 47 21 54 31 3C 69  -eqJCxXZZWG!T1<i
6E 45 72 42 62 2C 70 65 47 63 37 34 37 65 53 43  nErBb,peGc747eSC
6F 48 57 45 41 30 72 74 4D 76 41 78 57 48 53 70  oHWEA0rtMvAxWHSp
38 2F 55 56 2F 59 6F 5E 34 56 50 72 5D 67 29 32  8/UV/Yo^4VPr]g)2
72 2C 3E 4F 36 6A 5C 62 5C 41 2B 50 26 37 45 72  r,>O6j\b\A+P&7Er
45 53 4D 2E 31 42 6B 78 51 74 6F 68 6C 99 16 0E  ESM.1BkxQtohl...
2C DD 68 F6 8B 9E 09 93 84 53 FC 49 9C A6 AB 9D  ,.h......S.I....
F2 EE D1 43 99 66 3E 1C B2 46 1B 40 63 54 46 6C  ...C.f>..F.@cTFl
55 47 63 7A 53 6A 45 3D 00 AD A3 BF 00 F2 27 B7  UGczSjE=......'.

Het is nu zeer aannemelijk dat het wachtwoord begint met ‘7eSC’, maar we weten niet hoe lang deze is. Nou zijn er twee mogelijkheden: de lengte brute forcen (gewoon steeds één karakter meer kopiëren en kijken of er geen troep uit het crypto-programma komt), of een andere manier vinden om de lengte te achterhalen. Nadat ik nog een dump had gemaakt van het crypto-programma, maar dan met het wachtwoord ‘abcd’ viel me op (na een tip te hebben ontvangen) dat het getal na ’33 0E 08′ op de eerste regel van de dump wijzigde:

10 18 53 08 9C 33 0E 08 04 00 00 00 76 5C 3E 5D  ..S..3......v\>]

In mijn eerdere dump stond hier ’07’, en in de dump van Miss M staat daar ’12’. De lengte van het wachtwoord dat we zoeken is dus 18 (een hexadecimale 12 is een decimale 18). Het juiste wachtwoord is dan ook ‘7eSCoHWEA0rtMvAxWH’.

Voeren we dit aan het crypto-programma, dan komen we al een heel stuk verder:

$ ./crypto
password: 7eSCoHWEA0rtMvAxWH

1. encrypt
2. decrypt
0. quit
menu: 2

msg: dfI8J5hkgaQ6vtYtKK2d7Qlou650S9m1FZ697bZ01TCOTnCTWtyCzqyZe9UV4bBHZN9nkm4j/2PyZ/0L6ga3AQ==
decrypted: supported commands: info, help, history, stats, zombies

Nou rest ons alleen nog praten met de bot. We moeten onze berichten encrypten met de tool (menu-item 1) en de resultaten weer decrypten (menu-item 2):

msg: info
encrypted: GjnYkG7/GWPDfU3uxIsFEA==
msg: VQCz4CqhEHRw5cWmZavzpKJQ29MmMCns/yyTbKiZQlI=
decrypted: Ransomware bot v0.45
msg: stats
encrypted: KXxPzUrBir4IXK6ez8MSYA==
msg: XsL8fK3URyJ7GgYNlD+KLa5EHlufe2Y/QHWiLny6GaLp4Vf9ZFH8RCTnfG9uqD0DDdq3jZnrFzEAD9xPP9wKTQ==
decrypted: 846945 machines and received 362976 payments so far
msg: zombies
encrypted: dhex6OLtifMnEaAKTMPkkg==
msg: kH1knE7GLCM6PTDCbNht75YiLAulydDIG9IWHtei864J12KULsx9R7wIxriG2euf
decrypted: currently 9382 zombies are waiting orders
msg: history
encrypted: 3x6o42tX97fE/EceLRTn6A==
msg: 7cK6NZ3unxXBwreX2W0ZlijslwoYbbxaLh+uSNSJodEVaxYTUmSXoDa/JmsmsToO1lZwFUFn2715kFBy1+RlLRmTO/E4QalBznKZG7g0NodQvCvI09f4jXQQ6yUAchVw
decrypted: last login from Vultura@home9ac533.vulturacommunicationhq.com on 2013-03-23 13:14:28

De laatst bekende hostname van Vultura is dus ‘home9ac533.vulturacommunicationhq.com’.

Vraag 12: Wat is de werkelijke naam van Vultura?

Zou het dan toch? Zouden we nu dan toch een WHOIS uit kunnen voeren op vulturacommunicationhq.com?

$ whois vulturacommunicationhq.com
Registrant:
Zevendees, Oscar
   Roosveldstraat 404
   Haarlem, NH 2013 cc
   NL

   Domain Name: VULTURACOMMUNICATIONHQ.COM

Het is even twijfelen of dit misschien een medewerker is van Certified Secure, maar wie woont er nou op huisnummer 404? Het juiste antwoord is dan ook ‘Oscar Zevendees’.

Gefeliciteerd rechercheur. Je hebt de identiteit van het meesterbrein achterhaald en het onderzoek voltooid! Je hebt voldoende bewijs verzameld om de verdachten voor de rechter te brengen. We zijn onder de indruk van jouw skills – je bent een digitaal rechercheur in hart en nieren! Weet je zeker dat je niet al bij ons op de loonlijst staat?

Ik moet bekennen dat het bovenstaande verhaal wellicht klinkt alsof ik de challenge in een uur op heb gelost. Dat is geenszins waar. Vooral de elfde vraag heeft me veel tijd gekost: zonder de juiste tools is het erg lastig om te achterhalen wat er in de memory dump staat. Daarnaast is het erg handig om een goed werkende Linux-installatie te hebben. Al met al heeft het me dus veel tijd gekost, en het had me zeker nog meer tijd gekost als ik niet een paar hints had gekregen van anderen, maar het was zeker leuk om te doen.

2 reacties
  1. |Rat says:

    Goed gedaan,

    Ik zat zelf vast met de AES-keys. Volatilitux had ik ook al in gebruik, maar dat was dus voor een ander level zie ik :).

    Met vriendelijke groet,

    |Rat

    Reageer
  2. Xumpy says:

    Haha, Volatilitux ga ik zeker ook eens bekijken want ik heb voor die laatste vraag 4 complete memory dumps van ubuntu vmwares met elkaar liggen vergelijken. Na lang zoeken naar een referentie botste ik uiteindelijk ook op het wachtwoord. Een voordeel aan vmware memory dump is dat de key press ook opgeslagen wordt. Dus om het complete wachtwoord te vinden moest ik de memory dump gewoon verder doorzoeken op het eerste deel van het wachtwoord. Uiteindelijk bots je er wel op.

    Reageer

Laat een reactie achter

Wil je meedoen met de discussie? Je bent vrij om een reactie achter te laten!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *