
Um rootkit Linux eBPF com backdoor, C2, injeção de bibliotecas, sequestro de execução, persistência e capacidades de ocultação.
TripleCross é um rootkit Linux eBPF que demonstra as capacidades ofensivas da tecnologia eBPF.
TripleCross é inspirado em designs anteriores de implantes nesta área, notavelmente os trabalhos de Jeff Dileo na DEFCON 271, Pat Hogan na DEFCON 292, Guillaume Fournier e Sylvain Afchain também na DEFCON 293, e o Boopkit de Kris Nóva4. Reutilizamos e estendemos algumas das técnicas pioneiras dessas explorações anteriores das capacidades ofensivas da tecnologia eBPF.
Este rootkit foi criado para minha Tese de Bacharelado na UC3M. Mais detalhes sobre seu design são fornecidos no documento da tese.
Este rootkit é puramente para fins educacionais e acadêmicos. O software é fornecido "como está" e os autores não são responsáveis por qualquer dano ou incidente que possa ocorrer durante seu uso.
Não tente usar o TripleCross para violar a lei. O uso inadequado do software e das informações fornecidas pode resultar em acusações criminais.
A figura a seguir mostra a arquitetura do TripleCross e seus módulos.
A biblioteca de sockets brutos RawTCP_Lib usada para transmissões do rootkit é de minha autoria e possui seu próprio repositório.
A tabela a seguir descreve os principais arquivos e diretórios do código-fonte para facilitar sua navegação:
| DIRETÓRIO | COMANDO |
|---|---|
| docs | Documento original da tese |
| src/client | Código-fonte do cliente rootkit |
| src/client/lib | Biblioteca compartilhada RawTCP_Lib |
| src/common | Constantes e configuração do rootkit. Também inclui a implementação de elementos comuns ao lado eBPF e do espaço de usuário do rootkit, como o ring buffer |
| src/ebpf | Código-fonte dos programas eBPF usados pelo rootkit |
| src/helpers | Inclui programas para testar a funcionalidade de vários módulos do rootkit, e também o programa malicioso e a biblioteca usados nos módulos de sequestro de execução e injeção de bibliotecas, respectivamente |
| src/libbpf | Contém a biblioteca libbpf integrada com o rootkit |
| src/user | Código-fonte dos programas do espaço de usuário usados pelos rootkits |
| src/vmlinux | Cabeçalhos contendo a definição de estruturas de dados do kernel (este é o método recomendado ao usar libbpf) |
Este projeto de pesquisa foi testado nos seguintes ambientes:
| DISTRIBUIÇÃO | KERNEL | GCC | CLANG | GLIBC | |
|---|---|---|---|---|---|
| VERSÃO | Ubuntu 21.04 | 5.11.0 | 10.3.0 | 12.0.0 | 2.33 |
Recomendamos usar Ubuntu 21.04, que por padrão incorporará as versões de software mostradas aqui. Caso contrário, alguns dos problemas que você pode encontrar estão descritos aqui.
O código-fonte do rootkit é compilado usando dois Makefiles.```
cd src make all
cd client make
The following table describes the purpose of each Makefile in detail:
| MAKEFILE | COMMAND | DESCRIPTION | RESULTING FILES |
| ------------- | ------------- | ------------- | ------------- |
| src/client/Makefile | make | Compilation of the rootkit client | src/client/injector |
| src/Makefile | make help | Compilation of programs for testing rootkit capabilities, and the malicious program and library of the execution hijacking and library injection modules, respectively | 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 | Compilation of the rootkit using the libbpf library | src/bin/kit |
| src/Makefile | make tckit | Compilation of the rootkit TC egress program | src/bin/tc.o |
### Instalação
Uma vez que os arquivos do rootkit são gerados em src/bin/, os programas *tc.o* e *kit* devem ser carregados em ordem. No exemplo a seguir, o backdoor do rootkit operará na interface de rede *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
Existem dois scripts, packager.sh e deployer.sh, que compilam e instalam o rootkit automaticamente, exatamente como um atacante faria em um cenário de ataque real.
Executar o packager.sh irá gerar todos os arquivos do rootkit no diretório apps/.
Executar o deployer.sh irá instalar o rootkit e criar os arquivos de persistência.
Esses scripts devem primeiro ser configurados com os seguintes parâmetros para o funcionamento adequado do módulo de persistência:
| SCRIPT | CONSTANT | DESCRIPTION |
|---|---|---|
| src/helpers/deployer.sh | CRON_PERSIST | Tarefa do cron para executar após a reinicialização |
| src/helpers/deployer.sh | SUDO_PERSIST | Entrada sudo para conceder privilégios sem senha |
J. Dileo. Evil eBPF: Abusos Práticos de um Runtime de Bytecode no Kernel. DEFCON 27. slides ↩
P. Hogan. Distorcendo a Realidade: Criando e Combatendo a Próxima Geração de Rootkits Linux usando eBPF. DEFCON 27. apresentação ↩
G. Fournier e S. Afchain. eBPF, pensei que fossemos amigos! DEFCON 29. slides ↩