Rig de minería de Panchan: saluden a la nueva botnet punto a punto escrita en Golang
Escrito por: Stiv Kupchik
Resumen ejecutivo
Los investigadores de seguridad de Akamai han descubierto Panchan, una nueva botnet punto a punto y un gusano SSH que surgieron en marzo de 2022 y que han estado infiltrándose activamente en servidores Linux desde entonces.
Panchan está escrito en Golang y utiliza sus características incorporadas de concurrencia para maximizar la capacidad de propagación y ejecutar módulos de malware.
Además del ataque del diccionario SSH "básico" habitual en la mayoría de los gusanos, este malware también recopila claves SSH para realizar movimientos laterales.
Los investigadores de seguridad de Akamai pudieron obtener acceso al protocolo de comunicación del malware y su panel de administración, y los han utilizado para analizar el alcance de la infección del malware.
La vertical de víctimas más común de Panchan (después de las telecomunicaciones/VPS) es la educación. Suponemos que las colaboraciones entre diferentes institutos académicos podrían hacer que las claves SSH se compartan en las redes, lo que explicaría por qué esta vertical se encuentra en la lista. Los investigadores de seguridad de Akamai se comunicaron con los correos electrónicos atacados asociados a cada IP víctima.
Para evitar la detección y reducir la trazabilidad, el malware deja a sus equipos de criptominería, como archivos asignados a la memoria, sin ninguna presencia en disco. También elimina los procesos de criptominería si detecta monitorización de procesos.
Según la actividad del malware y la geolocalización de la víctima, el idioma del panel de administración y la actividad del usuario de Discord del actor de la amenaza, creemos que el actor de la amenaza es japonés.
Akamai MFA puede mitigar el riesgo presentado por la recopilación de claves SSH. Además, la configuración de contraseñas seguras de SSH debería detener el malware en sus intentos, ya que utiliza una lista muy básica de contraseñas predeterminadas para propagarse. También hemos publicado IOC, consultas, firmas y scripts que se pueden utilizar para probar la infección.
Introducción
El equipo minero de Panchan es una botnet y cryptojacker Golang repleto de funciones. Su protocolo punto a punto es sencillo: texto sin formato sobre TCP, pero lo suficientemente efectivo como para descentralizar la botnet. También tiene persistencia y perseverancia, y puede monitorizar la evasión.
El malware integra un "modo Dios": un panel de administración que puede editar la configuración de minería, que luego se dispersa al resto de sus puntos. Para evitar manipulaciones no deseadas, se requiere una clave privada para acceder al modo Dios, que luego se utiliza para firmar la configuración de minería. El malware contiene una clave pública que se utiliza para verificar la clave privada proporcionada. El panel de administración está escrito en japonés, lo que indica la geolocalización del creador.
La botnet presenta un enfoque único (y posiblemente nuevo) al movimiento lateral mediante la recopilación de claves SSH. En lugar de usar únicamente la fuerza bruta o los ataques de diccionario en direcciones IP aleatorizadas como la mayoría de las botnets, el malware también lee los archivos id_rsa y known_hosts para recopilar credenciales existentes y utilizarlas para desplazarse lateralmente a través de la red.
El malware está escrito en Golang y utiliza las funciones de concurrencia de Golang para la mayoría de la lógica principal, ya que las ejecuta como rutinas de Go concurrentes. El actor de la amenaza está al tanto de las nuevas versiones de Go: la primera versión de malware detectada (a partir de marzo de 2022) se compiló con Go 1.17.7 (lanzado en febrero de 2022), mientras que la última muestra se compiló con Go 1.18 (publicada en marzo de 2022). Además, Go 1.18 tuvo algunos cambios en sus estructuras de datos internas, por lo que ni las herramientas online ni el desmontador IDA podrían analizar el malware correctamente y hacer coincidir el nombre de la función con el puntero de la función. En el Apéndice A: Breve inmersión en Go reversing, describimos cómo combatirlo.
En este informe, describiremos las capacidades del malware en detalle, cómo lo detectamos y el proceso que realizamos para intentar atribuirlo.
Para obtener una lista de los IoC, puede ver el Repositorio de GitHub aquí.
Actividad de malware
El equipo de investigación de seguridad de Akamai monitoriza de manera proactiva la actividad de la botnet y el malware en nuestra red de sensores global. Nos percatamos por primera vez de la actividad de Panchan el 19 de marzo de 2022. La comunicación punto a punto y la capacidad de creación de gusanos del malware atrajeron nuestra atención y justificaron una investigación adicional.
Mientras se realizaba la ingeniería inversa del malware, desarrollamos scripts para "sintonizar" con la red de la botnet, lo que permitió al equipo reunir una lista completa de equipos infectados (puntos de botnets). Encontramos 209 puntos, de los cuales 40 están activos en este momento.
Si bien los objetivos se dispersan en todo el mundo, parece haber una mayor concentración de objetivos en Asia.
Nuestra atribución de los orígenes japoneses del actor de la amenaza (detallada más adelante) puede explicar el mayor número de objetivos en Asia. Dado que no parece que haya una organización detrás de este malware, es posible que sea más fácil para el actor de la amenaza ceñirse a lo cercano y conocido.
Observando la vertical de víctimas, la mayoría de las direcciones IP de las víctimas están registradas en su plataforma de hosting/VPS, por lo que no hay mucha información allí. La vertical más común entre las víctimas monitorizadas es la educación. Esto podría deberse descuidos con las contraseñas, o podría estar relacionado con la capacidad de movimiento lateral exclusiva del malware mediante claves SSH robadas. Los investigadores de diferentes instituciones académicas podrían colaborar con mayor frecuencia que los empleados del sector empresarial y requerir credenciales para autenticarse con equipos que están fuera de su organización/red. Reforzando esta hipótesis, observamos que algunas de las universidades involucradas eran del mismo país (p. ej., España), y otras eran de la misma región (p. ej., Taiwán y Hong Kong).
Explorando las funciones del malware
Vector de infección: gusano SSH
El malware es capaz de autopropagarse a través de SSH. Tiene dos métodos para generar objetivos y detalles de autenticación:
Claves SSH existentes
El malware busca el directorio HOME para la configuración y claves de SSH bajo el usuario en ejecución. Lee la clave privada en ~HOME/.ssh/ID_rsa y la utiliza para intentar autenticarse en cualquier dirección IP que se encuentre en ~HOME/.ssh/Known_hosts. Este es un nuevo método de recopilación de credenciales que no hemos visto en otros tipos de malware.
Forzado de credenciales
El malware puede aleatorizar direcciones IP e intentar un ataque de diccionario mediante una lista predeterminada de usuarios y contraseñas. El propagador de forzado se lanza en un proceso separado varias veces, limitado únicamente por el límite de archivos abiertos establecido por el sistema operativo. Los nombres de usuario y las contraseñas son bastante simples: combinaciones de cadenas predeterminadas como "ubuntu," "root," "user," '‘debian," "pi,", etc.
Después de la correcta autenticación del objetivo, el malware crea una carpeta oculta con un nombre aleatorio en el directorio raíz / y se auto copia en la carpeta oculta con el nombre xinetd usando sftp.
Luego, el malware ejecuta de forma remota el binario copiado en el equipo de destino (usando nohup) y le pasa una lista de puntos sobre la línea de comandos. Después de lograr la infección, el malware inicia una operación HTTPS POST en un webhook de Discord, que probablemente se utiliza para monitorizar a la víctima.
Comunicación punto a punto
El protocolo punto a punto de la botnet es bastante simple. Todo se envía en texto sin formato Puerto TCP 1919. Todos puntos escuchan en ese puerto y crean una regla para permitirlo en iptables. Cada mensaje comienza con "pan-chan's mining rig hi!" y termina con "finish". Entre ellos, el malware envía comandos de configuración separados por líneas nuevas. Solo hay dos opciones de configuración que hayamos visto: sharepeer y sharerigconfig.
sharepeer Es bastante sencillo: lo sigue una IP, que luego se agrega a la lista interna de puntos del malware.
sharerigconfig le sigue una cadena codificada con el sistema base64, que en realidad es una estructura JSON que codifica la configuración minera, y una firma de esa configuración:
La firma se valida con una clave pública guardada internamente para garantizar la autenticidad. La lógica de comunicación también es simple: cuando se conecta a un punto o desde él, el malware analiza su configuración guardada en la memoria (que se obtuvo anteriormente, cuando comenzó a ejecutarse), genera la cadena de mensajes y la envía. También recibe un mensaje similar del otro lado y lo analiza. Se agregan nuevos puntos a su lista de puntos, mientras que la configuración se sobrescribe si es de una versión más reciente.
Para buscar actualizaciones, el malware se conecta periódicamente con sus puntos guardados.
Modo Dios
Esta es probablemente la función más exclusiva del malware: Tiene un panel administrativo integrado directamente en el binario del malware. Para iniciarlo, debemos pasar el malware la cadena del modo Dios como el primer argumento de línea de comandos (seguido de una lista de puntos).
Verificación del acceso
A pesar de que el panel de administración está integrado en el malware, no puede acceder a él cualquiera. Para evitar el acceso no deseado al panel, el malware solicita primero una clave privada y solo después de la validación podemos acceder a su interfaz.
No teníamos la clave privada necesaria, por lo que, en su lugar, hicimos un parche del programa para omitir la validación de la clave y aceptar cualquier clave privada suministrada (solo requirió un JZ para la modificación de JMP).
Panel de administración: estadísticas
Después de proporcionar la clave privada e "iniciar sesión", nos reciben con una pantalla de estado sobre la configuración actual.
La primera sección son las estadísticas de los puntos, que se contactan antes de que se inicie el modo Dios, en base a la lista de puntos que se transmite en la línea de comandos del malware (no proporcionamos una lista de puntos al analizarlo, de ahí el cero).
La segunda sección es la configuración de la criptominería. Está en el mismo formato que la configuración de minería que se envía entre puntos, pero con texto japonés en lugar de inglés. La diferencia de idioma se debe probablemente a la facilidad de programación: imprimir texto japonés es simple, pero analizarlo es más difícil, por lo que el creador del malware utilizó el inglés en la configuración que se envía entre puntos.
Por último, tenemos un menú con las siguientes opciones:
Actualizar la pantalla de estado
Imprimir la lista de puntos activa
Actualizar la configuración del minero
Salir
Minero sin archivos
El malware despliega dos mineros: xmrig y nbhash. Ambos binarios de los mineros vienen codificados con el sistema base64 dentro del propio binario del malware, y se extraen y ejecutan durante el tiempo de ejecución. Sin embargo, hay algunas novedades en la ejecución, ya que los mineros no se extraen en el disco. En su lugar, el malware utiliza la función UNIX memfd_create para crear un archivo asignado a la memoria con el contenido del binario del minero, de modo que se pueda ejecutar directamente desde la memoria sin tener una ruta en el sistema de archivos que sea rastreable. A partir de la configuración que extrajimos de varios puntos de botnet, parece que el malware utiliza NiceHash para sus pools de minería y billeteras. Las billeteras NiceHash no son billeteras de blockchain,por lo que no podemos ver los detalles de las transacciones y la minería en ellas para medir los ingresos reales.
Anti-Kill
El malware captura señales de eliminación de Linux (específicamente SIGTEMT — 0xF y SIGINT — 0x2) que se le envían y las ignora. Esto dificulta la eliminación del malware, aunque no es imposible, ya que SIGKILL no se gestiona (porque no es posible, de acuerdo con el estándar POSIX,página 313).
Anti-monitor
Este módulo se denomina internamente antitaskmanager, pero al contrario que su nombre, no interfiere con el funcionamiento del administrador de tareas. En su lugar, el malware busca continuamente los procesos top y htop. Al encontrarlos, finaliza los procesos de minería que se están ejecutando actualmente.
Persistencia
El malware se autocopia a /bin/systemd-worker y crea un servicio systemd con el mismo nombre. Esto probablemente se hace para imitar los servicios systemd legítimos para reducir las sospechas y evitar la investigación.
Atribución
Hay una pantalla adicional que se presenta en el panel del modo Dios, mientras se valida la clave privada.
La declaración de copyright es bastante interesante, menciona Panchan y tiene un servidor Discord real. Siguiendo el enlace, parece que podemos unirnos realmente a ese servidor y también obtenemos el nombre de usuario real de Discord que usa Panchan. Asumimos que este servidor es el mismo que el malware notifica después de una conexión SSH satisfactoria.
Nos unimos al servidor, con la esperanza de encontrar información sobre el actor de la amenaza y ver las notificaciones de Discord que envía el malware como parte del flujo de infección. No encontramos nada, el chat principal estaba vacío, excepto por un saludo de otro miembro que se envió en marzo. Puede que haya otros chats disponibles para miembros con mayores privilegios en el servidor, y por eso que no los hemos visto. La única información útil que encontramos fue que el servidor se creó a principios de marzo de 2022, muy cerca de nuestra primera observación del malware.
Al buscar otras actividades de ese usuario, también pudimos encontrarlo activo en el servidor de Discord de Primex (proveedor de VPS).
Además de las VPS comunes, Primex también ofrece máquinas virtuales preinstaladas con software de nodo blockchain. Esto podría significar que el actor de la amenaza los utiliza para alojar su propio servidor, o quizás se esté dirigiendo activamente a sus máquinas virtuales para realizar cryptojacking.
Detección y mitigación
Para ayudar con la detección, hemos creado un repositorio con las firmas de IOC y Yara y Snort, que se pueden utilizar para analizar la infección. También hemos desarrollado un script bash que se puede ejecutar en una máquina virtual. Busca los siguientes indicadores de Panchan:
El proceso systemd-worker
El proceso xinetd, si se ejecuta desde una ruta diferente a /bin o /sbin
Procesos que escuchan en el puerto TCP 1919
Además, la comunicación saliente a través de los puertos TCP 3380 y 3387 podría indicar tráfico al pool de criptominería.
Para los lectores que deseen defender proactivamente sus redes, tenemos las siguientes recomendaciones:
Utilice contraseñas seguras y complejas. El malware utiliza una cantidad muy limitada de combinaciones predeterminadas de nombre de usuario y contraseña que no se deben configurar en ningún equipo de producción. Crear contraseñas seguras puede reducir en gran medida el impacto del malware.
Configure una MFA cuando sea posible. El uso de una MFA evitaría cualquier intento de inicio de sesión no autorizado. Akamai MFA también puede ayudar a proteger contra la recopilación de claves SSH.
Segmente su red cuando sea posible. Aunque es legítimo tener equipos abiertos a Internet a través de SSH, es aconsejable controlar quién puede conectarse a ellos desde Internet, así como con quién puede conectarse dentro de la red. La configuración de estos controles de acceso reduce el impacto que un equipo filtrado puede tener en la red, así como la reducción de la superficie de ataque general.
Monitorice la actividad de recursos de sus máquinas virtuales. Las botnets como esta, cuyo objetivo final es el cryptojacking, pueden aumentar el uso de recursos del equipo a niveles anómalos. La monitorización constante puede alertarle sobre actividades sospechosas. En el caso de Panchan, la monitorización del uso de recursos también habría eliminado por completo la criptominería.
Apéndice A: Breve inmersión en Go reversing
Los ejecutables de Go se compilan estáticamente, lo que significa que todas las dependencias del archivo ejecutable se compilan directamente en el binario. Esto crea binarios masivos con muchas funciones (como referencia, nuestro malware era de 30 MB con aproximadamente 3700 funciones).
Para ayudar con el seguimiento de pila, Go tiene una estructura pclntab que coincide con los nombres de las funciones y los punteros dentro del binario. Esto existe incluso en los binarios descubiertos, por lo que podemos utilizarlo para encontrar nombres de funciones.
En Go 1.18, esta estructura ha cambiado. Mientras que antes contenía punteros a ubicaciones en el binario, ahora contiene offsets de ubicaciones específicas. Los punteros de función ahora son offsets de la primera función Go (que se señala en la estructura pcln comentada como text_start en la imagen anterior), los punteros de nombre son offsets desde el inicio de la matriz del nombre de función, y ambas se referencian en offsets en una matriz diferente que contiene datos de función.