COATHANGER (Chinese FortiGate RAT)
Se ha descubierto la operación de un nuevo troyano de acceso remoto (RAT) diseñado para infectar y comprometer equipos FortiGate.
Este troyano no explota vulnerabilidades Zero-Day, es un second-stage malware que se oculta asimismo modificando variables del sistema, no es posible erradicarlo actualizando el Firmware ni reiniciando los equipos.
La MIVD y la AIVD se refieren a este RAT como COATHANGER por una frase peculiar que el malware utiliza para encriptar la configuración en el disco: “She took his coat and hung it up”. Este RAT lo asocian, con mucha certeza, a actores maliciosos impulsados por gente de la República de China, ya que, se enfatiza mucho que esta operación no se respalda por si sola, derivado a la complejidad y al nivel técnico del malware.
- Actividad Maliciosa
Los atacantes son bien conocidos por liderar campañas para explotar vulnerabilidades del tipo 0-Day y/o n-day1. Tienen un alto ritmo operativo, incluso abusan de fallos recién parchados por los fabricantes de las tecnologías.
Para este incidente los actores aprovecharon la vulnerabilidad identificada como CVE[1]2022-42475 que afecta a los equipos FortiGate utilizando una conexión ofuscada2. El second-stage malware es descargado desde un host remoto temporal.
Aunque el ataque inicia explotando dicha vulnerabilidad, es posible que se utilice cualquier otra, ya sea reciente o futura.
Después de comprometer el equipo, los atacantes inician un reconocimiento y obtiene una lista de usuarios del servidor del Directorio Activo (AD). De esta manera pueden garantizar su acceso como backdoor.
- Características Técnicas
COATHANGER provee acceso al equipo comprometido después de su instalación. Su implantación estable conexión por SSL periódicamente a un servidor de Command & Control, de esta manera proporciona un BusyBox Reverse Shell4. El malware es persistente, ya que se recupera después de cada reboot inyectando un respaldo de si mismo en los procesos responsables del reinicio del sistema. A su vez, el programa malicioso sobrevive a las actualizaciones del Firmware, incluso pueden estar infectados aquellos equipos que están completamente parchados, si es que fueron comprometidos antes de su última actualización.
El malware es sigiloso, es difícil de detectar usando la línea de comandos del equipo, esto se debe a que se oculta asimismo dentro de las variables del sistema si es que se manda a llamar. Esto se logra remplazando las variables por cualquier proceso que se ve obligado a cargar el preload.so.
- Comportamiento
COATHANGER arroja los siguientes archivos:
/bin/smartctl or /data/bin/smartctl
/data2/.bd.key/authd
/data2/.bd.key/httpsd
/data2/.bd.key/newcli
/data2/.bd.key/preload.so
/data2/.bd.key/sh
/lib/liblog.so
Durante la ejecución algunos de estos archivos son copiados en otras locaciones, pero después son eliminados tras finalizar la carga. Nótese que, el nombre de los archivos ocultos (.bd.key) varia sobre diferentes muestras.
Para mas detalle se puede revisar el boletín emitido:
https://www.ncsc.nl/documenten/publicaties/2024/februari/6/mivd-aivd-advisory-coathanger-tlp-clear
- Detección
Método CLI:
Se recomienda acceder al CLI por medio de la interfaz web en lugar de la consola serial o Tiempo de modificación:
Se debe validar si el archivo /bin/smartctl o el archivo /data/bin/smartctl existe utilizando el comando:
fnsysctl ls -la /bin
fnsysctl ls -la /data/bin
Si el smartctl fue modificado últimamente sin estar asociado a algún archivo es probable que el binario ha sido modificado. Esto sirve como primer indicador de que el equipo ha sido infectado por COATHANGER u otro malware.
o TCP Sockets
El siguiente comando muestra una lista de los TCP Sockets activos (Similar a netstat):
Diagnose sys tcpsock
Mientras que el equipo FortiGate este conectado a internet y el malware este activo, la conexión de salida aparecerá en los resultados. Esto también despliega el numero del proceso y el nombre de uno de los procesos relacionados con la infección, así como la dirección IP y el puerto escucha del servidor C25.
Esta versión específica del malware usa el proceso llamado httpsd para ofuscarse asimismo. Por lo tanto, cualquier conexión sospechosa hacia el exterior desde un proceso llamado httpsd es un fuerte indicador de la presencia de COATHANGER u otro malware:
:->:-
>state=established err=0 socktype=1 rma=0 wma=0
fma=0 tma=0 inode= process=/httpsd
o Ubicación inusual en el proceso httpsd:
Todos los procesos pueden ser listados utilizando el comando:
fnsysctl ps
Corriendo este otro comando regresa todos los PIDs6 que son llamados httpsd:
diagnose sys procesos pidof httpsd
Los PIDs de los procesos que tienen conexiones sospechosas pueden ser utilizar como punto de partida para analizar los comportamientos:
diagnose sys process dump
Cuando los procesos tienen un GID establecido a 90 el equipo ya ha sido infectado por COATHANGER u otro malware.
Cuando el proceso incluye entradas que fueron borradas relacionados con /data2/httpsd o con entradas /data2/.bd.key/preload.so, el equipo ya a sido infectado por COATHANGER.
Maps:
0040.....-0040..... .... 0000.... b3:.. .....
/data2/httpsd (deleted)
[...]
7f90.....-7f90..... .... 0000.... b3:.. .....
/data2/.bd.key/preload.so
[...]
Nótese que la locación esta oculta para herramientas como fnsysctl. Por lo tanto, ejecutar fnsysctl ls -la /data2/.bd.key resultara en un mensaje de error que indica “No existe el archivo o directorio”
o Procesos eliminados de PID1:
Preload.so es inyectado en PID1 para ganar persistencia. Esto puede ser detectado haciendo un dump a la memoria del proceso 1 usando el comando:
diagnose sys process dump 1
Si la memoria contiene entradas eliminadas relacionadas a /lib/preload.so, esto es un fuerte indicador de que el equipo ha sido comprometido por COATHANGER u otro malware:
Maps:
[...]
7f7ff.....-7f7ff..... .... 0000.... 00:.. .....
/lib/preload.so (deleted)
[...]
Método JA3:
COATHANGER implanta comunicaciones con un servidor C2 usando TLS. Esta sesión TLS deja una huella con el JA3-HASH: 339f6adf54e6076d069dcaac54fddc25
Este Hash es una huella para conexiones originadas desde un FortiGate que soportan encriptación y algoritmos hashing para TLS.
Método YARA:
Se adjunta dos muestras de YARA Rules para su detección en la parte final del boletín.
Versiones Afectadas
FortiOS versión 7.2.0 a la 7.2.2
El ataque inicia al explotar la vulnerabilidad CVE-2022-42475 identificada como FG-IR[1]22-398 por FortiGuard Labs. Es un heap-based buffer overflow vulnerability3 que afecta a las conexiones SSL-VPN de FortiOS, permite a un atacante remoto no autenticado ejecutar código o comandos arbitrarios:
FortiOS versión 7.0.0 a la 7.0.8
FortiOS versión 6.4.0 a la 6.4.10
FortiOS versión 6.2.0 a la 6.2.11
FortiOS versión 6.0.0 a la 6.0.15
FortiOS versión 5.6.0 a la 5.6.14
FortiOS versión 5.4.0 a la 5.4.13
FortiOS versión 5.2.0 a la 5.2.15
FortiOS versión 5.0.0 a la 5.0.14
FortiOS-6K7K versión 7.0.0 a la 7.0.7
FortiOS-6K7K versión 6.4.0 a la 6.4.9
FortiOS-6K7K versión 6.2.0 a la 6.2.11
FortiOS-6K7K versión 6.0.0 a la 6.0.14
FortiProxy versión 7.2.0 a la 7.2.1
FortiProxy versión 7.0.0 a la 7.0.7
FortiProxy versión 2.0.0 a la 2.0.11
FortiProxy versión 1.2.0 a la 1.2.13
FortiProxy versión 1.1.0 a la 1.1.6
FortiProxy versión 1.0.0 a la 1.0.7
Recomendaciones
El equipo de respuesta a incidentes de Países Bajos recomienda lo siguiente:
Si cree que ha sido afectado por el malware COATHANGER, asume lo siguiente:
- El actor puede haber comprometido otros hosts accesibles a través del dispositivo FortiGate, así como cualesquiera dispositivos más allá de estos.
- Existe una mayor probabilidad de que se adopten medidas más selectivas, actividad práctica con el teclado, es decir, el incidente continúa más allá de la focalización oportunista, especialmente durante más tiempo tiempos de permanencia.
- Se recomienda seguir los siguientes pasos:
1. Aislar inmediatamente los dispositivos FortiGate afectados.
2. Recopile y revise registros, datos y artefactos relevantes de los dispositivos comprometidos, extraer imagen del dispositivo para un análisis más detallado del ataque.
3. Considere ponerse en contacto con un tercero especializado en respuesta al incidente. Asistencia en el seguimiento de la incidente ayuda a garantizar que el actor malicioso sea erradicado de la red.
4. Informar del incidente al NCSC de los Países Bajos.
- Remover la infección
La única manera de remover por completo el malware involucra el formatear el equipo y reinstalando y reconfigurando el equipo.
Actualizar o reiniciar los equipos FortiGate no remueve la infección.
- Medidas preventivas
El equipo de respuesta a incidentes de Países Bajos otorga las siguientes medidas preventivas:
- Instale los parches de seguridad más recientes del proveedor en dispositivos con acceso a Internet tan pronto como sea posible.
- Implementar las mejores prácticas de seguridad en el dispositivo.
- Antes de agregar o habilitar funciones de Internet a dispositivos, ejecutar un análisis de riesgo.
- Restringir el acceso a Internet desde los dispositivos conectados a Internet desactivando servicios innecesarios y puertos y desactivar el acceso a la gestion interfaz desde Internet.
- Supervisar los registros de eventos en busca de actividad anormal, como inicios de sesión fuera del horario laboral, inusuales o, conexiones externas inesperadas y no autorizadas, cambios de configuración en el dispositivo.
- IOCs
SHA256
ibpe.so | 50451bb5b6d68115695a6cb277839a6dd2bad8f70bdb8b79670b18dcde 188965 |
smartctl | 4519baebba73827e2b33f36f835d6cb704755abf1312d8d197be635f4d9f fade |
authd | f40c04fb9e2d4157a0bc753925dbc5f757feb77cdd22f90fedf3cc5e09514 3bc |
httpsd | 3ed99aad5922744b6a75ea90ea6ece81ba0d8eb9935aec38b897e44ac 3b36c35 |
newcli | 2acc6a2a931db63fe3a875780f00192a60955c9794df68fe0ace0012d30 9b04f |
preload.so | 1c437dc9e929669e5a65a1c70afb3107fba471afb9ad35e3848334c9332 f2b59 |
sh | dcd9a5af1c6297ed1a66c851efa305000335d8ade068ba515125a6612f1 d5300 |
liblog.so / ld.so.prelo ad |
a79f80158ebbf9e34f6a7ec86b564de2fbee783fe6c1e20eefe2832226e2f 827 |
packfile | 4591b4fb1c93c27203b36c773597fd3f885338ad7641dcebf8ed2395acdf 4a5f |
ld.so.prelo ad |
80baadc163ab14128a8d3f65de093a400f5ae8e27ec979918cf065cea38 af7f8 |
preload.so | 45fc722b9959384fa46be673c246c9fc94491898a9b1aef6b4a408d81e6f ed0f |
newcli | 47501cebf0b4ffbf5171d811c1517ea4fce178d925fcc4a3b3057be211add 88b |
httpsd | 2a5ea4b166163bf028c4f3c8d4dc1cd6788e991b7300b5ea948e38ec4f6 ac8fd |
packfile | d2ba18a8b851b87163e42807a3541d17b272b679045d2de00364a7189 73cb5d4 |
ld.so.prelo ad |
bdf838ca2268c6a33718c3682a03118213652903568d66fba362d3ce18 b4b4cf |
sh | 218a64bc50f4f82d07c459868b321ec0ef5cf315b012255a129e0bde5cc8 0320 |
preload.so | 7b0709ec1f6e0eda3205a4ebdafbd2484f0590bbfe6ddd7c82d979f0f471 e664 |
newcli | 7fba5ab17972daa6250f3097c5254c4cf0e5e19889e10c02307f73c7481b 4d5e |
httpsd | ce2d55a794bd7f41218796ef4a2cfab9707e8a5e8e971aa02ac8ff908b5f 02f |
authd | 01942a2b1b64446f8bf332004f8f875e66924a8405ac049fd0bb8d03c992 fba6 |
YARA RULES:
rule COATHANGER_beacon
{
meta:
description = "Detects COATHANGER beaconing code (GET / HTTP/2\nHost: www.google.com\n\n)"
malware = "COATHANGER"
author = "NLD MIVD - JSCU"
date = "20240206"
strings:
$chunk_1 = {
48 B8 47 45 54 20 2F 20 48 54
48 89 45 B0
48 B8 54 50 2F 32 0A 48 6F 73
48 89 45 B8
48 B8 74 3A 20 77 77 77 2E 67
48 89 45 C0
48 B8 6F 6F 67 6C 65 2E 63 6F
}
condition:
uint32(0) == 0x464c457f and filesize < 5MB and
any of them
}
rule COATHANGER_files
{
meta:
description = "Detects COATHANGER files by used filenames"
malware = "COATHANGER"
author = "NLD MIVD - JSCU"
date = "20240206"
strings:
$1 = "/data2/"
$2 = "/httpsd"
$3 = "/preload.so"
$4 = "/authd"
$5 = "/tmp/packfile"
$6 = "/smartctl"
$7 = "/etc/ld.so.preload"
$8 = "/newcli"
$9 = "/bin/busybox"
condition:
(uint32(0) == 0x464c457f or uint32(4) == 0x464c457f)
and filesize < 5MB and 4 of them
}
Referencias
Fuente NCSC: https://www.ncsc.nl/documenten/publicaties/2024/februari/6/mivd-aivd-advisory-coathanger-tlp-clear
1. n-day: Vulnerabilidades detectadas y publicadas
2. Conexion Ofuscada: Conexion que se encubre.
3. CWE-122: Una condición de desbordamiento del montón es un desbordamiento del búfer, donde el búfer que se puede sobrescribir se
asigna en la porción de memoria del montón, lo que generalmente significa que el búfer se asignó mediante una rutina como malloc().
4. BusyBox Reverse Shell: Un binario con aplicaciones conglomeradas que se conecta a un equipo remoto.
5. C2: Command and Control
6. PIDs: Identificador del proceso.