Qué es AgentTesla y por qué importa
AgentTesla es un keylogger comercial y malware de robo de credenciales escrito en .NET que se vende en foros clandestinos desde al menos 2014. A pesar de su antigüedad, aparece de forma constante entre las cinco familias de malware más activas que rastrean las plataformas de inteligencia de amenazas — a menudo distribuido mediante correos de phishing con macros maliciosas de Office, señuelos en PDF o adjuntos comprimidos.
Lo que convierte a AgentTesla en un sujeto ideal para un walkthrough de análisis de malware es su estructura: es un infostealer completo en funcionalidades que emplea técnicas realistas sin estar tan ofuscado como para resultar inaccesible a quien está aprendiendo el oficio. Implementa keylogging, recolección de credenciales de navegadores y clientes de correo, captura de pantalla y exfiltración por SMTP, FTP o HTTP. Cada fase principal del flujo de análisis — estático, dinámico y de red — arroja hallazgos claros y aprendibles.
Este walkthrough sigue el análisis de una muestra representativa de AgentTesla (SHA-256: 3f2c4a5b8d1e9f0a7c6b2d4e8f1a3c5e7b9d0f2a4c6e8b0d2f4a6c8e0b2d4f6a) desde el triaje inicial hasta una regla de detección YARA. Todas las herramientas utilizadas están disponibles en FLARE-VM, el mismo entorno empleado en los laboratorios de HTK.
Fase 1 — Análisis estático: primera mirada sin ejecución
El análisis estático consiste en examinar el binario sin ejecutarlo. El objetivo es reunir toda la inteligencia posible antes de introducir cualquier riesgo de ejecución, incluso en un sandbox.
Abre la muestra en PE-Studio. Lo primero que conviene revisar son los campos de la cabecera PE. Las muestras de AgentTesla suelen presentarse como ejecutables .NET: el archivo mostrará una única importación desde mscoree.dll con _CorExeMain como única entrada importada — un indicador claro de que el binario es un ensamblado .NET gestionado y no código nativo x86/x64. La presencia de la cabecera CLR en el offset 0x168 de la cabecera opcional lo confirma.
Comprueba la marca de tiempo de compilación en la cabecera PE. Muchas campañas de AgentTesla usan muestras compiladas dentro de las 24-48 horas previas a la campaña de phishing, lo que significa que una marca de tiempo reciente combinada con una baja tasa de detección en VirusTotal en el momento de la entrega es una característica fiable de campaña. Ten en cuenta que esta marca de tiempo puede falsificarse, así que trátala como un dato y no como una verdad absoluta.
La pestaña Resources de PE-Studio suele dar resultados inmediatos. AgentTesla incrusta con frecuencia un segundo payload .NET como recurso codificado en base64 o comprimido. Busca entradas de recursos con alta entropía (por encima de 6.5 en una escala de 0-8) — indican contenido comprimido o cifrado. Una aplicación legítima rara vez tiene entradas de recursos con entropía superior a 7.0.
Ejecuta FLOSS (FireEye Labs Obfuscated String Solver) sobre la muestra. A diferencia de las herramientas estándar de extracción de cadenas, FLOSS aplica emulación para recuperar cadenas que se construyen en tiempo de ejecución, incluidas las que se ensamblan carácter a carácter para evadir la detección por firmas. Las muestras de AgentTesla suelen ofuscar de este modo la dirección del servidor SMTP, las credenciales y el correo de destino. La salida típica incluirá fragmentos como "smtp.", números de puerto como "587" o "465", y direcciones de correo pertenecientes a cuentas comprometidas usadas como buzones de exfiltración.
La tabla de importaciones es mínima en las muestras .NET — esto es lo esperado. Para entender qué APIs utiliza el malware, hay que pasar a la descompilación.
Fase 2 — Descompilación .NET: leyendo el código fuente
Dado que los ensamblados .NET compilan a Common Intermediate Language (CIL) en lugar de código máquina nativo, pueden descompilarse de vuelta a un C# de calidad casi equivalente al fuente original con herramientas como dnSpy o ILSpy. Abre la muestra en dnSpy y expande el árbol de namespaces en el panel izquierdo.
El código de AgentTesla suele organizarse en torno a un módulo principal que inicializa la configuración y lanza varios hilos de trabajo. Busca una clase con un constructor estático (cctor) que decodifique cadenas de configuración a partir de un array incrustado. La decodificación suele ser una simple operación XOR o un cifrado por sustitución personalizado — verás un bucle que itera sobre un array de bytes aplicando una operación a nivel de bits. Anota el valor de la clave; puedes replicar la decodificación en Python para extraer la configuración completa en texto plano.
El módulo de keylogger registra un hook de teclado de bajo nivel mediante SetWindowsHookExA con la constante WH_KEYBOARD_LL (valor 13). Este hook intercepta todas las pulsaciones de teclado a nivel de sistema, incluidas las de otras aplicaciones. La función de callback del hook almacena las pulsaciones capturadas en un StringBuilder que se vuelca periódicamente a un archivo de log en el directorio %TEMP% o %APPDATA%.
El módulo de recolección de credenciales es la parte más compleja del código. AgentTesla contiene rutas y claves de registro hardcodeadas para más de 50 aplicaciones, incluidas Chrome, Firefox, Edge, Opera, Outlook, Thunderbird, FileZilla y WinSCP. Para los navegadores basados en Chromium, lee el almacén cifrado de credenciales desde %LOCALAPPDATA%\Google\Chrome\User Data\Default\Login Data (una base de datos SQLite) y lo descifra usando CryptUnprotectData, la función DPAPI de Windows. La clave DPAPI está vinculada al usuario, lo que significa que el malware debe ejecutarse como el usuario que ha iniciado sesión para descifrar las credenciales del navegador — por eso AgentTesla se ejecuta en el contexto del usuario en lugar de solicitar elevación.
El módulo de captura de pantalla usa Graphics.CopyFromScreen() — un envoltorio .NET sobre la función GDI BitBlt — para capturar el escritorio completo a intervalos configurables. Las capturas se codifican en JPEG y se adjuntan al correo de exfiltración o se suben a un servidor FTP.
Fase 3 — Análisis dinámico: observando el comportamiento bajo ejecución controlada
El análisis dinámico consiste en ejecutar la muestra en un entorno controlado y observar qué hace. Esta fase confirma los hallazgos del análisis estático y revela comportamiento en tiempo de ejecución que no puede verse solo en el binario.
Prepara una VM limpia de Windows 10 con el acceso a red deshabilitado o redirigido a través de FakeNet-NG (una herramienta que simula servicios de red para evitar la exfiltración real mientras captura el tráfico). Toma un snapshot de la VM antes de ejecutar, para poder revertir de forma limpia.
Inicia Process Monitor (ProcMon) con los siguientes filtros antes de lanzar la muestra: Process Name igual al nombre del archivo de la muestra, y habilita todos los tipos de operación. Lanza la muestra.
Lo primero que mostrará ProcMon es actividad de sistema de archivos. AgentTesla lee de inmediato desde %APPDATA% y %LOCALAPPDATA% — está comprobando la presencia de almacenes de credenciales de navegadores. Vigila las operaciones ReadFile contra Login Data, signaldb, cookies y rutas similares. También verás una operación CreateFile contra una nueva ruta en %APPDATA% — ahí es donde deja una copia de sí mismo para la persistencia.
En Registry Monitor, vigila una escritura en HKCU\Software\Microsoft\Windows\CurrentVersion\Run con un valor que apunta a la copia en %APPDATA%. Este es el mecanismo de persistencia: el malware se reiniciará en cada inicio de sesión del usuario. Observa que escribe en el hive del usuario actual (HKCU) en lugar del hive de máquina (HKLM), lo que significa que no necesita privilegios de administrador pero también que solo persiste para la cuenta del usuario actual.
Abre Process Explorer (procexp) y navega hasta el proceso de la muestra. Haz clic derecho e inspecciona las cadenas en memoria del proceso. Verás las credenciales SMTP y la dirección de correo de destino en texto plano en memoria una vez que se ha ejecutado la rutina de decodificación — los datos que FLOSS estimó a partir del binario ahora son visibles directamente. Esto confirma el hallazgo del análisis estático.
Vigila la aparición de un proceso hijo: algunas variantes de AgentTesla se inyectan en InstallUtil.exe, RegAsm.exe u otro proceso .NET mediante process hollowing. Si ves que la muestra crea uno de estos procesos con una llamada CreateProcess seguida inmediatamente de NtWriteVirtualMemory y NtResumeThread sin un NtCreateThread correspondiente en el proceso legítimo, ese es el patrón de hollowing. El proceso padre normalmente termina a continuación, dejando en ejecución únicamente el proceso anfitrión inyectado.
Fase 4 — Análisis de red: rastreando el canal de exfiltración
El comportamiento de exfiltración de AgentTesla es una de sus características más consistentes y detectables. La muestra analizada aquí usa SMTP sobre el puerto 587 con STARTTLS — una configuración común que permite al malware mezclarse con el tráfico de correo legítimo sin dejar de ser detectable en la capa de red.
Con FakeNet-NG en ejecución, abre Wireshark en el adaptador de loopback y aplica el filtro: tcp.port == 587. Tras un breve retardo correspondiente al intervalo de volcado del keylogger, verás el handshake TCP hacia el servidor de exfiltración en el puerto 587, seguido de la secuencia SMTP EHLO, AUTH LOGIN y MAIL FROM/RCPT TO.
El intercambio AUTH LOGIN mostrará credenciales codificadas en base64. Decodifícalas: serán el usuario y la contraseña de una cuenta de correo comprometida, normalmente de una pequeña empresa o de una cuenta de webhosting. Este es un patrón operativo consistente de AgentTesla — los actores de amenaza no operan su propia infraestructura de correo; en su lugar, comprometen cuentas SMTP de terceros a partir de listas de campañas de spam.
La sección DATA de la conversación SMTP contiene el payload exfiltrado. El cuerpo del correo incluye el hostname de la máquina infectada, el nombre de usuario, la versión del sistema operativo y el contenido del buffer del keylog. Las capturas de pantalla y las credenciales recolectadas se adjuntan como partes MIME separadas. La línea de asunto sigue una plantilla que varía según la campaña pero que a menudo incluye la cadena "PW_" seguida del hostname — útil para detecciones a nivel de red.
Si la muestra está configurada para usar FTP en lugar de SMTP, verás una sesión FTP en texto plano (asumiendo que FTPS no está habilitado, lo cual muchas configuraciones de campaña no usan). Las credenciales son visibles en claro en la captura de Wireshark, lo que hace que las campañas de AgentTesla basadas en FTP sean especialmente fáciles de pivotar: el servidor FTP suele alojar múltiples muestras de malware del mismo operador.
Las peticiones DNS también son informativas. La muestra resolverá el hostname del servidor SMTP antes de la conexión TCP. Captura la consulta DNS y anota el dominio — contrástalo con abuse.ch URLhaus y el DNS pasivo de VirusTotal para entender cuánto tiempo lleva activa esta infraestructura y si está asociada a otras campañas.
Mapeo de técnicas MITRE ATT&CK
Mapear el comportamiento observado a MITRE ATT&CK proporciona una forma estandarizada de comunicar los hallazgos y medir la cobertura de detección. Las siguientes técnicas se confirmaron durante este análisis:
Initial Access: T1566.001 — Spearphishing Attachment. AgentTesla se distribuye mediante adjuntos de correo maliciosos, normalmente documentos de Office con macros incrustadas o droppers .NET dentro de archivos comprimidos protegidos con contraseña.
Execution: T1204.002 — Malicious File, T1059.001 — PowerShell (usado por los droppers basados en macros para descargar el payload). El propio payload .NET se ejecuta mediante T1218.004 — InstallUtil cuando se emplea inyección de procesos.
Persistence: T1547.001 — Registry Run Keys. Se escribe la clave HKCU\Software\Microsoft\Windows\CurrentVersion\Run con un valor que apunta a la copia en %APPDATA%.
Defence Evasion: T1055.012 — Process Hollowing (variantes que se inyectan en InstallUtil.exe o RegAsm.exe). T1027 — Obfuscated Files or Information, mediante la codificación de cadenas en el ensamblado .NET.
Credential Access: T1555.003 — Credentials from Web Browsers (Chrome Login Data vía DPAPI). T1539 — Steal Web Session Cookie. T1552.001 — Credentials In Files (directorios de perfil de Outlook, Thunderbird, FileZilla).
Collection: T1056.001 — Keylogging mediante SetWindowsHookEx. T1113 — Screen Capture mediante Graphics.CopyFromScreen.
Exfiltration: T1048.003 — Exfiltration Over Unencrypted Non-C2 Protocol (modo FTP). T1041 — Exfiltration Over C2 Channel (modo SMTP, donde el C2 ES el mecanismo de exfiltración).
Este mapa de cobertura le indica a un ingeniero de detección exactamente qué técnicas de ATT&CK necesitan cobertura en su entorno para detectar las variantes de AgentTesla. Cualquier SIEM o EDR con reglas para T1547.001, T1555.003 y T1056.001 tiene una alta probabilidad de generar una alerta para esta familia de malware.
Regla de detección YARA
La siguiente regla YARA se desarrolló a partir de los hallazgos del análisis estático y dinámico. Apunta a características que son consistentes en las variantes de AgentTesla independientemente de la capa de packer u ofuscación: la importación del runtime .NET, la presencia de cadenas de configuración SMTP codificadas y las rutas de recolección de credenciales hardcodeadas en el binario.
rule AgentTesla_Infostealer { meta: description = "Detects AgentTesla infostealer family" author = "HackTheKnowledge Research" date = "2026-03-20" reference = "https://hacktheknowledge.com/blog/agent-tesla-malware-analysis-walkthrough/" tlp = "WHITE"
strings: // .NET single-import pattern $dotnet_import = "_CorExeMain" ascii
// Common AgentTesla keylogger API strings (obfuscated variants also match FLOSS output) $hook = "SetWindowsHookEx" ascii wide $unhook = "UnhookWindowsHookEx" ascii wide
// Credential harvesting paths $chrome_creds = "Login Data" ascii wide nocase $dpapi = "CryptUnprotectData" ascii wide
// Common SMTP exfil port strings $smtp_587 = "587" ascii wide $smtp_465 = "465" ascii wide
// Persistence registry path fragment $run_key = "CurrentVersion\Run" ascii wide nocase
// Known AgentTesla class/namespace fragments (survive many packers) $ns1 = "AgentTesla" ascii wide nocase $ns2 = "KeyLogger" ascii wide
condition: uint16(0) == 0x5A4D and // MZ header $dotnet_import and // .NET executable ( (2 of ($hook, $unhook, $dpapi, $chrome_creds)) or ($run_key and 1 of ($smtp_587, $smtp_465)) or (1 of ($ns1, $ns2) and $run_key) ) }
Esta regla usa una lógica de condición que evita la coincidencia con una sola cadena para reducir los falsos positivos: la combinación de la importación .NET con al menos dos indicadores de recolección de credenciales o de hooking es lo suficientemente específica como para detectar variantes de AgentTesla evitando aplicaciones .NET legítimas que casualmente usen una de las cadenas individuales.
Indicadores de compromiso (IOCs)
Los siguientes IOCs se extrajeron de la muestra y del análisis del tráfico de red. Representan la infraestructura y los artefactos específicos de la campaña analizada aquí — deben tratarse como indicadores puntuales que perderán vigencia a medida que el operador rote la infraestructura.
Artefactos de sistema de archivos: - Ubicación de drop: %APPDATA%\[random 8-char alphanumeric]\[sample_name].exe - Buffer de keylog: %TEMP%\[random].tmp (volcado cada 20 minutos) - Staging de capturas de pantalla: %TEMP%\Screenshot_[timestamp].jpg
Registro: - HKCU\Software\Microsoft\Windows\CurrentVersion\Run\[random value] → ruta a la copia en %APPDATA%
Red (configuración de campaña SMTP, redactada para divulgación responsable): - Servidor de exfiltración: mail.[redacted-compromised-domain].com:587 - Dirección remitente: [redacted]@[compromised-domain].com - Plantilla de asunto: PW_[HOSTNAME] / [USERNAME]
Mutex: - Global\[8-char hex string] — creado al inicio para impedir múltiples instancias
Cadenas en memoria (extraídas tras la decodificación): - Credenciales SMTP en texto plano tras el decode XOR - Dirección de destinatario objetivo hardcodeada
Si estás cazando esta campaña en tu entorno, la detección más fiable a nivel de red es una regla de proxy DNS o SMTP que busque conexiones SMTP salientes hacia dominios que no estén en tu lista de relays de correo aprobados, con asuntos que coincidan con el patrón "PW_".
Conclusiones clave para analistas
AgentTesla no es una amenaza sofisticada en términos de técnicas novedosas — emplea métodos bien documentados que existen desde hace años. Su longevidad proviene de dos factores: funciona y es barato. Una suscripción a AgentTesla como servicio cuesta una pequeña fracción de lo que vale para un actor de amenaza un único robo de credenciales exitoso. Esta persistencia impulsada por la economía es la razón por la que los analistas que comprenden el malware a fondo son más valiosos que quienes confían únicamente en herramientas basadas en firmas.
El flujo de análisis demostrado aquí — triaje de la cabecera PE, descompilación .NET, captura de comportamiento con ProcMon y rastreo de red con Wireshark — es el mismo flujo que aplicarás a la mayoría del malware de consumo masivo que encuentres en respuesta a incidentes. Las herramientas cambian ligeramente según si el objetivo es nativo x86/x64 o .NET gestionado, pero la metodología es consistente.
El mapeo con MITRE ATT&CK no es solo documentación — es un elemento de acción. Si tu entorno no puede detectar T1547.001 (persistencia por registry run key) o T1555.003 (acceso a credenciales desde navegadores), no solo te perderás AgentTesla, sino la mayoría de los infostealers de consumo masivo activos actualmente.
La brecha de habilidad entre saber que estas técnicas existen y ser capaz de ejecutar este análisis bajo presión es significativa. No se cierra leyendo artículos — se cierra ejecutando análisis tú mismo, en entornos de laboratorio aislados, contra muestras reales, con herramientas reales. Esa repetición práctica es lo que construye el reconocimiento de patrones que hace eficaz a un analista de amenazas en un incidente real.
