Clicky Skip to main content
Nu hulp nodig bij een cyberincident?
Bel 24/7: 088-2747800

Lorenz ransomware: analyse en gratis decryptor

Door 25 juni 2021 april 9th, 2023 Blog, CERT

BleepingComputer heeft laatst geschreven over een nieuwe ransomwarefamilie die organisaties over heel de wereld als doelwit heeft: Lorenz. Net zoals vele andere bekende ransomwarefamilies, breekt Lorenz ook in op de netwerken van organisaties en perst ze op twee manieren af. Eerst door gegevens te stelen en vervolgens diezelfde gegevens te versleutelen. Daarna wordt er gedreigd dat de buitgemaakte gegevens openbaar worden gemaakt als er geen losgeld wordt betaald. De losgeldeisen zijn tot nu toe aanzienlijk: tussen de $500.000 en $700.000.

We hebben op basis van onze analyse van de Lorenz-ransomware een proces kunnen ontwikkelen dat in sommige gevallen getroffen bestanden weer kan ontsleutelen zonder dat er losgeld hoeft te worden betaald. In deze blogpost gaan we wat nader in op een aantal details van deze ransomware. Bovendien komen we met een gratis decryptor voor Lorenz. De decryptor is binnenkort gratis te downloaden via het platform NoMoreRansom.

Algemene omschrijving

Op het eerste gezicht lijkt het erop dat deze ransomware is geschreven in C++ met behulp van Microsoft Visual Studio 2015. Wat ons opviel in de twee samples die we hebben geanalyseerd, is dat ze beide gecompileerd zijn met debug-informatie ondanks dat ze gecompileerd lijken te zijn in release-modus. Debug-informatie kan nuttig zijn, omdat het vaak de analyse wat makkelijker maakt.

Zoals wel vaker het geval is met ransomware, creëert Lorenz in het begin ook eerst een Mutex. De Mutex heeft de naam ‘wolf’ gekregen en wordt ingezet om te voorkomen dat de ransomware twee keer in parallel wordt opgestart. Een ander interessante observatie is dat Lorenz, voordat met de versleuteling wordt gestart, de computernaam van het geïnfecteerde systeem naar een command-and-control-server stuurt. In de samples die wij hebben geanalyseerd richtten de verbindingen zich via het IP-adres op TCP-poort 55 op de command-and-control-server.

Bestandsversleuteling

De Lorenz-ransomware gebruikt een combinatie van RSA en AES-128 in de modus CBC om bestanden op een geïnfecteerd systeem te versleutelen. Er wordt voor ieder bestand een willekeurig wachtwoord gegenereerd en vervolgens wordt er met behulp van de functie CryptDeriveKey een encryptiesleutel afgeleid.

Bestanden die door ransomware versleuteld zijn, bevatten doorgaans voetteksten, omdat deze makkelijk aan een bestand kunnen worden toegevoegd. Lorenz doet dat iets anders. In plaats van een voettekst wordt er voordat het bestand wordt versleuteld een koptekst geplaatst. Hierdoor is de ransomware wat minder efficiënt, omdat het de inhoud van elk bestand moet kopiëren. De koptekst bevat de waarde: ‘.sz40’ gevolgd door de encryptiesleutel voor het RSA-versleutelde bestand. Nadat de koptekst van het versleutelde bestand is geschreven, wordt elk bestand volledig versleuteld in plaats van in kleine blokjes van 48 bytes. Versleutelde bestanden krijgen de extensie: ‘.Lorenz.sz40’.

Volgens BleepingComputer, blijkt de Lorenz-ransomware een variant te zijn van de ThunderCrypt-ransomware. Wij hebben ThunderCrypt nog niet geanalyseerd en we kunnen daarom niet met zekerheid zeggen of de bestandsversleuteling inderdaad vergelijkbaar is of niet.

Fout in encryptie

Lorenz versleutelt elk bestand in blokken van 48 bytes. Het leest de volgende 48 bytes (of dat wat beschikbaar is) van het originele bestand. Het volgende nieuw verkregen datablok wordt daarna versleutelt en weggeschreven naar het versleutelde bestand. Dit encryptie algoritme is te zien in onderstaand screenshot.

Als we wat verder kijken, dan zien we dat het probleem ligt bij het gebruik van de CryptEncrypt-functie. De relevante parameters zijn de 5e, 6e en 7e. Deze parameters vertegenwoordigen respectievelijk de buffer waarin de zojuist gelezen data staat, de lengte van deze beschikbare data en de totale grootte van de ‘read_buffer’.

Voor zover we kunnen zien, wordt CryptEncrypt verteld dat de ‘read_buffer’ 48 bytes groot is. Dat betekent dat er tijdens het versleutelen van dit blok niet meer dan 48 bytes geschreven kan worden. Als we nog wat dieper graven in de documentatie van de CryptEncrypt-functie dan zien we het volgende:

“Als een grote hoeveelheid data moet worden versleuteld, dan kan dit in secties worden gedaan door herhaaldelijk CryptEncrypt aan te roepen. De parameter FINAL moet bij de laatste aanroep naar CryptEncrypt worden ingesteld op TRUE, zodat de versleutel-engine het versleutelproces goed kan voltooien. De volgende extra acties worden uitgevoerd als FINAL op TRUE is ingesteld:

Als de sleutel een ‘block cipher’-sleutel is, wordt de data opgevuld tot een veelvoud van de blokgrootte van de code. Als de lengte van de data gelijk is aan de blokgrootte, dan wordt er een extra blok opvulling aan de data toegevoegd.”

Zoals eerder vermeld, gebruikt Lorenz het algoritme AES-128. Dit is een vorm van blokvercijfering met een blokgrootte van 16 bytes. Als de grootte van ‘read_buffer’ kleiner is dan 48 bytes, wordt de data erin opgevuld tot maximaal 48 bytes. Is de beschikbare data precies 48 bytes groot, dan voegt CryptEncrypt een extra blok opvulling toe. De ‘read_buffer’ moet dan minstens 64 bytes groot zijn. Als gevolg daarvan mislukt CryptEncrypt, waardoor de versleuteling wordt onderbroken. Het laatste blok van het bestand wordt dan nooit geschreven en gaat daarom verloren. Het laatste blok met opvulling wordt natuurlijk alleen maar toegevoegd als FINAL (de derde parameter voor CryptEncrypt) ingesteld staat op TRUE. Als dit niet het geval is, dan mislukken ook alle andere blokken.

Het gevolg van deze bug is dat voor elk bestand dat een veelvoud van 48 bytes groot is, de laatste 48 bytes verloren gaan. Zelfs als je een decryptor hebt ontvangen van de schrijvers van de malware kunnen deze bytes niet worden hersteld.

Gratis decryptor

We zijn op basis van onze analyse van de Lorenz-ransomware tot de conclusie gekomen dat we (niet-gecorrumpeerde) getroffen bestanden in sommige gevallen kunnen ontsleutelen zonder het losgeld te hoeven betalen. Ondersteunde bestandstypen zijn onder andere Microsoft Office-documenten, pdf-bestanden en bepaalde afbeeldings- en filmtypen. We hebben een decryptor gebouwd die we gratis ter beschikking stellen aan de slachtoffers van Lorenz. De decryptor is gratis te downloaden via het NoMoreRansom platform.

Indicators of compromise (IoCs)

 

Indicator Description
71cdbbc62e10983db183ca60ab964c1a3dab0d279c5326b2e920522480780956

 

Lorenz ransomware
4b1170f7774acfdc5517fbe1c911f2bd9f1af498f3c3d25078f05c95701cc999

 

Lorenz ransomware
157[.]90[.]147[.]28 C2
172[.]86[.]75[.]63 C2

Kijk voor meer informatie over de Lorenz-samples op:

https://otx.alienvault.com/indicator/file/71cdbbc62e10983db183ca60ab964c1a3dab0d279c5326b2e920522480780956
https://otx.alienvault.com/indicator/file/4b1170f7774acfdc5517fbe1c911f2bd9f1af498f3c3d25078f05c95701cc999

Close Menu