Hola a tod@s!!
Últimamente he visto un repunte del stealer AgentTesla, así que me he decidido a dedicarle un post para ver cómo podemos identificarlo rápidamente, desde que llega al correo hasta si nos lo encontramos directamente en uno de los procesos de una máquina que estemos analizando, esperemos que esto no nos pase nunca, jeje.
Antes de empezar, vamos a recordar " quién es AgentTesla " :
Agent Tesla es un software espía que recopila información sobre las acciones de sus víctimas mediante el registro de pulsaciones de teclas e interacciones del usuario. Se comercializa falsamente como un software legítimo en el sitio web dedicado donde se vende este malware.
Más abajo podemos leer:
El software espía está creado utilizando el Framework de software .Net. Su objetivo es robar datos personales y transmitirlos de vuelta al servidor C2. El malware es capaz de acceder a información de navegadores web, clientes de correo electrónico y servidores FTP.
Además, el malware de Agent Tesla puede realizar capturas de pantalla y videos. También puede grabar información del portapapeles y valores de formularios.
Digamos que sería como el punto de entrada para poder acceder a los datos de los usuarios que consiga comprometer, acceso a las credenciales de los navegadores
Cuidado si decidís guardar las credenciales al autenticarte en algún sitio
lo mismo ocurre con las credenciales guardadas en los clientes de correos (¿seguro que queremos guardarlo para no tener que introducirlas cada vez que accedamos?) o los clientes de FTP.
Alguno pensaréis, da igual, capturas las teclas y te las pillaran igualmente. Bueno, la cosa es ponerlo lo más difícil a los atacantes.
Podemos ver como en la plataforma de Any.run se registran una serie de IOC:
Vemos como aparecen URLs, de FTP, de la api de Telegram, dominios, IP, etc. Esto es debido a existen diferentes formas de exfiltrar los datos que sea capaz de obtener, es configurable, puedes utilizar cualquiera de esos métodos.
Veamos unos ejemplos de como llegan por correo, por ejemplo:
Las facturas siempre son atractivas para los atacantes, ¿Quién no trata de comprobar una factura que, a priori, no ha solicitado?
Si nos fijamos en la extensión, no es un zip o un rar o un 7zip. ¿O sí lo es?
Pues se trata de un fichero comprimido con RAR.
Así que podemos renombrarlo a .rar o abrirlo directamente con Winrar como ya habíamos hecho.
¿Por qué le cambian la extensión origial .rar a .gz?
Lo que se me ocurre es para tratar de confundir a las herramientas que analizan según la extensión. Si fuese RAR el Antivirus de turno podría entrar en acción mientras que si es un GZIP, puede que no se comporte como se espera. Además de parecer que podría ser inocuo de alguna forma. El caso es que se ven muchos .tar, .gz, etc. que son en realidad ficheros RAR. Esto ya nos puede hacer que desconfiemos sobre lo que se oculta dentro de ese fichero, podría ser malicioso.
Empezaremos con el análisis estático, se trata de un binario .Net para arquitecturas de 32 bit.
¿Es reciente?
Mira por donde, la posible fecha de compilación (ojo con esto que se puede alterar fácilmente como podéis comprobar en esta muestra) es de 2102, faltan muchos años para que se cree, ¿verdad? xD
Otra característica más para desconfiar, una muestra que viaja en el tiempo.
Como está compilada con .Net, podemos echarle un vistazo rápido con dnSpy y ver su código fuente, la idea es tratar de identificar ese comportamiento que nos mencionaba Any.run.
Nos fijamos en el punto de entrada y pulsamos sobre él.
Vemos en las funciones de la izquierda nombres que no tienen mucho sentido, lo que implicaría ofuscación. No lo quieren poner fácil, es normal, la mayoría de las aplicaciones .Net se ofuscan ya que con herramientas como esta, se puede llegar al código fuente original.
Podemos observar como aparecen funciones relacionadas con criptografía, por lo que posiblemente, esta muestra no sea el malware final, sino que se encuentra cifrado y en algún momento lo descifrará y ejecutará.
Así que tenemos 2 opciones, seguir con el reversing (más tiempo) o ejecutar, esperar y extraer.
Abrimos Procmon para ver el comportamiento:
Esta herramienta tiene una opción de mostrar un árbol de procesos de la ejecución.
En donde podemos observar una inyección en el mismo proceso, Process Hollowing. Pues utilizamos la herramienta Hollows_hunter32.exe para extraer el malware de segundo PID que vemos, del 2352.
Aunque si preferís poner breakpoints y capturar la muestra final, podéis ir directamente a las API ReadProcessMemory, VirtualAllocEx y varios WriteProcessMemory.
Aparecen un par de binarios dentro del directorio, el que nos interesa es “400000.soya crypted.exe”. Otra aplicación .Net.
¿Será también una muestra del futuro?
Esta no, es del pasado, cercano…
Si pulsamos en el punto de entrada, aterrizamos aquí y vemos de nuevo, que las funciones aparecen ofuscadas:
Usaremos De4Dot para desofuscarlas, seguro que algo mejora y así ha sido, ya vemos el Main.
Han aparecido algunas funciones que antes no estaban como ns0 y ns1. Ahora ya no queda otra que bucear en el código fuente para detectar todas las acciones maliciosas que realiza este malware.
Veamos un ejemplo, no podemos ver todos porque son muchos, en este caso vemos como trata de buscar credenciales en un fichero llamado logins.json, perteneciente al navegador Mozilla Firefox.
Este sería el aspecto de ese fichero logins.json que busca:
Si encuentra credenciales que pueda descifrar, estaremos perdidos:
Así que pensaros si realmente queréis almacenar credenciales en los navegadores o usar algún gestos de contraseñas, ahí lo dejo.
No solamente extrae las credenciales de Firefox, sino de multitud de navegadores y clientes, lo podemos ver a continuación:
Podemos exportar el proyecto y así poder trabajar con “grep”, más rápido para identificar ciertos comportamientos:
$ grep VA9 p3N5Y/fAUNhG4wfK.cs | grep true | awk -F\" '{print $2}'
Opera Browser
Chromium
BlackHawk
Flock
Citrio
CyberFox
Sleipnir 6
Liebao Browser
Coccoc
Uran
Iridium Browser
Sputnik
WaterFox
Postbox
K-Meleon
Coowon
CentBrowser
IceCat
Torch Browser
Chrome
Orbitum
PaleMoon
360 Browser
Epic Privacy
IceDragon
Firefox
Edge Chromium
7Star
SeaMonkey
Elements Browser
Comodo Dragon
Amigo
QIP Surf
Yandex Browser
Chedot
Cool Novo
Brave
Vivaldi
Thunderbird
Kometa
Da miedo, ¿verdad? Son muchísimos clientes, ¿Quién no usa alguno de ellos? Digamos, que este malware sabe como obtener las credenciales almacenadas en todos ellos.
A la hora de mostrar los resultados, dependiendo de si es en formato texto o html, muestra los siguientes datos, en este caso en formato texto:
Otra de las características es que tenía capacidades de Keylogger, y aquí tenemos el fichero que deberíamos buscar para comprobar si estamos comprometidos. En el directorio temporal, log.tmp.
Para profundizar como lo hace, se puede acceder a la función correspondiente:
También capturaba el portapapeles, como podemos comprobar.
Y realizar capturas de pantalla:
Además de todo lo que encuentre, envía información sobre la máquina en cuestión:
$ grep -E "<br>.*;" ppkr/HaT.cs | awk -F\" '{print $2}' | sed 's/<br>//g'
RAM:
OSFullName:
Computer Name:
User Name:
IP Address:
CPU:
Llegados a este punto nos interesa, sobre todo, saber a donde se van a enviar las credenciales o los datos obtenidos, y en este caso tenemos que será por correo a través del protocolo SMTP. Esto se encuentra en la configuración del malware:
¿Podemos detectar este malware con reglas Yara?
Como suelo utilizar CAPE, pondré la regla Yara incluída en la sandbox.
Comprobando antes que lo detecta:
$ yara AgentTesla.yar .
AgentTeslaV3 400000.soya crypted.exe
¡Lo detecta!, así que nos sirve.
Espero que os haya gustado el post y nos vemos en el siguiente.
¡¡¡Hasta otra!!!