Análisis de Malware: Enfoque y caso práctico
Eres un trabajador más del ámbito de la seguridad informática. Acabas de
despertarte un domingo por la mañana y has sido alertado de un
incidente de seguridad. Te diriges a la oficina para averiguar lo que ha
sucedido. Empezarás a mirar el incidente en los paneles de alrededor.
El
IPS/IDS y las alertas
WAF muestran
que ha habido una aplicación o malware no deseada en el sistema. La
lista de conexiones del firewall te muestra que uno de los hosts tiene
conexiones inusuales hacia fuera de la red. Y por último, el antivirus
muestra información sobre este host infectado. Después de estas pequeñas
comprobaciones iniciales y de suponer que efectivamente tienes un
bicho, lo que queda por hacer es averiguar qué tipo de malware hay en el
host en cuestión y cuán malicioso es su código. Por supuesto, hay que
ordenar al equipo de red y antivirus que realicen una evaluación de los
daños inmediatos de la red, mientras se escanea el host infectado en un
entorno aislado. ¡No está mal para un domingo por la mañana! Volverás a
casa pensando que el incidente está bajo control.
¿Qué
podemos hacer para proteger nuestros activos de red, recursos de red, y
lo más importante, nuestros datos? Como medidas preventivas, se puede
empezar por
actualizar el hash de IDS para detectar el
siguiente ataque de software malintencionado similar y actualizar la
base de firmas del antivirus para detectarlo a nivel de host. Aparte de
estas medidas, todavía tenemos que obtener más información acerca de
este software malicioso, o en otras palabras, es necesario llevar a cabo
un análisis de malware para averiguar el comportamiento exacto de esta
pequeña y desagradable pieza de software.
¿Qué es un malware?En
primer lugar, ¿qué es un malware? ¿Podemos considerar cualquier pieza
de código que no está autorizado a estar en nuestra red como un software
malicioso? De forma general, podemos decir que un malware es una pieza
de software capaz de realizar cualquier acción que causa algún tipo de
daño a un usuario u organización, un equipo, o una red. Esto incluye
pero no se limita a los virus, troyanos, gusanos, rootkits, scareware y
spyware.
Si se determina que la pieza de software encontrada es perjudicial, un
análisis de malware
es el arte de la disección del software malicioso para entender cómo
funciona, cómo identificarlo y cómo derrotarlo o eliminarlo.
Uno
de los propósitos y objetivos del análisis de malware suele ser el poder
proporcionar la información necesaria para responder a una intrusión en
la red. Este propósito incluye el determinar exactamente lo que
sucedió, y qué alcance y grado de disperesión tuvo en la red.
Al analizar los supuestos elementos de software malicioso, en primer lugar se necesita
explorar lo que el archivo binario sospechoso puede hacer, cómo detectarlo en su red,
y cómo medir y contener el daño.
En el post de hoy hablaremos de un caso práctico con un virus
educativo, el RaDa, al cual someteremos a una serie de pruebas que
revelarán parte de sus intenciones.
Análisis de MalwareConfiguración del entorno de laboratorioEn
primer lugar, si no se dispone de un entorno de laboratorio adecuado
para llevar a cabo un análisis de malware, es posible que se deban
volver a examinar las opciones que se tienen, para alinear lo mejor
posible los recursos disponibles con la eficacia del análisis. Como
ejemplo, se puede utilizar un entorno virtual para realizar el análisis o
tener sistemas físicos separados. A diferencia de los entornos
virtuales, los datos pueden tener fugas en el sistema base y esto puede
eventualmente perjudicar a todo el sistema. Los malware más modernos son
capaces de
detectar los sistemas virtuales y cambiar
sus comportamientos para permanecer sin ser detectados. De todas las
opciones que hemos probado, tanto VMWare como VirtualBox ofrecen buenas
soluciones para el análisis de malware. Usaremos VirtualBox para nuestro
análisis.
Por otra parte, tener sistemas físicos dedicados puede
tener varias desventajas, tales como tener que restaurar el sistema en
cada ciclo de análisis. Para ello utilizamos software libre, como la
herramienta udpcast disponible para estos fines. En caso de que tengas
suficiente presupuesto, Norton Ghost proporciona características más
avanzadas para hacer restauraciones del sistema.
Una vez decidido
el entorno en el que se va a trabajar, el siguiente paso sería definir
el acceso a la red de esos sistemas. Los malwares avanzados son capaces
de detectar cambios en la dirección IP y se esconden o no revelan la
información sobre la ubicación real de otros nodos o puntos de control.
Estas detecciones pueden desencadenar algunas otras funciones ocultas,
tales como ataque DOS al servidor interno. Por lo tanto, recomendamos
entornos de red aislados con servidores virtuales que incluyen DNS
propios, y servidores HTTP y de correo. En el caso de prueba adicional
con conexión a internet, la red aislada puede aplicarse a través de un
cortafuegos con reglas estrictas establecidas para supervisar las
posibles conexiones abiertas y cerradas.
El conjunto de herramientasDespués
de haber decidido y configurado el entorno de laboratorio, el siguiente
paso es seleccionar un conjunto de herramientas que faciliten el
proceso de análisis. Recomendamos las siguientes herramientas que pueden
ser útiles en distintas etapas del ciclo de análisis, aunque hay muchas
otras disponibles. Principalmente usaremos herramientas libres o
gratuitas, incluidas las versiones demo de algunas herramientas
comerciales.
En la siguiente sección se ofrece una breve descripción de cada herramienta que utilizamos para llevar a cabo el análisis.
OllyDbgOllyDbg
es un depurador a nivel de aplicación. La interfaz OllyDbg muestra el
código ensamblador, volcado hexadecimal, la pila y registros de la CPU.
OllyDbg también soporta rastreo, puntos de interrupción condicionales,
visión de cabecera PE, edición hexadecimal, y plug-in de soporte.
En
la primera puesta en marcha, OllyDbg pide configurar el directorio de
datos del usuario (UDD) y el directorio de plug-ins. UDD se utiliza para
guardar información específica de la aplicación como puntos de
interrupción. Ofrece amplias opciones de depuración como la
configuración de breakpoints en la carga de nuevos módulos, la creación
de threads, la forma de procesar las excepciones, etc. OllyDbg soporta
el establecimiento de puntos de interrupción de hardware, puntos de
interrupción de software, puntos de interrupción de memoria e incluso
puntos de interrupción condicionales.
IDA ProAl
igual que OllyDbg, IDA Pro es un depurador / desensamblador a nivel de
aplicación que nos ayudará enormemente en seguir la pista de la
ejecución del programa. Cuenta con una versión de demo y una versión
freeware más antigua, que es gratuita solo para uso no comercial.
UPXUPX
es un compresor/descompresor de código ejecutable, que logra una
excelente relación de compresión y ofrece descompresión muy rápida
cuidando el consumo de memoria. Una medida más que utilizan los
ejecutables para ocultarse es el almacenar su código comprimido, por lo
que necesitaremos una herramienta capaz de extraer el código ejecutable
en claro, como UPX.
AutorunsEsta
herramienta, que cuenta con la lista más amplia de ubicaciones de inicio
automático, muestra qué programas están configurados para ejecutarse
durante el arranque del sistema o de inicio de sesión, y muestra las
entradas en el orden en que Windows las procesa. Estos programas
incluyen los de su carpeta de inicio, Run, RunOnce, y otras claves del
registro. Puede configurar Autoruns para mostrar otras ubicaciones,
incluidas las extensiones de shell del Explorador, barras de
herramientas, objetos de ayuda del navegador, las notificaciones de
Winlogon, servicios de inicio automático, y mucho más. Autoruns extiende
por mucho la utilidad MSConfig incluida en Windows Me y XP.
ProcessExploreProcessExplore
es, como su nombre indica, un explorador de procesos. Su interfaz
gráfica se compone de dos subventanas; la superior siempre muestra una
lista de los procesos activos, incluidos los nombres de las cuentas que
poseen, mientras que la información mostrada en la inferior depende del
modo en que Process Explorer esté configurado. En el modo de DLL,
mostrará los archivos DLL y archivos asignados en memoria que el proceso
ha cargado. Process Explorer también tiene una herramienta de búsqueda
muy potente que mostrará rápidamente qué procesos tienen handlers
abiertos o sus DLL cargados.
Las capacidades de Process Explorer
lo hacen especialmente útil para localizar problemas de DLL – versión o
pérdidas de identificadores, y para dar una idea de la forma de
funcionar de Windows y otras aplicaciones.
Process MonitorProcess
Monitor es una herramienta de monitorización avanzada para Windows que
muestra en tiempo real actividad en el sistema de archivos, el registro,
y los procesos en ejecución. Combina las características de las
herramientas Filemon y Regmon, y añade una amplia lista de mejoras que
incluyen el filtrado avanzado y no destructivo, las propiedades de
eventos integrales tales como identificadores de sesión y nombres de
usuario, pilas de threads completas con soporte para símbolos integrados
de cada operación, registro simultáneo en un archivo, y mucho más. Las
características de Process Monitor hacen de ella una utilidad
fundamental en la solución de problemas del sistema y en el conjunto de
instrumentos de caza de malware.
Active Registry MonitorEl
Active Registry Monitor (ARM) es una utilidad diseñada para analizar
los cambios hechos al registro de Windows – tomando snapshots de su
estado y guardándolos en una base de datos. Posteriormente, pueden
compararse dos de estas fotografías y obtener un listado de claves/datos
nuevos, eliminados o, simplemente, cambiados.
TCPviewTCPView
es un programa de Windows que muestra la lista detallada de todos los
puntos finales TCP y UDP en el sistema, incluyendo las direcciones y el
estado de las conexiones TCP locales y remotas. En Windows Server 2008,
Windows Vista y XP, TCPView también informa del nombre del proceso que
posee el punto final. TCPView proporciona un subconjunto más informativo
y bien presentado del programa Netstat que se incluye con Windows.
WinViWinVi
es un editor gratuito para MS Windows para la edición y la detección
automática de archivos Unicode en codificaciones UTF- 8, UTF-16 Little
Endian y UTF-16 Big Endian. WinVi funciona como un editor Vi para
Windows. En el análisis de malware se utiliza esta herramienta como un
editor hexadecimal que puede soportar archivos de hasta 2 GB.
Técnicas de análisis de malwareMuy
a menudo, cuando se realiza el análisis de malware, la única cosa que
se tiene es el propio ejecutable malicioso, que no dará demasiada
información, ya que está destinado a no ser comprendido por seres
humanos. Con la intención de encontrarle sentido, vamos a usar una
variedad de herramientas y trucos, cada uno revelando una pequeña
cantidad de información.
Habrá que hacer uso de una gran variedad
de herramientas con el fin de obtener una comprensión amplia del
malware en cuestión. Existen dos enfoques fundamentales para el análisis
de malware: los
análisis estáticos y los
análisis dinámicos.
El análisis estático consiste en examinar el malware sin ejecutarlo,
mientras que el análisis dinámico implica la ejecución del malware en
entornos controlados.
Análisis estático básicoEl
análisis estático básico consiste en examinar el archivo ejecutable sin
ver las instrucciones reales. El análisis estático puede confirmar si
un archivo es malicioso, proporciona información sobre su
funcionamiento, y a veces ofrece información que permitirá realizar un
network footprinting simple. El análisis estático básico es sencillo y
puede ser rápido, pero es en gran medida ineficaz contra el malware
sofisticado, y se pueden pasar por alto funciones importantes.
Análisis Dinámico BásicoLas
técnicas de análisis dinámicas básicas implican ejecutar el malware y
la observación de su comportamiento en el sistema con el fin de
averiguar algunos aspectos de su comportamiento, poder eliminar la
infección, y producir firmas eficaces. Sin embargo, antes de poder
ejecutar el malware de forma segura, se debe configurar un entorno que
permita estudiar el malware ejecutándose sin riesgo de daño al sistema o
la red. Al igual que las técnicas básicas de análisis estático, las
técnicas básicas de análisis dinámico pueden ser utilizadas por la
mayoría de las personas sin grandes conocimientos de programación, pero
no serán eficaces con todo el malware y también se puede pasar por alto
funcionalidad importante.
En la PrácticaMostraremos un ejemplo práctico de cómo realizar un análisis de una pieza de malware para identificar su funcionalidad.
Disclaimer:
No se recomienda la realización de este ejercicio en un entorno sin
acondicionar debidamente, por el riesgo que puede suponer para todos los
equipos de la red.
El virus que vamos a analizar, el virus
RaDa,
es un virus real creado en el marco del Proyecto Honeynet para aumentar
la concienciación sobre la seguridad en torno a ejemplares de malware y
para señalar la necesidad de contramedidas defensivas adicionales con
el fin de luchar contra las actuales amenazas de malware.
Una vez
localizado (o descargado) el ejecutable del malware, y
aislado en nuestro entorno de laboratorio, procedemos al
análisis del mismo, pasando por cada una de las etapas y usando varios de los software mencionados.
Análisis estáticoEn
el análisis estático de este virus vamos a intentar recabar tanta
información como sea posible, que nos ayudará a comprenderlo mejor y a
orientar de forma eficiente nuestros esfuerzos en el posterior análsis
dinámico.
Como primer paso, se lleva a cabo una recolección de
información previa observando los detalles del virus y realizando una
visualización en un editor hexadecimal. Esto revela algunas cadenas en
el código del virus, además de ayudarnos a verificar que se trata de un
ejecutable.
El
siguiente paso comienza con cargar el ejecutable (el virus RaDa) en
OllyDbg para llevar a cabo un análisis de código con el fin de descubrir
sus capacidades funcionales. En primer lugar, abrimos el archivo
ejecutable en el OllyDbg para ver los detalles básicos. La siguiente
figura muestra cierta información de los registros, la CPU y el estado
de la memoria del programa, incluyendo un mensaje de advertencia que
indica que el código está comprimido, cifrado o codificado para ocultar
su verdadera naturaleza.
Para
salvar este paso y poder extraer el ejecutable real y ver sus
instrucciones, o al menos obtener información sobre el tipo de
compresión, codificación o cifrado lleva (y, en definitiva, averiguar
más cosas sobre la naturaleza del virus), se utiliza la utilidad de
descompresión de ejecutables UPX:
Tal
y como se puede observar en la imagen superior, el virus se resiste a
desempaquetarse a través del método común con UPX. Por lo tanto, podemos
probar a forzar el proceso usando el comando
upx -9 --brute, que puede tardar un buen rato.
Después
de un rato no ha habido suerte en el desempaquetamiento, por lo que
vamos a moldear un poco el análisis, redireccionando nuestros esfuerzos
en cierto modo hacia un análisis de comportamiento del malware, más que
un análisis estático, debido a que el virus está preparado para evitar
este tipo de análisis. Para este propósito, es necesario realizar una
ejecución controlada del virus, analizar sus puntos de inicio, y
encontrar un breakpoint del virus.
Para poder localizar dichos
puntos, vamos a empezar por analizar el mapa de memoria del malware,
cosa que podemos hacer con el OllyDbg:
El
mapa de memoria indica que hay tres secciones en el binario de RaDa:
JDR0, JDR1 y .rsrc. El entry point de RaDa.exe (0x0040FD20) está ubicado
en la sección JDR1. Podemos echar un vistazo también a la sección JDR0
haciendo doble click sobre la etiqueta de la sección, aunque nos
encontraremos en este caso que la sección está vacía:
Podemos obtener algo más de información sobre la sección JDR0 (0x004018A4) usando el IDA Pro:
La
siguiente captura de pantalla muestra que el código en JDR1
desempaqueta el código ofuscado que contiene en la sección JDR0. El
registro ESI apunta a la dirección del bloque cifrado/ofuscado de
código, mientras que el registro EDI apunta a la dirección de memoria a
la que será copiada el código una vez se haya desempaquetado. Al
terminar la sección JDR1, el control del programa salta a la dirección
en que se ha desempaquetado el código (
jmp loc_40FD42).
Observando
además la información presente en la vista General Register, en el
registro EIP, podemos consolidar que la dirección de memoria
JDR1:0040FD20 es el punto de inicio del programa. Dicho esto, aún es
necesario extraer un buen String dump del código empaquetado.
Con
el OllyDbg podemos obtener cierta información de los (posibles) módulos
de los que puede hacer uso el virus, que nos pueden ayudar a comprender
la naturaleza del virus más a fondo:
También podemos observar los handles del virus, para un propósito similar:
Recapitulando hasta ahora:
- La
información recabada en el análisis estático será de gran ayuda para, a
la hora de hacer el análisis dinámico, saber dónde deben ir dirigidos
nuestros esfuerzos.
- Los handles del virus nos ayudarán a saber
de qué recursos del sistema el ejecutable pretende hacer uso. Todo
ejecutable hace uso de algún recursos del sistema; la cuestión aquí está
en filtrar qué recursos son potencialmente peligrosos como para que los
use un fragmento de software desconocido, y cuáles son más y menos
habituales.
- El mapa de memoria del ejecutable nos ha ayudado a
determinar breakpoints del virus, que nos puede servir para controlar
eficientemente la ejecución del virus en el análisis dinámico.
- La lista de módulos ejecutables del malware nos da una pista (a veces, falsa) de los módulos que puede utilizar el virus.
Reunidas
todas estas pistas, hemos preparado el terreno para dirigir nuestro
análisis dinámico de la forma más eficiente posible.
El análisis dinámicoEjecutaremos
el virus en un ambiente controlado para ver su capacidad de abrir
conexiones con el mundo exterior (calling home), las alteraciones del
registro, modificaciones del sistema de archivos y los procesos en
ejecución. Para controlar este tipo de actividades se utilizarán los
programas TCPView, Active Registry Monitor, Process Explorer, Process
Monitor y la aplicación Autoruns.
Al haber localizado en el análisis estático el punto de inicio del programa, podemos controlar su ejecución:
Una
vez tenemos el entorno de laboratorio bien preparado y con el virus
listo para ser ejecutado, el primer paso es averiguar cómo intenta
comunicarse con el exterior: ¿cuáles son los puertos y las conexiones
que el virus puede abrir hacia el mundo exterior? El TCPView muestra los
detalles de conexiones salientes del malware:
El monitor de procesos y el ARM muestran las claves del registro recién alteradas del sistema local:
Como
una observación, podremos ver que el virus se está ejecutando detrás de
la aplicación Internet Explorer para ocultarse. La única indicación que
podemos ver es que el proceso "IEXPLORE.EXE" está abierto por el virus
para conectarse al destino remoto 10.10.10.10 en el puerto 80. También
observamos que el proceso parece consumir más y más memoria.
El
ProcessExplorer de Sysinternals nos da información relevante del virus
en ejecución, pudiendo comprobar los DLL's que carga, y compararlos con
lo encontrado en el análisis estático:
Echando un ojo al Advanced Registry Editor, podemos ver los cambios que hace el virus en el registro de Windows:
También observamos los cambios que ha hecho en el sistema de ficheros:
Cambios en el sistema de ficheros introducidos por RaDa
Por
último, también podemos ver en el Process Monitor información sobre el
proceso RaDa.exe y el IEXPLORE.EXE, en especial, que RaDa ha sido capaz
de lanzar el IEXPLORER como NTAUTHORITY\SYSTEM, siendo RaDa ejecutado
por un usuario con privilegios reducidos:
Hasta aquí...:Después de realizado los análisis estático y dinámico, se han podido comprobar varias cosas:
El
virus intenta ocultar su código ejecutable empaquetándolo, así como su
punto de inicio. Hay virus más sofisticados que lo ponen mucho más
complicado, con decenas de secciones de código distintas.
El programa Active Registry Monitor nos indica que se ha creado la siguiente clave del registro
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\RaDa:C:\RaDa\bin\RaDa.exe. Esto permite que RaDa persista tras el reinicio del sistema.
El
TCPView muestra que hubo intentos de conexión desde iexplore.exe,
Internet Explorer, a 10.10.10.10:80. Parece que RaDa utiliza Internet
Explorer como herramienta para conectarse con el sistema externo, y que
además, es capaz de lanzarlo como el usuario
NTAUTHORITY\SYSTEM.
A través del Process Monitor se ha podido comprobar que se crearon los directorios
C:\RaDa,
C:\RaDa\tmp y
C:\RaDa\bin. El ejecutable RaDa.exe se ha copiado en el directorio C:\RaDa\bin\.
El
panel de Process Explorer muestra el proceso RaDa.exe en su lista
activa, (no oculto bajo otro ejecutable), mostrando el crecimiento de la
memoria usada.
Este breve análisis supone solo una introducción
al análisis de malware, sin entrar mucho en detalle en los aspectos más
técnicos. Seguiremos publicando artículos que poco a poco irán entrando
más a fondo, desmenuzando a todos los niveles las técnicas del análisis
de malware más comunes, con ejemplos prácticos para poder experimentar
con conocimiento y aprender cosas interesantes de este área de la
seguridad informática.
Fuente: hard2bit