En una entrada anterior vimos algunos trucos para analizar DLLs protegidas con un packer. En este sentido es necesario comprender algunos aspectos básicos a la hora de analizar este tipo de archivos; debemos tener en que cuenta que no son como los clásicos .EXE (ejecutables de Windows).

Por este motivo, en esta entrada veremos algunos aspectos básicos a tener en cuenta a la hora de analizar archivos DLL maliciosos que estén empaquetados.

Empecemos por el principio: ¿qué es un archivo .DLL?

Los archivos DLL son librerías de enlace dinámico (proviene de su sigla en inglés Dynamic Link Library) y son cargados a pedido de las aplicaciones y el sistema operativo. Haciendo una comparativa, son el equivalente a las librerías .SO de los sistemas Unix.

Dentro de Windows se puede encontrar gran cantidad de estas librerías DLL, ya que son utilizadas por aplicaciones, el sistema operativo y periféricos, entre otros.

A continuación listaremos algunas de las DLLs más importantes a tener en cuenta en el proceso de análisis de malware:

  • KERNELL32.dll: tiene funcionalidades como acceso y manipulación de memoria, archivos, creación de procesos y hardware.
  • Advapi32.dll: se encarga de algunas funciones un poco más avanzadas como registro y administración de servicios.
  • User32.dll: se encarga de los componentes de interfaz de usuario, tales como barras de desplazamiento, botones y demás componentes de respuesta a las acciones del usuario.
  • Gdi32.dll: desde aquí se muestran y manipulan los gráficos en el equipo
  • Ntdll.dll: es la interface con el kernel de Windows. Los ejecutables generalmente no importan esta librería directamente, aunque indirectamente puede ser importada por kernel32.dll. Si un ejecutable la importa podría significar que se intenta ejecutar funcionalidades que no están disponibles para los programas en Windows, lo que podría ser utilizado para ciertas acciones maliciosas tales como esconder funcionalidades o manipular procesos, entre otras.
  • WSock32.dll y Ws2_32.dll: son las encargadas de la parte de redes. Su uso significa que se está accediendo a una red o que la aplicacion realiza tareas relacionadas con la red.
  • Wininet.dll: contiene funcionalidades de alto nivel de red, tales como protocolos HTTP, FTP y NTP.

¿Por qué analizamos estas librerías?

Tal vez imagines la respuesta, pero si todavía no lo hiciste es muy simple. En ocasiones puede verse cómo distintos tipos de amenazas (como por ejemplo botnets o troyanos, entre otros) llaman a estas librerías; por ejemplo, un bot cargaría Ws2_32.dll para conectarse a su C&C.

En muchos casos las amenazas realizan un hook o inyectan código en estas librerías para interceptar llamadas del sistema y poder modificarlas.

También vemos que en muchos casos las amenazas solo son archivos DLL maliciosos y no los conocidos ejecutables (EXE). De esta forma, una vez ejecutado este tipo de librerías podría pasar inadvertido para algunas soluciones de seguridad.

Dentro de la consola de Windows (CMD) algunos de los comandos para estas librerías son:

           Regsvr32.exe ArchivoEjemplo.dll (son agregadas al registro)

           Rundll32.exe ArchivoEjemplo.dll (para ejecución de la misma)

Cabe destacar que este tipo de instrucciones podrían ser automatizadas mediante scripts en VisualBasic, tal como ya hemos visto en el caso de aquel que atacaba dispositivos USB al ser implementado por códigos maliciosos.

Entonces, ¿cómo empezamos a analizar una DLL?

En este punto ya sabemos qué son las DLL y por qué podrías necesitar llevar a cabo su revisión. El análisis de instrucciones maliciosas se basa en dos formas: el de tipo estático y de tipo dinámico.

Cada uno de estos es bien marcado, ya que el de tipo estático se basa en la obtención de información sin ejecutar la amenaza en el sistema, mientras que por otra parte con el de tipo dinámico se busca ver los cambios realizados en dicho sistema una vez ejecutada la amenaza. Aquí nos centraremos en el de tipo estático con el objetivo de identificar archivos DLL maliciosos.

Este tipo de análisis consiste en observar dicha librería implementando herramientas y técnicas sin provocar su ejecución. En el primer ejemplo que mostraremos a continuación veremos las dependencias de una DLL con la herramienta PEiD:

02B

Puede verse que en la captura de pantalla se encuentran enumerados los pasos a seguir una vez analizada la librería. Una vez abierta en la herramienta haciendo clic en el símbolo marcado en el recuadro número 1, este abrirá una ventana como la situada en la parte inferior. Dentro de la ventana abierta podemos ver que el recuadro “Directory Information” permite listar las DLL que se importan y exportan (remarcado en el recuadro número 2). Para el ejemplo decidimos mostrar las librerías que son importadas: KERNEL32.dll, USER32.dll y MSVCRT.dll.

Otra de las herramientas que pueden utilizarse para analizar este tipo de información es DependencyWalker. Tal como lo indica su nombre, mostrará la lista de dependencias de un ejecutable (EXE) e inclusive de una librería (DLL):

01B

Como puede verse en esta herramienta, la información se encuentra separada en los diferentes paneles. Por un lado se encuentra el recuadro superior izquierdo donde se observa la librería a analizar y dentro de ella las librerías a las que hace referencia. Al posicionarse sobre una de las que hace referencia (en este caso lo hicimos con KERNEL32.dll) en el recuadro superior derecho, pueden verse claramente las funciones que se ejecutarán a través de esta DLL.

Podemos ver que llama a la función WriteFile, para escribir un archivo. Si se busca esta función en el recuadro del medio, puede obtenerse el entry point el cual se encuentra resaltada para el ejemplo. Esto podría ser útil en caso de requerir hacer un análisis dinámico, ya que con esto sabemos que en un determinado momento de la ejecución de esta librería, esta escribirá un archivo.

Siguiendo en la línea de análisis estático, otra de las herramientas que puede utilizarse para seguir recolectando información es PEview. Esta herramienta permite ver de forma rápida la estructura de varias extensiones de archivos como EXEs, DLLs, LIBs entre otros.

Con esta herramienta se puede obtener casi la misma información que la vista hasta el momento; veamos la siguiente captura de pantalla para comprender de qué manera se puede obtener información sobre la amenaza con extensión DLL:

PEview

En el panel izquierdo puede verse claramente dentro de “IMPORT Address Table” donde se encuentra la función WriteFile marcada anteriormente. Del mismo modo, pueden apreciarse en el panel derecho todas las funciones utilizadas pertenecientes a la librería KERNEL32.dll (desde la ante última línea hacia arriba).

De la misma forma puede obtenerse el timestamp para saber en qué fecha fue creado; veamos el ejemplo en la siguiente captura de pantalla:

PEview00

Como mencionamos, puede verse la fecha de creación perteneciente al 22 de octubre de 2014, marcado en el recuadro color rojo en el panel derecho.

¿Qué aprendimos?

En esta entrada vimos algunos conceptos básicos en cuanto al análisis de archivos DLL. Comprendimos cómo puede obtenerse información de manera estática de una DLL, ya que estos archivos también son ejecutables. También comprendimos que la finalidad del análisis de este tipo de archivos está relacionada a que los cibercriminales suelen usar estas librerías para manipular procesos y crear conexiones de red entre otros.

El análisis de esta información estática permite saber, a raíz de las DLLs cargadas, si se trata de una librería maliciosa ofuscada con algún packer o si bien al momento de ejecución podría cargar otras librerías en tiempo real. Cabe destacar que también puede encontrarse la fecha de creación (timestamp) con la cual se podrían llegar a formular hipótesis, como por ejemplo si tal vez se trata del mismo atacante (al contar con la misma fecha y hora), podría observarse la fecha de creación y en base a eso buscar estadísticas de la amenaza para comprender el impacto que tuvo junto y así tomar dimensión de la amenaza.

Hash de muestra utilizada:

MD5: 88cff986a9188a51eb98dbbcf2bb27ca

SHA1: f27d9dd07a9f0c8bf723df82d1b00155536d436f