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:
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:
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:
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:
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:
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.
[…] 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. […]