Malware para Brasil se aloja en México

Hace algunos días, se informó al UNAM – CERT sobre una liga que posiblemente estaba propagando malware, dicho sitio se encontraba alojado en México.

A primera instancia, el nombre del archivo nos daba una sospecha sobre el tipo de ataque: Modulo_Santader0943.exe

 
Al realizar el análisis de la muestra, el malware ya tenía un tiempo considerable propagándose; a pesar de ello, solamente 26 de 43 soluciones lo identificaban como malicioso en VirusTotal. 
 
  
La muestra tiene las siguientes firmas digitales:
 
 
VT indicaba además que posiblemente pudiera estar empaquetada con un algoritmo llamado PECompact2
 
Al copiar el archivo ejecutable en el escritorio, parecía como si se tratara de una herramienta del Banco Santander.
 
 
En un inicio, VT mencionó que posiblemente se encontraba empaquetada, PEiD mostró la misma información indicando que el algoritmo usado era PECompact 2.x
 
 
Al empaquetarse con este algoritmo no pudimos revisar las cadenas, ya que al abrir BinText, el programa que generalmente usamos en Windows para ver cadenas mostró que existía un problema al leer el archivo,  pues posiblemente no tenía un formato estándar.
 
 
Con el comando Strings de Linux nos apareció la siguiente información: 
 
 
Al ejecutar el malware no realizó alguna modificación en las llaves de registro, ni creó o borró archivos, tampoco se observó tráfico de red. Lo único que hizo fue lanzar el proceso y levantar una supuesta aplicación del Banco Santander de Brasil.
 
 
Cualquier número que ingresaramos nos permitía pasar a una segunda pantalla, por lo tanto, en esta primera instancia de la falsa aplicación, no se estaban validando los datos capturados. 
 
En la segunda pantalla nos solicitó más información. 
 
 
Hasta este punto, tampoco se envió algún tipo de información por internet, así que posiblemente la aplicación se encontraba guardando toda la información para ser enviada por medio de una sola petición.
 
Posteriormente, al presionar el botón “Confirmar” mostró una tercera pantalla solicitando un número de identificación.
 
 
Estuvimos probando con diferentes claves, pero ninguna nos permitía seguir con el supuesto proceso. 
 
Pensamos que una vez que el usuario ha ingresado toda la información necesaria, entonces la aplicación la mandará hacía algún sitio remoto. 
 
Por lo tanto, necesitábamos hacer un análisis de cadenas y debbugear la aplicación para encontrar el sitio remoto que guardaba la información robada. 
 
Cuando una muestra se encuentra empaquetada, el algoritmo de empaquetamiento generalmente modifica el punto de entrada OEP (Original Entry Point), que es donde inicia la ejecución del programa. Con esa modificación, se puede inyectar algún algoritmo al ejecutable para cifrarlo o comprimirlo. El original queda totalmente modificado en primera instancia, pero al ejecutarlo, el nuevo archivo que se hace pasar por el orginal, lleva a cabo la misma acción.
 
Por lo anterior, era necesario que encontráramos el punto de entrada del archivo ejecutable original una vez que el algoritmo de empaquetamiento lo hubiera descifrado. Para esto hicimos uso de OllyDBG.
 
Al abrir el archivo con Olly, la primera pantalla que mostró fue un mensaje informativo que mencionaba, que tal vez el ejecutable que deseábamos abrir podría estar empaquetado.
 
 
En busca del OEP. Los algoritmos de empaquetamiento generalmente saltan a secciones de memoria usando excepciones, esto lo realizan para estar totalmente seguros de que leerán las secciones de su código en donde se encuentra el descifrado del archivo ejecutable. Por lo regular, cuando se encuentran instrucciones FS, se trata del manejador de excepciones de ensamblador conocido como Structured Exception Handling in Assembly Language
 
Una vez que el algoritmo desempaqueta el archivo ejecutable original, entonces lo tenemos en algún sitio de la memoria, para encontrarlo es necesario primero localizar al OEP del ejecutable original. La mayoría de los empaquetadores guardan ese OEP en el registro EAX, tal vez se deba a que este registro es usado para guardar y regresar valores de subrutinas en ensamblador. Por lo tanto, una muy buena pista sería buscar la primera llamada (CALL EAX) o salto (JMP EAX) al registro EAX.
 
El punto de entrada OEP del malware empaquetado se encuentra en la instrucción 00401000, en la dirección 00401006 y 0040100D; donde precisamente ubicamos al manejador de excepciones que obliga a saltar a una nueva instrucción. 
 
 
Inmediatamente después de cruzar la instrucción 00401016, se produce la excepción. Previamente habíamos agregamos algunos breakpoints en la memoria volcada (Memory Dump) para tratar de cachar el momento en el cual regresa de la excepción, eso significará que posiblemente tengamos al menos el OEP original. 
 
Después de estar buscando el punto de entrada y con ayuda de varios breakpoints colocados en la memoria volcada, encontramos finalmente el salto al registro EAX (JMP EAX), en la instrucción 0064C2B2.
 
 
 
Por lo tanto, para este punto, muy posiblemente, se trataba del registro EAX que contenía el OEP original, así que si seguíamos el salto (JMP) nos llevaría muy probablemente al código ejecutable original (sin el empaquetamiento). 
 
El punto de entrada original (OEP original) entonces sería la instrucción 0055A804.
 
 
En este punto realizamos el volcado de la memoria y lo guardamos en un archivo (éste será el ejecutable desempaquetado). Al volver a revisar el ejecutable con PEiD ya no nos mostraba que se trataba de un archivo empaquetado.
 
 
Existen en internet algunos scripts para OllyDBG, los cuales ayudan a encontrar el OEP para algoritmos de empaquetamiento. Uno que hayamos específicamente para encontrar el OEP del algoritmo PECompact 2.xx y Windows XP, fue el escrito por hacnho en el 2004.
 
 
 
El script se carga con ayuda de Olly Script y en un instante encuentra el OEP original, saltando todo el proceso que previamente realizamos.  
 
 
Entonces con la muestra desempaquetada, comenzamos a buscar pistas hacia dónde se enviaba la información robada, y encontramos la cadena que muestra el sitio indicado: 
 
 
Como mencionamos en un inicio, la muestra ya tiene tiempo de haber estado propagándose, por lo tanto, para cuando realizamos el análisis y encontramos el sitio que guardaba la información robada, éste ya no estaba activo.