Injection de code (PE/DLL injection) et dropper

L’injection de code ou DLL et autres consiste à prendre le contrôle d’un processus en particulier en y chargeant un fichier DLL.
Ces procédés sont très utilisés par certains trojans sophistiqués et notamment les Trojan banker.

Cet article donne quelques explications sur le fonctionnement de ces injections et des exemples de fonctionnement avec des chevaux de troie.

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 avec « 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 gestionnaire de tâches de Windows. omettait de lister le processus de navipromo et il était donc « invisible ».

De même, certains keylogger 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 du registre Windows 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 trojans et cheval de troie qui injectaient des processus sous forme de DLL faisaient légion dans les années 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 logiciel malvaillent 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) : https://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 TDSS/Alureon 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 Windows (noyau Windows).

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’exécution 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.

Intéressant de constater cette variante au niveau du kit d’exploit qui tente l’installation du programme malicieux 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 (firewall).
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 susceptible de laisser passer la connexion.

C’est aussi pour cela que le fossé entre pare-feu et IDS s’est extrêmement 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 :

Trojan et injection DLL en pratique

Quelques vidéos qui montrent des trojans utilisant des injections de DLL.
Le but est de bien comprendre en pratique comment cela se passe dans Windows.

Une partie aussi de ces injections sont expliquées en pratique sur la page : Trojan avancé : fonctionnement de cheval de troie plus complexe

En vidéo avec le Trojan Sathurbot :

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

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

Liens autour des trojans

Résumer tout le monde des trojans et logiciels malveillants serait très compliqués.
Pour la partie fonctionnement des cheval de troie : Comment fonctionne les trojans ?

Il existe divers types et de familles plus ou moins évolués selon le but recherché par les pirates, voler des infos bancaires, mot de passe ou permettre le contrôle de l’ordinateur.
Vous trouverez une liste des familles de cheval de troie sur la page : Index des menaces et programmes malveillants/Malwares

Concernant les Trojans spécialisés dans le vols de données bancaires, vous pouvez lire la page : Les Trojans Banker

Les liens généraux sur les menaces informatiques :

(Visité 1 513 fois, 4 visites ce jour)

Vous pouvez aussi lire...

Les Tags : #Windows10 - #Windows - #Tutoriel - #Virus - #Antivirus - #navigateurs WEB - #Securité - #Réseau - #Internet