Análisis de la familia de Stealers W32\ISR Stealer. Parte II
¡Hola! En el artículo de hoy vamos a continuar con el análisis de W32\ISR Stealer, un stealer del que ya os hablamos hace un par de semanas. Antes de nada, si no pudisteis leer la primera entrada, os recomendamos echarle un vistazo, de forma que podáis seguir el hilo de este análisis. Podéis leerlo accediendo aquí. Dicho esto, ¡seguimos!
El último artículo lo finalizamos con el descifrado de recursos, concretamente, con el loader reservando una zona de memoria para que entren todos estos. Y tras ello, sigue con la búsqueda del ID del primer recurso, con la llamada a FindResourceW, y lo almacena empleando el mismo método que utilizó para extraer la configuración. Esta operación, como ya adelantamos, la repite con cada uno de los siguientes recursos hasta llegar al “número de recursos”.
Finalizada esta fase, el loader comienza a limpiar el contenido cargado. Para ello, hace uso de las variables “Número de bytes que se deben saltar” y “Número de bytes de contenido antes del salto”. Esto es debido a que el texto tiene caracteres aleatorios para evitar que se puedan aplicar ataques de texto plano contra el cifrado XOR, si desconoces que hace uso de esta técnica. Por lo tanto, llama a una función que copia el contenido de esa zona de memoria a otra, comenzando por el primer carácter, saltándose los “Número de bytes que se deben saltar”, copiando los “Número de bytes de contenido antes del salto” y repitiendo hasta que el tamaño del contenido copiado sea igual a “Tamaño de la carga en bytes”.
Cuando se finaliza la limpieza, se pasa a la fase del descifrado. En esta fase se hace uso de la misma función que se utilizó en el descifrado de la configuración, pero pasándole como clave “Clave de cifrado”, la cual se obtuvo de la configuración.
Una vez el contenido esta descifrado, el loader crea un nuevo proceso hijo suspendido e inyecta el código descifrado dentro del hilo principal del proceso hijo. Una vez terminado este proceso con éxito, reanuda el hilo principal y termina con el proceso hijo.
Por lo tanto, se podría crear un script que automatizara la extracción de la muestra maliciosa, debido a que toda la información que se necesita para extraer el programa se encuentra dentro de los recursos. Para ello, habría que seguir los siguientes pasos:
- Buscar el recurso con ID 1000, el cual contiene la configuración para realizar el descifrado.
- Descifrar la configuración con los primeros 16 bytes de este.
- Crear una configuración especifica con los datos obtenidos.
- Obtener todos los recursos especificados por la configuración.
- Quitar los espaciadores introducidos dentro del programa cifrado y recortarlo al tamaño que aparece dentro de la configuración.
- Descifrar el programa y almacenarlo.
En la segunda base se genera otro ejecutable que, tras analizarlo con el 4n4ldetector, se identifica la siguiente información de interés:
Information:
Size: 260,00 KB
md5 Hash: 29BC6417B2C662C86ACB6A5BC378C484
MajorOSVersion: 4
CheckSum: 326187
EntryPoint (rva): 1180
SizeOfHeaders: 1000
SizeOfImage: 42000
ImageBase: 400000
Characteristics: 10F
TimeDateStamp: 50250636
Date: 10/08/2012 13:01:42
Architecture: x86
File Type: EXE
Number Of Sections: 3
Number Of Executable Sections: 1
Section Names: .text, .data, .rsrc
Subsystem: Windows GUI
Compiler: Visual Basic 6 - (PCode)
El lenguaje de compilación utilizado para esta muestra es Visual Basic 6 (PCode), siendo este un lenguaje cuyo código fuente se puede obtener de forma sencilla con el uso de la herramienta VB Decompiler.
Observando los recursos de este ejecutable se aprecia que hay dos que parecen ejecutables y otro que parece una cadena cifrada con algún método de cifrado sencillo.
Si se extraen los ejecutables embebidos dentro de los recursos y se ejecutan, se muestra la interfaz del “WebBrowserPassView” y “Mail PassView”, dos herramientas de Nirsoft que se utilizan para recuperar contraseñas almacenadas en los navegadores web o en los clientes de correo electrónico.
Por otro lado, el recurso que parece cifrado es el encargado de almacenar la URL donde se enviarán los datos robados del equipo. El descifrado del recurso consiste en sumarle dos al valor en decimal del carácter y volver a convertirlo en ASCII. Por tanto, “frrn8--ns`cprgjmbcpqv,amk-cgxw-NFN-glbcv,nfn” se transforma en “http://pubertilodersx.com/eizy/PHP/index.php”.
Por cada una de las credenciales que el malware consigue recuperar con las herramientas de Nirsoft, realiza una petición de tipo GET a la URL anteriormente descifrada, a la que envía los siguientes parámetros:
- La acción, en ese caso añadir.
- El usuario.
- La contraseña.
- La aplicación de donde ha obtenido la pareja de usuario-contraseña.
- El nombre del equipo.
- Web a la que pertenece.
Para realizar la recuperación de estas credenciales crea un proceso hijo de sí mismo suspendido, al cual le manda como parámetros “/scomma” y la ruta a un fichero alojado en la ruta temporal del sistema, el cual tiene un nombre aleatorio con extensión “.ini”. En dicha ruta, las herramientas de Nirsoft almacenarán las credenciales obtenidas tras su ejecución.
Una vez se termina de crear el proceso suspendido, comienza la inyección del código embebido dentro del recurso y que contiene la herramienta de Nirsoft. Cuando se finaliza la inyección reanuda el proceso.
Finalizado el proceso, el malware lee el fichero generado línea a línea y hace una división por comas, introduciendo cada uno de los valores en una posición del array, que a continuación se utilizará para enviar la información al servidor de C&C.
Y hasta aquí el análisis de la familia de Stealers W32\ISR Stealer. Espero que os haya resultado interesante y lo hayáis disfrutado tanto como yo. ¡Hasta pronto!