
Un décompresseur et enregistreur automatique pour les fichiers ciblant le framework DotNet
Un désemballeur et enregistreur automatique pour les fichiers ciblant DotNet Framework ! Cet outil a été présenté au Black Hat USA 2022. Au Black Hat Asia 2023, DotDumperGUI et DotDumperNative ont été publiés, accompagnés de la version 1.1-stable de DotDumper. Ces trois outils sont conçus pour être utilisés ensemble, où DotDumper 1.1-stable nécessite la présence des DLL de DotDumperNative, tandis que DotDumperGUI est destiné à servir d'interface utilisateur graphique pour ouvrir et filtrer la sortie JSON des exécutions de DotDumper.
La détection et la classification automatiques et fiables de tout fichier donné sont souvent considérées comme le Graal de l'analyse de logiciels malveillants. Les essais et tribulations pour y parvenir sont nombreux, c'est pourquoi la création d'un tel système est hautement estimée. En ce qui concerne les binaires ciblant DotNet, notre nouvel outil open source DotDumper vise à aider dans plusieurs étapes cruciales du processus : l'enregistrement (en mémoire) de l'activité, le vidage de segments mémoire intéressants et l'extraction de caractéristiques de l'échantillon donné.
En bref, le désemballage manuel est un processus fastidieux qui consomme un temps disproportionné pour les analystes. Les binaires obscurcis augmentent encore le temps qu'un analyste doit passer à désemballer un fichier donné. En montant en échelle, les organisations ont besoin de nombreux analystes qui dissèquent quotidiennement des logiciels malveillants, probablement en combinaison avec un sandbox évolutif. Ce temps précieux perdu pourrait être utilisé pour fouiller des campagnes ou des échantillons intéressants afin de découvrir de nouvelles menaces, plutôt que le malware générique banal qui est largement répandu. Après tout, les analystes recherchent les quelques aiguilles dans la botte de foin.
Alors, quelle différence DotDumper apporte-t-il ? Exécuter un échantillon de malware basé sur DotNet via DotDumper fournit des fichiers journaux des appels de fonctions cruciaux, contextualisants et courants dans trois formats (texte brut lisible, JSON et XML), ainsi que des copies de segments mémoire utiles. Ainsi, un analyste peut parcourir le journal des appels de fonctions. De plus, les fichiers vidés peuvent être scannés pour les classer, fournissant ainsi un aperçu supplémentaire de l'échantillon de malware et des données qu'il contient. Cela réduit le temps crucial pour les processus de triage et de réponse aux incidents, et libère du temps pour les analystes SOC et les chercheurs pour des besoins d'analyse plus sophistiqués.
Pour enregistrer et vider les appels de fonctions contextualisants et leurs résultats, DotDumper utilise un mélange de réflexion et de hooks managés, le tout écrit en pur C#. Ci-dessous, les fonctionnalités clés seront mises en évidence et développées, en combinaison avec des extraits des résultats de DotDumper sur un échantillon du voleur AgentTesla empaqueté, dont les hachages sont ci-dessous.
| Type de hachage | Valeur du hachage |
|---|---|
| SHA-256 | b7512e6b8e9517024afdecc9e97121319e7dad2539eb21a79428257401e5558d |
| SHA-1 | c10e48ee1f802f730f41f3d11ae9d7bcc649080c |
| MD-5 | 23541daadb154f1f59119952e7232d6b |
DotDumper est accessible via une interface en ligne de commande, avec une variété d'arguments. L'image ci-dessous montre le menu d'aide. Notez que tous les arguments ne seront pas discutés, mais plutôt les plus utilisés.

L'exigence minimale pour exécuter un échantillon donné est de fournir l'argument "-file", accompagné d'un nom de fichier ou d'un chemin de fichier. Si un chemin complet est donné, il est utilisé. Si un nom de fichier est donné, le répertoire de travail courant est vérifié, ainsi que le dossier de l'exécutable de DotDumper.
Sauf si un nom de répertoire est fourni, le nom du dossier "-log" est défini égal au nom de fichier de l'échantillon sans l'extension (le cas échéant). Le dossier se trouve dans le même dossier que celui où réside DotDumper, et c'est là que les journaux et les fichiers vidés seront sauvegardés.
Dans le cas d'une bibliothèque, ou d'un point d'entrée alternatif dans un binaire, il faut remplacer le point d'entrée en utilisant "-overrideEntry true". De plus, il faut fournir la classe entièrement qualifiée, qui inclut l'espace de noms en utilisant "-fqcn My.NameSpace.MyClass". Cela indique à DotDumper quelle classe sélectionner, et c'est là que le nom de la fonction fournie (en utilisant "-functionName MyFunction") est récupéré.
Si la fonction sélectionnée nécessite des arguments, il faut fournir le nombre d'arguments en utilisant "-argc" et le nombre d'arguments requis. Les types et valeurs des arguments doivent être fournis comme "string|myValue int|9". Notez que lorsque des espaces sont utilisés dans les valeurs, l'argument sur l'interface en ligne de commande doit être encapsulé entre guillemets pour garantir qu'il soit passé comme un seul argument.
D'autres options moins fréquemment utilisées telles que "-raceTime" ou "-deprecated" sont sûres dans leurs paramètres par défaut mais pourraient nécessiter des ajustements à l'avenir en raison des changements dans DotNet Framework. Elles sont actuellement exposées dans l'interface en ligne de commande pour permettre facilement des modifications, si nécessaire, même si l'on utilise une version plus ancienne de DotDumper le moment venu.
L'enregistrement et le vidage sont les deux fonctionnalités principales de DotDumper. Pour minimiser le temps d'analyse, l'enregistrement doit fournir un contexte à l'analyste. Cela se fait en fournissant à l'analyste les informations suivantes pour chaque appel de fonction enregistré :
Notez que pour chaque fichier vidé, le nom du fichier est égal au hachage SHA-256 du fichier.