dimanche 19 mars 2017

Injection de Dyreza / Dyre

I.    Introduction



Nommé Dyreza ou Dyre ou  réapparu par des souches de son code dans le malware "TrickBot"
Nous allons dans ces quelques lignes expliquer l'injection utiliser dans des processus légitimes de ce malware.

II.          Mode d'injection dans un processus légitime.


Dyreza a une façon particuliére d'injecter du code dans le processus cible en cours d'éxecution sur le poste que la plupart des autres malwares.
La plupart des malwares injecteront du code de différentes manières:
1 ) Créer un processus suspendu puis le creusé, écrire le code à injecté, Et enfin rediriger le thread principal  du processus sur son code injecté dans le processus ( Technique de ProcessHollowing )
2 ) Ouvrir un processus en cours d'execution dans la session, lui inserer du code et enfin crée un nouveau thread dans le processus exécutant le code écrit.
3) créer un mappage mémoire entre le processus et le malware, puis démarrer un nouveau thread dans le processus cible qui exécutera le code mappé.
Dyreza démarre son injection sur la techinque (3) en mappant un bloc mémoire de son process dans la mémoire virtuelle du processus cible comme explorer.exe ou svchost.exe via l'api NtMapViewOfSection(..). À ce stade rien de réellement nouveau,mais à  différence de la plupart d'autre malware qui vont soit détourner le thread déjà en cours d'exécution (en utilisant GetThreadContext et SetThreadContext, soit ResumeThread) ou en créer un nouveau (utilisant CreateRemoteThread ou via les API native). Au lieu de cela , Dyreza utilise l'API ZwQueueApcThread(..) pour faire executer le code mappé en définissant l'adresse de début du shellcode mappé dans le processus cible.

nous allons décrire la séquence via des schemas conceptuelle à la différence que l'on va uniquement utiliser la technique pour charger une DLL dans le processus cible et non un shellcode dans une premier temps.

Le premier étape est de crée un fichier mappé en mémoire dans son processus et écrire le chemin de la dll que l'on souhaite injecté dans le processus cible 
Dans notre exemple nous allons injecter une dll nommé "9B113D1A.dll". Le fichier mappé dans le processus injecteur ce trouve à une addresse en mémoire que l'on nommera "Addresse X" 


la seconde étape est le mappage de notre bloc mémoire dans le processus cible.
Il faut bien prendre conscience que celui-ci va être mappé dans le processus cible avec l'ensemble du contenu du bloc que ce soit une chaine ou un schellcode. Mail il sera à positionner différente que l'on nommera dans notre exemple "Addresse Y" 


la dernier étape est d'appel d'une procédure asynchrone sur le thread cible ( APC sur le Thread )



ce qui donne sur un seul schéma la séquence de cette injection




III.         Mise en pratique de l'injection

Pour cela nous utilisons un exemple "InjectionOfProcessWithNtMapViewOfSection.exe" qui mes en pratique ce que nous avons décrit au dessus:




























Dans notre exemple Address X = 0x00320000 correspondant à l'addresse ou est mappé le fichier en mémoire dans l'injecteur et Addesse Y = 0x00050000 le bloc mappé dans le processes cible qui est ici "calc.exe"

Nous allons mettre en evidence la présence du fichier mappé dans la mémoire du processus injecteur
Pour cela nous allons utiliser un outil conçu pour analyser des processus X32

Celui-ci fait un dump de la mémoire à une addresse précis et pour un volume d'octet définit
Nous avons positionner sur l'addresse du fichier mappé 0x00320000 dans le processus injecteur.
Nous retrouvons bien la chaine écrite "C:\Sample\98113D1A.dll"

Mais faut ce dump avant que le processus injecteur est appeler code  "UnmapViewOfFile(hView);".Car à ce moment là, le bloc n'existe plus dans le processus le processus injecteur.

Nous avons effectuer le dump mémoire à l'adresse 0x00320000, juste aprés d'appel de la l'API "UnmapViewOfFile(..)".Et nous avons obtenu ce qui était évidant plus de trace de la chaine.






A contrario si nous effectuons un dump sur notre processus cible "calc.exe" ayant pour PID =2036. Nous avons encore notre fichier mappé en mémoire avec notre chaine dans la cible



Aucun commentaire:

Enregistrer un commentaire