Product SiteDocumentation Site

10.4. Éviter les rootkits

10.4.1. Loadable Kernel Modules (LKM)

Les LKM (Loadable Kernel Modules ou modules de noyau chargeables) sont des fichiers contenant des composants de noyau chargeables dynamiquement utilisés pour étendre les fonctionnalités de noyau. Le principal avantage d'utiliser des modules est la possibilité d'ajouter des périphériques additionnels comme une carte réseau ou une carte son sans avoir à recompiler le noyau entièrement. Cependant certains pirates peuvent utiliser les LKM pour les rootkits (knark et adore) afin d'installer des portes dérobées sur des systèmes GNU/Linux.
Les portes dérobées des LKM peuvent être plus sophistiquées et moins détectables que des rootkits traditionnels. Ils peuvent cacher des processus, des fichiers, des répertoires et même des connexions sans modifier les codes source des binaires. Par exemple, un LKM peut forcer le noyau à cacher des processus spécifiques dans procps pour que même une bonne copie du binaire ps ne puisse donner des informations exactes à propos des processus actuels du système.

10.4.2. Détection des rootkits

Il existe deux approches pour défendre le système contre les rootkits LKM, une défense proactive et une défense réactive. La détection peut être simple et sans douleur ou difficile et fatigante selon la mesure que vous choisissez.

10.4.2.1. Défense proactive

L'avantage de ce type de défense est qu'elle prévient des dommages que pourrait entraîner un rootkit au système. Une telle stratégie est de les attraper en premier, c'est-à-dire de charger un LKM bien défini pour protéger le système d'autres LKM infectés. Une deuxième stratégie consiste à retirer la fonctionnalité de chargement des modules du noyau lui-même. Notez, cependant, qu'il existe des rootkits qui peuvent fonctionner même dans ce cas, certains altèrent même directement /dev/kmem (la mémoire du noyau) pour se rendre indétectables.
Debian GNU/Linux fournit quelques paquets à utiliser pour mettre en place une défense proactive :
lcap — interface utilisateur agréable pour retirer les fonctionnalités (contrôle d'accès basé sur le noyau) dans le noyau, rendant le système plus sécurisé. Par exemple, exécuter lcap CAP_SYS_MODULE [74] enlèvera des fonctionnalités de chargement des modules (même pour le superutilisateur).[75] De vieilles informations sur ces fonctionnalités sont dans la section de Jon Corbet http://lwn.net/1999/1202/kernel.php3 sur LWN datant de décembre 1999.
Si vous n'avez pas besoin de toutes ces fonctionnalités de noyau sur un système GNU/Linux, vous pourriez désactiver la prise en charge des modules chargeables lors de la configuration du noyau. Pour désactiver la prise en charge des modules chargeables, positionnez simplement CONFIG_MODULES=n lors de l'étape de configuration de construction du noyau ou dans le fichier .config. Cela prévient des rootkits LKM mais vous ne pourrez plus utiliser les modules avec le noyau GNU/Linux. La désactivation des modules peut surcharger le noyau, rendant la gestion du chargement nécessaire.

10.4.2.2. Défense réactive

L'avantage d'une défense réactive est qu'elle représente une faible surcharge au niveau des ressources systèmes. Elle fonctionne en comparant la table des appels systèmes avec une copie sûre d'un fichier du disque, System.map. Bien sûr, une défense réactive n'avertira l'administrateur qu'après la compromission du système.
La détection des rootkits dans Debian peut être accomplie avec le paquet chkrootkit. Le programme http://www.chkrootkit.org cherche des signes de présence de plusieurs rootkits connus sur le système local, mais ce n'est pas un test définitif.


[74] 28 fonctionnalités existent, y compris : CAP_BSET, CAP_CHOWN, CAP_FOWNER, CAP_FSETID, CAP_FS_MASK, CAP_FULL_SET, CAP_INIT_EFF_SET, CAP_INIT_INH_SET, CAP_IPC_LOCK, CAP_IPC_OWNER, CAP_KILL, CAP_LEASE, CAP_LINUX_IMMUTABLE, CAP_MKNOD, CAP_NET_ADMIN, CAP_NET_BIND_SERVICE, CAP_NET_RAW, CAP_SETGID, CAP_SETPCAP, CAP_SETUID, CAP_SYS_ADMIN, CAP_SYS_BOOT, CAP_SYS_CHROOT, CAP_SYS_MODULE, CAP_SYS_NICE, CAP_SYS_PACCT, CAP_SYS_PTRACE, CAP_SYS_RAWIO, CAP_SYS_RESOURCE, CAP_SYS_TIME et CAP_SYS_TTY_CONFIG. Elles peuvent être toutes désactivées pour renforcer le noyau.
[75] Vous n'avez pas besoin d'installer lcap pour faire cela, mais c'est plus facile que de configurer /proc/sys/kernel/cap-bound soi-même.