1. Libros y videos
  2. Ciberseguridad y malwares
  3. Malwares contra sistemas Microsoft Windows
Extrait - Ciberseguridad y malwares Detección, análisis y Threat Intelligence (4ª edición)
Extractos del libro
Ciberseguridad y malwares Detección, análisis y Threat Intelligence (4ª edición) Volver a la página de compra del libro

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.

Images/cap2_img01.png

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...

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, etc.

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: https://www.magnetforensics.com/resources/magnet-dumpit-for-windows

Estos productos...

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...

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.

Images/cap2_img06.png

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, etc. Es importante seguir las recomendaciones del asistente para que la máquina virtual pueda funcionar correctamente.

La máquina virtual se encuentra configurada:

Images/cap2_img07.png

La segunda parte de la configuració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 de malwares 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...

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: https://github.com/imawizard/Exe2Aut

Una vez instalado, basta con ejecutarlo y arrastrar el archivo que se desea analizar hasta...

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;                ...

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:

Images/cap2_img11.png

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 Add y luego se selecciona Filter....

Se abre la siguiente ventana:

Images/cap2_img12.png

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:

Images/cap2_img13.png

Al limitar la información presentada, se obtiene mayor claridad. Ahora, se muestra toda la actividad generada a nivel del registro por el proceso:

Images/cap2_img14.png

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 As...

Aparece...

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 enviada (actividad en el registro, archivos creados, llamadas realizadas al sistema, etc.) 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:

images/Chap2_38.png

Falta por hacer una instantánea (snapshot) de la máquina con el agente iniciado para...

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.