
Un desempaquetador y registrador automático para archivos dirigidos a DotNet Framework
¡Un desempaquetador y registrador automático para archivos orientados a DotNet Framework! Esta herramienta fue presentada en Black Hat USA 2022. En Black Hat Asia 2023, se publicaron DotDumperGUI y DotDumperNative, junto con la versión 1.1-estable de DotDumper. Estas tres herramientas están diseñadas para usarse juntas, donde DotDumper 1.1-estable requiere que las DLL de DotDumperNative estén presentes, mientras que DotDumperGUI está destinado a ser una interfaz gráfica de usuario para abrir y filtrar la salida JSON de las ejecuciones de DotDumper.
La detección y clasificación automática de cualquier archivo dado de manera confiable a menudo se considera el santo grial del análisis de malware. Las pruebas y tribulaciones para lograrlo son muchas, por lo que la creación de un sistema de este tipo es muy valorada. Cuando se trata de binarios orientados a DotNet, nuestra nueva herramienta de código abierto DotDumper tiene como objetivo asistir en varios pasos cruciales en el camino: registrar la actividad (en memoria), volcar segmentos de memoria interesantes y extraer características de la muestra dada.
En resumen, el desempaquetado manual es un proceso tedioso que consume una cantidad desproporcionada de tiempo para los analistas. Los binarios ofuscados aumentan aún más el tiempo que un analista debe dedicar para desempaquetar un archivo dado. Al escalar esto, las organizaciones necesitan numerosos analistas que diseccionen malware a diario, probablemente en combinación con un sandbox escalable. El valioso tiempo perdido podría usarse para profundizar en campañas o muestras interesantes para descubrir nuevas amenazas, en lugar del malware genérico mundano que está ampliamente extendido. Al fin y al cabo, los analistas buscan las pocas agujas en el pajar.
Entonces, ¿qué diferencia hace DotDumper? Ejecutar una muestra de malware basada en DotNet a través de DotDumper proporciona archivos de registro de llamadas a funciones cruciales, contextualizadoras y comunes en tres formatos (texto plano legible para humanos, JSON y XML), así como copias de segmentos de memoria útiles. De esta manera, un analista puede ojear el registro de llamadas a funciones. Además, los archivos volcados pueden escanearse para clasificarlos, proporcionando información adicional sobre la muestra de malware y los datos que contiene. Esto reduce el tiempo vital para los procesos de triaje y respuesta a incidentes, y libera tiempo de los analistas de SOC e investigadores para necesidades de análisis más sofisticadas.
Para registrar y volcar las llamadas a funciones contextualizadoras y sus resultados, DotDumper utiliza una combinación de reflexión y hooks administrados, todo escrito en C# puro. A continuación, se destacarán y explicarán las características clave, junto con extractos de los resultados de DotDumper de una muestra empaquetada del ladrón AgentTesla, cuyos hashes se muestran a continuación.
| Tipo de hash | Valor hash |
|---|---|
| SHA-256 | b7512e6b8e9517024afdecc9e97121319e7dad2539eb21a79428257401e5558d |
| SHA-1 | c10e48ee1f802f730f41f3d11ae9d7bcc649080c |
| MD-5 | 23541daadb154f1f59119952e7232d6b |
DotDumper es accesible a través de una interfaz de línea de comandos, con una variedad de argumentos. La imagen de abajo muestra el menú de ayuda. Tenga en cuenta que no se discutirán todos los argumentos, sino los más utilizados.

El requisito mínimo para ejecutar una muestra dada es proporcionar el argumento -file, junto con un nombre de archivo o ruta de archivo. Si se proporciona una ruta completa, se utiliza. Si se proporciona un nombre de archivo, se verifica el directorio de trabajo actual, así como la carpeta de la ubicación del ejecutable de DotDumper.
A menos que se proporcione un nombre de directorio, el nombre de la carpeta -log se establece igual al nombre del archivo de la muestra sin la extensión (si la hay). La carpeta se ubica en la misma carpeta donde reside DotDumper, que es donde se guardarán los registros y los archivos volcados.
En el caso de una biblioteca, o un punto de entrada alternativo a un binario, se debe sobrescribir el punto de entrada usando -overrideEntry true. Además, se debe proporcionar la clase completamente calificada, que incluye el espacio de nombres, usando -fqcn Mi.NameSpace.MiClase. Esto le dice a DotDumper qué clase seleccionar, que es donde se recupera el nombre de la función proporcionada (usando -functionName MiFunción).
Si la función seleccionada requiere argumentos, se debe proporcionar el número de argumentos usando -argc y la cantidad de argumentos requeridos. Los tipos y valores de los argumentos deben proporcionarse como string|miValor int|9. Tenga en cuenta que cuando se usan espacios en los valores, el argumento en la interfaz de línea de comandos debe encapsularse entre comillas para garantizar que se pase como un solo argumento.
Otras opciones de uso menos frecuente, como -raceTime o -deprecated, son seguras en su configuración predeterminada, pero podrían requerir ajustes en el futuro debido a cambios en el marco DotNet. Actualmente están expuestas en la interfaz de línea de comandos para permitir cambios fácilmente, si es necesario, incluso si se está utilizando una versión anterior de DotDumper cuando llegue el momento.
El registro y el volcado son las dos características principales de DotDumper. Para minimizar la cantidad de tiempo que lleva el análisis, el registro debe proporcionar contexto al analista. Esto se hace proporcionando al analista la siguiente información para cada llamada a función registrada:
Tenga en cuenta que para cada archivo volcado, el nombre del archivo es igual al hash SHA-256 del archivo.