
Modulo del kernel Linux che concede privilegi di root, nasconde processi/file e si protegge dallo scaricamento, progettato a scopo educativo per i kernel Ubuntu.
Un semplice rootkit per kernel Linux scritto per divertimento, non per fare del male.
Il rootkit può fare quanto segue:
Il rootkit è stato testato per funzionare sui kernel Linux 2.6.32-38 e 4.4.0-22 forniti da Ubuntu rispettivamente in Ubuntu 10.04.4 LTS e Ubuntu 16.04 LTS, ma dovrebbe essere molto facile portarlo su kernel intermedi, così come su quelli più recenti.
C'è del codice specifico per architettura nel rootkit che è implementato solo per x86 e x86-64. Questo è il codice per trovare la tabella delle system call, disabilitare la memoria protetta in scrittura e uno dei due metodi di aggancio delle funzioni. Dovrebbe essere molto facile portarlo su una nuova architettura, e parte di questo codice non è strettamente necessario per il funzionamento del rootkit, ad esempio il metodo di aggancio non portabile potrebbe essere rimosso, anche se devi essere una persona molto noiosa se sei disposto a perderti il divertimento dell'aggancio delle funzioni che sovrascrive il codice macchina della funzione kernel di destinazione in modo che chiami la nostra funzione di aggancio al suo posto.
Il rootkit è stato testato solo con 1 core CPU, quindi potrebbe funzionare o meno correttamente su un sistema multi-core. Probabilmente non funzionerà molto bene su un sistema multi-core poiché il rootkit è stato scritto aspettandosi che ci sia solo 1 thread in esecuzione in qualsiasi momento, quindi manca di scritture/letture atomiche e mutex attorno alle strutture dati delle liste.
Riscalda la VM che preferisci.
Scarica e installa l'immagine Ubuntu desiderata:
Per Ubuntu 10.04, applica la patch all'indirizzo del repository dei pacchetti:
sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
Installa un compilatore, gli header Linux e tutto il resto necessario per compilare il rootkit:
apt-get update
apt-get install build-essential
Assicurati di non chiamare apt-get upgrade, poiché aggiornerebbe il kernel, mentre il rootkit è stato testato solo sulla versione del kernel preinstallata.
make
Carica il rootkit:
insmod rootkit.ko
Usa il 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.
Scarica il rootkit:
./client --unhide
./client --unprotect
rmmod rootkit.ko
Non proprio, ci sono molti articoli online su come scrivere un rootkit Linux con il codice sorgente completo fornito, per non parlare delle innumerevoli repository GitHub.
I seguenti materiali sono stati usati per scrivere questo rootkit:
Questo progetto è concesso in licenza sotto GPLv2.
| Kernel / arch | 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] |