El malware Capoae toma impulso: utiliza diferentes vulnerabilidades y tácticas para propagarse
Introducción
Recientemente, las noticias se han hecho eco de la proliferación de malware de criptominería comprimido con UPX y escrito en el lenguaje de programación Golang cuyo objetivo son aplicaciones web y sistemas Linux. La táctica principal del malware es propagarse aprovechando los sistemas vulnerables y las credenciales administrativas poco seguras. Una vez infectados, estos sistemas se utilizan para extraer criptomonedas. A la muestra analizada en esta publicación la he bautizado "Capoae" por la salida de código que recibí en la terminal.
Casi al mismo tiempo que se propagaban las noticias sobre estos ataques de malware de criptominería, los señuelos del equipo de respuesta a incidentes e inteligencia en seguridad (SIRT) se infectaron con malware PHP que llegó a través de una puerta trasera de un complemento de WordPress llamado "download-monitor".
El complemento "download-monitor" se había instalado después de que se adivinaran las credenciales de administración de WordPress poco seguras del señuelo. También se descargó un archivo binario de 3 MB comprimido con UPX escrito en Golang en /tmp. Al examinarlo, era evidente que el malware tenía cierta funcionalidad de descifrado y un archivo cifrado almacenado en otro directorio.
Cuando se revisaron los registros de acceso del señuelo con más detenimiento, se detectó que se había realizado una solicitud con una carga oculta enviada en un parámetro GET.
Este argumento dw está codificado con los sistemas rot13 y base64. Una vez que el valor base64 vuelve a su estado original y se descodifica mediante rot13 se convierte en:
La carga consta de dos partes: la ubicación (url) del archivo que se descargará y la ruta (dir) para colocarlo en el sistema de archivos de la máquina infectada.
El archivo wp.txt se descarga, se cambia el nombre a wp.php y una vez ejecutado, se elimina. Sin embargo, no pude rescatar el contenido de este archivo debido a las limitaciones de mi sistema de registro. El nombre del archivo ProductList.php también se cambia añadiendo una cadena aleatoria al final del nombre para evitar que los transeúntes puedan encontrarlo. La cadena parece generarse con la siguiente función bash que utiliza un md5sum de la salida del comando de fecha.
echo $(date|md5sum|awk -v n="$(date +%s)" '{print substr($1,1,n%7+6)}')
El archivo ./wp-content/plugins/download-monitor/src/Libs/uaparser/regexes.php es un shell web cifrado que toma un parámetro como un argumento "dw". Se le llama desde el script principal ProductList.php, donde la carga dw se descifra y se ejecuta. La clave de descifrado de la carga se basa en la cadena User-Agent de la solicitud.
Además, se agrega otro shell web como puerta trasera en ./wp-admin/includes/class-wp-page-n3RkIo.php
Contiene un shell web simple que se puede utilizar para cargar archivos:
Al conectarse al script ProductList.php con un navegador web y la cadena User-Agent correcta se genera la siguiente interfaz de shell web:
Qué hay en el archivo binario
Después de descomprimir el malware con "upx -d", se puede observar la estructura binaria real. Al examinar dicha estructura, salta a la vista que incluye funciones dirigidas a un conjunto de vulnerabilidades conocidas y marcos de gestión de contenido. A continuación, se enumeran algunas de las funciones más interesantes. En función de los nombres de las funciones y el desmontaje en R2, podemos hacernos una idea de lo que está pasando.
El malware de Golang está registrado en VirusTotal con fecha de origen del 08/09/2021:
$ ./redress -compiler Capoae
Versión del compilador: go1.15.4 (2020-11-05T21:21:32Z)
Con Redress, observamos que el archivo binario se compiló con Go v1.15.4.
Y si buscamos un poco más, también encontramos el código de explotación para CVE-2020-14882, que se dirige a la plataforma Oracle WebLogic Server con una ejecución de código remoto (RCE) no autenticada.
El archivo binario utiliza una lista de credenciales de inicio de sesión poco seguras para forzar su acceso a los sistemas que ejecutan SSH. Una vez autenticado correctamente, el malware instala una clave pública en .ssh/authorized_keys.
A continuación, se muestra otro ejemplo de código de explotación, esta vez dirigido a CVE-2018-20062, una vulnerabilidad de ejecución de código remoto conocida y muy explotada en ThinkPHP.
Esta sección contiene otro mecanismo de difusión. En este caso, el malware intenta forzar el uso de pares de credenciales poco seguros contra las instalaciones de WordPress descubiertas a través de la API XMLLRPC de WordPress.
Desmontaje parcial de las funciones que se dirigen a instalaciones de Jenkins para CVE-2019-1003029 y CVE-2019-1003030, ambas vulnerabilidades de RCE.
El código guard.go mantiene la persistencia al agregar una entrada a crontab.
En la captura de pantalla anterior, se muestra una lista de funciones vinculadas al archivo xmrig_linux_amd64.go. Estas son enlaces de shell que exponen métodos para la interconexión de la criptominería. La campaña de minería utiliza el popular software de minería XMRig, pero es el malware quien se encarga de iniciarlo y supervisarlo en última instancia.
El malware también incluye un escáner de puertos que se utiliza para buscar servicios y puertos abiertos. Se dirige a direcciones IP generadas de forma aleatoria y comprueba si hay puertos contra los que pueda iniciar sus diferentes cargas de explotación.
Detonación del malware
Tras la ejecución del archivo binario de Golang, apareció una única y confusa cadena en el terminal.
Si observamos un rastreo de la ejecución, podemos ver cuáles serían los bytes no imprimibles del texto si mi terminal admitiese caracteres en cirílico.
La salida es realmente "Сканирование", que en ruso significa "exploración". Este es el motivo por el que he decidido utilizar solo los caracteres ASCII que aparecían en mi terminal tras la detonación inicial y denominar "Capoae"a la muestra de malware.
Tras ejecutar el malware Capoae, este muestra técnicas bastante inteligentes de persistencia. El malware elige primero una ruta de sistema aparentemente legítima de una pequeña lista de ubicaciones en un disco donde es probable que encuentre archivos binarios del sistema. A continuación, genera un nombre de archivo aleatorio de seis caracteres. Utiliza ambos elementos para copiarse en la nueva ubicación del disco y después autoeliminarse.
Una vez hecho esto, inyecta o actualiza una entrada Crontab que activará la ejecución de este archivo binario recién creado. Cuando se produce esta detonación, todo el proceso se inicia de nuevo. Esto hace que acabar con la infección se parezca un poco al juego de aplastar al topo, ya que se lucha contra una infección o carga en constante movimiento.
Entre los exploits RCE comunes para Oracle WebLogic, como CVE-2020-14882 y CVE-2018-20062 que afectaron a ThinkPHP, observamos que el marco de gestión de contenido de WordPress es un objetivo específico. El malware se aprovecha de credenciales de inicio de sesión poco seguras para obtener acceso.
El tema editable del exploit escribió un pequeño script PHP para footer.php en el tema twentynineteen que descargó el archivo ldr.sh y lo ejecutó. La cadena user-agent utilizada es el método a través del cual se infectó el host. En la siguiente captura de pantalla, vemos que la cadena user-agent está establecida en "brute_wordpress_admin".
Si observamos la función exploitUploadPlugin, vemos que puede instalar un complemento mediante la interfaz del panel de administración. En la figura 10 se resaltan algunas de las cadenas de parámetros de instalación del complemento que aparecen en el desmontaje.
Por supuesto, el propósito de este malware es obtener criptomonedas. A continuación, se muestra el archivo de configuración del grupo de criptominería, que revela que los agentes maliciosos utilizan un grupo de minería alojado en ntup.net, una empresa rusa de servidores privados virtuales (VPS).
Conclusiones finales
Las campañas de criptominería siguen evolucionando. El uso de varias vulnerabilidades y tácticas de la campaña Capoae muestra claramente la intención de estos operadores de introducirse en tantas máquinas como les sea posible.
La buena noticia es que las técnicas que recomendamos a la mayoría de empresas para mantener las redes y los sistemas seguros se aplican también en este caso. No utilice credenciales poco seguras o predeterminadas para los servidores o las aplicaciones implementadas. Asegúrese de mantener actualizadas las aplicaciones implementadas con los parches de seguridad más recientes y de comprobarlas periódicamente.
Vigile el consumo de recursos del sistema y si este es más alto de lo normal. Esté atento a procesos de ejecución inesperados o extraños, artefactos sospechosos (archivos, entradas crontab, claves SSH, etc.), entradas de registro de acceso sospechosas, etc. Todo ello puede ayudarle a identificar las máquinas atacadas. A continuación, encontrará una lista de indicadores de riesgo (IoC) que se puede utilizar para revisar los sistemas de archivos y el tráfico de red en busca de posibles infecciones.
IoC
SHA256SUM
7d1e2685b0971497d75cbc4d4dac7dc104e83b20c2df8615cf5b008dd37caee0 Capoae UPX Packed
fd8f419f0217be0037ba7ae29baf4c3a08c8f2751b0b1be847b75bd58d6e153f Capoae UPX Unpacked
5a791205bc08396bc413641ea6e5d9fd5ef3f86caf029f51d4da65be700a2b1e ProductList-n3RkIo.php
f37cc420165fb809eb34fbf9c8bf13236a0cc35dee210db5883107a08a70f66d class-wp-page-n3RkIo.php
53521fab245023c56cf5562bd562d6ba98445a052155eb2e40c4a13a9343e6eb regexes.php
9ed14f470c95759cc0dca86fd913714b6733af8c0aaa35e3a7ad6604455e2230 sys.i686 UPX Packed
af7c5617a89c40aac9eb2e573a37a2d496a5bcaa9f702fa919f86485e857cb74 sys.x86_64 UPX Packed
7eb444671ab338eccadf81d43166661ccb4b1e487836ab41e2245db61dceed31 ldr.sh
IP
198.100.145.141
23.238.128.118
69.12.66.218
207.126.93.190