
Módulo de kernel Linux que concede privilégios de root, oculta processos/arquivos e se protege contra descarregamento, projetado para fins educacionais em kernels Ubuntu.
Um rootkit simples de kernel Linux escrito por diversão, não por maldade.
O rootkit pode fazer o seguinte:
O rootkit foi testado para funcionar nos kernels Linux 2.6.32-38 e 4.4.0-22 fornecidos pelo Ubuntu no Ubuntu 10.04.4 LTS e Ubuntu 16.04 LTS, respectivamente, mas deve ser muito fácil portá-lo para kernels intermediários, bem como para versões mais recentes.
Há algum código específico de arquitetura no rootkit que é implementado apenas para as arquiteturas x86 e x86-64. Esse é o código para localizar a tabela de chamadas de sistema, desabilitar memória protegida contra escrita e um dos dois métodos de hooking de funções. Deve ser muito fácil portá-lo para uma nova arquitetura, e parte desse código não é estritamente necessária para o funcionamento do rootkit, por exemplo, o método de hooking não portável poderia ser removido, embora você deva ser uma pessoa muito chata se estiver disposto a perder a diversão do hooking de funções que sobrescreve o código de máquina da função alvo do kernel para que ela chame nossa função de hook no lugar.
O rootkit foi testado apenas com 1 núcleo de CPU, portanto pode ou não funcionar corretamente em um sistema multicore. Provavelmente não funcionará muito bem em um sistema multicore, pois o rootkit foi escrito esperando que apenas 1 thread execute qualquer coisa a qualquer momento, portanto carece de escritas/leituras atômicas e mutexes em torno das estruturas de dados de lista.
Prepare sua VM de preferência.
Baixe e instale a imagem Ubuntu desejada:
Para o Ubuntu 10.04, ajuste o endereço do repositório de pacotes:
sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
Instale um compilador, os headers do Linux e tudo o mais necessário para compilar o rootkit:
apt-get update
apt-get install build-essential
Certifique-se de não executar apt-get upgrade, pois isso atualizaria o kernel, já que o rootkit foi testado apenas na versão de kernel pré-instalada.
make
Carregar o rootkit:
insmod rootkit.ko
Usar o rootkit:
$ ./client --help
Usage: ./client [OPTION]...
Options:
--root-shell Grants you root shell access.
--hide-pid=PID Hides the specified PID.
--unhide-pid=PID Unhides the specified PID.
--hide-file=FILENAME Hides the specified FILENAME globally.
Must be a filename without any path.
--unhide-file=FILENAME Unhides the specified FILENAME.
--hide Hides the rootkit LKM.
--unhide Unhides the rootkit LKM.
--help Print this help message.
--protect Protects the rootkit from rmmod.
--unprotect Disables the rmmod protection.
Descarregar o rootkit:
./client --unhide
./client --unprotect
rmmod rootkit.ko
Na verdade não, há muitos artigos online sobre como escrever um rootkit Linux com o código-fonte completo fornecido, sem mencionar as inúmeras repositórios no GitHub.
Os seguintes materiais foram usados na escrita deste rootkit:
Este projeto está licenciado sob GPLv2.
| Kernel / arquitetura | x86 | x86-64 |
|---|
| 2.6.32 | Ubuntu 10.04.4 i386 (694M) [torrent] [iso] | Ubuntu 10.04.4 amd64 (681M) [torrent] [iso] |
| 4.4.0 | Ubuntu 16.04 i386 (647M) [torrent] [iso] | Ubuntu 16.04 amd64 (655M) [torrent] [iso] |