Onderzoek naar het verband tussen Nemty en Nefilim

Door 15 april 2020 november 20th, 2020 Blog
nemty ransomware

Een nieuwe ransomwarefamilie is de afgelopen weken op het toch al te drukke toneel verschenen: Nefilim. Bleeping Computer berichtte als een van de eerste over deze ransomware. Ze beschrijven een duidelijk verband tussen deze nieuwe ransomwarefamilie en Nemty, een ransomwarefamilie waar we het in het verleden uitgebreid over hebben gehad (blog 1, blog 2, blog 3 en blog 4). De bestandscodering van de twee ransomwarefamilies komt grotendeels overeen en er is al gespeculeerd over hoe dit mogelijk is: is de code misschien uitgelekt of gestolen? Of zitten (deels) dezelfde personen achter de twee verschillende ransomwarefamilies? In deze blogpost presenteren we onze technische analyse van de Nefilim-ransomware en vergelijken we deze met de recente Nemty 2.6-ransomware. Onze analyse lijkt de theorie te ondersteunen dat degenen achter Nemty en Nefilim elkaar op z’n minst kennen, zo niet dezelfde personen zijn.

Niet alle ransomware is gelijk

Bestandsversleutelende ransomware kan grofweg worden onderverdeeld in twee categorieën:
– Ransomware die wordt gebruikt bij grootschalige aanvallen op meestal ‘kleine’ slachtoffers.
– Ransomware die vooral wordt gebruikt bij gerichte aanvallen op ‘grote’ slachtoffers.

De eerste categorie wordt vaak beheerd aan de hand van een Ransomware-as-a-Service (RaaS)-model: de schrijver stelt de ransomware beschikbaar aan bekenden die verantwoordelijk zijn voor de verspreiding ervan naar de slachtoffers. Eventueel betaald losgeld wordt meestal verdeeld tussen de schrijver en de bekende (en mogelijk andere betrokken partijen). Veel bekende ransomwarefamilies werken op deze manier, bijvoorbeeld Sodinokibi en Nemty. Meestal is voor elk besmet systeem een op maat gemaakte decryptor nodig, die na betaling van het losgeld ter beschikking wordt gesteld.

De tweede categorie werkt meestal net iets anders: als een grote organisatie wordt getroffen door een gerichte ransomware-aanval, worden alle bestanden op de verschillende servers vaak zodanig versleuteld dat één decryptor kan worden gebruikt om alles te ontsleutelen. Dit maakt het werk van zowel het slachtoffer als de aanvaller duidelijk makkelijker, omdat het beiden veel administratieve rompslomp bespaart. Een RaaS-model kan nog steeds worden gebruikt als de ene persoon de ransomware ontwikkelt en een andere persoon die gebruikt in een gerichte aanval, maar het model is dan doorgaans minder complex.

De scheiding tussen de twee categorieën is uiteraard niet zo duidelijk: sommige ransomware wordt zowel voor gerichte aanvallen als voor brede verspreiding gebruikt.

Uit zijn code blijkt dat Nefilim tot de tweede categorie kan worden gerekend. De ransomware heeft geen kenmerken van een RaaS-model en de cryptografie laat zien dat één decryptor kan worden gebouwd voor een slachtoffer, ongeacht het aantal geïnfecteerde apparaten. Trend Micro heeft een interessante post met enkele details van een daadwerkelijke Nefilim-aanval. Het feit dat de losgeldbrief alleen een e-mailadres bevat om contact op te nemen met de cybercriminelen ondersteunt ook het idee dat Nefilim niet bedoeld is om te worden gebruikt tegen een groot aantal slachtoffers, maar eerder voor gerichte aanvallen. Bij een dergelijke aanval zet de kwaadwillende handmatig (bijvoorbeeld met eenvoudige scripts) de Nefilim-binary op de gecompromitteerde systemen. De ransomware versleutelt vervolgens de bestanden en verwijdert zichzelf daarna. De schrijvers van Nefilim dreigen ook gegevens van hun slachtoffers vrij te geven als het losgeld niet wordt betaald.

Een korte analyse van Nefilim

Aangezien Nefilim duidelijk is bedoeld om alleen te worden gebruikt als een tool om bestanden op een al gecompromitteerde server te versleutelen, is de codebasis een stuk minder complex dan de meeste ransomware uit de RaaS-categorie. Er is bijvoorbeeld geen netwerkfunctionaliteit, terwijl RaaS-ransomware vaak een phone-homefunctie heeft om elke infectie en enkele bijbehorende statistieken te melden.

De code van Nefilim voert na uitvoering ongeveer de volgende stappen uit:
1. Er wordt een mutex gecreëerd om te voorkomen dat meerdere instances van de ransomware parallel lopen op hetzelfde systeem
2. De decryptiesleutel voor de ingesloten versleutelde losgeldbrief wordt gegenereerd
3. Er wordt een publieke 2048-bits RSA-sleutel geladen die in de ransomware-binary zit ingesloten
4. Als er een pad of bestandsnaam in de opdrachtregel is opgegeven, wordt alleen dit pad of bestand versleuteld, anders verspreidt de ransomware zich over alle schijven van het systeem, laat deze een losgeldbrief achter in de hoofdmap van de schijf en start deze een aparte thread om elk van de schijven te versleutelen
5. Als de ransomware is gebruikt om alle schijven te versleutelen, verwijdert deze zichzelf naderhand door cmd.exe aan te roepen

De code die bij deze stappen hoort, heeft enkele opmerkelijke details die we kort zullen bespreken voordat we de code en functionaliteit met Nemty 2.6 gaan vergelijken.

De tekst van de losgeldbrief is versleuteld opgeslagen in de binary. Om die te ontsleutelen, wordt eerst een SHA1 hash berekend over een hard-coded string, en daarna worden de eerste 16 bytes van de hash gebruikt als RC4-sleutel om de base64-geëncodeerde tekst van de losgeldbrief te ontsleutelen.

Nefilim gebruikt AES-128 in counter mode (zie bijvoorbeeld Wikipedia voor een beschrijving van deze werkwijze) voor de bestandsversleuteling. Voor elk bestand wordt een willekeurige 128-bits sleutel en een 128-bits initiële tellerwaarde gegenereerd. Een deel van het bestand wordt vervolgens versleuteld met AES aan de hand van deze sleutel en tellerwaarde (de hoeveelheid versleutelde gegevens is afhankelijk van de grootte van het bestand). Het versleutelde bestand bevat een voettekst met de AES-sleutel en initiële tellerwaarde, die beide (afzonderlijk) zijn versleuteld met de publieke RSA-sleutel. De voettekst bevat tot slot de letterlijke string ‘NEFILIM’.

De code van Nefilim bevat ook enkele interessante artefacten die daar misschien zijn achtergelaten voor onderzoekers. De code bevat bijvoorbeeld enkele ongebruikte strings, zoals “how to fuck all the world?” (waarschijnlijk nooit een goed idee, maar zeker niet in tijden van social distancing). En de naam van de mutex maakt deel uit van de songtekst van het onlangs uitgebrachte nummer ‘Drip Catcher’ van de Russische artiest ‘Kizaru’.

Nefilim: het kind van Nemty?

Zoals eerder vermeld in de post van Bleeping Computer, lijkt de code van Nefilim veel op de code van Nemty. De eerste opvallende overeenkomst is de bestandscodering: beide versleutelen gegevens met AES-128-CTR (terwijl AES-128-CBC gebruikelijker is in ransomware) en de code die bijvoorbeeld de sleutel en initiële teller genereert of de RSA-versleuteling uitvoert, is ook (haast) identiek. Wij achten het zeer waarschijnlijk dat in ieder geval dit deel van de code is gecompileerd uit (vrijwel) identieke broncode. Een identieke broncode impliceert echter niet noodzakelijkerwijs dat dezelfde personen achter de ransomware zitten.

Een andere opmerkelijke overeenkomst is de code die wordt gebruikt om bepaalde ingesloten strings te versleutelen. Hoewel deze in Nefilim alleen wordt gebruikt voor de ontsleuteling van de losgeldbrief, terwijl Nemty overal in de code versleutelde ingesloten strings gebruikt, is het algoritme identiek: een letterlijke string wordt eerst gehasht met SHA1 en de eerste 16 bytes van het resultaat worden vervolgens gebruikt als een RC4-sleutel om de strings zelf te ontsleutelen.

Een derde en zeer interessante relatie tussen de twee is de lijst met bestandsextensies die Nemty in zijn encryptieproces negeert: bestanden met de extensie ‘NEFILIM’ worden expliciet genegeerd door Nemty 2.6! (Het omgekeerde is echter niet het geval: bestanden die eerder door Nemty zijn versleuteld, worden gewoon een tweede keer door Nefilim versleuteld). De lijst met extensies die worden gecontroleerd en genegeerd voor versleuteling is identiek tussen Nefilim en Nemty 2.6, zelfs de volgorde van de controles is hetzelfde. Als we kijken naar een oudere Nemty-versie, bijvoorbeeld Nemty 2.2, zien we grotendeels dezelfde lijst met extensies (in bijna omgekeerde volgorde), hoewel er sindsdien enkele extra extensies zijn toegevoegd. ‘NEFILIM’ staat echter niet in die code.


EXTENSIES Nefilim


EXTENSIES Nemty 2.2

Nemty 2.6 en Nefilim bevatten ook dezelfde lijst met mappen die voor versleuteling worden overgeslagen. Nemty 2.2 bevat een vergelijkbare lijst, maar de laatste paar vermeldingen ontbreken in vergelijking met Nefilim/Nemty 2.6. Dit kan betekenen dat de lijst in zowel Nemty 2.6 als Nefilim een logische uitbreiding is van de lijst in Nemty 2.2.


MAPPEN Nefilim


MAPPEN Nemty 2.2

Tot slot, maar dit kan natuurlijk gewoon toeval zijn: Nemty is de naam van een Egyptische god, terwijl nephilim een Hebreeuwse term is die verwijst naar de nakomelingen van goden. Als dezelfde persoon achter de twee zit, kan hij of zij geïnteresseerd zijn in mythologie. Of misschien vond diegene (of diegenen) de namen wel stoer klinken…

Conclusie

Inspectie van de code van Nemty en Nefilim laat er geen enkele twijfel over bestaan dat de twee op broncodeniveau aan elkaar gerelateerd zijn. De exacte reden achter gedeelde code is echter bijna nooit eenvoudig te bepalen op basis van alleen de code.

Het is onwaarschijnlijk dat Nefilim is gebouwd door een andere persoon die uitgelekte of gestolen code van Nemty gebruikt: Nemty 2.6 bevat duidelijk de string ‘NEFILIM’ in zijn bestandscodering.

Het is even onwaarschijnlijk dat Nemty 2.6 alleen de gestolen of uitgelekte encryptiecode van Nefilim gebruikt zonder enig ander verband tussen beide: de lijst met whitelisted mappen in zowel Nemty 2.6 als Nefilim lijkt een logische evolutie van de whitelist in Nemty 2.2 te zijn.

Kortom: Nefilim lijkt te zijn gebaseerd op code van Nemty, en Nemty lijkt code van Nefilim te bevatten. Op basis van onze analyse van de code achten we het dus waarschijnlijk dat de broncode van Nefilim werd geschreven door dezelfde persoon die ook verantwoordelijk is voor Nemty of dat de code bereidwillig werd gedeeld met de schrijver van Nefilim, aangezien Nemty onlangs is begonnen met het whitelisten van .NEFILIM-bestanden in het encryptieproces.

Zoals gepubliceerd door ZDNet en Bleepingcomputer, hebben de personen achter Nemty ook zojuist aangekondigd dat ze de openbare Ransomware-as-a-Service (RaaS)-activiteit binnen een week zullen stopzetten. Dit maakt het alleen maar waarschijnlijker dat Nefilim hun nieuwste creatie is en dat verklaart ook hoe Nemty 2.6 al de vermelding Nefilim bevat, aangezien zij deze overgang waarschijnlijk al aan het plannen waren toen Nemty 2.6 werd uitgebracht.

Indicators of Compromise

SHA256 hashes van de ransomware-binaries gebruikt in dit onderzoek:
– Nemty 2.2 : b2c11e6126a7de326e5fef14679279bf9fa920b7ba7142984d99790d89155b69
– Nemty 2.6 : 448e350455d2de1262d3884478df7fc2d6c47faa8759f90d7fb26629d8715557
– Nefilim : 08c7dfde13ade4b13350ae290616d7c2f4a87cbeac9a3886e90a175ee40fb641