Injection de code (PE/DLL injection) et dropper

En cherchant pour faire un autre article, je suis tombé sur un cas marrant de dropper de Zaccess.
Du coup, ça m’a donné envie de parler des injections de code et prise de contrôle des processus.

En vidéo les injections de processus effectuées par le Trojan Bedep :

Bref survol des DLL et Processus et Rootkit Userland

Avant de commencer, un rapide survol des processus et DLL.
Sur Windows, il existe des bibliothèques de librairies DLL, le but est de proposer est de partager des fonctions qui peuvent être appelées par des processus différents afin de ne pas avoir à recoder ces fonctions à chaque fois.

Il en va de même pour les fonctions de Windows (ouvrir un fichier, lister les processus, créer un nouveau processus etc), bref Windows fournit une multitude de fonctions (sous forme d’API) contenus dans divers DLL (notamment ntdll.dll).

Les DLL sont chargés en Thread dans les processus, Process Explorer permet par exemple de les lister.

Dans l’article Le danger et fonctionnement des rootkits, il était question du détournement (hooking) de ces fonctions au niveau du Kernel.
Il existe la même technique (moins puissante) au niveau  du userland, lorsque un processus a besoin d’une fonction en particulier, ce dernier contient une IAT Table qui contient la liste des fonctions (donc DLL) qui seront utilisées avect « l’emplacement de la fonction » (point d’entrée).
Lorsque vous lancez un processus, un rootkit userland, modifie cet IAT pour faire rediriger les fonctions vers les siennes et falsifier la réponse.

Concrètement, si on prend un des premiers rootkit userland Navipromo (2007), ce dernier était invisible dans le gestionnaîre de tâches, tout simplement parce que lorsque taskmgr faisait appel à la DLL qui contient la fonction pour lister les processus, navipromo détournait l’appel vers lui même et ne listait pas son processus.
Dès lors le gestionnaîre de tâches ometait de lister le processus de navipromo et il était donc « invisible ».

De même, certains keylogguer userland fonctionnent de la même manière, le but est d’injecter la DLL dans chaque processus afin de détourner les fonctions claviers vers le keylogguer et donc pouvoir les enregistrer.
De plus, le Thread a accès à l’espace mémoire du processus injecté et donc les données qui y sont stockées en clair et donc potentiellement…… les mots de passe.

La clef HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs permet de charger une DLL dans tous les processus au démarrage de l’ordinateur.

Le site suivant explique très bien ces injections DLL Injection mais aussi le IAT Hooking
Vous avez aussi cette page explicative qui est bien faite : http://blog.opensecurityresearch.com/2013/01/windows-dll-injection-basics.html

Les malwares qui injectaient des processus sous forme de DLL faisaient légion dans les annes 2007/2008 puis ces derniers se sont déplacés au niveau du kernel avec des infections plus évoluées.
Quelques exemples : Vundo et notamment se reporter à la page Process Explorer VS Vundo/Virtumonde où l’on voit bien les DLL, braviax et alertes de sécuritéAdWare.Win32.AdvertMen.aBackdoor/Rootkit Haxdoor / Goldun, etc

Si l’injection de DLL n’est plus très utilisée par les infections elles mêmes dans les processus système, l’injection de code pour la prise de contrôle de processus, elle, est très utilisée par les droppers.
Vous allez voir pourquoi.

Injection de code et droppers

Depuis plus d’un an, l’injection de code est vivement utilisé par les droppers.
Le principe est de prendre le contrôle d’un processus système, en modifiant les données mémoires afin de lui faire installer l’infection sur le système.

Le premier malware a l’utiliser beaucoup et systématiquement est TDSS.
On le voit sur la page du TDL 3 (même principe pour le TDL 4) : http://forum.malekal.com/rootkit-tdss-tmp-tmp-atapi-sys-patch-t22604.html
L’infection était systématiquement installé par spoolsv.exe (le processus du service du spooler d’imprimante).
On le retrouve ici : http://www.malekal.com/2010/11/13/tdssalureon-nouvelle-variante/ avec la capture suivante :

Zaccess fait exactement la même chose – le dropper lance explorer.exe est en prend le contrôle :

ZAccess : Injection Processus

ZAccess : Injection Processus

puis lance smss.exe certainement pour accéder au niveau kernel.

ZAccess : Injection Processus

La connexion est ensuite établie par le système vers 188.229.100.68 (SY) et donc l’URL est :

314963959.425     20 192.168.1.27 TCP_MISS/504 1745 GET http://zzhchmbs.cn/stat2.php?w=15&i=0594fe4a8288fe4a154e1626b2b3b802&a=1 - DIRECT/zzhchmbs.cn text/html
1314963959.425     19 192.168.1.27 TCP_MISS/504 1747 GET http://zzhchmbs.cn/stat2.php?w=15&i=0594fe4a8288fe4a154e1626b2b3b802&a=21 - DIRECT/zzhchmbs.cn text/html
1314963959.464      0 192.168.1.27 TCP_MISS/504 1747 GET http://zzhchmbs.cn/stat2.php?w=15&i=0594fe4a8288fe4a154e1626b2b3b802&a=23 - DIRECT/zzhchmbs.cn text/html
1314963959.490      0 192.168.1.27 TCP_MISS/504 1747 GET http://zzhchmbs.cn/stat2.php?w=15&i=0594fe4a8288fe4a154e1626b2b3b802&a=24 - DIRECT/zzhchmbs.cn text/html

Il n’y a pas les captures mais le processus prend aussi le contrôle de winlogon.exe pour le suspendre.

ZAccess : Injection Processus

Explore se charge ensuite de créer un service relatif aux fichiers patchés (commence toujours par un .)

ZAccess : Injection Processus

ZAccess : Injection Processus

A noter que si on bloque la modification en mémoire d’explorer.exe tout s’arrête.

Ce matin en testant un exploit sur site WEB, je refuse l’execution de deux droppers (un ici d’Adobe Reader, l’autre de Java).
Cela se termine par Adobe Reader qui tente de lancer cette DLL et de l’enregistrer.

ZAccess : Injection Processus

ZAccess : Injection Processus

La dite DLL prends ensuite le contrôle d’Explorer.exe (je n’ai pas vérifié dans quel processus elle s’était chargé, possible que ce soit explorer.exe lui même).
Vous connaissez la suite.

Interressant de constater cette variante au niveau du kit d’exploit qui tente l’installation du malware directement par une injection dans Adobe Reader via la vulnérabilité.

ZAccess : Injection Processus

Pourquoi tout ce méli-mélo ?
Tout simplement pour bypasser les pare-feux.
Tous les pare-feux actuellement scannent l’ordinateur et préconfigure les accès aux processus dont les processus systèmes (svchost.exe etc).
L’injection permet de prendre contrôle de ces processus et d’avoir accès à internet via ces processus puisque le pare-feu est alors suceptible de laisser passer la connexion.

C’est aussi pour cela que le fossé entre pare-feu et IDS s’est extremment resserré, pour répondre à ces menaces, les pare-feux peuvent détecter les injections et un peu le comportement système.

La technique d’utiliser des processus système est par exemple utilisée par les droppers de TrojanDownloader.Chepvil / TrojanDownloader.Stohil.Q – si vous regardez la page pusk.exe lance svchost.exe et prends le contrôle de ce dernier pour effectuer la connexion.
Enfin cette technique peut aussi être utilisé par des Backdoors comme par exemple Backdoor.Win32.HareBot – la capture ci-dessous montre clairement le processus qui lance une instance de svchost.exe qui effectue les connexions SMTP du SpamBot

La technique est expliquée sur cette page : http://www.abysssec.com/blog/2009/01/how-bypass-firewall-with-process-injection/

D’autres exemples, du non blocage de connexions par des pare-feu dû à des injections de processus systèmes à travers les survols rapides d’antivirus/firewall, notamment le pare-feu :

Enfin dans la vidéo suivante, comment détecter une injection de DLL non signée provenant du Trojan Bedep :

Comment lire d'autres tutoriels de malekal.com ?

Si le site vous a aidé, svp, débloquez les bloqueurs de publicités, n'hésitez pas non plus à partager l'article ou le site sur les réseaux sociaux.

Pour pouvoir lire plus d'articles et tutoriels, utilisez le menu en haut du site. Plein d'articles et tutos utiles vous attendent !

Besoin d'aide ?

Posez votre question ou soumettez votre problème sur le forum malekal.com pour obtenir une aide efficace : Aller sur le forum malekal.com
(Visited 219 times, 1 visits today)

3 thoughts on “Injection de code (PE/DLL injection) et dropper

  1. Ca pour etre répandu… 98% des droppers emploient une de ses variantes. 🙂

    CreateProcess en mode « suspended », WriteProcessMemory pour ecrire le code du malware dans le processus, bidouile dans le processus pour forcer le « Chargeur de windows » a « préparer le malware copié en mémoire » (IAT et tout le bazard)… et resumethread pour lancer le biniou…

    Comment ca c’est du chinois? 🙂

    La variante de Max+++ que j’ai eu attaquait Crcss.exe de cette manière . Tout d’un coup, il voulait se connecter a des serveurs de temps employés par ce malware 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *