Aller au contenu

Notions de sécurité

Avant de régler le durcissement d’un hôte, il faut comprendre ce que protège le module darkone.system.security et comment il décide d’activer une protection. Cette page rassemble toutes les notions utiles pour paramétrer la sécurité en confiance.

Le durcissement suit le référentiel ANSSI BP-028 🡕 (GNU/Linux). Chaque recommandation porte un code (R30, C4…) et s’active automatiquement selon le niveau et la catégorie de la machine.

La sécurité n’est pas un interrupteur, c’est un curseur. On part d’un socle sûr pour tous, puis on renforce là où le risque le justifie. Trois principes guident chaque règle.

PrincipeIdéeExemple dans DNF
Défense en profondeurEmpiler les barrières, aucune n’est seulePare-feu, isolation des services, chiffrement
Moindre privilègeDonner juste ce qu’il faut, rien de plussudo ciblé, services sans droits root
Surface d’attaque réduiteMoins de code exposé, moins de faillesServices obsolètes coupés, ports surveillés
Diagram

Une règle s’applique si, et seulement si, toutes ces conditions sont réunies. Ce sont les seuls réglages à connaître.

LevierRôle
enableActive le module (activé par défaut sur tous les hôtes)
levelLe niveau visé : plus il est haut, plus de règles s’activent
categoryLe type de machine : ajoute les règles propres au poste ou au serveur
excludesDes étiquettes qui coupent un groupe de règles incompatibles
exceptionsUne règle précise contournée, avec justification obligatoire
darkone.system.security = {
enable = true;
level = "intermediary"; # minimal | intermediary | reinforced | high
category = "server"; # base | client | server
};

Les niveaux sont cumulatifs : chaque palier ajoute ses règles à celles des paliers inférieurs. On monte progressivement, en testant chaque hôte.

NiveauPour quoiCoût / contraintes
minimalSocle commun, tout système (défaut)Quasi nul, transparent
intermediaryRecommandé pour presque tous les systèmesFaible, quelques ajustements
reinforcedSystèmes sensibles ou multi-utilisateursRéel : isolation, MAC, auditd
highCompétences et budget dédiésÉlevé : recompilation du noyau

La catégorie sélectionne des sous-ensembles de règles selon l’usage de la machine. Elle est indépendante du niveau.

CatégorieMachine viséeAjoute notamment
baseUniverselle, toujours appliquéeToutes les règles communes
clientPoste de travail (écran, USB, session)USBGuard, verrouillage de session
serverServeur (services exposés)Isolation réseau, supervision des services

Les protections du module reposent sur des mécanismes Linux standards. Voici ceux qu’il faut connaître pour lire le catalogue des règles.

NotionÀ quoi ça sert
Secure Boot 🡕N’autorise au démarrage que du code signé (anti-rootkit)
LUKS2 🡕Chiffre le disque : vol de machine = données illisibles
IOMMU 🡕Isole les accès mémoire des périphériques (anti-DMA)
Mot de passe du chargeurEmpêche de modifier le démarrage sans authentification
NotionÀ quoi ça sert
sysctl 🡕Réglages noyau qui ferment des comportements risqués
LSM 🡕Modules de sécurité greffés dans le noyau
Lockdown 🡕Verrouille les accès directs au noyau (mémoire, kexec)
Yama 🡕Restreint ptrace (un process ne peut pas en espionner un autre)
Modules signésRefuse de charger un pilote noyau non signé
linux_hardened 🡕Noyau précompilé avec des protections renforcées
NotionÀ quoi ça sert
PAM 🡕La chaîne qui valide chaque authentification
yescrypt 🡕Algorithme moderne de stockage des mots de passe
pam_faillockBloque le compte après plusieurs échecs (anti force brute)
Comptes non mutablesLes comptes sont déclarés en config, pas créés à la volée
Moindre privilège sudoDroits d’administration ciblés, tracés, sans négation
NotionÀ quoi ça sert
MAC 🡕Contrôle d’accès obligatoire (AppArmor) : un service ne sort pas de son bac à sable
Isolation systemdProtectSystem, namespaces, capacités réduites par service
CapabilitiesDonner un droit précis (ex. ouvrir un port) sans tout root
setuid minimalRéduire les binaires qui s’exécutent en root
NotionÀ quoi ça sert
nftables 🡕Le moteur de pare-feu (DNF est en refus par défaut)
Filtrage sortant (egress)Bloque ce que la machine a le droit de contacter
DNSSEC 🡕 / DoT 🡕Résolution DNS authentifiée et chiffrée
NTS 🡕Synchronisation de l’heure authentifiée
Surface réseau réduiteSurveille et limite les ports en écoute
NotionÀ quoi ça sert
Journaux persistants scellésTraces inviolables, conservées au redémarrage
auditd 🡕Enregistre les appels système sensibles
Scellement / HIDSVérifie qu’aucun fichier système n’a été altéré

Certaines règles cassent un usage légitime. On les neutralise par étiquette dans excludes, sans descendre le niveau global.

ÉtiquetteIgnore
kernel-recompileLe durcissement noyau à la compilation (R15 à R27, C1)
no-ipv6La désactivation d’IPv6 (R13, R22)
no-macLe contrôle d’accès obligatoire (R37, R45)
no-auditdauditd (R73)
needs-jitLe W^X strict (Java, .NET, V8, WebAssembly)
needs-hibernationLa coupure de l’hibernation (ordinateurs portables)
needs-usb-hotplugUSBGuard (postes à branchements USB fréquents)
darkone.system.security.excludes = [ "needs-jit" "no-ipv6" ];

Pour contourner une règle précise sans toucher au reste, on pose une exception avec une justification (obligatoire, tracée dans la configuration).

darkone.system.security.exceptions = {
R9.rationale = "Conteneurs rootless requis en développement.";
};

Monter un niveau peut gêner un usage courant. Les principaux pièges :

Chaque fichier de règle documente ses effets de bord dans des commentaires sideEffects. Le catalogue des règles en donne la vue d’ensemble par niveau.