ESET: análisis de nuevos componentes de Zebrocy

El cibergrupo Sednit ha estado operando desde al menos 2004 y aparece regularmente en las noticias. Se cree que Sednit (más conocido como Fancy Bear) está detrás del crack del Comité Nacional Demócrata de EE. UU. Antes de las elecciones de 2016, la Agencia Mundial Antidopaje (AMA), la red de televisión TV5Monde y otros ataques. El arsenal del grupo incluye un conjunto de herramientas maliciosas, algunas de las cuales hemos documentado en un informe anterior .

Recientemente publicamos un informe sobre LoJax , un rootkit UEFI que también está relacionado con Sednit y se utilizó en ataques en los Balcanes, en Europa Central y Oriental.

En agosto de 2018, los operadores de Sednit desplegaron dos nuevos componentes Zebrocy, y desde ahora hemos visto un aumento en el uso de esta herramienta. Zebrocy es una colección de cargadores de arranque, cuentagotas y puertas traseras. Los descargadores y cuentagotas son para inteligencia, mientras que las puertas traseras proporcionan persistencia y spyware. Estos nuevos componentes tienen una forma inusual de filtrar los datos recopilados a través de los protocolos de servicio de correo SMTP y POP3.


Las víctimas de las nuevas herramientas se parecen a las víctimas mencionadas en nuestra publicación anterior sobre Zebrocy , así como en Kaspersky Lab . Los objetivos de los ataques están en Asia Central, Europa Central y Oriental, principalmente embajadas, ministerios de asuntos exteriores y diplomáticos.

Revisar



Figura 1. Esquema de componentes Zebrocy antiguos y nuevos.

Durante dos años, el cibergrupo Sednit utilizó correos electrónicos de phishing como el vector de infección para Zebrocy (opciones 1 y 2 en la tabla anterior). Después del compromiso, los atacantes utilizaron varios cargadores de arranque de la primera etapa para recopilar información sobre la víctima y, en caso de interés, unas horas o días después desplegaron una de las puertas traseras de segundo nivel.

El esquema de campaña clásico de Zebrocy es obtener a la víctima como un archivo adjunto a la carta. El archivo contiene dos archivos, uno de los cuales es un documento inofensivo y el segundo es un archivo ejecutable. Los atacantes intentan engañar a la víctima llamando al segundo archivo un nombre típico del documento o imagen y utilizando la "doble extensión".

En la nueva campaña (opción 3 en la tabla), se utiliza un esquema más complicado: lo analizaremos a continuación.

Cuentagotas Delphi


El primer binario es un cuentagotas de Delphi, que es bastante inusual para la campaña de Zebrocy. En la mayoría de los casos, es más bien un gestor de arranque instalado en el sistema de la víctima en la primera etapa del ataque.

Con la ayuda de varios métodos, el cuentagotas complica la ingeniería inversa. En las muestras examinadas, usa la palabra clave hígado para indicar el comienzo y el final de los elementos clave, como se muestra a continuación.

$ yara -s tag_yara.yar SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe find_tag SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe 0x4c260:$tag: l\x00i\x00v\x00e\x00r\x00 0x6f000:$tag: liver 0x6f020:$tag: liver 0x13ab0c:$tag: liver 

La regla de YARA anterior busca la cadena de hígado . La primera línea de hígado se usa en el código, pero no separa nada, mientras que los demás comparten el descriptor de clave, la imagen (su volcado hexadecimal se muestra a continuación) y el componente cifrado en el cuentagotas.

 $ hexdump -Cn 48 -s 0x6f000 SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe 0006f000 6c 69 76 65 72 4f 70 65 6e 41 69 72 33 39 30 34 |liverOpenAir3904| 0006f010 35 5f 42 61 79 72 65 6e 5f 4d 75 6e 63 68 65 6e |5_Bayren_Munchen| 0006f020 6c 69 76 65 72 ff d8 ff e0 00 10 4a 46 49 46 00 |liver……JFIF.| 

Primero, los datos se guardan en una imagen con el nombre de archivo C: \ Users \ public \ Pictures \ scanPassport.jpg , si dicho archivo aún no existe.

Curiosamente, el archivo cuentagotas se llama SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe , que también sugiere un esquema de phishing relacionado con pasaportes e información de viaje. Esto puede significar que el operador puede conocer el propósito del mensaje de phishing. El cuentagotas abre la imagen y, si el archivo ya existe, detiene la ejecución. De lo contrario, lo abre y recibe el identificador de clave OpenAir39045_Bayren_Munchen . Falta la imagen, aunque el formato es correcto; consulte la figura a continuación.


Figura 2. ScanPassport.jpg

La línea del descriptor clave contiene Bayren_Munchen , probablemente una referencia al equipo de fútbol del FC Bayern Munich. En cualquier caso, el contenido del descriptor no es importante, sino su longitud, con la que puede obtener la clave XOR para descifrar el componente.

Para obtener la clave XOR, el cuentagotas busca la última palabra clave del hígado y la define por la longitud del descriptor. La longitud de la clave XOR es de 27 (0x1b) bytes (idéntica a la longitud del descriptor de clave).

Usando la tecla XOR y un bucle simple, el cuentagotas descifra la última parte: el componente encriptado ubicado inmediatamente después de la última etiqueta al final del archivo. Tenga en cuenta que el encabezado MZ del componente ejecutable comienza inmediatamente después de la palabra clave del hígado , y la clave XOR se obtiene de la parte del encabezado PE, que generalmente es una secuencia de 0x00 bytes recuperados después del descifrado del componente, como se muestra en la figura a continuación.


Figura 3. Componente cifrado (izquierda) versus componente descifrado (derecha)

El componente se restablece a C: \ Users \ Public \ Documents \ AcrobatReader.txt y convierte el archivo a C: \ Users \ Public \ Documents \ AcrobatReader.exe .

Quizás este sea un intento de eludir la protección de la PC, lo que genera una advertencia cuando un archivo binario descarga un archivo con la extensión .exe al disco.

Una vez más, el operador intenta engañar a la víctima, y ​​si presta atención al directorio, verá la imagen como en la siguiente figura:


Figura 4. El componente se ve como un archivo PDF

De forma predeterminada, Windows oculta la extensión, y un atacante la utiliza para volcar el archivo ejecutable en la carpeta Documentos y lo disfraza como un PDF.

Finalmente, el cuentagotas ejecuta el componente alojado y sale.

MSIL Mail Loader


El componente entregado del cuentagotas anterior es el cargador MSIL embalado con UPX. Para una mejor comprensión, la lógica del proceso se describe a continuación, luego se proporciona el código fuente y se considera el esquema de control.

El método principal llama a Ejecutar para iniciar la aplicación, que luego crea Form1 .

 {   Application.EnableVisualStyles();   Application.SetCompatibleTextRenderingDefault(false);   Application.Run((Form) new Form1()); } 

Form1 asigna muchas variables, incluido un nuevo temporizador para siete de ellas.

    this.start = new Timer(this.components);  this.inf = new Timer(this.components);   this.txt = new Timer(this.components);   this.subject = new Timer(this.components);   this.run = new Timer(this.components);   this.load = new Timer(this.components);   this.screen = new Timer(this.components); 

El objeto Timer tiene tres campos importantes:

  • Habilitado: indica el estado del temporizador habilitado.
  • Intervalo: tiempo entre eventos en milisegundos
  • Marque: la devolución de llamada se ejecuta después de que expira el temporizador y si el temporizador está activado

Los campos se indican de la siguiente manera:

   this.start.Enabled = true;   this.start.Interval = 120000;   this.start.Tick += new EventHandler(this.start_Tick);   this.inf.Interval = 10000;   this.inf.Tick += new EventHandler(this.inf_Tick);   this.txt.Interval = 120000;   this.txt.Tick += new EventHandler(this.txt_Tick);   this.subject.Interval = 120000;   this.subject.Tick += new EventHandler(this.subject_Tick);   this.run.Interval = 60000;   this.run.Tick += new EventHandler(this.run_Tick);   this.load.Interval = 120000;   this.load.Tick += new EventHandler(this.load_Tick);   this.screen.Interval = 8000;   this.screen.Tick += new EventHandler(this.screen_Tick); 

Para cada objeto, el intervalo de intervalo se establece de 8 segundos a 2 minutos. Se agrega una devolución de llamada al controlador de eventos. Tenga en cuenta que solo start establece el valor en verdadero para Enabled , lo que significa que después de 2 minutos (12,000 milisegundos = 120 segundos), el controlador de eventos llamará a start_Tick .

    private void start_Tick(object sender, EventArgs e)   {       try       {           this.start.Enabled = false;           Lenor lenor = new Lenor();           this.dir = !Directory.Exists(this.label15.Text.ToString()) ? this.label16.Text.ToString() + "\" : this.label15.Text.ToString() + "\";           this.att = this.dir + "audev.txt";           this._id = lenor.id(this.dir);           this.inf.Enabled = true;       } 

Además, cada método demuestra un comportamiento idéntico: cambia el valor Habilitado a falso al principio. El método se ejecuta y luego cambia el valor Habilitado del siguiente objeto a verdadero , lo que activa el siguiente temporizador. El operador usa la variable Enabled para crear algo así como una máquina de estado: si la función no funciona, el mecanismo repite su ejecución hasta que recibe un resultado positivo. El tiempo entre ejecuciones de dos funciones se puede utilizar como un intento de evitar la protección antivirus agregando un retraso.

Ahora, después de describir la estructura de cada método, pasamos al algoritmo de control. La siguiente es una descripción general de los pasos en forma de intercambio de correos electrónicos entre buzones.


Figura 5. Intercambio de correo electrónico

Malvar comprueba la existencia de una ruta específica utilizada para volcar cada uno de los archivos durante la ejecución. Si es posible, use C: \ Users \ Public \ Videos \ , de lo contrario C: \ Documents and Settings \ All Users \ Documents \ como el directorio predeterminado. Tenga en cuenta que la segunda ruta es específica de Windows XP, mientras que la primera ruta es específica de Vista y superior.

Se genera una identificación de 16 bytes concatenando el número de serie del volumen C: y el nombre de usuario; se almacena en el archivo audev.txt .

El gestor de arranque recopila la siguiente información:
- ruta de aplicación actual
- versión del sistema operativo
- directorio del sistema
- dominio de usuario
- nombre del auto
- nombre de usuario
- zona horaria actual
- fecha actual
- una lista de unidades lógicas e información sobre cada una de ellas (modelo, número de serie, etc.)
- listado de los directorios C: \ Archivos de programa \ y C: \ Archivos de programa (x86) \
- lista de procesos

Estos datos se almacenan en el archivo C: \ Users \ Public \ Videos \ si.ini y se envían por carta en el archivo adjunto a través de SMTPS utilizando el puerto predeterminado 465. El cuerpo del mensaje contiene la línea SI (que, posiblemente, significa Información del sistema), el destinatario del mensaje es sym777. g@post.cz . Para todo el intercambio de información, el tema de las cartas se indica como id .

El operador decidió crear varias direcciones de reserva y envía la misma carta a otros dos destinatarios, muy probablemente, en caso de que la dirección principal no funcione. Después de enviar la carta, el gestor de arranque elimina el archivo si.ini .

Durante la primera ejecución del malware, se crea un archivo set.txt con el texto {System_Parametrs = 10} dentro y una entrada en la clave de registro de Windows.


Figura 6. Persistencia en el registro

Se toma una captura de pantalla con el nombre scx.bin de la computadora de la víctima y se envía por correo electrónico adjunto con el texto SC (que puede significar Captura de pantalla) en el cuerpo del mensaje.

Después de enviarlo, el malware se pone en contacto con el buzón kae.mezhnosh@post.cz utilizando el protocolo POP3 a través de SSL (puerto 995) y busca mensajes con un asunto que coincida con el ID . Si existe dicho mensaje y el cuerpo no está vacío, el malware lo descifra y envía un mensaje con okey en el cuerpo a sym777.g@post.cz . El contenido de un mensaje recibido previamente se borra y analiza de la siguiente manera:

 string[] strArray = this._adr.Replace("B&", "").Replace("Db", "").Split('%');       string str1 = strArray[0];       string str2 = strArray[1]; 

Se obtienen dos líneas: la primera es la contraseña y la segunda es el nombre de usuario de la dirección de correo.

Se utilizan nuevas credenciales para conectarse al buzón recibido, buscar en él un mensaje con un tema que coincida con la identificación del malvari y una aplicación con la cadena audev en el nombre del archivo. Si se cumplen ambas condiciones, el malware almacena la aplicación y elimina el mensaje del servidor.

Se envía un registro de mensajes a sym777.g@post.cz , y los mensajes recibidos a través de POP3 provienen del destinatario con los datos de usuario recibidos recientemente.

El esquema de ataque complica la investigación. En primer lugar, si tiene un gestor de arranque con letras, no puede conectarse al buzón que contiene el siguiente paso.

En segundo lugar, si recibe credenciales para el correo, aún no puede obtener la siguiente carga porque se elimina después de la recepción.

Cuando el gestor de arranque escribe con éxito el archivo adjunto en el disco, envía un mensaje por correo con okey2 en el cuerpo y el archivo adjunto l.txt que contiene 090 . El mismo archivo se sobrescribe con ceros, y el malware intenta obtener otro mensaje. Si esto funciona, el archivo l.txt se envía con okey3 en el cuerpo. El contenido del archivo adjunto es el directorio y el nombre del archivo. Malvar mueve el archivo audev a esta dirección. Finalmente, el malware envía un correo electrónico con okey4 en el cuerpo y l.txt en el archivo adjunto. Esto inicia el archivo ejecutable, audev.exe, y comprueba la presencia de la línea audev en la lista de procesos.

   Process.Start(this.rn);   foreach (Process process in Process.GetProcesses())   {       if (process.ProcessName.Contains("audev")) } 

Si se encuentra dicho nombre, se enviará la última letra, que contiene el cuerpo okey5 y l.txt en el archivo adjunto. Finalmente, l.txt y set.txt se eliminan, la clave de registro de Windows creada se elimina y el programa finaliza.

Delphi Mail Downloader


El papel principal del gestor de arranque es evaluar la importancia de un sistema comprometido y, si parece interesante, cargar y ejecutar el último gestor de arranque Zebrocy.

El archivo binario se escribe en Delphi y se empaqueta con UPX. Puede encontrar una definición completa del objeto TForm1 en la sección con sus recursos, que muestra algunos parámetros de configuración utilizados. Las siguientes secciones describen la inicialización, las capacidades y el protocolo de red del gestor de arranque.

Inicialización


Primero, descifra el conjunto de cadenas que son direcciones de correo electrónico y contraseñas. El operador aplica el algoritmo de cifrado AES ECB . Cada línea se descifra en un lugar hexadecimal, donde los primeros cuatro bytes corresponden al tamaño final de la línea descifrada (las líneas descifradas al final pueden contener alguna sangría). El objeto TForm1 contiene dos claves AES: la primera se usa para cifrar datos y la segunda se usa para descifrarlos.

El operador utiliza las direcciones de correo electrónico y las contraseñas para enviar comandos al malvari, así como para obtener información recopilada de la computadora de la víctima. Se aplican los protocolos de comunicación SMTP y POP3, ambos a través de SSL. Para usar OpenSSL, el malware cae y usa dos bibliotecas dinámicas OpenSSL: libeay32.dll (98c348cab0f835d6cf17c3a31cd5811f86c0388b) y ssleay32.dll (6d981d71895581dfb103170486b8614f7f203bdc) .


Figura 7. Propiedades de DLL de OpenSSL

Tenga en cuenta que todos los archivos se descargan en el directorio de trabajo del malware : C: \ Users \ Public \ .

La persistencia se proporciona durante la primera ejecución del malvari a través de la conocida técnica de scripting del script de entrada. Se crea un archivo con el script Registration.bat y se escriben varias líneas desde el objeto TForm1 . El guión final es el siguiente:

 reg add HKCU\Environment /v "UserInitMprLogonScript" /t REG_EXPAND_SZ /d "C:\Users\Public\Videos\audev.exe" /f del C:\Users\Public\Videos\registr.bat exit 

Por último, pero no menos importante, el malware crea una identificación , de la misma manera que en los binarios de Zebrocy descritos anteriormente. Obtiene el nombre de usuario utilizando la API de Windows GetUserNameW y agrega el número de serie de la unidad C: \ al principio.

Las posibilidades


Dado que existen varias condiciones y procedimientos para recopilar información sobre la víctima, la siguiente es una descripción de sus diversas capacidades. La configuración de escaneo se almacena en el objeto TForm1 , donde se agrupan siete posibilidades diferentes para recopilar información de la computadora de la víctima.

Comenzando con un escaneo simple, la primera información que puede obtener el malware está relacionada con archivos con las siguientes extensiones: .docx, .xlsx, .pdf, .pptx, .rar, .zip, .jpg, .bmp, .tiff . Para cada uno de los archivos encontrados en el disco, el malware recibe la ruta completa y la última fecha de modificación. Esta información se cifra utilizando la clave AES, de la que hablamos anteriormente, y se almacena en el archivo 0.txt . Otra exploración está dirigida a las extensiones .dat, .json, .db y, como en el caso anterior, obtiene la ruta completa y la última fecha en que se modificó el archivo. Luego los cifra y los almacena en el archivo 57.txt .

El listado de procesos en ejecución es otra característica de malvari que le permite almacenar información en un archivo 08.txt . Se ve así:

 ======Listing_of_processes======= [System Process] System smss.exe csrss.exe wininit.exe csrss.exe winlogon.exe services.exe lsass.exe […] 

El archivo i.txt recopila información general sobre la computadora de la víctima, así como información sobre el malvari (número de versión y la ruta a lo largo de la cual se ejecuta). Vea el siguiente ejemplo:

 v7.00 C:\Users\Public\Videos\audev.txt ============================================ Log_Drivers: C: fixed; size= 102297 Mb, free=83927 Mb S/N: [redacted] ================================================== OSV: Windows 7 WinType: 32 WinDir: C:\Windows Lang: English (United States) TZ: UTC1:0 Romance Standard Time HostN: [redacted]-PC User: [redacted] ===============S_LIST===================== C:\Program Files\Common Files C:\Program Files\desktop.ini C:\Program Files\DVD Maker C:\Program Files\Internet Explorer C:\Program Files\Microsoft.NET C:\Program Files\MSBuild C:\Program Files\Reference Assemblies C:\Program Files\Uninstall Information C:\Program Files\Windows Defender […] 

El malware puede tomar capturas de pantalla, que se guardan en el formato 2 \ [AAAA-mm-dd HH-MM-SS] -Image_001.jpg , y genera otro archivo 2 \ sa.bin , lleno de una lista de rutas a los archivos de todas las capturas de pantalla capturadas. La última opción es enumerar los componentes de la red y los datos del sistema, el resultado se escribe en 4.txt .

Protocolo de red


El cargador de correo de Delphi es una adición relativamente nueva al kit de herramientas de Zebrocy, proporciona una nueva forma de filtrar datos y recibir comandos del operador. La filtración es bastante simple, pero hace mucho ruido en la red, ya que los archivos cifrados recopilados previamente se envían a través de SMTPS, cada versión del archivo es tres veces mayor.



El asunto del mensaje es la identificación de la víctima, y ​​el archivo se envía como un archivo adjunto con una palabra clave correspondiente al contenido del archivo. Tenga en cuenta que para cada archivo se envía una versión cifrada.



También se envían capturas de pantalla y archivos para ambos escaneos, pero con diferentes palabras clave.




Figura 8. Ejemplo de un mensaje con datos transmitidos

Si bien SMTP se utiliza para la filtración de datos, el archivo binario está conectado a la dirección de correo tomasso25@ambcomission.com a través de POP3 y análisis de mensajes. El cuerpo de la carta contiene varias palabras clave interpretadas por el malware como comandos.



Después de la ejecución, el registro del depurador y el resultado de los comandos (si los hay) se envían de vuelta al operador. Por ejemplo, después de un comando de escaneo, el operador recibe un archivo que contiene una lista de archivos con extensiones coincidentes junto con cada uno de esos archivos.

Si bien este gestor de arranque tiene funciones de puerta trasera, descarga en el sistema un gestor de arranque en Delphi, ya asociado con este grupo, que describimos en un artículo anterior sobre Zebrocy.

Conclusión


En el pasado, ya hemos visto la intersección de Zebrocy y el malware tradicional Sednit. Capturamos a Zebrocy arrojando la puerta trasera insignia de Sednit en el sistema XAgent, por lo que con un alto grado de certeza atribuimos la autoría de Zebrocy a este grupo cibernético.

Sin embargo, el análisis de los archivos binarios reveló errores a nivel del lenguaje, así como el desarrollo, lo que indica un nivel diferente de calificación de los autores. Ambos cargadores de arranque usan protocolos de correo para extraer datos y tienen mecanismos idénticos para recopilar la misma información. Sin embargo, crean mucho ruido en la red y el sistema, creando muchos archivos y enviándolos. En el proceso de analizar el cargador de correo en Delphi, nos pareció que algunas funciones habían desaparecido, pero las líneas aún permanecían en el archivo binario. Este equipo de herramientas lo utiliza el equipo de Sednit, pero creemos que está siendo desarrollado por otro equipo, con menos experiencia en comparación con los creadores de los componentes tradicionales de Sednit.

Los componentes de Zebrocy son una adición al conjunto de herramientas de Sednit, y los eventos recientes pueden explicar el mayor uso activo de los binarios de Zebrocy en lugar de los malvari tradicionales.

Indicadores de compromiso



Nombres de archivo, SHA-1 y detección por productos ESET

1. SCANPASS_QXWEGRFGCVT_323803488900X_jpeg.exe - 7768fd2812ceff05db8f969a7bed1de5615bfc5a - Win32 / Sednit.ORQ
2. C: \ Users \ public \ Pictures \ scanPassport.jpg - da70c54a8b9fd236793bb2ab3f8a50e6cd37e2df
3. C: \ Users \ Public \ Documents \ AcrobatReader. {Exe, txt} - a225d457c3396e647ffc710cd1edd4c74dc57152 - MSIL / Sednit.D
4. C: \ Users \ Public \ Videos \ audev.txt - a659a765536d2099ecbde988d6763028ff92752e - Win32 / Sednit.CH
5.% TMP% \ Indy0037C632.tmp - 20954fe36388ae8b1174424c8e4996ea2689f747 - Win32 / TrojanDownloader.Sednit.CMR
6.% TMP% \ Indy01863A21.tmp - e0d8829d2e76e9bb02e3b375981181ae02462c43 - Win32 / TrojanDownloader.Sednit.CMQ

Correo electrónico

carl.dolzhek17@post.cz
shinina.lezh@post.cz
P0tr4h4s7a@post.cz
carl.dolzhek17@post.cz
sym777.g@post.cz
kae.mezhnosh@post.cz
tomasso25@ambcomission.com
kevin30@ambcomission.com
salah444@ambcomission.com
karakos3232@seznam.cz
rishit333@ambcomission.com
antony.miloshevich128@seznam.cz

Source: https://habr.com/ru/post/437236/


All Articles