Journal Modulejail, générer une liste de blocage des modules pour réduire la surface d'attaque du noyau Linux

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
1
7
juin
2026

Les failles récentes comme copy.fail m'ont fait réaliser que les mécanismes d'autochargement des modules, bien que très pratiques, pouvaient permettre d'attaquer le noyau.

D'autant plus avec les noyaux génériques des distributions qui, afin d'avoir une compatibilité importante, incluent un grand nombre de composants optionnels qui peuvent alors servir de cibles.

Mitiger ces problèmes peut se faire de plusieurs façons comme par exemple compiler soi-même son noyau avec les seuls options/pilotes nécessaires, ou encore, bloquer le chargement de tous les modules après le boot à l'aide de l'option sysctl :
sysctl kernel.modules_disabled=1

En moins strict, j'ai découvert récemment Modulejail, script shell qui permet de générer une liste de modules, à placer dans /etc/modprobe.d/ qui ne pourront pas être chargé automatiquement ou via la commande modprobe sans option. Exemple du début d'un fichier sur une debian 13 (3465 modules bloqués) :

# modulejail 1.3.1
# https://github.com/jnuyens/modulejail
# profile: conservative
# kernel: 6.12.90+deb13-armmp-lpae
# fingerprint: sha256:d2dbed22405b981dc040cf1cdaa84d520e388327133f43c6237f4e754d8cd33d
# install-line: /bin/sh + logger + /bin/false (syslog tag: modulejail, --fail-on-module-load)
# invocation: ./modulejail -f -o ./modulejail-blacklist.conf
# Do not edit by hand — regenerate with modulejail(8).
install 3w_sas /bin/sh -c '/usr/bin/logger -t modulejail "blocked: 3w_sas" 2>/dev/null; /bin/false'
install 6lowpan /bin/sh -c '/usr/bin/logger -t modulejail "blocked: 6lowpan" 2>/dev/null; /bin/false'
install 6pack /bin/sh -c '/usr/bin/logger -t modulejail "blocked: 6pack" 2>/dev/null; /bin/false'
install 8021q /bin/sh -c '/usr/bin/logger -t modulejail "blocked: 8021q" 2>/dev/null; /bin/false'

Le script exclut les modules déjà chargés par le système ainsi qu'une liste variable selon trois profils (minimal, conservative et desktop).

Il ne protège pas si l'attaquant est déjà root, (par exemple insmod module.ko ne lit pas /etc/modprobe.d ), il ne corrige pas les bugs, il réduit la surface d'attaque du noyau (ce qui est déjà pas mal).

En cas de problème, il suffit de supprimer/déplacer le fichier pour restaurer le comportement par défaut.

Et bien sur, comme toujours, il est important de lire la documentation avant utilisation pour adapter à votre cas.

Lien : https://github.com/jnuyens/modulejail

  • # Il y a potentiellement plus simple

    Posté par  (site web personnel) . Évalué à 3 (+0/-0).

    echo 1 > /proc/sys/kernel/modules_disabled permet de désactiver le chargement de modules tant que le paramètre est actif.

    Si on a un usage où les modules à charger ne bouge pas au cours du temps, l'activer une fois la session utilisateur lancée suffit. Et en cas de besoin il y a toujours moyen de rechanger dynamiquement la valeur temporairement le temps de charger les modules nécessaires.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.