
Module noyau Linux qui accorde des privilèges root, masque les processus/fichiers et se protège contre son déchargement, conçu à des fins éducatives sur les noyaux Ubuntu.
Un rootkit noyau Linux simple écrit pour le plaisir, pas pour le mal.
Le rootkit peut effectuer les actions suivantes :
Le rootkit a été testé sur les noyaux Linux 2.6.32-38 et 4.4.0-22 fournis par Ubuntu dans Ubuntu 10.04.4 LTS et Ubuntu 16.04 LTS respectivement, mais il devrait être très facile à porter sur les noyaux intermédiaires, ainsi que sur les plus récents.
Le rootkit contient du code spécifique à l'architecture, implémenté uniquement pour les architectures x86 et x86-64. Il s'agit du code permettant de trouver la table des appels système, de désactiver la protection en écriture de la mémoire et de l'une des deux méthodes d'accrochage de fonctions. Il devrait être très facile à porter sur une nouvelle architecture, et une partie de ce code n'est pas strictement nécessaire au fonctionnement du rootkit, par exemple la méthode d'accrochage non portable pourrait être supprimée, mais il faut être une personne très ennuyeuse pour renoncer au plaisir de l'accrochage de fonctions qui réécrit le code machine de la fonction noyau cible afin qu'elle appelle notre fonction d'accrochage à la place.
Le rootkit n'a été testé qu'avec 1 cœur de processeur, il peut donc fonctionner ou non correctement sur un système multicœur. Il ne fonctionnera probablement pas très bien sur un système multicœur, car le rootkit a été écrit en supposant qu'un seul thread exécute quoi que ce soit à un moment donné ; il lui manque donc les écritures/lectures atomiques et les mutex autour des structures de données de liste.
Chauffez la machine virtuelle de votre choix.
Téléchargez et installez l'image Ubuntu souhaitée :
Pour Ubuntu 10.04, corrigez l'adresse du dépôt de paquets :
sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
Installez un compilateur, les en-têtes Linux et tout ce qui est nécessaire pour compiler le rootkit :
apt-get update
apt-get install build-essential
Veillez à ne pas appeler apt-get upgrade, car cela mettrait à jour le noyau, alors que le rootkit n'a été testé que sur la version de noyau préinstallée.
make
Charger le rootkit :
insmod rootkit.ko
Utiliser le 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.
Décharger le rootkit :
./client --unhide
./client --unprotect
rmmod rootkit.ko
Pas vraiment, il existe de nombreux articles en ligne expliquant comment écrire un rootkit Linux avec le code source complet fourni, sans parler des innombrables dépôts GitHub.
Les documents suivants ont été utilisés pour écrire ce rootkit :
Ce projet est sous licence GPLv2.
| Noyau / 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] |