Malware GobRAT escrito en lenguaje Go dirigido a enrutadores Linux – JPCERT/CC Eyes
JPCERT/CC ha confirmado ataques que infectaron enrutadores en Japón con malware alrededor de febrero de 2023. Este artículo de blog explica los detalles del ataque confirmado por JPCERT/CC y el malware GobRAT, que se utilizó en el ataque.
Flujo de ataque hasta la ejecución de malware
Inicialmente, el atacante apunta a un enrutador cuya WEBUI está abierta al público, ejecuta scripts posiblemente utilizando vulnerabilidades y finalmente infecta GobRAT. La Figura 1 muestra el flujo del ataque hasta que GobRAT infecta el enrutador.
Figura 1: Flujo de ataque
Secuencia de comandos del cargador funciona como un cargador y contiene funciones como generar varios scripts y descargar GobRAT. La clave pública SSH, que se supone que se utiliza para la puerta trasera, está codificada en el script. Además, desde Secuencia de comandos del cargador utiliza crontab para registrar la ruta del archivo de Iniciar guión para la persistencia, GobRAT no tiene tal función. las funciones de Secuencia de comandos del cargador son como sigue:
- Deshabilitar la función de firewall
- Descargue GobRAT para la arquitectura de la máquina de destino
- Crear Iniciar guión y hacerlo persistente
- Crear y ejecutar Guión demonio.
- Registre una clave pública SSH en /root/.ssh/authorized_keys
La figura 2 es el código de Iniciar guión que ejecuta GobRAT. El script es único porque escribe la hora de inicio en un archivo llamado reiniciar.log. Además, este script ejecuta GobRAT con el nombre de archivo apaciguado para que parezca un proceso legítimo.
Figura 2: Iniciar secuencia de comandos
La figura 3 es el código de Guión demonio. Este script comprueba si Iniciar guión se ejecuta o no cada 20 segundos, y si no, inicia el script. Este código posiblemente ha sido preparado en caso de Iniciar guión se termina inesperadamente.
Figura 3: Script Daemon
Descripción general de GobRAT
GobRAT es una RAT escrita en lenguaje Go y se comunica con el servidor C2 a través de TLS y ejecuta varios comandos. Incluye la serie UPX versión 4 y se han confirmado muestras para varias arquitecturas como ARM, MIPS, x86 y x86-64. GobRAT realiza las siguientes comprobaciones al inicio y mantiene la información dentro de la muestra.
- Dirección IP y dirección MAC de sí mismo.
- Tiempo de actividad por comando de tiempo de actividad
- Estado de comunicación de la red por /proc/net/dev
Las siguientes secciones describen el método de comunicación, el método de cifrado y los comandos que se ejecutarán de GobRAT.
Método de comunicación
GobRAT utiliza TLS para enviar y recibir datos con su servidor C2. La Figura 4 muestra un ejemplo de comunicación con el servidor C2. Los primeros 4 bytes indican el tamaño de los datos y el resto es gob.[1] datos. gob es un protocolo de serialización de datos disponible solo en idioma Go. GobRAT usa gob para recibir comandos y enviar los resultados de la ejecución del comando.
Figura 4: Ejemplo de contenido de comunicación
GobRAT define los datos de gob como una estructura PAQUETE en el ejemplo de la siguiente manera.
type PACKAGE struct { Type uint8 // CommandID BotCount uint16 // Parameter BotList []string // Command Parameter ParamLength uint16 // Length of Param Param map[string]string // Command Parameter Content []uint8 // Command Parameter, Command Execution Result, etc }
Los campos utilizados son diferentes según el tipo de comando, y se admiten matrices de cadenas, mapas y datos binarios para que se puedan pasar varios tipos de parámetros. Además, si bien los datos binarios se pueden almacenar en el Contenido de la estructura PACKAGE, los datos del mapa con cadena se convierten en datos binarios codificándolos con la función json.Marshal. La estructura PACKAGE se usa de varias maneras según el comando, como almacenar los datos en Contenido o convertir la estructura definida en datos binarios de la misma manera y almacenarlos en Contenido.
Método de cifrado
Las cadenas como los comandos C2 y Linux se cifran y almacenan en la muestra. La Figura 5 muestra la función de descifrado de GobRAT. El modo AES128 CTR se utiliza para descifrar cadenas, y la clave y el IV están codificados en la muestra. La misma clave (050CFE3706380723433807193E03FE2F) y IV («12345678abcdefgh») se utilizan en todas las muestras confirmadas. Además, como se muestra en la Figura 6, los códigos que probablemente hayan sido desarrollados por el atacante, como esta función de descifrado, tienen una estructura de carpetas única como aaa.com/bbb/me~.
Figura 5: Función de descifrado de cadenas
Figura 6: Estructura de carpetas característica
Comandos ejecutados
GobRAT tiene 22 comandos que se ejecutan mediante los comandos del servidor C2 y hemos identificado los siguientes comandos. Dado que el malware se dirige a los enrutadores, puede ver que la mayoría de las funciones están relacionadas con la comunicación, como frpc, calcetines5 y la reconfiguración de C2. Consulte el Apéndice A para obtener detalles sobre los comandos.
- Obtener información de la máquina
- Ejecutar shell inverso
- Leer/escribir archivos
- Configurar nuevo C2 y protocolo
- Calcetines iniciales5
- Ejecutar archivo en /zone/frpc
- Intente iniciar sesión en los servicios sshd, Telnet, Redis, MySQL y PostgreSQL que se ejecutan en otra máquina
Herramientas de análisis GobRAT
Dado que GobRAT usa gob para comunicarse, si desea emular su comunicación con C2 para verificar comandos, debe crear un programa usando el lenguaje Go. Nuestra herramienta de emulación C2 que admite el análisis GobRAT está disponible en GitHub. Descárguelo de la siguiente página web para su análisis.
JPCERTCC/aa-tools/GobRAT-Analysis – GitHub
https://github.com/JPCERTCC/aa-tools/tree/master/GobRAT-Analysis
Para concluir
En los últimos años, se han confirmado diferentes tipos de malware que utilizan el lenguaje Go, y esta vez se confirmó que el malware GobRAT utiliza gob, que solo puede ser manejado por el lenguaje Go, para la comunicación. Tenga cuidado continuamente con el malware que infecta los enrutadores, no limitado a GobRAT, ya que son difíciles de detectar. Consulte el Apéndice B para conocer el C2 del malware, el Apéndice C para conocer el valor hash del script y el Apéndice D para conocer el valor hash del malware.
Yuma Masubuchi
Traducido por Takumi Nakano.
Apéndice A: Comandos
Tabla A: comandos GobRAT
Valor | Contenido |
---|---|
0x0 | Actualice los datos json contenidos en malware y obtenga resultados de actualización |
0x1 | Recuperar datos json contenidos en malware |
0x3 | Iniciar shell inverso |
0x4 | Fin de la conexión de carcasa inversa |
0x6 | Confirmación de conexión de shell inversa |
0x7 | Ejecutar comando de shell para demonio |
0x8 | Ejecutar comando de shell |
0xD | Leer/escribir archivo especificado |
0x10,0x11 | Leer/escribir archivo especificado |
0x16 | Obtenga diversa información de la máquina, como el comando df |
0x17 | Establecer un nuevo canal de comunicación para TCP |
0x18 | Ejecute el proxy SOCKS5 con el puerto y la contraseña especificados |
0x19 | Ejecute el proxy SOCKS5 en el puerto especificado |
0x1a | Nueva configuración del canal de comunicación para UDP |
0x1b | Ejecute frpc después de ejecutar el proxy SOCKS5 en el puerto 5555 |
0x1f | Comprobar la existencia del archivo especificado |
0x25 | Intentos de inicio de sesión para SSH, telenet, redis, mysql, postgres |
0x27 | Configuración de gorutina especificada |
0x2a | Escanear al servicio HTTP/HTTPS de la IP especificada |
0x2D | Ataque de diccionario al servicio HTTP/HTTPS de IP especificada |
0x30 | Configuración C2 relacionada |
0x31 | Ataques DDoS en SYN, TCP, UDP, HTTP, ICMP |
Apéndice B: C2
- https://su.vealcat.com
- http://su.vealcat.com:58888
- https://ktlvz.dnsfailover.net
- http://ktlvz.dnsfailover.net:58888
- su.vealcat.com
- ktlvz.dnsfailover.net
- wpksi.mefound.com
Apéndice C: Valores hash de los scripts
- 060acb2a5df6560acab9989d6f019fb311d88d5511f3eda0effcbd9fc6bd12bb
- feaef47defd8b4988e09c8b11967e20211b54e16e6df488780e2490d7c7fa02a
- 3e44c807a25a56f4068b5b8186eee5002eed6f26d665a8b791c472ad154585d1
- 60bcd645450e4c846238cf0e7226dc40c84c96eba99f6b2cffcd0ab4a391c8b3
Apéndice D: Valores hash del malware
- a8b914df166fd0c94106f004e8ca0ca80a36c6f2623f87a4e9afe7d86b5b2e3a
- aeed77896de38802b85a19bfcb8f2a1d567538ddc1b045bcdb29cb9e05919b60
- 6748c22d76b8803e2deb3dad1e1fa7a8d8ff1e968eb340311fd82ea5d7277019
- e133e05d6941ef1c2e3281f1abb837c3e152fdeaffefde84ffe25338fe02c56d
- 43dc911a2e396791dc5a0f8996ae77ac527add02118adf66ac5c56291269527e
- af0292e4de92032ede613dc69373de7f5a182d9cbba1ed49f589ef484ad1ee3e
- 2c1566a2e03c63b67fbdd80b4a67535e9ed969ea3e3013f0ba503cfa58e287e3
- 98c05ae70e69e3585fc026e67b356421f0b3d6ab45b45e8cc5eb35f16fef130c
- 300a92a67940cfafeed1cf1c0af25f4869598ae58e615ecc559434111ab717cd
- a363dea1efda1991d6c10cc637e3ab7d8e4af4bd2d3938036f03633a2cb20e88
- 0c280f0b7c16c0d299e306d2c97b0bff3015352d2b3299cf485de189782a4e25
- f962b594a847f47473488a2b860094da45190738f2825d82afc308b2a250b5fb
- 4ceb27da700807be6aa3221022ef59ce6e9f1cda52838ae716746c1bbdee7c3d
- 3e1a03f1dd10c3e050b5f455f37e946c214762ed9516996418d34a246daed521
- 3bee59d74c24ef33351dc31ba697b99d41c8898685d143cd48bccdff707547c0
- c71ff7514c8b7c448a8c1982308aaffed94f435a65c9fdc8f0249a13095f665e
Referencias
[1] montones de datos
https://go.dev/blog/gob