Sections du handbook

Hygiène des paquets

Revu le

Chaque paquet installé est du code exploitable. Retirez l'inutile et le dangereux, gardez le reste corrigé automatiquement, et vérifiez que les paquets sont signés et réellement présents.

La menace : plus de paquets, plus de CVE, plus de clair

Chaque paquet installé est de la surface d'attaque : plus de binaires, plus de services à l'écoute, plus de bibliothèques avec leur propre flux de CVE. Deux travers dominent. D'abord, les logiciels obsolètes et non sécurisés qui n'ont rien à faire sur un hôte moderne : les familles telnet, rsh, ftp, tftp et talk parlent des protocoles non chiffrés, en clair ; identifiants et données de session se laissent capturer ou altérer trivialement sur le réseau ; un rsh-server authentifie même par fichiers de confiance (.rhosts), transformant une position réseau en connexion privilégiée. Ensuite, les paquets non corrigés : une CVE connue dans un composant installé est une recette d'exploitation publiée, et un serveur en retard sur ses mises à jour de sécurité tombe avec des outils publics. Ajoutez l'altération de la chaîne d'approvisionnement (un paquet piégé ou substitué) et l'ensemble installé devient lui-même la charge utile.

Pourquoi le durcir

On ne peut pas défendre ce qu'on n'avait pas besoin d'installer. Un paquet supprimé, c'est zéro CVE, zéro port à l'écoute, zéro mauvaise configuration. Réduire l'ensemble des paquets est la baisse de risque la moins chère et la plus durable : elle allège la charge de correctifs, élimine des classes entières de protocoles en clair et supprime les services dormants qu'un attaquant pourrait activer. Ce qui reste doit être à jour (mises à jour de sécurité appliquées sans délai) et digne de confiance (ce qui est sur le disque correspond à ce que la distribution a signé).

Principes de défense appliqués

  • Réduction de la surface d'attaque : désinstaller les paquets sans utilité métier, surtout les serveurs/clients non sécurisés (telnet/telnetd, rsh/rsh-server, ftp/vsftpd, tftp/tftp-server, talk/talkd, snmpd, xinetd, nis/ypserv).
  • Gestion des correctifs : appliquer les mises à jour de sécurité rapidement et automatiquement (unattended-upgrades, dnf-automatic) pour qu'elles arrivent sans effort manuel.
  • Intégrité et provenance : ne faire confiance qu'aux paquets signés des dépôts autorisés (vérification GPG), et figer une empreinte des binaires avec une surveillance d'intégrité des fichiers (AIDE), afin de détecter un paquet altéré.
  • Fonctionnalité minimale : conserver l'outillage de sécurité (audit, sudo, cron, openssh-server) et retirer le reste.
  • Défense en profondeur : un service supprimé ne peut être ni mal configuré, ni exposé, ni exploité plus tard.

Comment garder les paquets corrigés ?

L'objectif : des mises à jour de sécurité, appliquées vite, sans intervention. Appliquez les correctifs de sécurité seuls, puis automatisez-les :

# Debian/Ubuntu : sécurité seulement, puis automatiser
apt update && apt list --upgradable
unattended-upgrade --dry-run -d          # apercu de ce que la politique sécurité installerait
apt install unattended-upgrades && dpkg-reconfigure -plow unattended-upgrades

# RHEL/Fedora : sécurité seulement, puis automatiser
dnf updateinfo list security             # quels bulletins de sécurité s'appliquent
dnf upgrade --security
dnf install dnf-automatic                # poser apply_updates=yes dans /etc/dnf/automatic.conf
systemctl enable --now dnf-automatic.timer

Vérifier la confiance des paquets et l'état de patch

# La signature du depot est-elle reellement imposee ? (intégrité supply-chain)
grep -R gpgcheck /etc/dnf/dnf.conf /etc/yum.repos.d/   # gpgcheck=1 partout (RHEL)
apt-config dump | grep -i AllowUnauthenticated         # doit rester 'false' (Debian)
# L'automatisation tourne-t-elle ?
systemctl status unattended-upgrades dnf-automatic.timer
# L'hôte est-il en retard, et faut-il redémarrer ?
apt list --upgradable ; dnf updateinfo summary
[ -f /var/run/reboot-required ] && echo 'reboot requis' ; needs-restarting -r

Ce que Pavois audite : la base du gestionnaire de paquets

Pavois pilote plus d'une centaine de règles de paquets via la ressource package(...) de CINC/InSpec, qui interroge la base de données du gestionnaire de paquets (dpkg/rpm), l'état réellement installé, et non une déduction à partir d'une liste de fichiers. Chaque règle affirme qu'un paquet should_not be_installed (non sécurisé ou inutile) ou should be_installed (outillage de sécurité). Il vérifie que les familles de protocoles en clair ont disparu (telnet/telnetd, rsh/rsh-server, ftp/vsftpd, tftp/tftp-server, talk/talkd), ainsi que les serveurs inutiles (snmpd, xinetd, nis/ypserv, samba, dovecot, nginx/httpd, bind, dnsmasq, cups) ; et que les paquets défensifs sont présents (aide, dnf-automatic/unattended-upgrades, audit, sudo, cron, openssh-server, la pile MAC). Comme l'assertion lit la base des paquets, le résultat reflète ce qui est réellement installé et exécutable. Les constats sont mappés sur l’hygiène des paquets CIS et ANSSI BP-028 R45/R67.

Pièges

  • --allow-unauthenticated / gpgcheck=0 ruine tout le modèle de confiance : ne désactivez jamais la vérification de signature pour faire passer une installation ; corrigez plutôt la clé manquante.
  • Des mises à jour automatiques sans redémarrage automatique laissent les CVE noyau actives : un noyau corrigé ne protège qu'après un redémarrage. Configurez une fenêtre de reboot (Unattended-Upgrade::Automatic-Reboot).
  • Supprimer un paquet dont un service dépend le casse : vérifiez les dépendances inverses (apt rdepends, dnf repoquery --whatrequires) avant de purger.
  • Une mise à jour automatique peut tirer un changement cassant : limitez-la au canal sécurité, et testez en pré-production pour les hôtes critiques.

FAQ

Comment n'appliquer que les mises à jour de sécurité ? dnf upgrade --security (RHEL) ou unattended-upgrades limité au canal sécurité (Debian) ; dnf updateinfo list security / apt list --upgradable montrent ce qui s'applique.

Comment savoir que les paquets sont authentiques ? Vérification de signature GPG : gardez gpgcheck=1 (dnf) et ne passez jamais --allow-unauthenticated (apt). apt-secure rejette les dépôts non signés par défaut.

Pourquoi Pavois lit-il dpkg/rpm au lieu de scanner les fichiers ? Parce que la base des paquets est l'état d'installation faisant autorité ; un binaire laissé sur le disque ou un paquet à moitié retiré tromperait un scan de fichiers.