Zebrocy: muy utilizado por el grupo Sednit durante los últimos dos años

Grupo Sednit se actualiza: un análisis de Zebrocy

Análisis realizados por Investigadores de ESET sobre variantes que aparecieron regularmente desde 2017 indican que Zebrocy está siendo activamente actualizada y mejorada por su/s autor/es.

Análisis realizados por Investigadores de ESET sobre variantes que aparecieron regularmente desde 2017 indican que Zebrocy está siendo activamente actualizada y mejorada por su/s autor/es.

El grupo Sednit –también conocido como APT28, Fancy Bear, Sofacy o STRONTIUM ─ es un grupo de atacantes que operan desde el 2004, o incluso antes, y cuyo principal objetivo es robar información confidencial de objetivos específicos.

Cerca de finales de 2015 comenzamos a observar un nuevo componente distribuido por el grupo: se trata de un downloader para el principal backdoor de Sednit: Xagent. A principio de 2017 Kaspersky mencionó por primera vez este componente en su reporte de tendencias APT y recientemente escribió un artículo donde brevemente lo describen bajo el nombre Zebrocy.

Este nuevo componente es una familia de malware que comprende downloaders y backdoors escritos en  Delphi y AutoIt. Estos componentes tienen el mismo rol tanto en el ecosistema de Sednit como en el de Seduploader; la primera etapa del malware.

Hemos visto que algunas de las víctimas que han sido blanco de Zebrocy se ubican en Azerbaiyán, Bosnia y Herzegovina, Egipto, Georgia, Irán, Kazajistán, Rusia, Arabia Saudita, Serbia, Suiza, Tayikistán, Turquía, Turkmenistán, Ucrania, Uruguay y Zimbabue. Estos objetivos incluyen embajadas, ministerios de asuntos exteriores, y diplomáticos.

La familia Zebrocy está conformada por tres componentes. Según su orden de aparición, estos son: un downloader Delphi, un downloader AutoIt y un backdoor Delphi. La imagen 1 muestra la relación entre cada uno de estos componentes.

En este artículo describiremos esta familia y cómo es que puede coexistir con la antigua herramienta de reconocimiento Seduploader, así como también al final hablaremos de ciertas similitudes y diferencias de Downdelph.

Figura 1 – Ecosistema de Sednit

La imagen 1 muestra el malware activo y los métodos de ataque utilizados por Sednit, donde el uso de adjuntos a través del correo es el principal punto de entrada al ecosistema Sednit. Según un artículo recientemente publicado por el equipo de Palo Alto Networks, DealersChoice sigue utilizándose. Ambos, tanto Seduploader como Zebrocy, están siendo distribuidos de manera activa por el grupo Sednit a través de adjuntos en correos. Finalmente, luego de una fase de reconocimiento, Xagent y Xtunnel son desplegados hacia objetivos considerados interesantes por quienes los operan.

Métodos de ataques

El primer componente de un ataque basado en Zebrocy llega como un correo electrónico. Las víctimas son tentadas para abrir el adjunto de un correo que pueden ser un documento de Microsoft Office o un archivo.

Documentos maliciosos

Los documentos maliciosos utilizados por Sednit descargan el payload que se encarga de la primera etapa a través de Visual Basic para aplicaciones (VBA), exploits o incluso utilizando Dynamic Data Exchange (DDE). A fines de 2017, el grupo Sednit lanzó dos campañas en las que enviaba dos tipos de documentos maliciosos. El primero fue llamado Syria – New Russia provocations.doc y el segundo fue llamado Note Letter Mary Christmas Card.doc.

Figura 2 – Documentos maliciosos de Zebrocy

 

Ambos documentos maliciosos contienen una macro VBA que crea un archivo nombrado de manera aleatoria en %TEMP%. El malware ejecutable es entonces decodificado y escrito en este archivo, el cual es luego ejecutado a través de un comando PowerShell o mediante Scriptable Shell Objects.

Example of Visual Basic function and base64 encoded first stage from Syria – New Russia provocations.doc document.

Archivos

Algunas campañas utilizaron un archivo para inyectar la primera etapa en la computadora de la víctima, en lugar de hacerlo a través de macros de documentos de Office; y probablemente esos archivos llegaban a destino como adjuntos en un correo.

Toda la primera etapa de la familia Zebrocy está compuesta por ejecutables con un ícono y un nombre de archivo con apariencia de documento que intenta engañar a la víctima, tal como se muestra en la Figura 3.

Figura 3 – Primera fase de Zebrocy utilizando el ícono de un documento de Word

Downloader Delphi

Un downloader Delphi es la primera etapa de la familia Zebrocy, a pesar de que hemos visto algunas campañas del grupo Sednit en las que en su lugar utilizan el downloader AutoIt directamente. La mayoría de estos downloaders binarios Delphi utilizan íconos de documentos de Office u otros como los de la librería de Windows, y en algunas ocasiones estas muestras se empaquetan con UPX, un compresor de ejecutables gratuito. El propósito en esta primera etapa es recuperar un máximo de información de la computadora de la víctima.

Cuando el malware es lanzado, aparece una ventana emergente con un falso mensaje de error que incluye el nombre del archivo del binario droppeado. Por ejemplo, si el nombre del archivo es srsiymyw.exe, el nombre de archivo que aparece en la ventana emergente será srsiymyw.doc (Ver Figura 4). El propósito del pop up que se abre es distraer al usuario y hacerle creer que no está sucediendo nada extraño en su computadora.

Figura 4 – Ventana emergente del downloader Delphi

De hecho, el downloader está ocupado creando un archivo en %TEMP% con un nombre de archivo hardcodeado en el binario (a pesar de que en esta etapa el archivo está vacío). La persistencia se implementa al agregar una llave de registro de Windows en HKCU\Software\Microsoft\Windows\CurrentVersion\Run\ con la ruta del nombre del archivo codificado.

Para reunir información, el malware crea un nuevo proceso utilizando la función CreateProcess de la API de Windows con cmd.exe /c SYSTEMINFO & TASKLIST como argumento lpCommandLine. Una vez que la información se recupera, envía el resultado a través de una solicitud HTTP POST al servidor C&C especificado en el binario. Esta acción la repite hasta que recibe la siguiente etapa.

Delphi downloader HTTP POST request

Una vez que la solicitud se envió, el servidor C&C responde enviando la próxima etapa, siempre que el blanco infectado sea considerado de interés por el operador. El tiempo que transcurre entre que se envía el reporte y se recibe el payload es de unas pocas horas. Esta siguiente etapa se escribe en el archivo creado anteriormente y se ejecuta.

Downloader AutoIt

El downloader AutoIt es otra capa de la fase de reconocimiento durante la infección de la computadora de la víctima. De aquí en adelante, dos escenarios son posibles: en el primero, la primera etapa es el downloader Delphi y la segunda etapa ─la cual es el downloader AutoIt─ consiste en un downloader más liviano. En el segundo escenario posible, el downloader AutoIt es la primera etapa y tiene todas las funcionalidades del downloader Delphi e incluso más también.

Cuando el downloader AutoIt es la primera de las etapas realiza muchas funciones de reconocimiento. Incluso comparte algunas similitudes con el downloader Delphi, como el mecanismo de persistencia y la ventana emergente, pero agrega más detalle a la fase de reconocimiento que el downloader Delphi. A continuación, compartimos una lista (no exhaustiva) de sus capacidades:

  • Detecta sandbox y entornos virtuales
  • Obtiene una lista de los programas instalados (via HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall)
  • Obtiene la versión de Windows (32-bit o 64-bit)
  • Obtiene la lista de procesos
  • Obtiene información del disco rígido
  • Obtiene capturas de pantalla
  • Obtiene variada información de la computadora de la víctima utilizando Windows Management Instrumentation (WMI) Objects, inspirados probablemente por el código de este repositorio de GitHub.

Dependiendo de la etapa previa, el nombre del binario AutoIt es diferente. Si el malware es lanzado como la primera etapa, tiene nombre de documento. De otra manera, se le asigna el nombre codificado con el downloader Delphi, tal como se ve en la Tabla 1.

Table 1: AutoIt binary filenames, depending of the first stage

First Stage

AutoIt binary Filenames

Delphi downloader

csrsvc.exe

Email attachment

Protocol List_20160606.exe

El propósito de esta etapa es más o menos el mismo que el de la previa.  Existen muchas versiones disponibles, pero todas incluyen al menos el código para lograr lo siguiente:

  • Recuperar el número de serie del disco rígido C:
  • Usar funciones de red de winhttp.dll o winhttp.au3
  • Ejecutar el payload recibido desde el servidor C&C

De la misma manera que el downloader Delphi tiene una ventana emergente, el AutoIt también tiene una ventana emergente cuando viene desde el adjunto de un correo ─el AutoIt es la primera etapa. La ventana emergente está relacionada con el programa representado por el ícono del binario. Por ejemplo, un downloader AutoIt con ícono de Adobe Reader despliega una ventana emergente que dice que el archivo PDF que la víctima pretende abrir está corrupto.  Un binario AutoIt bajo un ícono de Word desplegará el siguiente popup solicitando la contraseña. Aunque como la contraseña no es considerada en este punto; creemos que se trata simplemente de una manera de distraer a la víctima de la actividad realmente maliciosa del código.

Figura 5 – Popup de Word downloader Delphi

Backdoor Delphi

El backdoor Delphi es la fase final de la cadena de componentes que conforman a Zebrocy. En el pasado hemos visto a Zebrocy descargar el backdoor principal del grupo Sednit, llamado Xagent.

A diferencia de los componentes anteriores, éste tiene un número de versión interno que no parece estar relacionado a una campaña en particular. Este número de versión ha evolucionado con el correr del tiempo, tal como se puede apreciar en la Tabla 2:

Table 2: Delphi backdoor internal version history

PE timestampversion
2015-12-282.1
2016-01-062.2
2016-01-252.3
2016-02-032.4
2016-03-142.5
2016-04-083.0
2016-04-263.2
2016-06-014.4
2016-09-085.0
2016-12-155.1
2017-06-017.0
2017-09-268.0
2017-10-128.1
2017-11-128.2
2017-12-268.5
2018-01-098.6
2017-12-1810.1
2018-01-0910.2
2018-01-1610.3
2018-01-1811.0
2018-02-0712.0
2018-03-0513.0
2018-03-0613.1
2018-03-1414.0
2018-03-2814.1

Es importante aclarar que no contamos con el panorama completo y puede que nos hayamos perdido de algunas versiones del backdoor. Además, existe cierta superposición entre versiones, lo que indica que algunas versiones más antiguas siguen siendo utilizadas al mismo tiempo que las versiones nuevas.

En los próximos párrafos detallaremos algunas de las diferencias que hemos visto en el malware durante su evolución. El backdoor incorpora un bloque de configuración cuyos valores cambian entre las distintas muestras, aunque la lista de ítems configurables se mantiene siempre igual.  Sin embargo, la forma en que son almacenados los datos de configuración en la muestra del malware ha ido evolucionando a través del tiempo.

La primera versión del backdoor embebía los datos de la configuración en texto plano, como se puede apreciar en la imagen 6.

Figura 6 – datos de configuración en texto plano del backdoor Delphi

Luego, en versiones posteriores, los autores del malware codificaron los datos de configuración en cadenas hexadecimales, como se puede ver en la imagen 7.

Figura 7 – datos de configuración codificada del backdoor Delphi

En las últimas versiones, los datos de configuración son cifrados dentro de los recursos utilizando el algoritmo AES, mientras que en versiones más antiguas los almacenaba en la sección .text

Los datos de configuración contienen:

  • Claves AES para comunicarse con el servidor C&C
  • Direcciones (URL) con patrones que difieren de una muestra a la otra
  • La versión del malware
  • La llave/valor de registro de Windows que asegura la persistencia del backdoor
  • La ruta donde se almacenan los archivos temporales (%APPDATA%)
  • Los nombres de los directorios ocultos que serán creados para almacenar los archivos temporales: los nombres de los directorios son concatenados con la variable de entorno  (%APPDATA%)

Una vez que el malware es configurado, ejecuta llamadas a otras funciones a través de la función SetTimer de la API de Windows. Estas llamadas permiten al operador manipular varias funciones y comandos del backdoor.

  • Realiza capturas de pantalla del escritorio de la víctima
  • Registra las pulsaciones del teclado
  • Crea una lista de los recursos de los discos y las redes
  • Lee y escribe en el registro de Windows
  • Copia, mueve o borra un objeto del sistema de archivos (file system)
  • Ejecuta archivos o crea tareas programadas

El número de comandos que manipula el backdoor ─ cerca de 30 ─ difiere de una versión a la siguiente. Para comunicarse con el servidor C&C, el backdoor almacena el reporte de esas funciones en un archivo temporario. Luego leerá el contenido del archivo temporal y lo enviará. Estos archivos temporales son almacenados en uno de los directorios ocultos creados durante la fase de configuración.

Delphi backdoor POST request

El contenido del tempfilename es la salida de cualquier comando ejecutado. El contenido es cifrado utilizando el algoritmo de AES-256-ECB con la primer llave AES de los datos de configuración, luego la salida es codificada de forma hexadecimal. El contenido enviado al servidor C&C varía de un comando a otro, pero todos contienen al menos el número de serie del disco rígido y los primeros cuatro bytes del nombre de la computadora. Por ejemplo, HELLO corresponde al primer paquete enviado por el backdoor para establecer contacto con el servidor C&C. Como se muestra más abajo, contiene la fecha de cuando se lanzó la tarea, el número de la versión interna del backdoor Delphi, el número de serie del HDD, el nombre de la computadora (primeros cuatro bytes), el comando y la fecha de cuando se ejecutó el backdoor.

Start: 1/4/2018 1:37:00 PM – [<vx.x>]:42424242ESET-HELLO-[2018-04-04 01-37-00]-315.TXT.

La segunda llave AES en los datos de configuración es utilizada para descifrar la respuesta del servidor C&C. Al igual que Seduploader, este backdoor es utilizado para desplegar Xagent en la computadora de la víctima, luego de que tras la fase de reconocimiento haya sido considerada una máquina de interés para el operador.

Conclusión

Un componente escrito en Delphi no resulta algo nuevo para el grupo Sednit, ya que anteriormente utilizó este mismo lenguaje para Downdelph. Sin embargo, incluso sin que este último componente tenga algo en común con Downdelph “técnicamente hablando”, hay algunos puntos que vale la pena mencionar.

  • Los métodos de implementación son los mismos, ya que ambos se entregan como adjuntos en un correo.
  • La última vez que vimos Downdelph fue en septiembre de 2015, y la primera muestra de Zebrocy que vimos activa data de noviembre de 2015.
  • Ambos están escritos en Delphi

Podemos plantear la hipótesis de que el grupo Sednit abandonó un componente y comenzó a desarrollar uno nuevo. Sin embargo, una cosa que no cambio para el grupo son los errores que cometieron:

  • El nombre de la tarea programada: Windiws
  • El nombre de la función que recupera la información del sistema en el downloader AutoIt es _SOFWARE()
  • Mary en lugar de Merry en Note Letter Mary Christmas Card.doc

El array de bytes usados por el backdoor Delphi como llaves AES-256 son de una longitud de 38 bytes en lugar de 32. No se trata de un error de deletreo; más bien de falta de atención.

Hemos visto que Zebrocy ha sido muy utilizado por el grupo Sednit a lo largo de los últimos dos años. Nuestro análisis de varias de las nuevas variantes que aparecieron sobre una base regular desde 2017 indican claramente que Zebrocy se mantiene activo y bajo constante mantenimiento por su autor(es). Por lo tanto, podemos considerarlo como una de las herramientas estables y maduras del arsenal del grupo Sednit; una herramienta que merece ser monitoreada de cerca.

IoCs

Malicious documents

SHA-1ESET Detection nameFilename
4f07d18475601d0492cbf678ee0f0860c729910eVBA/TrojanDropper.Agent.YCNote Letter Mary Christmas Card.doc
f10b2c052afc07e2dec9dbe816031059fdc900baVBA/TrojanDropper.Agent.AAKSyria - New Russia provocations.doc

Delphi downloader

SHA-1ESET Detection name
00b39f2deaf1f1fc29e5acb63f4d1100e04fd701Win32/TrojanDownloader.Delf.CFS
07e44b44c5f1043d16f6011a2cf0d2e7c5a52787Win32/TrojanDownloader.Delf.CFG
0f946f619ae8e2181a5bd76c8af03347742765c6Win32/TrojanDownloader.Delf.CGW
2900ed173a9f5dc99f905942a6be595cc6f03387Win32/TrojanDownloader.Delf.CFG
2b5a7f4e054d0130883c8821b629121e0228bf54Win32/TrojanDownloader.Delf.CIP
36b5e59a01e7f244d4a3bbb539e57aa468115dc8Win32/TrojanDownloader.Delf.CGB
37bd951c483da057337ef8f38d6e48051cbb39d0Win32/TrojanDownloader.Delf.CHC
41686703ce9e9aec64b6ad1c516746751219bc62Win32/TrojanDownloader.Delf.CFS
4e6470f4a245efaa138c8c6eedb046e916706383Win32/TrojanDownloader.Delf.CGW
54b14fc84f152b43c63babc46f2597b053e94627Win32/TrojanDownloader.Delf.CGB
afd5a60b7fff4deea15f7011339ad2cc2987a937Win32/TrojanDownloader.Delf.CGW
d4ab51bc5c26183771e3358d76e348943f9dd2fcWin32/TrojanDownloader.Delf.CGB
d6fdc72792ee736b8d606d40d72cb89d6e8a3e18Win32/TrojanDownloader.Delf.CFU

AutoIt downloader

SHA-1 ESET Detection name
0cd61d367dd0b13000774ab77abf3d4cfb713c8eWin32/TrojanDownloader.Autoit.ODO
185ab7a371b58ff367c155ec0dabe28842d340bdWin32/TrojanDownloader.Autoit.OBG
267abd7105ac26d5cb6ecb96292f83708f64b994Win32/TrojanDownloader.Autoit.OHC
4a6dcbccab5344388b331d543cc2260ca531c7caWin32/Autoit.CT
62dcf2f33ecc6014fa9a10f4e9ac9fd9bb0a6d23Win32/TrojanDownloader.Autoit.OCO
b8b847d3d0139db68dba730b3424b29dcb40b3c7Win32/TrojanDownloader.Autoit.OMA
c0271dbb02636402742c390ffbeee6418f696668Win32/TrojanDownloader.Autoit.OMB
d379b94a3eb4fd9c9a973f64d436d7fc2e9d6762Win32/Spy.Autoit.EI
dabeadf0a9af3a8a0802f8445670806cd7671b1dWin32/TrojanDownloader.Autoit.OCI

Delphi backdoor

SHA-1ESET Detection name
0983d940ba42135106bf7a1e87ed5a1975fc7eadWin32/Delf.BFF
226083c7190f1a939d5b7b352400450690d59f65Win32/Delf.BDW
245868d6805c66181808973e93f23293d6d2f7d1Win32/Delf.BDT
2c01ae417e5de213845b1ed46d4e82d45edd598dWin32/Delf.BBP
4ccbe222bd97dc229b36efaf52520939da9d51c8Win32/Delf.BFC
51ae516792570bcd069a657c27859cd3fdc07d00Win32/Delf.BBP
55179f0c6bce5a37311a44efe3f9845096c09668Win32/Delf.AWE
6fd7ce97061169b835ea77976651b5bf20aca4efWin32/TrojanDownloader.Delf.BRV
7349843e4dac1226ad6ce3e3cda8c389dd599548Win32/TrojanDownloader.Delf.BRV
7b5c223a4968cc2190c1b5444cad47187d27ec50Win32/TrojanDownloader.Delf.BRV
83882e13b369986b513f4aae245c112b82ec2097Win32/Delf.BEB
8aedf7a462024acf72d708c89230e4f02d94bc78Win32/Delf.BDT
8bd56b580974ae195e9f92b3aa525547d33434c1Win32/Delf.BEC
9beacd8e145fa01e16409d44d8b9470af6c7afd8Win32/Delf.BBP
a172fe6e91170f858c8ce5d734c094996bdf83d0Win32/Delf.BDT
ae93b6ec2d56512a1c7e8c053d2a6ce6fdfb7e4cWin32/Delf.BEX
c08d89c7f7be69d5d705d4ac7e24e8f48e22faafWin32/Delf.BDW
c2f3ca699aef3d226a800c2262efdca1470e00dcWin32/Delf.AVP
cdf9c24b86bc9a872035dcf3f53f380c904ed98bWin32/Delf.BEH
f63e29621c8becac47ae6eac7bf9577bd0a37b73Win32/Delf.AVT
fea8752d90d2b4f0fc49ac0d58d62090782d8c5bWin32/Delf.BFN

URLs

http://142[.]0.68.2/test-update-16-8852418/temp727612430/checkUpdate89732468.php
http://142[.]0.68.2/test-update-17-8752417/temp827612480/checkUpdate79832467.php
http://185[.]25.50.93/syshelp/kd8812u/protocol.php
http://185[.]25.50.93/tech99-04/litelib1/setwsdv4.php
http://185[.]25.50.93/techicalBS391-two/supptech18i/suppid.php
http://185[.]25.51.114/get-help-software/get-app-c/error-code-lookup.php
http://185[.]25.51.164/srv_upd_dest_two/destBB/en.php
http://185[.]25.51.198/get-data/searchId/get.php
http://185[.]25.51.198/stream-upd-service-two/definition/event.php
http://185[.]77.129.152/wWpYdSMRulkdp/arpz/MsKZrpUfe.php
http://188[.]241.68.121/update/dB-Release/NewBaseCheck.php
http://194[.]187.249.126/database-update-centre/check-system-version/id=18862.php
http://194[.]187.249.126/security-services-DMHA-group/info-update-version/id77820082.php
http://213[.]103.67.193/ghflYvz/vmwWIdx/realui.php
http://213[.]252.244.219/client-update-info/version-id/version333.php
http://213[.]252.244.219/cumulative-security-update/Summary/details.php
http://213[.]252.245.132/search-release/Search-Version/crmclients.php
http://213[.]252.245.132/setting-the-os-release/Support-OS-release/ApiMap.php
http://220[.]158.216.127/search-sys-update-release/base-sync/db7749sc.php
http://222[.]15.23.121/gft_piyes/ndhfkuryhs09/fdfd_iunb_hhert_ps.php
http://46[.]102.152.127/messageID/get-data/SecurityID.php
http://46[.]183.223.227/services-check-update/security-certificate-11-554/CheckNow864.php
http://80[.]255.6.5/daily-update-certifaicates52735462534234/update-15.dat
http://80[.]255.6.5/LoG-statistic8397420934809/date-update9048353094c/StaticIpUpdateLog23741033.php
http://86[.]105.18.106/apps.update/DetailsID/clientPID-118253.php
http://86[.]105.18.106/data-extract/timermodule/update-client.php
http://86[.]105.18.106/debug-info/pluginId/CLISD1934.php
http://86[.]105.18.106/ram-data/managerId/REM1234.php
http://86[.]105.18.106/versionID/Plugin0899/debug-release01119/debug-19.app
http://86[.]105.18.111/UpdateCertificate33-33725cnm^BB/CheckerNow-saMbA-99-36^11/CheckerSerface^8830-11.php
http://86[.]106.131.177/srvSettings/conf4421i/support.php
http://86[.]106.131.177/SupportA91i/syshelpA774i/viewsupp.php
http://89[.]249.65.166/clientid-and-uniqued-r2/the-differenceU/Events76.php
http://89[.]249.65.166/int-release/check-user/userid.php
http://89[.]249.65.234/guard-service/Servers-ip4/upd-release/mdb4
http://89[.]40.181.126/verification-online/service.911-19/check-verification-88291.php
http://89[.]45.67.153/grenadLibS44-two/fIndToClose12t3/sol41.php
http://89[.]45.67.153/supportfsys/t863321i/func112SerErr.php
http://93[.]113.131.117/KB7735-9927/security-serv/opt.php
http://93[.]113.131.155/Verifica-El-Lanzamiento/Ayuda-Del-Sistema/obtenerId.php
http://93[.]115.38.132/wWpYdSMRulkdp/arpz/MsKZrpUfe.php
http://rammatica[.]com/QqrAzMjp/CmKjzk/EspTkzmH.php
http://rammatica[.]com/QqrAzMjp/CmKjzk/OspRkzmG.php

Discusión