Análisis de nls_933w.dll (I)

El objetivo principal de esta entrada y las siguientes que vamos a publicar es ir mostrando diferentes aspectos interesantes del análisis que estamos haciendo de una de las funcionalidades del framework utilizado por el grupo bautizado como “Equation” por la empresa Kaspersky. Este grupo ha utilizado un conjunto de herramientas y funcionalidades, donde alguna de ellas han sido consideradas bastante especializadas y creemos que merecen una especial atención.

Entre todas las herramientas y funcionalidades desarrolladas por el grupo nos hemos centrado en analizar la funcionalidad que permite añadir persistencia en el firmware de los discos duros. De todos modos para más información se puede consultar el siguiente informe de Kaspersky:

https://securelist.com/files/2015/02/Equation_group_questions_and_answers.pdf

Las muestras analizadas sobre las que vamos a trabajar durante los artículos son:

Nombre	        Hash	Valor
nls_933w.dll	MD5	11FB08B9126CDB4668B3F5135CF7A6C5
nls_933w.dll	SHA1	FF2B50F371EB26F22EB8A2118E9AB0E015081500
WIN32M.sys	MD5	2B444AC5209A8B4140DD6B747A996653
WIN32M.sys	SHA1	645678C4ED9BBDD641C4FF4DCB1825C262B2D879

En primera instancia vamos a centrarnos en realizar un análisis estático de la librería nls_933w.dll y ver qué módulos importa la librería:


Ilustración 1. Librerías importadas

Es destacable (tal y como nos indica la herramienta PEstudio) cómo la librería importa el módulo setupapi.dll. Este módulo ofrece funciones generales de instalación y funciones para la instalación de dispositivos, entre ellas, ofrece funciones para la instalación de drivers.

Tratándose de una librería es muy importante observar qué funciones exporta. Estas funciones son las que el módulo ofrece a otros programas para utilizar su funcionalidad. Vemos a continuación la tabla de exports:


Ilustración 2. Tabla exports

Observando la tabla vemos cinco funciones que se exportan y que son las funciones alcanzables desde otras aplicaciones; después analizaremos cada una de las funciones exportadas.
Otro de los aspectos destacados es que la librería lleva embebido un driver en la sección Resources con el nombre 101. Este driver implementa la lógica para leer y escribir información en determinados dispositivos como discos duros:


Ilustración 3. Driver embebido en Resources

El siguiente punto de interés de nuestro análisis estático, a partir del cual podemos inferir parte de los propósitos de la librería, es el análisis de los símbolos que importa:




Ilustración 4. Funciones importadas (PEstudio)

Se aprecia como la librería importa funciones para trabajar con los Resources (LoadResource(), SizeofResource(), etc.) y poder cargar el driver. Además, vemos como utiliza funciones de gestión de dispositivos (SetupDiEnumDeviceInfo(), SetupDiDestroyDeviceInfoList(), etc.). Otro punto a destacar es el uso de la función DeviceIoControl(), que permite definir un protocolo de comunicación entre el dispositivo y una aplicación cliente mediante códigos de control.

Esta última función se verá después como es fundamental ya que es la encargada de implementar el protocolo de comunicación entre la librería y el driver. Por último se ve como se importan funciones para el manejo del registro, cuyo uso debe ser analizado para detectar y generar posibles indicadores de compromiso.

Otro de los puntos que requieren un análisis son las cadenas del binario:


Ilustración 5. Cadenas destacadas por parte de PEstudio

Como vemos las que destaca la herramienta se corresponden la mayoría con símbolos que ya habíamos observado en el listado de símbolos y que ya hemos comentado qué nos aportan a nuestro análisis estático. Además, podemos ver a la derecha cadenas que están en el driver (recordemos que el driver está embebido en la propia librería) y que ya nos dan información sobre qué funcionalidades podrá darnos el driver (READ_PORT_ULONG, etc.).

En esta entrada hemos hecho un análisis estático de los diferentes elementos de la librería y con hemos podido situarnos y plantearnos una estrategia de análisis. En próximas entradas continuaremos analizando de manera estática y dinámica la librería.

Trackbacks

  1. […] En la anterior entrada analizamos ciertas características estáticas que nos daban una idea de lo que hace o lo que podría llegar a hacer la librería. Ahora en esta segunda entrada vamos a analizar las funciones que exporta la librería. Para el análisis estático de la librería nos vamos a apoyar en las herramientas radare2, pestudio y ollydbg. […]