Análisis del comportamiento del troyano Pegasus en la red.

El código fuente del troyano bancario Pegasus ha sido publicado recientemente. A pesar de la mención del grupo Carbanak en el nombre del archivo, los investigadores de Minerva Labs negaron la participación del troyano en este grupo y demostraron su participación en el grupo Buhtrap (Ratopak). Dentro del archivo hay una breve descripción del trabajo del troyano, sus códigos fuente, una descripción del sistema de pago bancario y los datos de los empleados de muchos bancos rusos.

La arquitectura del código fuente de este malware es bastante interesante. La funcionalidad se divide en módulos ensamblados en un solo "binpack" en la etapa de compilación. El proceso de compilación también incluye la firma de archivos ejecutables con un certificado del archivo tric.pfx, que no está en el archivo.

No menos curiosa es la actividad de red de Pegasus, que, después de la infección, intenta propagarse dentro del dominio y sabe cómo proxy de datos entre máquinas que utilizan tuberías y el transporte Mailslot. Nos centramos en estudiar las características de la actividad de red del troyano y rápidamente agregamos los detectores de Pegasus al producto PT Network Attack Discovery . Esto permitirá a todos sus usuarios detectar oportunamente la actividad de este troyano y sus modificaciones en su red. En este artículo, daré una descripción detallada de los mecanismos de distribución de red y la interacción entre copias de Pegasus.



Introducción


Una vez en la máquina, el módulo principal InstallerExe inyecta el código en svchost.exe utilizando la técnica Process Hollowing y, después de inicializar los módulos principales, Pegasus inicia varios procesos paralelos:

  1. Replicación de dominio: se dedica a la inteligencia dentro de la red e intenta extenderse a otras máquinas con Windows.
  2. El oyente Mailslot escucha los mensajes de transmisión de correo, a través de los cuales Pegasus envía cuentas minadas. El nombre del espacio se genera en tiempo de compilación.
  3. Pipe Server Listener escucha Windows Pipe con el nombre generado en nombre de la máquina. Estas tuberías se utilizan principalmente para detectar otras copias de Pegasus en la red y su interacción.
  4. Las contraseñas de inicio de sesión periódicamente cada pocos minutos intentan volcar los datos de la cuenta con un módulo de Mimikatz.
  5. Network Connectivity es responsable de la comunicación con el servidor CnC y de los mensajes periódicos.

// start transports which links data with our CB-manager pwInitPipeServerAsync(dcmGetServerCallback()); mwInitMailslotServer(dcmGetServerCallback()); ... // start broadcasting creds to other machines cmStartupNetworkBroadcaster(); 

Replicación de dominio


Uno de los subsistemas en Pegasus es responsable del movimiento lateral en una red de Windows. La distribución se divide en dos pasos importantes:

  1. Detección de autos vecinos.
  2. Intento de replicación a una máquina.

El descubrimiento de máquinas vecinas en un dominio se realiza a través de dos llamadas API:

NetServerEnum, que requiere el servicio del navegador y llamadas a WNetOpenEnum / WNetEnumResource.
Todas las máquinas encontradas en el dominio deben analizarse si ya están infectadas. Pegasus sondea el nombre de la tubería generada cada 200 milisegundos durante más de 20 veces seguidas. Utilizamos este comportamiento anormal como uno de los indicadores de la actividad de Pegaso en el dominio. Al no haber detectado ningún signo de infección, el malware continúa con el siguiente paso: el intento de replicación.

La replicación es la siguiente. Usando las cuentas encontradas (KM) en el host, Pegasus intenta iniciar sesión en las bolas IPC $ y ADMIN $ en la máquina a través de SMB, y si hay acceso a IPC $ y no hay acceso a ADMIN $, entonces Pegasus concluye que es correcto la cuenta es insuficiente y debe marcarse como no válida. Después de obtener acceso a ADMIN $ ball, que es un alias para la carpeta% windir%, el malware intenta determinar la arquitectura de la máquina para poder utilizar el módulo apropiado en el futuro.

El algoritmo de determinación de arquitectura se basa en encabezados de archivos PE en la máquina remota. Como tal archivo, Pegasus intenta leer los primeros 4 kilobytes de notepad.exe de la carpeta% windir%. Un inconveniente obvio de este método es que en Windows Server 2012, el bloc de notas se encuentra en la ruta% windir% \ System32.

Ubicación notepad.exe en Windows 7:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe C:\Windows\notepad.exe 

En Windows Server 2012:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe 

Si no detecta notepad.exe, Pegasus no puede infectar el servidor, incluso si tiene información de cuenta con los derechos necesarios. La simple ausencia de bloc de notas en% windir% puede detener la distribución de Pegasus en Windows Server 2012. El uso de regedit.exe a este respecto es más confiable.

Después de definir con éxito la arquitectura del servidor de destino, Pegasus carga un pequeño gotero RSE (Remote Service Exe) de aproximadamente 10 kilobytes de tamaño, cuya tarea es cargar el binpack desde los módulos de Pegasus a través de la tubería en forma transparente y transferir el control al módulo Shellcode. El nombre del cuentagotas está compuesto de manera pseudoaleatoria y consiste en una cadena de caracteres hexadecimales de 8 a 15 caracteres de longitud. El generador pseudoaleatorio se inicializa según el nombre de la máquina de destino y será el mismo entre arranques para evitar el posible desorden de% windir% con copias anteriores del cuentagotas.



El antivirus verifica la integridad y la posible eliminación por parte del antivirus, luego de lo cual es lanzado por uno de los dos mecanismos implementados: SCM o WMI, y en primer lugar, Pegasus intenta iniciar RSE a través del mecanismo WMI, y solo luego utilizando el Administrador de control de servicios (SCM). Esto se debe a que SCM deja más rastros en los registros de Windows. Los creadores de Pegasus también planearon otros métodos de distribución: Wsh Remote, Powershell remoting, Task Scheduler y un módulo para ejecutar comandos a través de RDP estaba en desarrollo.

Como se mencionó anteriormente, después de un lanzamiento exitoso, el cuentagotas verifica y abre la tubería para escuchar y transfiere el control a la carga útil entrante.



Dado que el método Process Hollowing inyecta el código Pegasus en el proceso svchost.exe, ni el módulo InstallerExe original debe permanecer en el disco en caso de una infección primaria, ni el cuentagotas RSE en caso de distribución. Si el gotero aún es accesible por una ruta conocida, Pegasus lo elimina a su manera:

  1. sobrescribir el contenido del archivo con datos aleatorios;
  2. sobrescribir con datos vacíos (ceros);
  3. renombrar archivo;
  4. eliminación de archivos



Después de una infección exitosa, el proceso de distribución de Replicación de dominio comienza nuevamente.

Trabajos de correo


Después de que Pegasus obtenga acceso a los datos de la cuenta, ya sea desde otra copia de Pegasus o desde el módulo mod_LogonPasswords, comenzará a transmitir datos de EE. UU. Por dominio. La distribución se lleva a cabo utilizando el mecanismo SMB basado en Mailslot, que permite la transmisión unidireccional de una pequeña porción de datos a través de un dominio. La distribución se realiza de acuerdo con un nombre de ranura generado aleatoriamente y para que todas las máquinas infectadas en el dominio puedan enviar y recibir datos con un solo nombre, el generador pseudoaleatorio para nombres se inicializa desde la variable TARGET_BUILDCHAIN_HASH especificada en la configuración durante la compilación.

Dado que el mecanismo de Mailslot impone un límite en el tamaño máximo de paquete, solo se envía un KM a la vez de acuerdo con el principio del último tiempo de envío: entre todos los KM disponibles, el dominio cuya última fecha de envío es la más antigua se envía por dominio.

Los datos en Mailslot no se transmiten en texto claro, sino que se envuelven en tres capas de cifrado XOR, y las claves se transmiten junto con los datos. La primera capa de datos es el sobre NetMessageEnvelope con comprobación de integridad de datos por el algoritmo SHA1, utilizado para todos los datos transmitidos a través de la red local. 4 bytes de datos al comienzo del paquete son la clave, que se cambia mediante desplazamientos de 5 bits a la derecha por ciclo. Dentro del sobre hay una estructura de datos codificada XOR con campos directos de EE. UU. Y la fecha en que se agregaron. La clave de 8 y bytes también se encuentra al comienzo de la estructura, pero se aplica sin compensaciones. Después de decodificar la estructura KM, solo queda deserializar los campos individuales de las estructuras ENC_BUFFER, como el nombre de la computadora, el nombre de dominio, el nombre de usuario y la contraseña. Estos campos están encriptados con una clave de 8 bytes con compensaciones. El script para descifrar el paquete Mailslot y un ejemplo de dicho paquete se pueden encontrar aquí: script , PCAP .

El período para enviar mensajes de Mailslot en la versión de lanzamiento varía de 20 segundos a 11 minutos.

 // some random wait before making next step DbgPrint("going to sleep"); #ifdef _DEBUG // debug - 2-5 s Sleep(rg.rgGetRnd(&rg, 2000, 5000)); #else // release - 20 - 650 s //Sleep(rg.rgGetRnd(&rg, 2000, 65000) * 10); Sleep(rg.rgGetRnd(&rg, 2000, 15000)); #endif 

Además de intercambiar cuentas, el mecanismo Mailslot se utiliza para buscar una máquina infectada con acceso a Internet y para anunciar el acceso a Internet. El sobre NetMessageEnvelope almacena el tipo de mensaje que se envía. El intercambio de datos entre la máquina sin acceso y la máquina con acceso a Internet se realiza a través de las tuberías.

Tuberías


Para la comunicación bidireccional o la transferencia de grandes cantidades de datos, las copias de Pegasus usan tuberías como canal de comunicación. El nombre de la tubería, aunque también es generado por un generador pseudoaleatorio, depende del nombre de la máquina y la construcción y, por lo tanto, permite que las partes del cliente y del servidor usen el mismo nombre.

En la comunicación unidireccional, por ejemplo, al transferir binpack durante la replicación a otra máquina, los datos no se cifran y se transmiten de forma clara. Binpack comienza con una estructura SHELLCODE_CONTEXT con una longitud de 561 bytes.



Durante la transmisión bidireccional, por ejemplo, proxy de datos entre una copia de Pegasus sin acceso a Internet y un servidor CnC, se utiliza la misma estructura de sobre de NetMessageEnvelope con cifrado XOR como en el caso de Mailslot, porque le permite distinguir entre diferentes tipos de mensajes en el campo id.

Arquitectónicamente, la representación de datos se realiza a través de una solicitud para transferir una parte de los datos (PMI_SEND_QUERY), recibir el id de la solicitud en respuesta y consultar el estado de la tarea por id (PMI_CHECK_STATUS_QUERY). Como regla general, otra estructura de envolvente se transfiere como una carga, agregando varias funcionalidades y otra capa de cifrado.

Además, trabajar con tuberías no termina en la interacción entre máquinas infectadas. El módulo mod_KBRI_hd inyecta código en los procesos cmd.exe que intercepta las llamadas MoveFileExW y analiza todos los datos que se copian, ya que esto es parte del proceso de pago. Si el archivo copiado contiene datos que son de interés para los atacantes: datos con pagos, se envía una notificación al servidor CnC. La comunicación entre el módulo mod_KBRI inyectado en cmd.exe y una copia de Pegasus se lleva a cabo dentro de la máquina infectada a través de una tubería cuyo nombre no se genera pero está codificado en el código fuente:

 \.\pipe\pg0F9EC0DB75F67E1DBEFB3AFA2 

La funcionalidad del módulo también incluye la sustitución de cuentas de datos sobre la marcha de acuerdo con la plantilla. Un ejemplo de patrones para buscar en la captura de pantalla.

Tráfico cnc


Una secuencia separada es responsable del intercambio directo de datos con el servidor CnC, que comprueba la cola de fragmentos de datos de procesos internos u otras copias de malware cada pocos minutos y los envía al servidor.

Durante la inicialización del módulo mod_NetworkConnectivity, realiza una comprobación de varias etapas de la conexión de red:

1) Detectar la configuración del servidor proxy e intentar conectarse a www.google.com :

  • En la rama del registro \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Configuración de Internet.
  • Vía WPAD (llame a WinHttpGetProxyForUrl).
  • A través de la configuración del proxy para el usuario actual (llame a WinHttpGetIEProxyConfigForCurrentUser).

2) Verificación de la conexión con los servidores de actualización de Microsoft y los datos devueltos ( authrootseq.txt , authrootstl.cab , rootsupd.exe )

3) Prueba de conexiones HTTPS con una de 6 direcciones:


Solo después de pasar todos los controles, Pegasus cree que tiene el acceso necesario a la red externa y puede anunciar esto a través del dominio Mailslot con un mensaje. Además, Pegasus puede disfrazarse y comunicarse con el servidor CnC solo durante el horario comercial, de 9 a.m. a 7 p.m., hora local.

Pegasus envía fragmentos de datos envueltos en un sobre con el cálculo del hash de la cantidad en forma cifrada usando el cifrado DES en el modo CRYPT_MODE_CBC / PKCS5_PADDING. La clave de cifrado depende solo de la variable durante la compilación y, por lo tanto, podemos descifrar el tráfico entre el malware y el servidor conociendo solo su BUILDCHAIN_HASH. En el código fuente dentro del archivo, esta variable tenía el valor 0x7393c9a643eb4a76. Aquí se puede encontrar un script para descifrar Check-in en el servidor y un ejemplo de dicho paquete: script , PCAP .

Transfiere dicho contenido (estructura INNER_ENVELOPE) al servidor CnC durante el Check-in, o junto con cualquier dato. Inicialmente, hay 28 bytes de un sobre con un campo de longitud y una suma SHA1.



Los mismos datos se transfieren entre máquinas durante la transmisión a través de tuberías, pero se envuelven dentro del sobre NetMessageEnvelope que conocemos con una suma hash y un cifrado XOR.

El operador CnC puede enviar comandos para su ejecución a copias de Pegasus y mensajes con comandos u otros datos, por ejemplo, EID_CREDENTIALS_LIST puede contener sus propias capas de cifrado de campo, como vimos en el ejemplo de las cuentas de difusión.

Detección


En primer lugar, estábamos interesados ​​en detectar la actividad de Pegasus en la red y, después de estudiar cuidadosamente los códigos fuente y ejecutar en el entorno de prueba, descubrimos esas anomalías y artefactos de red que indican claramente la presencia de este complejo malware en la red. Pegasus realmente se puede llamar versátil: utiliza activamente el protocolo SMB para enviar mensajes y establecer comunicación con otras copias, se extiende a otras máquinas y se comunica con el servidor CnC de su propia manera especial. Al instalar una red punto a punto en el dominio, las copias de Pegasus allanan el camino a la red externa y se comunican con el servidor CnC mediante la transmisión de tráfico entre sí. El uso de certificados para firmar archivos ejecutables y el acceso a los recursos de Microsoft y Mozilla durante la verificación de la conexión dificulta la detección de su actividad y detección en el host.

El proyecto de código fuente de Pegasus está bastante bien estructurado y descrito, por lo que en el futuro cercano podemos esperar que otros programas maliciosos tomen prestados partes de su código y que aparezcan modificaciones.

Muchos de los mecanismos para ejecutar comandos de forma remota y buscar datos de la cuenta no se realizaron, los desarrolladores también agregarían la capacidad de cambiar el código shell durante la implementación sobre la marcha. Y estas no son todas sus ideas.

Hemos desarrollado varias firmas para PT NAD e IDS Suricata, que nos permiten identificar la actividad de red específica de Pegasus en diferentes etapas, comenzando desde los primeros segundos de su actividad. Puede encontrar firmas abiertas para IDS de Suricata en nuestro github y Twitter , que llegarán automáticamente a su Suricata si utiliza el mecanismo de actualización de actualización de Suricata.

Puede ver cómo funcionan las firmas para la actividad de Pegasus en la captura de pantalla a continuación. Este es nuestro nuevo producto PT Network Attack Discovery que identifica incidentes y ayuda a investigarlos:



Además, se pueden utilizar los siguientes indicadores de compromiso (IC) para la detección:

  MAILSLOT \ 46CA075C165CBB2786 
 pipe \ pg0F9EC0DB75F67E1DBEFB3AFA2

 hxxp: //denwer/pegasus/index.php
 hxxp: //mp3.ucrazy.org/music/index.php
 hxxp: //support.zakon-auto.net/tuning/index.asp
 hxxp: //video.tnt-online.info/tnt-comedy-tv/stream.php 

Publicado por Cyril Shipulin de @attackdetection, Twitter | Telegrama

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


All Articles