Aucun compilateur disponible (surface d'attaque)
Garantit qu'aucun compilateur C/C++ (gcc, cc, clang, g++, tcc) n'est présent sur un hôte de production, réduisant la surface d'attaque disponible pour un intrus.
Vérifié sur ce qui est installé ou enregistré, paquets présents/absents, bases de comptes.
Pourquoi cette règle
Un compilateur sur un serveur de production est un cadeau pour un attaquant : il lui permet de compiler des exploits d'élévation de privilèges, des modules noyau, des rootkits ou des outils sur mesure directement sur la cible, transformant du code source introduit en binaires fonctionnels qui contournent les listes d'autorisation. Les hôtes de production n'ont quasiment jamais besoin de compiler localement, les logiciels devraient être construits ailleurs et déployés sous forme de paquets. Retirer les compilateurs oblige l'attaquant à apporter des outils précompilés, ce qui est plus bruyant et plus facile à bloquer.
Ce que vérifie Pavois
Pavois contrôle l'état effectif en sondant le PATH (command -v) pour chaque binaire de compilateur connu et attend un résultat vide. Résoudre le PATH réel est plus fiable que d'inspecter un manifeste de paquets : cela détecte un compilateur installé à la main, lié par symlink ou embarqué dans un autre paquet.
describe command('for c in gcc cc c++ g++ cpp make; do p=$(command -v $c 2>/dev/null) || continue; p=$(readlink -f \"$p\"); find \"$p\" -perm -o+x 2>/dev/null; done') do
its('stdout.strip') { should eq '' }
endComment vérifier qu’elle est appliquée
Lancez for c in gcc cc clang g++ tcc; do command -v $c; done, il ne doit rien afficher. Chaque binaire manquant confirme qu'aucun compilateur n'est accessible dans le PATH.
Inspecter et investiguer
Il n'existe pas de journal d'exécution pour cette règle. Confirmez l'absence avec command -v gcc cc clang g++ tcc (vide) et dpkg -l gcc 'g++' clang / rpm -q gcc pour vérifier que les paquets ne sont pas installés.
Remédiation
Aucune remédiation automatisée n'est fournie, appliquez-la donc manuellement : supprimez les paquets de compilateur (apt purge gcc g++ clang / dnf remove gcc gcc-c++ clang) ainsi que tout binaire de compilateur autonome. Restreignez les droits d'exécution de tout compilateur devant rester (par ex. pour DKMS) au seul utilisateur root.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| command | for p in gcc cpp g++ gcc-12 g++-12 cpp-12 clang tcc tcc-dev; do dpkg -l "$p" 2>/dev/null | grep -q '^ii' && DEBIAN_FRONTEND=noninteractive apt-get purge -y "$p" >/dev/null 2>&1; done; true; for c in gcc cc c++ g++ cpp make; do p=$(command -v $c 2>/dev/null) || continue; chmod o-x "$p" 2>/dev/null; don; for c in gcc cc c++ g++ cpp make; do p=$(command -v $c 2>/dev/null) || continue; chmod o-x "$(readlink -f "$p")" 2>/dev/null; done; true |
|---|---|
| name | purge-compilers |
| not_if | test -z "$(for c in gcc cc c++ g++ cpp make; do p=$(command -v $c 2>/dev/null) || continue; p=$(readlink -f \"$p\"); find \"$p\" -perm -o+x 2>/dev/null; done)" |
| resource | exec |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Retirer les compilateurs peut casser les compilations et outils qui compilent à l'installation ou à l'exécution : modules noyau DKMS, installeurs basés sur make, certains gestionnaires de paquets de langage (gems/wheels/addons npm natifs) et la gestion de configuration compilant depuis les sources. Avant d'appliquer, vérifiez que l'hôte n'en dépend pas, si c'est le cas, conservez le compilateur avec des droits restreints ou déportez cette étape vers un serveur de build dédié. Les serveurs purement d'exécution/production sont sûrs.