Grupo Equation: de Houston con amor

En 2009, se llevó a cabo una conferencia científica internacional en Houston, EE.UU. Participaron los principales científicos de varios países. Como suele suceder al terminar estos eventos, los organizadores les envían a los participantes un CDROM con las presentaciones y fotografías de la conferencia. Ni remotamente se imaginaban los destinatarios del CDROM que mientras disfrutaban de las imágenes y recuerdos de su participación, un troyano con respaldo gubernamental se estaba activando en secreto en sus equipos.

Presentación de diapositivas del CD

Curiosamente, al parecer la mayoría de los asistentes llevaron lapicero y papel en lugar de laptops.

Autorun que auto-levanta

El disco contiene dos ficheros en la carpeta raíz; autorun.inf y autorun.exe. Esto es común en muchos CDROMs. El fichero autorun.inf sólo ejecuta el principal EXE desde la carpeta raíz. Y luce así:

[AutoRun] open=Autorun.exe
icon=PresentationShow.exe,0

Más interesante es el binario autorun.exe, que posee los siguientes atributos:

Fecha de compilación 2009.12.23 13:37:33 (GMT)
Tamaño 62464 bytes
MD5 6fe6c03b938580ebf9b82f3b9cd4c4aa

Al iniciarse, el programa verifica los privilegios actuales del usuario. Si el usuario actual no tiene permisos administrativos, intentará elevar los privilegios mediante tres diferentes exploits que abusan de vulnerabilidades en el núcleo de Windows. Estas vulnerabilidades se repararon con los siguientes parches de Microsoft:

  • MS09-025
  • MS12-034
  • MS13-081

Considerando la fecha en que se envió el CDROM, significa que dos de los exploits eran día-cero. Es notable que el código intente diferentes variantes de exploits del núcleo (o kernel exploits), y en un bucle, una por una, hasta que una de ellas tenga éxito. El conjunto de exploits de la muestra en el CDROM incluye sólo tres exploits, pero este paquete de explotación soporta la ejecución de hasta 10 exploits distintos, uno tras otro. No queda claro si esto significa que también existe un programa malicioso que contenga 10 exploits para escalar privilegios (EoP), o si sólo se trata de una limitación lógica.

El código posee cargas separadas para Windows NT 4.0, 2000, XP, Vista y Windows 2008, incluyendo variantes para ciertas versiones del paquete de servicio. En realidad, se ejecuta dos veces: primero, para escalar privilegios temporalmente, y después para agregar al usuario actual al grupo de administradores locales del equipo, para la persistencia de los privilegios elevados.

Si estas acciones eran exitosas, el módulo iniciaba otro ejecutable del disco, mostrando la presentación de diapositivas con imágenes de la conferencia de Houston.

Al final, justo antes de finalizar la ejecución, el código corre un procedimiento adicional que realiza algunas comprobaciones especiales. Si la fecha de ejecución cae antes del 1œ de julio del 2010 y no se detecta la presencia de Bitdefender Total Security 2009/2010 o de algún producto de Comodo, procede a cargar un archivo DLL adicional, llamado “show.dll” desde el disco, espera siete segundos, desmonta el DLL y sale.

Si la fecha cae después del 1œ de julio de 2010, o si cualquiera de los productos mencionados está instalado, suspende inmediatamente la ejecución.

El “Show” comienza: DoubleFantasy entra en escena

El cargador principal y la herramienta de elevación de privilegios, “autorun.exe” activa un descargador especial, que en realidad es un instalador de implantes DoubleFantasy del grupo Equation. Este instalador se guarda como “show.dll” en la carpeta “Presentación” del CDROM.

El fichero DLL posee los siguientes atributos:

Fecha de compilación 2009.03.20 17:42:21 (GMT)
Tamaño 151’552 bytes
MD5 ef40fcf419954226d8c029aac8540d5a
Nombre de fichero show.dll
Breve descripción Instalador de DoubleFantasy

Primero encuentra los datos en la sección de recursos, descomprime (UCL) y descifra con XOR los datos de configuración de uno de los recursos.

Después crea las siguientes llaves de registro:

  • HKEY_LOCAL_MACHINESoftwareClassesCLSID{6AF33D21-9BC5-4f65-8654-B8059B822D91}
  • HKEY_LOCAL_MACHINESoftwareClassesCLSID{6AF33D21-9BC5-4f65-8654-B8059B822D91}Version

De ahí define el valor (Default) para la sub-llave “Version” como “008.002.000.003”, identificando la versión del implante.

También intenta auto-eliminarse en el próximo reinicio, lo cual falla si se inicia desde el CD.

Al ser ejecutado por el paquete de explotación "Autorun.exe", el programa ya posee privilegios de administrador gracias a uno de los tres exploits. Sin embargo, el código vuelve a verificar si se está siendo ejecutado con privilegios de administrador, e intenta elevarlos mediante dos vulnerabilidades del núcleo:

  • MS09-025
  • MS12-034

Esto indica que el instalador DoubleFantasy está diseñado para ejecutarse independientemente del disco de Houston con su “Autorun.exe”.  En realidad, también hemos observado el uso independiente del instalador DoubleFantasy en otros casos.

El instalador verifica la presencia de soluciones de seguridad mediante una lista de llaves y valores de registro guardados en la sección de recursos. Revisa las llaves de una forma delicada y "sin llamar la atención" enumerándolas en lugar de acceder directamente a ellas. Esta es la lista de las llaves de nivel superior revisadas:

  • HKLMSoftwareKasperskyLabprotectedAVP7profilesBehavior_Blockingprofilespdmsettings
  • HKLMSoftwareKasperskyLabAVP6profilesBehavior_Blockingprofilespdmsettings
  • HKLMSoftwareAgnitumOutpost Firewall
  • HKLMSoftwarePWI, Inc.
  • HKLMSoftwareNetwork IceBlackIce
  • HKLMSoftwareS.N.Safe&Software
  • HKLMSoftwarePCToolsThreatFire
  • HKLMSoftwareProSecurity
  • HKLMSoftwareDiamond Computer Systems
  • HKLMSoftwareGentleSecurityGeSWall

Si cualquiera de ellas está presente, el instalador marcará el sistema al definir una llave de registro especial: 

HKEY_LOCAL_MACHINESoftwareClassesCLSID {6AF33D21-9BC5-4f65-8654-B8059B822D91}MiscStatus

Esta señal tendrá el formato {CE0F7387-0BB5-E60B-xxxx-xxxxxxxxxxxx} como el valor (Default) de los datos y la ejecución concluirá.

Si no ha detectado ninguna solución de seguridad, procederá a descomprimir (UCL) y descifrar con XOR la carga útil, que se extrae en %system%ee.dll.

Curiosamente, el DLL se carga utilizando su propio cargador personalizado en lugar de utilizar la llamada API estándar del sistema, LoadLibrary.

El módulo parece estar compilado con un conjunto de componentes o bibliotecas que realizan lo siguiente:

  • Elevación de privilegios (parece ser una versión temprana de la misma librería utilizada en autorun.exe).
  • Detección de soluciones de seguridad.
  • Análisis y descompresión de recursos.
  • Carga de archivos PE.

Este librería de código soporta Win9x y la familia Windows NT desde NT4.0 a NT6.x. Es importante notar que estas librerías no están muy bien fusionadas. Por ejemplo, no se utilizan ciertas partes del código.

Así se ve el bloque de configuración decodificado de DoubleFantasy:

Bloque de configuración decodificado de DoubleFantasy

Algunos de los servidores C&C de la configuración de DoubleFantasy:

  • 81.31.34.175 (República Checa)
  • 195.128.235.231 (Italia)

El malware DoubleFantasy copiado en el equipo de su víctima tiene las siguientes propiedades:

Fecha de compilación 2009.03.31 15:32:42 (GMT)
Tamaño 69632 bytes
MD5 b8c0eb946de83fe8440fefbacf7de4a2
Nombre de fichero ee.dll
Breve descripción Implante DoubleFantasy

Vale la pena remarcar que tanto el instalador como el malware parecen haberse compilado varios meses antes que el “autorun.exe” incluido en el CDROM, lo que sugiere que los implantes más o menos genéricos. También deja entrever que el “autorun.exe” probablemente se compiló especialmente para el ataque a través del CDROM.

El implante DoubleFantasy del grupo Equation es un troyano validador que envía a los atacantes información básica sobre el sistema. También les permite cargar una plataforma troyana más sofisticada, como EquationDrug o GrayFish. En general, una vez que se instala una de estas plataformas sofisticadas, los atacantes eliminan el implante DoubleFantasy. En caso de que la víctima no sea la adecuada, por ejemplo, si se trata de un investigador de malware, los atacantes sencillamente eligen desinstalar el implante DoubleFantasy y limpiar el equipo de la víctima.

En realidad, hay varias versiones conocidas de la carga útil de DoubleFantasy. El disco de Houston usó la versión 8.2.0.3, mientras que otras versiones se propagaban principalmente a través de exploits-de-web.

Al descifrar los bloques de configuración de todas las muestras conocidas de DoubleFantasy, obtuvimos los siguientes números internos de las versiones:

  • 8.1.0.4 (MSREGSTR.EXE)
  • 008.002.000.006
  • 008.002.001.001
  • 008.002.001.004
  • 008.002.001.04A (subversión "IMIL3.4.0-IMB1.8.0")
  • 008.002.002.000
  • 008.002.003.000
  • 008.002.005.000
  • 008.002.006.000
  • 011.000.001.001
  • 012.001.000.000
  • 012.001.001.000
  • 012.002.000.001
  • 012.003.001.000
  • 012.003.004.000
  • 012.003.004.001
  • 013.000.000.000

Curiosamente, las versiones más populares son la 8 y la 12:

Describiremos algunas de las versiones que logramos descubrir, incluyendo 8.2.0.3, 8.1.0.4 y 12.2.0.1.

Carga útil de DoubleFantasy v.8.2.0.3

Md5 b8c0eb946de83fe8440fefbacf7de4a2
Tamaño 69’632 bytes
Tipo Win32 GUI DLL
Marca de tiempo Mar 31.03.2009 14:32:42 (GMT)
Nombres de fichero ee.dll, actxprxy32.dll

Este módulo utiliza una técnica conocida como secuestro DLL COM que permite cargar el código en diferentes procesos.

Inicialización

En primer lugar, verifica si el módulo en ejecución se llama “ee.dll”; de ser así, procede con los pasos finales de la instalación:

  • Intenta encontrar los ajustes de configuración en la llave de registro  HKEY_LOCAL_MACHINESoftwareClassesCLSID{6AF33D21-9BC5-4f65-8654-B8059B822D91}TypeLib, en valor "DigitalProductId". Si este valor existe, lo decodifica con base64 y lo descifra con RC6 (con una llave hexadecimal de 16 bytes: 66 39 71 3C 0F 85 99 81 20 19 35 43 FE 9A 84 11).
  • Si la llave no se encuentra en el registro, carga la configuración desde un recurso.
  • Se auto-copia en una de las dos variantes de los nombres de archivo. Después sustituye uno de los componentes del sistema al renombrar y remplazar el original.
Fichero original Llave de registro Valor de registro Nuevo valor (Variante 1) Nuevo valor (Variante 2)
linkinfo.dll HKLMSystemCurrentControlSet ControlSessionManagerKnownDLLs LINKINFO LI.DLL LINK32.DLL
hgfs1.dll HKLMSYSTEMCurrentControlSet Serviceshgfsnetworkprovider ProviderPath hgfs32.dll hgfspath.dll
midimap.dll HKLMSOFTWAREMicrosoft Windows NTCurrentVersionDrivers32 midimapper midimapper.dll midimap32.dll
actxprxy.dll HKCRCLSID {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6} InProcServer32 (Default) actxprxy32.dll actxprxyserv.dll
  • Fija el valor 64-bit de config al valor (Default) de la llave HKEY_LOCAL_MACHINESoftwareClassesCLSID{6AF33D21-9BC5-4f65-8654-B8059B822D91}TypeLib en el formato {8C936AF9-243D-11D0-xxxx-xxxxxxxxxxxx}, parece que después se usa como un identificador de la víctima cuando esta se conecta al servidor C&C.
  • Define el valor (Default) de la llave HKEY_LOCAL_MACHINESoftwareClassesCLSID{6AF33D21-9BC5-4f65-8654-B8059B822D91}Version al string "008.002.000.003" .
  • Tras la creación de una llave, procede con pasos adicionales para establecer derechos de KEY_ALL_ACCESS al grupo ‘Todos’.
  • Actualiza la hora de inicio, codifica y vuelve a escribir config en el valor de registro HKEY_LOCAL_MACHINESoftwareClassesCLSID{6AF33D21-9BC5-4f65-8654-B8059B822D91}DigitalProductId.

Si ocurre un error, fija el valor “0” a la llave HKEY_LOCAL_MACHINESoftwareClassesCLSID{6AF33D21-9BC5-4f65-8654-B8059B822D91}MiscStatus(Default). El valor de registro {CE0F7387-0BB5-E60B-8B4E-xxxxxxxxxxxx} entonces contiene un código de error cifrado con xor.

Si ocurre un error de inicialización, si el proceso de hosting es “explorer.exe” o “avp.exe”, suprime todas las excepciones y continúa con la ejecución. Esto podría significar que si hubiera errores en estos procesos, no hay que suspenderlos por ellos.

Para secuestrar correctamente los objetos COM remplazados, el código exporta un conjunto de funciones vinculadas a los ficheros DLL originales.

CompareLinkInfoReferents = linkinfo.CompareLinkInfoReferents
CompareLinkInfoVolumes = linkinfo.CompareLinkInfoVolumes
CreateLinkInfo = linkinfo.CreateLinkInfo
DestroyLinkInfo = linkinfo.DestroyLinkInfo
DisconnectLinkInfo = linkinfo.DisconnectLinkInfo
DllCanUnloadNow = actxprxy.DllCanUnloadNow
DllGetClassObject = actxprxy.DllGetClassObject
DllRegisterServer = actxprxy.DllRegisterServer
DllUnregisterServer = actxprxy.DllUnregisterServer
DriverProc = midimap.DriverProc
GetCanonicalPathInfo = linkinfo.GetCanonicalPathInfo
GetLinkInfoData = linkinfo.GetLinkInfoData
GetProxyDllInfo = actxprxy.GetProxyDllInfo
IsValidLinkInfo = linkinfo.IsValidLinkInfo
NPAddConncection = hgfs1.NPAddConncection
NPAddConncection3 = hgfs1.NPAddConncection3
NPCancelConncection = hgfs1.NPCancelConncection
NPCloseEnum = hgfs1.NPCloseEnum
NPEnumResource = hgfs1.NPEnumResource
NPFormatNetworkName = hgfs1.NPFormatNetworkName
NPGetCaps = hgfs1.NPGetCaps
NPGetConnection = hgfs1.NPGetConnection
NPGetResourceInformation = hgfs1.NPGetResourceInformation
NPGetResourceParent = hgfs1.NPGetResourceParent
NPOpenEnum = hgfs1.NPOpenEnum
ResolveLinkInfo = linkinfo.ResolveLinkInfo
modMessage = midimap.modMessage
modmCallback = midimap.modmCallback

Los implantes ejecutan periódicamente verificaciones comparando con un archivo especial definido en config. Si ese archivo ha cambiado desde la última verificación, o ha transcurrido al menos una semana desde la última verificación, hace lo siguiente:

  • Comprueba la conectividad mediante dominios públicos (especificados en config, como "www.microsoft.com" y "www.yahoo.com") usando peticiones HTTP POST.
  • Si dispone de acceso a Internet, se conecta a una o dos IPs o hostnames de C&Cs (especificados en config: i.e. 81.31.34.175 y 195.128.235.23). Prueba los puertos estándar HTTP/HTTPS, 80 y 443 respectivamente.
  • Envía una petición POST al C&C con encabezados adicionales “EIag: 0d1975bfXXXXXXXX9c:eac’,0Dh,0Ah", donde XXXX XXXX – es parte del identificador de la víctima.
  • Solicita datos adicionales: identificador de la víctima, versión, y direccion MAC. Los datos se cifran con RC6 y se codifican con Base64 (Llave RC6: 8B 4C 25 04 56 85 C9 75 06 33 C0 5E C2 08 31 F6).

El código de comunicación con el C&C realiza lo siguiente:

  • Se decodifican los datos recibidos con Base64 y se descifran con RC6. El resultado se interpreta como un comando de puerta trasera.
  • Los resultados de la ejecución del comando se envían al C&C. De ahí intenta traer el siguiente comando desde el servidor.
  • Se auto-desinstala si no puede conectarse al servidor C&C dentro de 180 días (configurable).

La puerta trasera soporta los siguientes comandos:

Código Cmd Nombre del comando Descripción
Download&Run Group
J (0x4a) Create File Crea un archivo vacío; si el archivo ya existe obtiene su tamaño.
D (0x44) Append File Agrega un trozo de datos a un fichero (creado por “J” cmd).
V (0x56) Run or Copy

Verifica el CRC16 del fichero recibido por el comando D; lo elimina si la verificación falla.
Dependiendo del indicador de los comandos:

  • Copia el archivo a un nuevo lugar.
  • Carga el archivo como un DLL.
  • Inicia el archivo como un nuevo proceso.

Carga DLL usando un cargador personalizado y llama a la exportación “dll_u”.

Upload Group
K (0x4b) Get File Size Obtiene el tamaño del archivo.
S (0x53) Read File Lee el archivo especificado por el comando ‘K’ y lo envía al C&C. Puede eliminar el archivo después de la transferencia (bajo cierta condición).
Service Group
` (0x60) Get Info Recopila informacion (direcciones IP y MAC, versión del implante, servidor proxy del sistema, propietario y organización de la registración de Windows, versión de Windows e ID del producto, idioma local y país, ruta del directorio de Windows, tipo de conexión, lista de todas las sub-llaves de HKLMSoftware).
p (0x70) Set Victim ID Se prepara para cambiar el identificador de la víctima.
u (0x75) Set Interval Cambia el intervalo de conexión con el C&C (siete días por defecto).
v (0x76) Set C&C IP Cambia la dirección IP primaria del C&C.
x (0x78) Set File Path Cambia la ruta y nombre del archivo-bajo-inspección.
(0x80) Read File Elimina el archivo especificado en el comando.
B (0x42) Reset Victim ID Cambia la identification de la víctima a la definida por el comando Set Victim ID
Subcmd 0 – volver a conectarse con el C&C
Subcmd 1 – restaurar el contexto RC6
Subcmd 2 – desinstalar

Carga útil de DoubleFantasy v.8.1.0.4

Localización %System%MSREGSTR.EXE
MD5 9245184228af33d3d97863daecc8597e
Tamaño 31’089
Tipo Win32 GUI EXE
Marca de tiempo Mie 22.03.2006 18:25:55 (GMT)
Info de versión Descripción del archivo  Registro del software
Derechos de autor  Copyright © Microsoft Corp. 1993-1995
Nombre de la compañía Microsoft Corporation
Versión del fichero        4.00.950
Nombre interno    MSREGSTR
Nombre original del fichero  MSREGSTR.EXE

En comparación con la versión 8.2, la versión 8.1 implementa las mismas tareas de forma un poco diferente.

Diferencias:

  • Este es un archivo EXE que se ejecuta como un proceso de servicio.
  • Los datos de configuración guardados en lo sobrescrito (overlay) del archivo, en lugar de en recursos.
  • Se usan otras llaves de registro como almacenamiento de config – conjunto de sub-llaves bajoš HKLMSoftwareMicrosoftWindows CurrentVersionSetupCommon
  • No se usa el cifrado RC6 ni la codificación Base64. Los datos del tráfico de red se envían en texto plano o se cifran con XOR.
  • La cantidad de comandos a distancia soportados consiste de tan sólo cuatro.
  • El tipo de codificación del comando es diferente.
  • Soporta la familia Windows 9x.

Carga útil de DoubleFantasy v.12.2.0.1

Localización %System%actxprxy32.dll
MD5 562be0b1930fe5de684c2c530619d659769d099781220004540a8f6697a9cef1
Tamaño 151552
Tipo Win32 GUI DLL
Marca de tiempo Mie 04.08.2004 07:55:07 (GMT), probablemente falsa

La implementación de la versión 12.2 es similar a la de la versión 8.2, aunque tiene el doble de tamaño debido a la adición de una librería grande nueva.

El propósito principal de esta nueva librería es robar los nombres de usuario y contraseñas de:

  • Internet Explorer en ejecución o la memoria del navegador Firefox;
  • la configuración proxy de Internet Explorer, guardada en el registro de Windows;
  • el almacenamiento protegido de Windows (hasta Windows XP);
  • el subsistema de autenticación de Windows (Vista+).

Además de los navegadores, la librería también puede inyectar código malicioso y leer la memoria de otros procesos para obtener y descifrar las contraseñas de los usuarios. La misma librería también se usa dentro del orquestador principal EQUATIONDRUG y los módulos TRIPLEFANTASY.

La librería recopila las credenciales robadas y después las prueba cuando accede al servidor proxy mientras se conecta a Internet, y si la prueba tiene éxito, las credenciales válidas se cifran con RC6 y codifican con BASE64 para su uso posterior.

En esta versión la llave de cifrado de datos RC6 es:

66 39 71 3C 0F 85 99 81 20 19 35 43 FE 9A 84 11
La llave de cifrado de tráfico RC6 es:
32 EC 89 D8 0A 78 47 22 BD 58 2B A9 7F 12 AB 0C

Los datos robados del usuario se guardan en el registro de Windows como valor @WriteHeader, dentro de dos llaves aleatorias en el nodo HKLMSOFTWAREClassesCLSID {77032DAA-B7F2-101B-A1F0-01C29183BCA1}Containers.

Resumen

El disco CDROM utilizado en el ataque de Houston representa una operación rara e inusual para el grupo Equation. Suponemos que estos ataques están diseñados sólo para víctimas importantes que de otra forma eran inalcanzables, por ejemplo, a través de un vector de ataque basado en el uso de Internet. Esto queda confirmado por el hecho de que la librería de explotación contenía tres exploits, dos de los cuales era día-cero en ese entonces.

El programa malicioso DoubleFantasy es el primer paso en la infección de una víctima por el grupo Equation. Una vez que la víctima ha sido confirmada mediante comunicación con la puerta trasera y la verificación de varios parámetros del sistema, se instala un sistema de programas maliciosos más sofisticados, como EquationDrug o Grayfish.

En próximas entregas continuaremos describiendo las familias de programas maliciosos más sofisticados que utiliza el grupo Equation: EquationDrug y GrayFish.

Publicaciones relacionadas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *