Nemty 2.2 en 2.3: analyse van de cryptografie en een decryptor voor sommige bestandstypen

Door 20 december 2019 november 20th, 2020 Blog
encryption files

Tesorion heeft eerder decryptors voor de Nemty-ransomware tot en met versie 1.6 vrijgegeven. Onlangs zijn er nieuwe versies van Nemty opgedoken. In deze blogpost beschrijven we hoe een vreemde variant van AES-128 counter mode-versleuteling (CTR) in Nemty 2.2 en 2.3 is gebruikt voor de bestandsversleuteling. We kondigen ook de beschikbaarheid aan van een gratis decryptor voor standaard Office-documenten die door Nemty 2.2 en 2.3 zijn versleuteld.

Inleiding

Nadat we enkele maanden geleden onze blog over een decryptor voor Nemty 1.4 publiceerden, reageerde de auteur van Nemty zoals verwacht door snel Nemty 1.6 uit te brengen, waarin die ons zelfs expliciet bedankte voor ons artikel. We konden kort daarna echter nog steeds een gratis decryptor voor Nemty 1.6 beschikbaar stellen. Hierna duurde het even voordat er weer nieuwe Nemty-versies opdoken, maar de auteur van Nemty heeft blijkbaar niet stilgezeten, aangezien onlangs diverse nieuwe Nemty-versies zijn ontdekt. In deze blogpost analyseren we versies 2.2 en 2.3 van de Nemty-ransomware.

In Nemty 1.5 en lager gebruikte de auteur een aangepaste AES-256-CBC-implementatie met verschillende bugs. Gelukkig werd in Nemty 1.6 een standaard AES-128-CBC gebruikt, wat het voor iedereen veel makkelijker maakte. Maar zoals we hieronder zullen zien, heeft de auteur in Nemty 2.2 en 2.3 opnieuw gekozen voor een aangepaste implementatie van de cryptografie en zijn er twee bugs in de cryptografische code geïntroduceerd.

In de rest van deze blogpost bekijken we het cryptografische algoritme dat wordt gebruikt om bestanden te versleutelen en kondigen we de algemene beschikbaarheid aan van een gratis decryptor voor standaard Office-documenten die door Nemty 2.2/2.3 zijn versleuteld.

De bestandsversleuteling van Nemty 2.2 en 2.3

Toen we de nieuwe Nemty-code analyseerden, waren we blij dat de bug die in Nemty 1.6 en lager corruptie veroorzaakte tijdens de encryptie van grote bestanden leek te zijn verholpen in Nemty 2.2/2.3: de schrijver gebruikt nu de SetFilePointerEx-functie (zoals ook geopperd in onze blogpost) in plaats van de SetFilePointer-functie. We hebben nog niet uitgebreid geverifieerd dat bestanden van elke grootte nu altijd betrouwbaar kunnen worden ontsleuteld, maar we hebben goede hoop dat corruptie door een bug in het encryptieproces nu tot het verleden behoort.

Als we naar de daadwerkelijke encryptie van de gegevens kijken, zien we dat de kernversleuteling nog steeds de standaard AES-128 is. In plaats van ‘cipher block chaining’ (CBC) te gebruiken zoals Nemty 1.6 deed, gebruikt deze nieuwere Nemty-code echter een aangepaste implementatie van ‘counter mode’ (CTR). Counter mode is een werkwijze waarbij een blokvercijfering zoals AES wordt omgezet in een stroomvercijfering. (We verwijzen de geïnteresseerde lezer naar de uitleg van de verschillende werkwijzen op Wikipedia.) Het gebruik van CTR in plaats van CBC is ongewoon, maar niet noodzakelijkerwijs een slechte keuze vanuit het oogpunt van de ransomware-auteur: beide modi worden meestal beschouwd als veilig vanuit een cryptografisch oogpunt (indien correct gebruikt).

Het is bijna een traditie geworden bij Nemty dat de aangepaste implementaties van cryptografie niet-standaard gedragingen (die door sommigen als bugs worden beschouwd) vertonen. Het eerste wat opvalt in de CTR-implementatie is dat de eerste 128 bits van de ciphertext worden geXORed met de tellerwaarde voor elk van de volgende blokken. Dit is iets waar we rekening mee moesten houden bij het schrijven van onze decryptor, aangezien een standaard AES-128-CTR-implementatie niet compatibel is met Nemty 2.2/2.3!

De tweede bug zit in de functie die de tellerwaarde verhoogt: het is niet ongebruikelijk om hier een functie te gebruiken die één toevoegt aan de huidige tellerwaarde voor elk blok. Een eenvoudige manier om dit te implementeren, is om eerst de waarde van het laatste octet te verhogen en wanneer die waarde overloopt van 0xFF naar 0x00, de waarde van het voorgaande octet met één te verhogen, enzovoort. Net als gewoon tellen met decimalen. De implementatie van deze incrementen in Nemty 2.2/2.3 is echter gebrekkig: in plaats van te stoppen bij het eerste octet dat NIET overloopt, stopt de Nemty-code bij het eerste octet dat WEL overloopt. In de meeste gevallen betekent dit dat alle octetten in de tellerwaarde worden bijgewerkt voor elk blok, in plaats van alleen de minst belangrijke. Nogmaals, iets om rekening mee te houden bij het schrijven van onze decryptor, want een standaard AES-128-CTR-implementatie werkt niet op deze manier.

We hebben tot slot in eerdere versies gezien dat Nemty grote bestanden niet volledig versleutelt, maar sommige delen selecteert om te versleutelen, en andere delen onversleuteld laat. Dit is nog steeds het geval in Nemty 2.2, maar de berekeningen voor welke onderdelen worden versleuteld, zijn verschillend in vergelijking met Nemty 1.6. En in Nemty 2.3 wijken deze berekeningen weer af van de berekeningen in Nemty 2.2. We kunnen enkel raden waarom de schrijver dit blijft veranderen.

Een vroeg kerstcadeau voor slachtoffers van Nemty 2.2/2.3

Op basis van onze analyse van de cryptografie van Nemty 2.2 en 2.3 wisten we opnieuw een decryptor te ontwikkelen. Om technische redenen ondersteunt onze decryptor voor Nemty 2.2/2.3 alleen ontsleuteling van een vrij beperkt aantal bestandsindelingen: de huidige versie ontsleutelt alleen de meeste docx-, xlsx- en pptx-bestanden. We onderzoeken nog of we de lijst met ondersteunde bestandsindelingen in de toekomst kunnen uitbreiden, maar we wilden onze huidige versie zo snel mogelijk uitbrengen zodat Nemty 2.2- en 2.3-slachtoffers op zijn minst kunnen proberen hun Office-documenten gratis te herstellen.

Ondersteuning voor Office-documenten die door Nemty 2.2 en 2.3 zijn versleuteld, is toegevoegd aan onze bestaande Nemty-decryptor voor het NoMoreRansom-project.

In 2019 was ransomware nog steeds een grote bedreiging voor zowel consumenten als bedrijven. En hoewel er regelmatig gratis decryptors voor verschillende ransomwarefamilies aan NoMoreRansom worden toegevoegd, geniet preventie nog steeds de voorkeur. We eindigen dus met een bekend advies: zorg ervoor dat je systemen up-to-date en veilig blijven, wees voorzichtig met bestanden van onbekende oorsprong en maak altijd back-ups!

Indicators of Compromise

SHA256 van de Nemty-binaries gebruikt in dit onderzoek:

  • Nemty 2.2 : b2c11e6126a7de326e5fef14679279bf9fa920b7ba7142984d99790d89155b69
  • Nemty 2.3 : 2a5f9e5d72b4841538a73ee2556865d8ed76e3da38571f00148368874edf55c8