Si se descubre una puerta trasera de Linux, básicamente se puede considerar que los activos del servidor están dañados y perdidos. Debido a que la proporción de servidores Linux es relativamente grande, el riesgo de ser atacado y pirateado también aumentará.


Puerta trasera BC00C10454FEB0D5C832C53648EACB0C


Dado que el archivo de puerta trasera no es grande, no hay medios anti-análisis como la ofuscación y el aplanamiento del flujo de control o la adición de un shell virtual, por lo que es relativamente simple. Y se modifica en función de la puerta trasera del prisma.Después de que la herramienta desmonte la puerta trasera, la estructura y la lógica son relativamente claras. Quería documentarlo con el mayor detalle posible para poder agregar algo de experiencia con las amenazas de seguridad de Linux.

Imagen


Primero abra el archivo "/var/run/sshd.lock" en modo binario y consulte si está bloqueado, similar a la función mutex, modifique el semáforo SIGCHLD para configurar el final del proceso secundario, cambie el directorio actual y luego decodifique el nombre del proceso.


Dado que la puerta trasera no elimina el símbolo, se puede encontrar que la función de decodificación se usa para decodificar el nombre del proceso, por lo que aprendo el algoritmo de codificación ROT13 utilizado por la puerta trasera. Se ha consultado esta información y se encontró que debería ser un algoritmo común en criptografía.

Imagen


ROT13 (rotar 13 lugares, a veces con un guión en el medio llamado ROT-13) es un cifrado de reemplazo simple, y la codificación ROT es un cifrado de reemplazo simple en el orden de las posiciones de los símbolos. Tales codificaciones son reversibles y autodescifrables.

ROT5: solo codifique el número y reemplace el número actual con el quinto número después del número actual. Ejemplo: 1——>6. ROT13: solo codifique letras y reemplace la letra actual con la letra 13 después de la letra actual, por ejemplo: A——>N. ROT18: Este es un valor atípico, es una combinación de ROT5 y ROT13, por ejemplo: 1a -> 6n. ROT47: codifique números, letras y símbolos comunes, reemplácelos de acuerdo con sus valores ASCII y reemplace el carácter actual con el carácter 47 correspondiente al valor ASCII del carácter actual hacia adelante o hacia atrás, por ejemplo: 0—>_, z - k

El resultado del desmontaje de la función de decodificación de puerta trasera tiene algunas características obvias, módulo 26 y hay cálculos enteros de 64 y 96.

Imagen

Imagen

Una comparación del código fuente del algoritmo implementado por Python encontró que en realidad es similar

algoritmo rot13 | un jugoso limón

https://seamiloak.github.io/2021/01/16/rot13%E7%AE%97%E6%B3%95/

Imagen

Luego modifique el nombre del proceso.Si sabe más sobre las amenazas relacionadas con Linux, encontrará que muchas puertas traseras en Linux tienen este comportamiento, y luego use la bifurcación para crear procesos secundarios para completar las siguientes operaciones.

sed -i '/z0gg.me/d' /etc/hosts

Elimine la línea que contiene z0gg.me en el contenido del archivo de hosts

if grep -q '^[n]ameserver 8.8.8.8' /etc/resolv.conf; luego echo yes > /dev/null; else echo 'nameserver 8.8.8.8'  >> /etc/resolv.conf; fi > / desarrollo/nulo

Escriba la dirección del servidor dns 8.8.8.8 en el archivo resolv.conf

Finalmente, el proceso principal ingresa a la función que crea el shell de rebote y usa el algoritmo ROT13 nuevamente para descifrar el C2 conectado de nuevo (z0gg.me), pero hay tres direcciones, las dos últimas de las cuales se usan como direcciones alternativas.

Imagen

Dirección alternativa: x63.in, de la siguiente manera.

Imagen

Dirección alternativa: x47.in, de la siguiente manera.

Imagen

Después de que DNS consulta los activos IP reales de C2, utiliza directamente la solicitud http para leer solo el contenido de 32 bytes devuelto por el servidor y calcula el valor hash md5 para él, y luego compara el valor hash md5 calculado con el incrustado localmente. Se compara el valor hash md5 ef4a85e8fcba5b1dc95adaa256c5b482, y si se pasa la misma verificación se puede ejecutar el shell de rebote, si es diferente no se ejecutará el back-connection C2.

Imagen

El código fuente de la puerta trasera del prisma es el siguiente, y hay ciertas similitudes. Dirección: https://github.com/andreafabrizi/prism/blob/master/prism.c.

Imagen

Cuando la máquina víctima y el servidor pasan la verificación interactiva, se ejecutará el siguiente comando: echo -e \"[\x1B[32m+\x1B[0m]`/bin/hostname`\n[\x1B[32m+\x1B[ 0m ]`/usr/bin/id`\n[\x1B[32m+\x1B[0m]`uname -r`\".

Interpretar echo -e \"[\x1B[32m+\x1B[0m]`/bin/hostname`\n[\x1B[32m+\x1B[0m]`/usr/bin/id`\n[\x1B[32m+\ El comando x1B[0m]`uname -r`\" es el siguiente:

Las cadenas extrañas anteriores son códigos de escape para entrada estándar, por ejemplo:

exportar const reset = "\x1b[0m"

exportar constante verde = "\x1b[32m"

Dirección de la fuente de referencia: https://gist.github.com/abritinthebay/d80eb99b2726c83feb0d97eab95206c4

El uso de acentos graves en un comando es para ejecutar un comando específico, por lo que la demostración es la siguiente:

El efecto de ejecución directa de Ubuntu20.04 es el siguiente:

Imagen

El efecto de ejecución directa de CentOS7 es el siguiente:

Imagen