
Un rootkit de Linux eBPF con capacidades de puerta trasera, C2, inyección de librerías, secuestro de ejecución, persistencia y sigilo.
TripleCross es un rootkit Linux basado en eBPF que demuestra las capacidades ofensivas de la tecnología eBPF.
TripleCross está inspirado en diseños anteriores de implantes en esta área, destacando los trabajos de Jeff Dileo en DEFCON 271, Pat Hogan en DEFCON 292, Guillaume Fournier y Sylvain Afchain también en DEFCON 293, y el Boopkit de Kris Nóva4. Reutilizamos y extendemos algunas de las técnicas pioneras de estas exploraciones previas de las capacidades ofensivas de la tecnología eBPF.
Este rootkit fue creado para mi Trabajo de Fin de Grado en la UC3M. Más detalles sobre su diseño se proporcionan en el documento de la tesis.
Este rootkit es únicamente con fines educativos y académicos. El software se proporciona "tal cual" y los autores no se responsabilizan de cualquier daño o percance que pueda ocurrir durante su uso.
No intente utilizar TripleCross para violar la ley. El mal uso del software y la información proporcionados puede acarrear cargos penales.
La siguiente figura muestra la arquitectura de TripleCross y sus módulos.
La biblioteca de sockets raw RawTCP_Lib utilizada para las transmisiones del rootkit es de mi autoría y tiene su propio repositorio.
La siguiente tabla describe los principales archivos y directorios del código fuente para facilitar su navegación:
| DIRECTORIO | COMANDO |
|---|---|
| docs | Documento original de la tesis |
| src/client | Código fuente del cliente rootkit |
| src/client/lib | Biblioteca compartida RawTCP_Lib |
| src/common | Constantes y configuración del rootkit. También incluye la implementación de elementos comunes al lado del eBPF y del espacio de usuario del rootkit, como el búfer circular |
| src/ebpf | Código fuente de los programas eBPF utilizados por el rootkit |
| src/helpers | Incluye programas para probar la funcionalidad de varios módulos del rootkit, así como el programa malicioso y la biblioteca utilizados en los módulos de secuestro de ejecución e inyección de bibliotecas, respectivamente |
| src/libbpf | Contiene la biblioteca libbpf integrada con el rootkit |
| src/user | Código fuente de los programas en espacio de usuario utilizados por los rootkits |
| src/vmlinux | Cabeceras que contienen la definición de estructuras de datos del kernel (este es el método recomendado cuando se usa libbpf) |
Este proyecto de investigación ha sido probado en los siguientes entornos:
| DISTRIBUCIÓN | KERNEL | GCC | CLANG | GLIBC | |
|---|---|---|---|---|---|
| VERSIÓN | Ubuntu 21.04 | 5.11.0 | 10.3.0 | 12.0.0 | 2.33 |
Recomendamos usar Ubuntu 21.04, que por defecto incorporará las versiones de software mostradas aquí. De lo contrario, algunos de los problemas con los que podría encontrarse se describen aquí.
El código fuente del rootkit se compila utilizando dos Makefiles.```
cd src make all
cd client make
La siguiente tabla describe el propósito de cada Makefile en detalle:
| MAKEFILE | COMANDO | DESCRIPCIÓN | ARCHIVOS RESULTANTES |
| ------------- | ------------- | ------------- | ------------- |
| src/client/Makefile | make | Compilación del cliente del rootkit | src/client/injector |
| src/Makefile | make help | Compilación de programas para probar las capacidades del rootkit, y el programa malicioso y la biblioteca de los módulos de secuestro de ejecución e inyección de bibliotecas, respectivamente | src/helpers/simple_timer, src/helpers/simple_open, src/helpers/simple_execve, src/helpers/lib_injection.so, src/helpers/execve_hijack |
| src/Makefile | make kit | Compilación del rootkit utilizando la biblioteca libbpf | src/bin/kit |
| src/Makefile | make tckit | Compilación del programa de salida TC del rootkit | src/bin/tc.o |
### Instalación
Una vez que los archivos del rootkit se generan en src/bin/, los programas *tc.o* y *kit* deben cargarse en orden. En el siguiente ejemplo, la puerta trasera del rootkit operará en la interfaz de red *enp0s3*:```
// TC egress program
sudo tc qdisc add dev enp0s3 clsact
sudo tc filter add dev enp0s3 egress bpf direct-action obj bin/tc.o sec classifier/egress
// Libbpf-powered rootkit
sudo ./bin/kit -t enp0s3
Hay dos scripts, packager.sh y deployer.sh, que compilan e instalan el rootkit automáticamente, tal como lo haría un atacante en un escenario de ataque real.
Ejecutar packager.sh generará todos los archivos del rootkit dentro del directorio apps/.
Ejecutar deployer.sh instalará el rootkit y creará los archivos de persistencia.
J. Dileo. Evil eBPF: Practical Abuses of an In-Kernel Bytecode Runtime. DEFCON 27. diapositivas ↩
P. Hogan. Warping Reality: Creating and Countering the Next Generation of Linux Rootkits using eBPF. DEFCON 27. presentación ↩
G. Fournier and S. Afchain. eBPF, I thought we were friends! DEFCON 29. diapositivas ↩