La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3

Avec cet article nous complétons la série de publications consacrées à l’analyse des logiciels malveillants. DANS la première partie Nous avons effectué une analyse détaillée d'un fichier infecté qu'une entreprise européenne a reçu par courrier et y avons découvert le logiciel espion AgentTesla. Dans la deuxième partie a décrit les résultats d'une analyse étape par étape du module principal AgentTesla.

Aujourd'hui, Ilya Pomerantsev, spécialiste de l'analyse des logiciels malveillants au CERT Group-IB, parlera de la première étape de l'analyse des logiciels malveillants - le déballage semi-automatique des échantillons AgentTesla en utilisant l'exemple de trois mini-cas issus de la pratique des spécialistes du CERT Group-IB.

En règle générale, la première étape de l'analyse des logiciels malveillants consiste à supprimer la protection sous la forme d'un packer, d'un cryptor, d'un protecteur ou d'un chargeur. Dans la plupart des cas, ce problème peut être résolu en exécutant le logiciel malveillant et en effectuant un vidage, mais il existe des situations dans lesquelles cette méthode n'est pas adaptée. Par exemple, si le malware est un chiffreur, s'il protège ses régions de mémoire contre le dumping, si le code contient des mécanismes de détection de machine virtuelle ou si le malware redémarre immédiatement après son démarrage. Dans de tels cas, on utilise un déballage dit « semi-automatique », c'est-à-dire que le chercheur a un contrôle total sur le processus et peut intervenir à tout moment. Considérons cette procédure en utilisant comme exemple trois échantillons de la famille AgentTesla. Il s'agit d'un malware relativement inoffensif si vous désactivez son accès au réseau.

Échantillon n°1

Le fichier source est un document MS Word qui exploite la vulnérabilité CVE-2017-11882.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
En conséquence, la charge utile est téléchargée et lancée.

L'analyse de l'arborescence des processus et des marqueurs comportementaux montre l'injection dans le processus RegAsm.exe.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Il existe des marqueurs comportementaux caractéristiques d’AgentTesla.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
L'exemple téléchargé est l'exécutable .NET-fichier protégé par un protecteur Réacteur .NET.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Ouvrons-le dans l'utilitaire dnSpy x86 et passez au point d'entrée.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
En allant dans la fonction Décalage DateHeure, nous trouverons le code d'initialisation du nouveau .NET-module. Mettons point d'arrêt sur la ligne qui nous intéresse et exécutez le fichier.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Dans l'un des tampons renvoyés, vous pouvez voir la signature MZ (0x4D 0x5A). Sauvons-le.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Un fichier exécutable vidé est une bibliothèque dynamique qui est un chargeur, c'est-à-dire extrait la charge utile de la section des ressources et la lance.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Dans le même temps, les ressources nécessaires elles-mêmes ne sont pas présentes dans la décharge. Ils font partie de l'échantillon parental.

Utilitaire dnEspion possède deux fonctionnalités extrêmement utiles qui nous aideront à créer assez rapidement un « Frankenstein » à partir de deux fichiers liés.

  1. Le premier vous permet de « coller » une bibliothèque dynamique dans l’échantillon parent.

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3

  2. La seconde consiste à réécrire le code de fonction au point d'entrée pour appeler la méthode souhaitée de la bibliothèque dynamique insérée.

    La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3

Nous sauvons notre set « Frankenstein » point d'arrêt sur la ligne renvoyant un buffer avec les ressources déchiffrées, et réalise un dump par analogie avec l'étape précédente.

Le deuxième dump est écrit en VB.NET un fichier exécutable protégé par un protecteur qui nous est familier ConfuserEx.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Après avoir supprimé le protecteur, nous utilisons les règles YARA écrites précédemment et nous assurons que le malware décompressé est bien AgentTesla.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3

Échantillon n°2

Le fichier source est un document MS Excel. Une macro intégrée provoque l'exécution de code malveillant.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
En conséquence, le script PowerShell est lancé.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Le script décrypte le code C# et lui transfère le contrôle. Le code lui-même est un chargeur de démarrage, comme le montre également le rapport sandbox.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
La charge utile est un exécutable .NET-déposer.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Ouvrir le fichier dans dnSpy x86, vous pouvez voir qu'il est obscurci. Supprimer l'obscurcissement à l'aide de l'utilitaire de4dot et retour à l'analyse.

En examinant le code, vous découvrirez peut-être la fonction suivante :

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Les lignes codées sont frappantes Point d'accès и invoquer. nous mettons point d'arrêt à la première ligne, exécutez et enregistrez la valeur du tampon octet_0.

Le dump est à nouveau une application sur .NET et protégé ConfuserEx.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Nous supprimons l'obscurcissement en utilisant de4dot et télécharger sur dnEspion. D'après la description du fichier, nous comprenons que nous sommes confrontés à Chargeur CyaX-Sharp.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Ce chargeur dispose de fonctionnalités anti-analyse étendues.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Cette fonctionnalité inclut le contournement des systèmes de protection Windows intégrés, la désactivation de Windows Defender, ainsi que les mécanismes de détection des bacs à sable et des machines virtuelles. Il est possible de charger la charge utile depuis le réseau ou de la stocker dans la section ressources. Le lancement est effectué par injection dans son propre processus, dans un duplicata de son propre processus ou dans des processus MSBuild.exe, vbc.exe и RegSvcs.exe en fonction du paramètre choisi par l'attaquant.

Cependant, pour nous, ils sont moins importants que Anti-Dump-fonction qui ajoute ConfuserEx. Son code source peut être trouvé sur GitHub.

Pour désactiver la protection, nous profiterons de l'occasion dnEspion, qui vous permet de modifier IL-code.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Enregistrer et installer point d'arrêt à la ligne d'appel de la fonction de décryptage de la charge utile. Il se trouve dans le constructeur de la classe principale.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Nous lançons et vidons la charge utile. En utilisant les règles YARA précédemment écrites, nous nous assurons qu'il s'agit bien d'AgentTesla.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3

Échantillon n°3

Le fichier source est l'exécutable VB natif PE32-déposer.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
L'analyse d'entropie montre la présence d'une grande quantité de données cryptées.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Lors de l'analyse du formulaire de candidature dans Décompilateur VB vous remarquerez peut-être un étrange arrière-plan pixelisé.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Graphique d'entropie bmp-image est identique au graphique d'entropie du fichier d'origine et la taille est de 85 % de la taille du fichier.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
L'aspect général de l'image indique l'utilisation de la stéganographie.

Faisons attention à l'apparence de l'arborescence des processus, ainsi qu'à la présence d'un marqueur d'injection.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Cela indique que le déballage est en cours. Pour les chargeurs Visual Basic (alias VBKrypt ou VBInjecteur) utilisation typique code shell pour initialiser la charge utile, ainsi que pour effectuer l'injection elle-même.

Analyse en Décompilateur VB a montré la présence d'un événement Charge au formulaire FegatassocAirballoon2.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Allons à IDA pro à l'adresse indiquée et étudier la fonction. Le code est fortement obscurci. Le fragment qui nous intéresse est présenté ci-dessous.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Ici, l'espace d'adressage du processus est analysé pour une signature. Cette approche est extrêmement douteuse.

Tout d'abord, l'adresse de début de numérisation Assistance . Cette valeur est statique et n'est pas ajustée lorsque la base est déplacée. Dans des conditions de serre idéales, cela indiquera la fin PE-l'en-tête du fichier exécutable. Cependant, la base de données n'est pas statique, sa valeur peut changer et la recherche de l'adresse réelle de la signature requise, même si elle ne provoquera pas de débordement de variable, peut prendre beaucoup de temps.

Deuxièmement, la signification de la signature iWGK. Je pense qu'il est évident que 4 octets sont trop petits pour garantir l'unicité. Et si l'on prend en compte le premier point, la probabilité de se tromper est assez élevée.

En fait, le fragment recherché est attaché à la fin du fragment précédemment trouvé. bmp-images par offset 0xA1D0D.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Exécution code shell réalisé en deux étapes. Le premier décrypte le corps principal. Dans ce cas, la clé est déterminée par force brute.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Videz celui décrypté code shell et regarde les lignes.

Tout d’abord, nous connaissons maintenant la fonction pour créer un processus enfant : CreateProcessInternalW.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Deuxièmement, nous avons pris conscience du mécanisme de fixation dans le système.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Revenons au processus initial. Mettons point d'arrêt sur CreateProcessInternalW et poursuivre l'exécution. Ensuite, nous voyons la connexion NtGetContextThread/NtSetContextThread, qui change l'adresse de début d'exécution en adresse Code Shell.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Nous nous connectons au processus créé avec un débogueur et activons l'événement Suspendre le chargement/déchargement de la bibliothèque, reprenez le processus et attendez le chargement .NET-les bibliothèques.

Utilisation ultérieure ProcessHacker vider les régions contenant des fichiers décompressés .NET-application.

Nous arrêtons tous les processus et supprimons la copie du malware intégrée au système.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
Le fichier vidé est protégé par un protecteur Réacteur .NET, qui peut être facilement supprimé à l'aide d'un utilitaire de4dot.

La participation a échoué: nous amenons AgentTesla à l'eau potable. Partie 3
En utilisant les règles YARA écrites précédemment, nous nous assurons qu'il s'agit bien d'AgentTesla.

Pour résumer

Ainsi, nous avons démontré en détail le processus de déballage semi-automatique d'un échantillon en utilisant trois mini-cas comme exemple, et avons également analysé les logiciels malveillants sur la base d'un cas à part entière, découvrant que l'échantillon étudié est AgentTesla, établissant sa fonctionnalité et un liste complète des indicateurs de compromission.

L'analyse de l'objet malveillant que nous avons effectuée nécessite beaucoup de temps et d'efforts, et ce travail doit être effectué par un employé spécial de l'entreprise, mais toutes les entreprises ne sont pas prêtes à employer un analyste.

L'un des services fournis par le Laboratoire d'investigation informatique et d'analyse des codes malveillants du Groupe-IB est la réponse aux cyber-incidents. Et pour que les clients ne perdent pas de temps à approuver des documents et à en discuter en pleine cyberattaque, Group-IB a lancé Mandataire de réponse aux incidents, un service de réponse aux incidents avant abonnement qui comprend également une étape d'analyse des logiciels malveillants. Plus d'informations à ce sujet peuvent être trouvées ici.

Si vous souhaitez étudier à nouveau comment les échantillons AgentTesla sont décompressés et voir comment un spécialiste CERT Group-IB le fait, vous pouvez télécharger l'enregistrement du webinaire sur ce sujet ici.

Source: habr.com

Ajouter un commentaire