Malwares contra sistemas Microsoft Windows
Introducción
Este capítulo se dedicará al sistema operativo de Microsoft: Windows. Históricamente, este sistema operativo ha sido el más atacado por ser el más popular. Es, también, el más utilizado en el ámbito profesional, lo que lo convierte en un objetivo prioritario en las campañas de ataques contra las empresas. Un buen conocimiento de este sistema operativo es primordial para comprender el funcionamiento de un malware concebido contra él.
Este capítulo presentará la recolección de datos de un sistema sospechoso para así poder identificar un potencial malware. Gracias a estos datos, será posible analizar la memoria del sistema. También se describirá cómo crear un laboratorio de análisis para finalmente llevar a cabo este análisis inicial.
Recolectar información
1. Introducción
Antes de analizar un malware es necesario encontrarlo. Para poder identificarlo, hace falta recopilar cierta información de la máquina potencialmente infectada. Para efectuar la recolección de datos, es preferible desconectar el disco duro de la máquina infectada para conectarlo en una máquina sana y trabajar a partir de esta última. No se debe trabajar sobre la máquina contaminada, ya que el código maligno puede alterar el funcionamiento de la máquina y esconder datos al investigador.
La recogida se hará directamente en el disco duro de la máquina infectada. En ese disco hay cuatro lugares interesantes donde encontrar información para un análisis:
-
El registro (solamente en Windows, antes conocido como base de registros)
-
El registro de eventos
-
Los archivos ejecutados al arranque del sistema
-
El sistema de archivos
2. Recolectar y analizar la base de registro
El registro (antes llamado base de registro) es una base de datos utilizada por Windows. Contiene todos los parámetros de configuración del sistema operativo. Tiene forma de árbol. Cada rama contiene uno o varios nombres, un tipo por nombre y un valor para cada nombre. La configuración de numerosas herramientas se encuentra en el registro. Por ejemplo, la configuración del fondo de escritorio se encuentra en la rama HKEY_CURRENT_USER\Control Panel\Desktop. Su nombre es Wallpaper, es de tipo REG_SZ y su valor corresponde a la ruta del archivo de fondo de escritorio.
En Windows, esta base de registros puede consultarse mediante el comando regedit.exe.
El registro se almacena en archivos. Estos archivos se encuentran en el disco duro de la máquina. A continuación, se indica la ubicación de cada base de datos:
-
HKEY_USERS:
\Documents and Setting\User Profile\NTUSER.DAT
-
HKEY_USERS\DEFAULT:
C:\Windows\system32\config\default
-
HKEY_LOCAL_MACHINE\SAM:
C:\Windows\system32\config\SAM
-
HKEY_LOCAL_MACHINE\SECURITY:
C:\Windows\system32\config\SECURITY
-
HKEY_LOCAL_MACHINE\SOFTWARE:
C:\Windows\system32\config\software
-
HKEY_LOCAL_MACHINE\SYSTEM:
C:\Windows\system32\config\system
-
HKEY_USERS:
\User\User Profile\NTUSER.dat (a partir de Windows Vista)
Estos archivos no son archivos de texto. Para visualizar su contenido es necesario utilizar una herramienta. Existen clientes gráficos, tales como Windows Registry Recovery, disponible en https://www.mitec.cz, o clientes a través de línea de comandos, como reglookup, disponible en http://sentinelchicken.org/.
He aquí un uso sencillo de reglookup:
rootbsd@lab:~$ reglookup NTUSER.DAT | more
PATH,TYPE,VALUE,MTIME
/,KEY,,2012-05-16 21:20:30
/AppEvents,KEY,,2012-05-16 14:16:20
/AppEvents/EventLabels,KEY,,2012-05-16 14:16:20
/AppEvents/EventLabels/.Default,KEY,,2012-05-16 14:16:20
/AppEvents/EventLabels/.Default/,SZ,Default Beep,
/AppEvents/EventLabels/.Default/DispFileName,SZ,@mmsys.cpl%2C-5824,
/AppEvents/EventLabels/AppGPFault,KEY,,2012-05-16 14:16:20
/AppEvents/EventLabels/AppGPFault/,SZ,Program error,
/AppEvents/EventLabels/AppGPFault/DispFileName,SZ,@mmsys.cpl%2C-5825,
3. Recolectar y analizar los registros de eventos
Los registros de eventos contienen el historial de eventos producidos en la máquina. Estos registros agrupan tanto los eventos de sistema como los eventos de aplicación o incluso los eventos vinculados con la seguridad.
Estos registros permiten trazar toda la actividad de la máquina: la creación de cuentas, la creación y el reinicio de servicios, las conexiones remotas… En caso de que una máquina esté infectada, es importante poder leerlos y comprender el origen del ataque.
Estos registros tienen formato .evt (o evtx desde Windows Vista) y se almacenan generalmente en la carpeta C:\Windows\system32\config. Estos archivos no son archivos de texto. Para convertirlos en .csv es posible utilizar la herramienta log2timeline.
He aquí un uso de log2timeline:
rootbsd@lab:~$ log2timeline SysEvent.Evt > SysEvent.csv
---------------------------------------------------------------
[WARNING]
No timezone has been chosen so the local timezone of this ...
Imagen de memoria
1. Presentación
Cuando un sistema operativo está en funcionamiento, todos los datos que procesa se almacenan en memoria. Es posible realizar una imagen del estado de la memoria (llamada volcado o dump en inglés). Esta imagen puede analizarse a continuación. A diferencia de la recolecta de información, la captura de la imagen de memoria debe realizarse directamente en el sistema infectado mientras está funcionando.
Existen muchas ventajas al analizar la memoria en lugar de la propia máquina. En primer lugar, resulta bastante complejo ocultar un malware durante un dump de memoria. Existen algunas pruebas de concepto, en particular utilizando registros DRX, aunque esto por el momento resulta anecdótico.
Sin embargo, un volcado de memoria es mucho más difícil de engañar que un sistema. Por ejemplo: si un rootkit ocultara la existencia de un proceso en el Administrador de Tareas, la memoria usada por ese proceso se asignaría de todas formas y visible en su imagen.
La otra ventaja es que los archivos binarios se ven mientras están funcionando.
Si un binario ocultara cadenas de caracteres, como el nombre de dominio de su C&C, en el caso de una imagen de memoria, habría una gran probabilidad de que estas cadenas se vieran con claridad.
El análisis de la memoria es un método que debería priorizarse al analizar un malware, pues el resultado es bastante impresionante. Este método permite visualizar los procesos, listar los archivos abiertos por un proceso, detallar las conexiones de red, realizar copias de la memoria utilizada por un proceso, detectar si hay «hooks» en uso...
2. Realizar una imagen de memoria
Existen varios métodos para realizar una imagen de memoria de un sistema operativo: a nivel del sistema operativo (en el caso de una máquina infectada), a nivel del gestor de máquinas virtuales si el sistema está virtualizado (en el caso de un análisis de malware) o incluso desde un punto de vista físico gracias al puerto FireWire.
Para realizar una imagen de memoria a nivel de un sistema operativo Windows, existen numerosas herramientas y métodos. Uno de los más sencillos es, por ejemplo, utilizar los productos de Comae disponibles en: http://www.comae.com/windows-memory-toolkit/
Estos productos permiten realizar imágenes tanto de plataformas de 32 como de 64 bits. También pueden utilizarse para trabajar con archivos de hibernación, que son, de hecho, imágenes de memoria: Comae.
He aquí cómo realizar de manera sencilla una imagen del sistema en ejecución:
C:\> win32dd.exe /r /f image.dmp
En un laboratorio de análisis de malware, estos se ejecutan generalmente en las máquinas virtuales. En efecto, es posible restaurar la máquina virtual a su estado previo a la infección rápidamente y las estaciones de trabajo utilizadas por los investigadores no están, en realidad, infectadas.
En el caso de un sistema virtualizado, el hipervisor es capaz de realizar una imagen de memoria de los sistemas que alberga. En el caso del hipervisor VirtualBox, hay que ejecutar la máquina virtual en modo debug:
rootbsd@lab:~$ VirtualBox -dbg -startvm lab
Una vez arrancada la máquina, hay que ir al menú Debug, luego a Command line y escribir el siguiente comando:
.pgmphystofile image.dmp
El comando creará un archivo image.dmp que contiene la imagen de memoria de la máquina virtual.
En Linux, es necesario instalar un driver: fmem. Este controlador crea un dispositivo /dev/fmem que corresponde a la memoria de la máquina. A partir de aquí, basta con utilizar el siguiente comando para realizar una imagen de memoria:
rootbsd@lab:~$ sudo dd if=/dev/fmem of=/mnt/image.dmp
Existen también módulos para las aplicaciones Android, tales como LiME.
También es posible recopilar una imagen de memoria gracias al puerto FireWire de la máquina que se ha de inspeccionar. Para realizar esta manipulación es necesario, evidentemente, que la máquina posea un puerto FireWire y hace falta también una segunda máquina que ejecute el sistema operativo Linux con la herramienta Inception instalada. La herramienta puede descargarse...
Funcionalidades de los malwares
1. Técnicas para la persistencia
Para que un malware sea eficaz, debe ser persistente, es decir, que se ejecute nuevamente en caso de que se reinicie la máquina infectada. Una pista para encontrar la existencia de un malware es, por tanto, comprender los distintos mecanismos que puede utilizar para arrancar con el sistema operativo.
Existen varias maneras de iniciar un proceso junto con el sistema operativo Windows:
-
Usando el registro.
-
Usando un archivo.
-
Usando un servicio.
-
Usando un controlador.
-
Usando métodos no convencionales.
Es importante consultar la documentación que proporciona Microsoft para controlar cada uno de estos puntos de entrada en función de la versión del sistema operativo. A continuación, se muestra una lista no exhaustiva de las claves de registro y de los archivos que permiten la ejecución de archivos:
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\
Winlogon\Userinit]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows]
He aquí un ejemplo de archivo que permite arrancar un proceso:
C:\boot.ini
Los servicios de Windows también se gestionan en el registro. Se configuran en la siguiente clave del registro:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
El registro se puede modificar manualmente para configurar un servicio o utilizar el comando sc.exe. Un servicio es, pues, una biblioteca (.dll) que se cargará mediante el proceso svchost.exe y se ejecutará a continuación. Los servicios arrancados no están presentes en el Administrador de Tareas de Windows directamente, pues no son procesos con entidad propia, sino parte del proceso svchost.exe.
Existen métodos no convencionales (y por lo tanto no visibles por herramientas como Autoruns) para ejecutar un archivo binario o una librería durante el arranque de una máquina Windows. Sería imposible enumerar todos estos métodos y, por otra parte, se descubren nuevas técnicas frecuentemente.
He aquí, de todos modos, dos ejemplos:
-
La tecnología WMI (Windows Management Instrumentation) provee una interfaz similar a SQL que permite gestionar sistemas Windows. A través de esta interfaz, se produce una gestión de eventos. Es posible, para un evento específico (como una hora concreta del día), ejecutar un comando particular. En este caso, el malware podría ejecutarse automáticamente todos los días a una hora determinada.
-
Ya hemos evocado anteriormente la existencia de objetos COM en Windows. Es posible definir nuestros propios objetos COM para permitir a aplicaciones de terceros manipular la nuestra. Pero también se pueden reemplazar estos objetos COM legítimos proporcionados por Microsoft por una librería maliciosa. En este caso, cuando una aplicación quiera utilizar este objeto, no se ejecutará el código...
Crear un laboratorio de análisis
1. Introducción
Los malwares son peligrosos por naturaleza para los sistemas de información. Los analistas deben configurar un entorno para no infectar sus propias máquinas. Para ello, las soluciones basadas en máquinas virtuales son muy prácticas y fáciles de usar. En efecto, si el malware se ejecuta en este entono contenido, la infección no podrá propagarse a la máquina del analista, denominada máquina anfitriona host.
Sin embargo, hay que prestar atención a ciertos. Las soluciones de virtualización permiten compartir discos o carpetas entre la máquina anfitriona y las máquinas virtuales. Estas funcionalidades deberían restringirse o utilizarse con gran precaución. Por ejemplo, en el caso de un ransomware que cifre ciertos tipos de archivo, si alguna carpeta de la máquina host que contenga este tipo de archivo se comparte con la máquina virtual, los archivos de esa carpeta se cifrarían, evidentemente, durante la ejecución del malware.
Es preciso controlar también otros aspectos. Para evitar que sean demasiado fáciles de analizar, ciertos desarrolladores de malwares controlan si el malware se ejecuta sobre una máquina física y no sobre una máquina virtual. Conviene configurar la máquina virtual para que se parezca lo más posible a una máquina física.
2. VirtualBox
VirtualBox es una solución de virtualización gratuita desarrollada por Oracle y disponible en https://www.virtualbox.org/. Esta herramienta resulta muy interesante para un análisis de malwares, pues su uso es muy simple y flexible, y además existe una API para poder manipularla mediante scripts. Una vez instalada, se muestra la siguiente pantalla tras su primera ejecución.
Para crear una primera máquina virtual, basta con hacer clic en el botón New (Nueva). Se abre un asistente que plantea diversas preguntas para configurar la máquina virtual, tales como el número de CPU (Central Processor Unit), o la cantidad de memoria que se desea asignar a la máquina virtual… Es importante seguir las recomendaciones del asistente para que la máquina virtual pueda funcionar correctamente.
La máquina virtual se encuentra configurada:
La segunda parte de la configuración consiste en definir los parámetros de la red. Para modificarla, hay que hacer clic en Configuración (Settings) y, a continuación, en la sección Red (Network).
Aparece entonces la configuración de red:
Es preferible configurar la interfaz en modo Adaptador solo anfitrión (Host-only Adapter). Esta configuración permite crear una interfaz de red dedicada para la máquina virtual y no compartirla con la de la máquina anfitriona. Este tipo de configuración resulta interesante en caso de que el analista desee registrar el tráfico de red saliente de la máquina virtual directamente sobre la interfaz vboxnet0.
A continuación, se puede instalar el sistema operativo en VirtualBox; la instalación se lleva a cabo de la misma manera que si se tratara de una instalación en una máquina física. Es posible compartir directamente el CD-ROM de instalación con una máquina virtual. Para ello, basta con ir a Settings, luego a Almacenamiento (Storage), seleccionar el lector de CD entre los controladores IDE disponibles y conectar el lector de CD de la máquina con el lector de CD virtual. Se puede utilizar una imagen ISO en lugar de un lector de CD físico.
Para terminar, y para poder ejecutar los malwares modernos que intentan detectar máquinas virtuales, es necesario modificar la configuración de la máquina virtual en VirtualBox. El objetivo de esta modificación es hacer pasar la máquina virtual por una física.
En caso de que la máquina anfitriona sea un sistema Linux, las características de la máquina física se pueden recuperar:
rootbsd@lab:~$ dmidecode -t0
# dmidecode 2.11
SMBIOS 2.7 present.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: <fabricante>
Version: <versión...
Analizar el vector de infección
1. Información sobre un archivo
a. Formato de archivo
Lo primero que hay que hacer antes de analizar una muestra es saber qué tipo de archivo hay que analizar. Lo más sencillo es utilizar el comando file seguido del nombre del archivo en cuestión:
rootbsd@lab:~$ file fec60c1e5fbff580d5391bba5dfb161a
fec60c1e5fbff580d5391bba5dfb161a: PE32 executable (GUI) Intel
80386, for MS Windows
Este comando utiliza los encabezados de los archivos para determinar su tipo. Estos encabezados se denominan magic numbers (números mágicos). Por ejemplo, los archivos ejecutables de Windows empiezan por las dos letras MZ, de modo que podríamos reconocer que un archivo es un ejecutable de Windows comparando sus dos primeros bytes con este encabezado MZ. Los encabezados utilizados por el comando file están disponibles en un inventario que se encuentra, generalmente, en la ruta /usr/share/misc/magic. He aquí algunos ejemplos de números mágicos:
-
MZ: archivo en formato ejecutable de Windows.
-
%PDF: archivo en formato PDF.
-
GIF: archivo en formato GIF.
-
CAFEBABE (en hexadecimal): archivo que contiene una clase Java.
-
PK: archivo en formato ZIP.
YARA (https://plusvic.github.io/yara/) es una segunda herramienta de software libre que permite identificar el formato de un archivo, pero también, en el caso de un ejecutable, deducir el compilador utilizado para producir el archivo binario o incluso saber si se ha utilizado algún packer (empaquetador) conocido.
Un packer o empaquetador es un programa que permite modificar un archivo binario comprimiéndolo o codificándolo, de cara a disimular su código de máquina original sin alterar su funcionamiento. El objetivo de los empaquetadores es hacer que el análisis resulte más complicado escondiendo, en particular, las acciones del programa empaquetado. Los packers se presentarán en el capítulo Técnicas de ofuscación.
YARA puede usarse para identificar los empaquetadores más conocidos. El programa lo conforma un motor de búsqueda de firmas, en el que una firma es una secuencia de bytes o una expresión regular. Los investigadores en seguridad han creado bases de datos de firmas, que están disponibles, por ejemplo, en la siguiente dirección: https://github.com/MalwareLu/tools. He aquí algunos ejemplos de uso de YARA para identificar un compilador, luego un tipo de archivo y, finalmente, un packer conocido.
YARA es :
rootbsd@lab:~$ yara -r magic_number.yara a.pdf
pdf_document a.pdf
rootbsd@lab:~$ yara -r packer.yara b.exe
NETexecutableMicrosoft b.exe
rootbsd@lab:~$ yara -r packer.yara c.exe
Armadillov171 c.exe
El archivo magic_number.yara contiene las firmas que corresponden a los tipos de archivo (utilizando su magic number), mientras que packer.yara contiene las firmas de los compiladores, tipos de lenguajes y empaquetadores.
La creación de firmas se describe en el capítulo Análisis de malware e inteligencia sobre amenazas, en la sección Reglas y detecciones.
b. Cadenas de caracteres presentes en un archivo
Para hacernos una primera idea acerca del comportamiento potencial de un malware, una de las acciones más sencillas de llevar a cabo es buscar las cadenas de caracteres presentes en un archivo. El resultado de este primer análisis puede darnos una aproximación de las funcionalidades de un malware. Sin embargo, es importante destacar que la mayoría de los malwares actuales ocultan sus cadenas de caracteres utilizando un empaquetador (packer) o algoritmos de ofuscación.
El comando strings en Linux resulta muy práctico para visualizar las cadenas de caracteres presentes en un archivo:
rootbsd@lab:~$ strings fec60c1e5fbff580d5391bba5dfb161a
Ph(3@
h(3@
Ph(3@
h(3@
\*.*
\*.*
XPhFM@
[...]
.db.mp3.waw.jpg.jpeg.txt.rtf.pdf.rar.zipeeeeeeeeeeeeeeeeeeeeeeeee
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeVery bad news...
[...]
GyyzAvvvAyyzF
UYYZ;
//1*kklE
AZZ['
@@A!
!B;<
Este malware...
Analizar el caso de un archivo binario
1. Analizar binarios desarrollados en AutoIt
AutoIt es un lenguaje de script. Los scripts AutoIt permiten automatizar acciones en Windows. Estos scripts están compilados para convertirse en ejecutables completamente autónomos. La ventaja de estos archivos binarios es que no necesitan utilizar un intérprete de AutoIt instalado en la máquina donde se ejecuta el binario.
Algunos malwares se desarrollan usando AutoIt. Es fácil identificar los archivos binarios compilados con AutoIt, puesto que el compilador agrega la cadena de caracteres «This is a compiled AutoIt script.»:
rootbsd@lab:~$ hd ccdd2ad254467516e0dd737216953d6b
[...]
00083880 49 00 53 00 45 00 00 00 4e 00 55 00 4c 00 4c 00 | I.S.E...N.U.L.L.|
00083890 00 00 00 00 00 00 00 00 54 68 69 73 20 69 73 20 | ........This is |
000838a0 61 20 63 6f 6d 70 69 6c 65 64 20 41 75 74 6f 49 |a compiled AutoI |
000838b0 74 20 73 63 72 69 70 74 2e 20 41 56 20 72 65 73 |t script. AV res |
000838c0 65 61 72 63 68 65 72 73 20 70 6c 65 61 73 65 20 | earchers please |
000838d0 65 6d 61 69 6c 20 61 76 73 75 70 70 6f 72 74 40 |e-mail avsupport@|
000838e0 61 75 74 6f 69 74 73 63 72 69 70 74 2e 63 6f 6d | autoitscript.com|
000838f0 20 66 6f 72 20 73 75 70 70 6f 72 74 2e 00 00 00 | for support.... |
00083900 22 00 00 00 72 00 75 00 6e 00 61 00 73 00 00 00 |"...r.u.n.a.s... |
[...]
Este tipo de binario se puede descompilar y leer el código fuente del script antes de compilarlo. Exe2Aut permite descompilar estos archivos binarios y puede descargarse de: http://domoticx.com/autoit3-decompiler-exe2aut/
Una vez instalado, basta con ejecutarlo y arrastrar el archivo que se desea analizar hasta la ventana de Exe2Aut:
Es fácil ver una URL (95.163.104.88/spielberg/start.php), las claves de registro en función de la versión del sistema operativo y seguir lo que hace el programa paso a paso.
Los desarrolladores saben que es posible obtener el código fuente de sus aplicaciones. Para proteger este código, utilizan con frecuencia mecanismos de ofuscación consiguiendo así que su lectura resulte complicada.
2. Analizar binarios desarrollados...
El formato PE
1. Introducción
El formato PE (Portable Executable) es el usado por los ejecutables y las bibliotecas de Windows. Es utilizado por Microsoft desde Windows 95.
El formato PE posee una estructura particular. Es importante para un analista de malwares comprender esta estructura. En efecto, todos los malwares actuales se basan en ella (mediante el empaquetador o packer, por ejemplo). Además, resulta muy útil poder reconocer este formato.
Durante el análisis de una imagen de memoria, se pueden encontrar los archivos binarios o bibliotecas cargadas en memoria y, por tanto, ver sus PE.
2. Esquema del formato PE
El formato PE puede describirse mediante el siguiente esquema:
Encabezado MZ-DOS |
Segmento DOS |
Encabezado PE |
Tabla de secciones |
Sección 1 |
Sección 2 |
Sección N |
a. Encabezado MZ-DOS
Esta sección permite a Windows reconocer el archivo como un ejecutable y corresponde a la siguiente estructura:
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
WORD e_magic; // Magic number
WORD e_cblp; // Bytes on last page of file
WORD e_cp; // Pages in file
WORD e_crlc; // Relocations
WORD e_cparhdr; // Size of header in paragraphs
WORD e_minalloc; // Min extra paragraphs needed
WORD e_maxalloc; // Max extra paragraphs needed
WORD e_ss; // Initial (relative) SS value
WORD e_sp; // Initial SP value
WORD e_csum; // Checksum
WORD e_ip; // Initial IP value
WORD e_cs; // Initial (relative) CS value
WORD e_lfarlc; // File add of relocation table
WORD e_ovno; // Overlay number
WORD e_res[4]; // Reserved words
WORD e_oemid; // OEM identifier
WORD e_oeminfo; // OEM information
WORD e_res2[10]; // Reserved words
LONG e_lfanew; // File addr of new exe header
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
El campo e_magic contiene el célebre MZ (magic number, número mágico) encontrado al inicio de cada binario Windows:
rootbsd@lab:~$ hd fec60c1e5fbff580d5391bba5dfb161a.exe | more............|
00000000 4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00 | MZ..............|
00000010 b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 |........@........|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 |.................|
b. Segmento DOS
Este segmento es, normalmente, ejecutable. Se ejecutará si el archivo binario se lanza en MS-DOS. Este código muestra simplemente el mensaje «This program cannot be run in DOS mode», lo que podría...
Seguir la ejecución de un archivo binario
1. Introducción
Para evaluar lo que hace un archivo binario durante su ejecución, puede resultar interesante seguir su actividad durante la misma. Atención; se recomienda encarecidamente ejecutar el binario en una máquina virtual de la que se haya obtenido previamente una instantánea (snapshot) para poder restaurarla a su estado inicial.
Microsoft proporciona, mediante sus sysinternals, una herramienta que permite registrar la actividad de un archivo binario durante su ejecución. Esta herramienta, llamada Process Monitor, permite recolectar la actividad a nivel del registro, del sistema de archivos y de la capa de red. Process Monitor puede descargarse de: http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
Además de usar Process Monitor para supervisar la actividad de un proceso, también resulta interesante realizar capturas de red completas para ver si el archivo binario se comunica con algún servidor exterior o no. Y si existen tales comunicaciones, se pueden analizar para ver si el protocolo utilizado es un protocolo conocido o, si por el contrario, el malware usa su propio protocolo.
2. Actividad a nivel del registro
La ejecución de Process Monitor se realiza ejecutando simplemente Procmon.exe. Aparece la siguiente interfaz de usuario:
Para obtener únicamente información relativa al archivo binario que se desea analizar, se pueden aplicar filtros. Para aplicar un filtro, se hace clic en Filter y luego se selecciona Filter....
Se abre la siguiente ventana:
A continuación, hay que utilizar los menús desplegables para filtrar sobre el binario que se desea analizar. Es posible filtrar utilizando su nombre o bien su PID.
También se puede seleccionar únicamente el botón correspondiente al registro localizado en la parte superior derecha de la interfaz:
Al limitar la información presentada, se obtiene mayor claridad. Ahora, se muestra toda la actividad generada a nivel del registro por el proceso:
Se pueden ver las claves de registro que se leen, se crean o incluso modifican.
También es posible exportar los resultados en distintos formatos: PML (formato propio de Process Monitor), CSV (para leerlo en una hoja de cálculo) o incluso XML. Para ello, basta con seleccionar File y a continuación Save...
Aparece la siguiente ventana:
3. Actividad a nivel del sistema de archivos
Process Monitor permite seleccionar la actividad a nivel del sistema de archivos. Solo hay que hacer clic en el segundo botón de esta sección:
A continuación, aparece la siguiente interfaz con todos los accesos a los archivos de la máquina:
Se pueden ver los archivos leídos, creados, eliminados, modificados o incluso los intentos de acceso a archivos que se rechazan por motivos de permisos insuficientes.
4. Actividad de red
Puesto que muchos malwares se comunican en la actualidad con un Command & Control, resulta interesante supervisar la actividad de red de un proceso. Process Monitor permite también supervisar esta actividad seleccionando el tercer botón de esta sección:
He aquí la interfaz mostrada por Process Monitor:
Resulta interesante realizar capturas de red para poder analizarlas con detalle. Para ello, se puede utilizar el programa Wireshark, disponible en: https://www.wireshark.org. Esta herramienta permite capturar el tráfico de red que pasa por una tarjeta de red, pero también realizar filtros para obtener una mejor visibilidad de los distintos flujos.
Para realizar una captura hay que ejecutar Wireshark y hacer clic en la tarjeta de red por la cual se desea filtrar, en el panel principal:
He aquí la visualización de la captura:
Si se ha realizado una comunicación FTP (File Transfer Protocol) durante la captura, se puede filtrar dicho protocolo. En el campo Filtro basta con introducir ftp.
Usar Cuckoo Sandbox
1. Introducción
En el ámbito del análisis de malwares, las sandboxes (o cajas de arena en castellano, refiriéndose a un entorno de pruebas) son entornos herméticos y aislados donde se ejecutan los malwares. Estas herramientas registran toda la actividad de la muestra sometida (actividad en el registro, archivos creados, llamadas realizadas al sistema…) y finalmente generan informes.
Existe una sandbox de código abierto, llamada Cuckoo Sandbox. Está disponible en: http://www.cuckoosandbox.org/. El principio de Cuckoo Sandbox es sencillo: utiliza una máquina virtual de VirtualBox en la que se ha instalado un agente. Este arranca la máquina virtual, registra la actividad del malware, almacena esta información en la máquina anfitriona y finalmente detiene la máquina virtual restaurando una instantánea para que la máquina esté de nuevo lista y operacional para realizar un nuevo análisis.
2. Configuración
La configuración de Cuckoo Sandbox se realiza en la carpeta conf/ y principalmente gracias al archivo cukoo.conf.
He aquí algunas variables importantes del archivo cuckoo.conf:
-
machinery: esta variable especifica el tipo de virtualización que Cukoo Sandbox deberá admitir. De forma predeterminada, la aplicación acepta VirtualBox. Sin embargo, es posible utilizar Xen o incluso KVM.
-
Ip y port: estas dos variables se utilizan para configurar el puerto y la dirección IP por donde pasarán los datos entre la máquina virtual que ejecutará el archivo sospechoso y la máquina física.
-
Connection: esta variable se utiliza para precisar la ubicación de la base de datos en la que se almacenarán los datos.
Antes de ejecutar un primer análisis, hay que instalar el agente en la máquina virtual. El agente, desarrollado en Python, requiere que Python v 2.7 se encuentre ya instalado en la máquina virtual. El paquete de Python está disponible en: https://www.python.org/download/releases/2.7/. Una vez instalado, basta con hacer doble clic en el archivo disponible en agent/agent.py tras haberlo copiado en la máquina virtual.
Se abre la siguiente ventana en la máquina virtual:
Falta por hacer una instantánea (snapshot) de la máquina con el agente iniciado para que Cuckoo Sandbox la restaure tras cada análisis. Para ello, hay que seleccionar la máquina deseada en el panel izquierdo y, en el panel derecho de VirtualBox Admistrador, hacer clic en Tomar:
Cuckoo Sandbox está listo para su uso.
3. Uso
Para arrancar la aplicación y enviar el archivo que queremos analizar, hay que ejecutar el script cuckoo.py en la máquina anfitriona:
paul@lab:~/cuckoo$ cuckoo.py summit/tmp/sample.exe
Cukoo Sandbox enviará el archivo a la máquina virtual, lo ejecutará y vigilará su actividad.
Cabe destacar que es posible probar archivos que no sean ejecutables con el comando cukoo.py. Puede utilizarse la opción -package para seleccionar otros formatos.
-
exe: para ejecutar binarios en formato .exe (predefinido).
-
applet: para ejecutar applets Java.
-
dll: para ejecutar bibliotecas en formato .dll.
-
doc: para ejecutar el archivo en Microsoft Word. Esta opción permite analizar malwares que utilizan las vulnerabilidades existentes en el producto Word.
-
xls: igual que con el paquete doc, pero para formatos de Excel.
-
ppt: igual que con el paquete doc, pero para el formato PowerPoint.
-
pdf: igual que con el paquete doc, pero para formatos PDF; Cuckoo Sandbox abrirá el archivo directamente con Acrobat Reader.
-
ie: igual que con el paquete doc, pero para Internet Explorer.
-
zip: para ejecutar el contenido de un archivo .zip.
-
ps1: para ejecutar un script PowerShell.
-
jar: para ejecutar contenedores Java.
-
js: para analizar archivos JavaScript.
-
msi: para analizar archivos de instalación MSI.
La lista completa de los paquetes se encuentra en: https://cuckoo.readthedocs.io/en/latest/usage/packages/
Cuando el paquete (package) necesite utilizar una aplicación de terceros (Microsoft Word, Microsoft Excel o Acrobat Reader), evidentemente es necesario instalarla en la máquina virtual que utilizará VirtualBox.
A continuación, VirtualBox...
Resumen
Este capítulo explica cómo identificar un malware y realizar un análisis preliminar. Nos hemos detenido en el análisis del código binario de una aplicación maliciosa. Para entender su funcionamiento, presentaremos la disciplina de ingeniería inversa en el siguiente capítulo. Es necesario entender el código máquina para poder comprender qué es lo que hace precisamente el código que vamos a analizar.
El sistema operativo Microsoft Windows es complejo. No obstante, existen varios mecanismos utilizados por los malwares que nos ayudan a identificarlos. Una vez identificados, empieza la fase del análisis. Hemos visto cómo analizar los vectores de infección más comunes y cómo analizar los malwares tanto manual como automáticamente. Un buen conocimiento de Windows es una gran baza, e Internet está repleto de artículos que responderán a las preguntas que nos podríamos plantear algún día a la hora de analizar el comportamiento de un malware.