Avec cet article nous complétons la série de publications consacrées à l’analyse des logiciels malveillants. DANS
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.
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.
Il existe des marqueurs comportementaux caractéristiques d’AgentTesla.
L'exemple téléchargé est l'exécutable .NET-fichier protégé par un protecteur Réacteur .NET.
Ouvrons-le dans l'utilitaire dnSpy x86 et passez au point d'entrée.
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.
Dans l'un des tampons renvoyés, vous pouvez voir la signature MZ (0x4D 0x5A). Sauvons-le.
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.
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.
- Le premier vous permet de « coller » une bibliothèque dynamique dans l’échantillon parent.
- 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.
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.
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.
Échantillon n°2
Le fichier source est un document MS Excel. Une macro intégrée provoque l'exécution de code malveillant.
En conséquence, le script PowerShell est lancé.
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 charge utile est un exécutable .NET-déposer.
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 :
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.
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.
Ce chargeur dispose de fonctionnalités anti-analyse étendues.
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
Pour désactiver la protection, nous profiterons de l'occasion dnEspion, qui vous permet de modifier IL-code.
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.
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.
Échantillon n°3
Le fichier source est l'exécutable VB natif PE32-déposer.
L'analyse d'entropie montre la présence d'une grande quantité de données cryptées.
Lors de l'analyse du formulaire de candidature dans Décompilateur VB vous remarquerez peut-être un étrange arrière-plan pixelisé.
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.
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.
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.
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.
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.
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.
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.
Deuxièmement, nous avons pris conscience du mécanisme de fixation dans le système.
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.
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.
Le fichier vidé est protégé par un protecteur Réacteur .NET, qui peut être facilement supprimé à l'aide d'un utilitaire de4dot.
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
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
Source: habr.com