Análisis de malware
Análisis de malware: siga adelante para revertir el “Bundestrojaner” del gobierno alemán
13 de abril de por Arvind Doraiswamy
Introducción
Estoy razonablemente seguro de que cualquiera que lea este artículo en particular habrá oído hablar de virus, gusanos, troyanos y malware; así como numerosos productos antivirus como Symantec, McAfee, AVG y muchos otros. Ahora, cada vez que nuestra computadora está infectada por un virus, la mayoría de nosotros esperamos que el software antivirus que estamos ejecutando lo detecte y lo elimine de nuestra computadora. Sin embargo, muchas veces este no es el caso y hay que intentar descubrir cómo se comporta exactamente el virus. Luego buscas en Google muchas ‘Instrucciones de eliminación manual’ y sigues varios ‘Cómo hacer’ disponibles en línea. A veces tienes suerte… a veces no. Si logras eliminar el virus de alguna manera, genial. ¿Y si no eres capaz de hacerlo?
¡Conviértete en un ingeniero inverso certificado!
Obtenga capacitación práctica en vivo sobre análisis de malware desde cualquier lugar y conviértase en un analista certificado de ingeniería inversa. Comienza a aprender
¡Conviértete en un ingeniero inverso certificado!
Obtenga capacitación práctica en vivo sobre análisis de malware desde cualquier lugar y conviértase en un analista certificado de ingeniería inversa. Comienza a aprender
Ahí es donde resulta útil un artículo como este. En este artículo, aplicaremos ingeniería inversa al gotero de un troyano relativamente infame, el Bundestrojaner , desarrollado por el gobierno alemán con fines de espionaje. Slate dice que el troyano “se envía disfrazado de una actualización de software legítima y era capaz de grabar llamadas de Skype, monitorear el uso de Internet y registrar chats de mensajería y pulsaciones de teclas. También podría activar hardware informático, como micrófonos o cámaras web, y tomar instantáneas o grabar audio en secreto antes de enviarlo a las autoridades”. En este artículo, adoptaremos un enfoque paso a paso para revertir el cuentagotas troyano; En un artículo posterior revertiremos el controlador y otros componentes del troyano en modo de usuario.
Me gustaría hacerles saber desde el principio que más adelante en este artículo haré un pequeño desensamblaje del código ensamblador en un depurador. Entonces, si no está familiarizado con el tema en sí, le recomiendo encarecidamente que deje de leer esto, revise las referencias que mencioné y luego regrese aquí.
Asegúrese de que la máquina en la que ejecuta este malware no esté conectada a la red. Usar una máquina virtual es una buena idea. Para obtener una guía de muestra sobre cómo configurar un laboratorio de malware, puede ir aquí .
Esa es una introducción bastante larga. Empecemos 🙂
Una vista de alto nivel…
La muestra de malware que estamos ejecutando se puede descargar desde aquí (nota: la contraseña del archivo es ‘infosec’ y deberá cambiar el nombre de este .rar a scuinst.exe). Ejecuté esto dentro de mi máquina virtual VirtualBox con WinXP SP2 para comprender qué “hace” todo el malware cuando se ejecuta.
Tomé instantáneas de mi estado de ‘Inicio’ usando Sysinternals Autoruns, tomé una instantánea de mi sistema de archivos y registro usando Regshot, enumeré todos los procesos en ejecución usando Process Explorer [Y luego lo pausé; lo reiniciaremos después de que se ejecute el malware y veremos si se ha iniciado algún proceso nuevo], iniciamos Wireshark para registrar cualquier actividad de la red, Process Monitor para obtener un registro detallado de bajo nivel de ‘TODA’ la actividad y CaptureBat para realizar un seguimiento de los archivos que el malware se elimina.
En caso de que no esté familiarizado con alguna de estas herramientas por algún motivo, es mejor leerlas rápidamente. Son bastante comunes y también muy fáciles de usar. Aquí hay un par de artículos de blog que escribí hace un tiempo para ponerte al día. Hacia adelante…
Inicié el malware, lo dejé ejecutar por un tiempo y luego detuve las diversas capturas en todas mis herramientas. Esto es lo que encontré:
— Esto parece ser una especie de paquete de instalación que coloca otros archivos [DLL y SYS] en el disco. Las rutas exactas de estos archivos son C:WINDOWSsystem32mfc42ul.dll
y C:WINDOWSsystem32winsys32.sys
— No se registró actividad de red visible
— Parece que copia otro archivo al directorio Temp. El nombre del archivo en Temp es
C:Documentos y configuracionesarvindConfiguraciones localesTemp~acrd~tmp~.exe. Aún no está claro qué es este archivo; Tendremos que verlo por separado.
— Crea un archivo en blanco C:WINDOWSsystem32~pgp~.tmp por algún motivo. ¿Por qué? Aún no está claro
— Luego elimina el ejecutable original de su ubicación original. Esto se puede confirmar por el hecho de que el EXE desaparece automáticamente.
— Agrega una clave de registro que parece un controlador
En resumen, a partir del análisis dinámico, parece que este malware se comporta como un instalador clásico y no hace nada más. Simplemente descarga archivos en el disco y luego los elimina. Esa es una gran cantidad de información valiosa. Ahora confirmemos lo que encontramos y veamos qué más podemos aprender sobre este malware al observar su lista de desensamblado y ejecutarlo dentro de un depurador.
Y ahora una visión más profunda….
Permítanme reiterar nuevamente que para seguir esta sección es necesario comprender los conceptos básicos de la depuración y cómo usarla. Si no lo hace, le sugiero encarecidamente que regrese y lea un poco sobre ellos y luego regrese aquí.
Bien, el objetivo aquí es comprender qué está haciendo el malware y no realizar un desmontaje completo de cada función del código. Verás por qué en sólo un minuto. Abra IDA Pro (tengo la versión gratuita) y cargue el malware en él. Una vez que esté cargado, navegue hasta la pestaña de funciones. Y hay un total de 306 funciones :)… no tiene sentido mirar todas y cada una de ellas. ¿Bien?
Así que ahora tenemos que elegir qué funciones queremos ver. Así que abre Olly 2.01 y carga el malware en él. En el momento en que cargas el binario en Olly; Se hacen algunos análisis y nos detenemos en la dirección 404EDD.
Al presionar F8 (Para pasar por encima) pasará a la siguiente instrucción en 404EDE. Cada vez que haya una instrucción CALL que le interese, podrá acceder a ella presionando F7. Esto le permite estudiar mejor esa función en particular. Continuando, la primera llamada a función familiar de Windows realizada [en 404F03] es Kernel32.GetVersion . Entonces, el malware primero obtiene el sistema operativo de la máquina de destino. Tiene sentido. ¿Cuál es la siguiente llamada a función? Al desplazarnos un poco hacia abajo, encontramos que la siguiente llamada a función está en 404F63; Kernel32.GetCommandLineA .
Pero espera… ¿ves que hay 5 instrucciones CALL antes de esta instrucción?
Esto significa efectivamente que había otras 5 funciones que el malware llamó antes de llamar a GetCommandLineA. Interno a estas 5 funciones; Es posible que se hayan llamado a más funciones. Entonces, el punto realmente es que podría haber una gran cantidad de funciones antes de que se llame a la siguiente API “conocida”.
Tienes que tomar una decisión en este momento; ¿Quieres entrar en alguna de estas funciones o no? ¿Recuerda que hay un total de 306 funciones de este tipo? Un método que utilizo para decidir es mirar los nombres de estas funciones en la lista de IDA y ver si IDA les ha dado un nombre significativo [sub_ADDRESS es lo que digo NO es un nombre significativo]. Si es así, me salto esa función por ahora. Sí, tal vez en un momento posterior regrese a esta función para profundizar más… pero por ahora… en la primera pasada… la omitiré.
Entonces, veamos estas cinco llamadas en IDA. Las direcciones iniciales para cada una de estas funciones son las siguientes: – 4061C1, 40500A, 405EAC, 40500A nuevamente y finalmente 408BC6. ¿Estas funciones tienen nombres en IDA?
La primera función 4061C1 no, pero las 4 restantes sí. La mejor manera de buscarlas es ordenarlas por dirección de inicio en IDA (haga clic en la fila superior) y luego buscar estas direcciones. Cuando los encuentre, mire la columna de nombre para obtener el nombre. Dado que 4061C1 no tenía nombre, profundizamos un poco en él… y descubrimos que se asignaba principalmente memoria de montón. Ésta es una función razonablemente común que encontrará al analizar la mayoría de los ejecutables; entonces no es nada específico de este malware.
Así que simplemente cambiamos el nombre de esta función en IDA a “heap_alloc” y continuamos. Es una buena práctica nombrar las funciones y variables que ya haya examinado. Le brinda mayor claridad en una etapa posterior.
Aquí están los otros nombres que obtuve de IDA.
40500A salida_error_rápida405EAC mtinit408BC6 inicio
Así seguiremos procediendo mientras analizamos todo el ejecutable. Por lo tanto, no lo analizaré tan lentamente a medida que avance… y sacaré conclusiones mucho más rápido.
Así que ignoramos las 5 CALL y GetCommandLineA y continuamos. Las siguientes 2 funciones que notamos son GetStartupInfoA en 404F8E y GetModuleHandle en 404FB1. Ver estas 2 funciones debería indicarte que estás bastante cerca del inicio “real” del programa 🙂
Las siguientes 2 funciones de LLAMADA están en 403D50 y 4080AE. Pasemos por encima de ellos… y sigamos analizando. Ups….
Mira la esquina inferior izquierda. Proceso terminado???? Bueno… sólo significa que hubo algo en una de esas 2 llamadas que provocó que el programa se cerrara. ¿Cuál? ¿Y qué hizo el malware? Nunca descubrimos ESO en absoluto…
Paciencia :). Reiniciemos el programa y pongamos un punto de interrupción en la primera llamada en 403D50.
Ahora exploremos una función llamada Hit Trace en Olly. Es una característica realmente interesante que pondrá un pequeño punto rojo al lado de cada instrucción que se ejecutó al menos una vez. Entonces, una vez que haya establecido un punto de interrupción, haga clic en Trace y luego en Run Hit Trace.
¿Viste el punto rojo? ¿Inicio de la 3ª columna ? Sí… entonces cada instrucción que fue ejecutada al menos una vez tiene un pequeño punto allí. Esto es realmente útil para comprender el flujo de salto y qué bucle se llamó y cuándo. Notarás espacios en el medio… eso normalmente significa que había un JMP en alguna parte. Ahora pasemos por encima una vez (F8)….aún no terminado…lleguemos a la segunda llamada…pasemos por encima…terminado.
Fresco. Entonces es la última llamada la que finaliza el programa. Podemos agregar un comentario en Olly si queremos en este punto; aunque en este caso está bastante claro… así que sigamos. Veamos los nombres de funciones que IDA ha decidido. Lógicamente… estos no deberían tener ningún nombre significativo. Los nombres deberían ser simplemente sub_403D50 y sub_4080AE.
Ups. No precisamente. Se llaman WinMain y __exit respectivamente. Resulta que IDA es realmente inteligente. De alguna manera ha decidido internamente que la función en 403D50 es el inicio “real” y la ha llamado WinMain, que es el inicio de cualquier programa. Además, descubrimos anteriormente que la función sale cuando pasamos de la segunda llamada … ¿Verdad? La AIF ha llamado inteligentemente a esto __salida. La moraleja de la historia es: haga un esfuerzo por comprender mejor la AIF. Sé que todavía estoy aprendiendo :). Entonces, lógicamente… si la última LLAMADA se llama __exit y el programa realmente sale después de ella; significa que el corazón del programa está en la LLAMADA al 403D50. Sí… tiene sentido… así que “entremos” (F7) en la llamada al 403D50.
Ahora voy a ir un poco más rápido y señalaré directamente todas las áreas interesantes. Asumiré que ahora sabes lo suficiente como para detener e iniciar un depurador y seguir adelante conmigo. Dentro de la CALL al 403D50 hay otra CALL al 403AEn esta función, el malware comprueba si puede escribir en el directorio System32 y sale del proceso si no puede. Lo hace comprobando el valor de retorno de la función CreateFileA , que en este caso es 00000030 y, por tanto, válido.
Luego continúa y elimina el archivo que acaba de escribir.
Luego obtiene el directorio del sistema en el que principalmente (lo sabemos por el análisis dinámico) planea volcar más archivos.
Finalmente, se realiza una llamada a una función en 4010F0 y la ruta completa para el archivo DLL que vimos anteriormente; en este caso, se utiliza C:WindowsSystem32mfc42ul.dll. Aquí se crea un archivo en blanco con el nombre mfc42ul.dll.
Más adelante, esta DLL se llena de contenido. Esto se hace en 4010CF cuando se realiza una llamada a la función 401090.
En 403EC4 se realiza una llamada al 401E60 con 2 argumentos; uno es un archivo llamado mfc42.dll (presente originalmente en System32) y el otro es la nueva DLL que se creó aquí (mfc42ul.dll). Desde el interior de 401E60 se realiza una llamada a 401DC0 donde se obtienen los “Tiempos de archivo” para mfc42.dll (que ya estaba allí).
La hora del archivo mfc42ul.dll ahora está modificada y configurada en esta hora. Esto es para hacer que el archivo sea realmente difícil de encontrar en caso de que se realice algún análisis forense en la máquina para encontrar archivos recién creados. Esto se hace en la función 401E10 que se llama en 4101E97.
Una vez que haya terminado con todo esto, saldrá de todas las funciones que fueron llamadas y llegará a la dirección 403F0E. Aquí puedes ver un comentario en Olly que dice “winsys32.sys”. Esto, aunque no es concluyente, apunta potencialmente a que el malware se está ejecutando con mfc42ul.dll y ahora está dirigiendo su atención a winsys32.sys. Sin embargo, tenga en cuenta que los autores de malware pueden incluir comentarios sólo para llevar a los analistas por el camino equivocado.
La primera cosa útil con respecto a winsys32.sys que vemos está en 403F37. Se realiza una LLAMADA al 4011C0 donde el malware verifica si el proceso se está ejecutando en un sistema de 32 bits o de 64 bits utilizando la función IsWow64 .
Luego ingresa a una llamada en 403F49 y luego a las llamadas a 40107B, 4010A9 y luego a 401109. Esto lo llevará a una función que comienza en 401160 donde la redirección del sistema de archivos está deshabilitada y revertida. Todo esto se hace (creo) porque winsys32.sys puede ser algún controlador que funcione sólo en un sistema de 32 o 64 bits. Por ahora no profundizaremos mucho en eso y continuaremos.
Salir de 401160 nos lleva de regreso a 40110E. Después de algunos F8 llegamos a otra llamada CreateFileA que crea un archivo winsys32.sys en blanco en System32.
De manera similar a cómo se escribió el contenido en mfc42ul.dll, hay contenido escrito en winsys32.sys mediante una llamada WriteFileA .
Luego realizamos una LLAMADA en 401A00 y llegamos a 401BC0 donde el malware intenta obtener la dirección de la función CreateServiceA de la DLL advapi32.dll. Si aún no lo sabías, una DLL exporta muchas funciones; advapi32.dll exporta winsys32.sys en este caso, que es lo que quiere el malware.
Luego se llama a la función y se crea un servicio.
Y accedió….
Salimos de la función para luego descubrir que se realiza otra llamada al 401E60 para cambiar la hora de winsys32.sys también a la del mfc42.dll original. Nuevamente, esto es para ofuscar ligeramente las cosas.
Se realiza una llamada al 4017C0 para obtener la ruta temporal del sistema. Se vuelven a llamar las mismas rutinas que se usaron anteriormente para crear y escribir los 2 archivos anteriores. Sólo que esta vez el archivo en el que se escribe está en el directorio Temp y se llama ~acrd~tmp.exe. Qué es esto realmente no lo sabemos. Lo veremos en otro momento…
Y finalmente, el archivo original está configurado para eliminarse mediante la llamada MoveFileExW .
¡¡Por fin!! Recién ahora hemos salido del 403D50. ¿Recuerdas WinMain? ¿Hace siglos? Sí… es sólo ahora que hemos salido de esto :). Sólo queda ver cómo sale el programa. Ingrese a la LLAMADA en 4080AE y después de algunos F7 y F8 más llegará a una llamada de ExitProcess en 40816D que finaliza el proceso.
Conclusión:
Bueno, traté de hacerlo lo más simple posible para alentar a la mayor cantidad posible de personas a leerlo. Sé lo difícil que es para alguien que está empezando a dar marcha atrás pero no está seguro de cómo proceder. Esperemos que este artículo tenga algo para el inversor novato y también sea una lectura agradable para un inversor experimentado.
En otro artículo, InfoSec Institute analizará los otros componentes de este malware: el archivo EXE en Temp, la DLL y el controlador del kernel. Hasta entonces… disfruta este artículo 🙂
Referencias:
- Una serie de artículos para empezar a invertir: http://ardsec.blogspot.in//07/reverse-engineering-6-malware-lab-setup.html [Mi blog :D]
- El libro IDA Pro: http://www.amazon.com/The-IDA-Pro-Book-Disassembler/dp/1593272898/ref=sr_1_1?ie=UTF8qid=1333485647sr=8-1
- Secretos de la ingeniería inversa – Eilad Eldam – http://www.amazon.com/Reversing-Secrets-Engineering-Eldad-Eilam/dp/0764574817/ref=sr_1_2?ie=UTF8qid=1333485647sr=8-2
- Referencia de MSDN Windows Api: http://msdn.microsoft.com/en-us/library/windows/desktop/hh44728v=vs.85%29.aspx
- El foro de ingeniería inversa más impresionante: http://www.woodmann.com/forum/ [Regístrese; Es un grupo realmente agradable que me ha ayudado muchas veces]