Aller au contenu

Score de sécurité

Le score de sécurité est une note facultative de A à F (et un score de 0 à 100) affichée à côté des surveillances pour lesquelles quelques contrôles disent quelque chose d’utile : hôtes Linux et Windows avec l’agent, Proxmox VE et Proxmox Backup Server, Synology, OPNsense, sites web et Active Directory. Les autres surveillances n’affichent rien.

Le score est désactivé par défaut. Un administrateur l’active dans Paramètres → Compte et sécurité → Score de sécurité. Une fois activé :

  • chaque surveillance notée reçoit un petit badge en forme de bouclier avec sa lettre dans la liste des surveillances, et un badge Security avec le score sur sa page ;
  • un clic sur le badge ouvre le rapport de la surveillance : ce qui échoue, avec la preuve et le correctif, ce qui réussit, les étapes pour améliorer le score sur ce type de surveillance, et un lien vers la section correspondante ci-dessous.

Le désactiver masque les badges, arrête le calcul périodique, et les séries dumbmonit_security_score ne sont plus écrites.

DumbMonit ne demande jamais rien de plus à la surveillance pour calculer le score. Les contrôles lisent les dernières valeurs que les collecteurs ont déjà enregistrées (en remontant sur 6 heures) : un score ne coûte donc rien à la surveillance.

Chaque contrôle a une catégorie (exposition, correctifs, authentification, chiffrement, sauvegarde, configuration), une gravité qui est son poids (critical 10, high 6, medium 3, low 1), un résultat (réussi, échoué, ou inconnu quand la donnée n’est pas collectée), la preuve, le correctif et un lien vers la page du fournisseur sur laquelle il se base.

Score = 100 × (poids des contrôles réussis) ÷ (poids des contrôles réussis

  • échoués). Les contrôles inconnus sont affichés mais jamais comptés : un score ne doit pas baisser parce qu’un compte de supervision manque d’un privilège, ni monter parce que rien n’est connu. Une surveillance dont tous les contrôles sont inconnus n’est pas noté.
NoteScoreMot
A90–100Fort
B75–89Bon
C60–74Correct
D40–59Faible
F0–39Mauvais

Un contrôle critique en échec plafonne la note à C, quel que soit le score.

Tant que le score est activé, le serveur le recalcule toutes les 15 minutes et le stocke sous la forme dumbmonit_security_score{target="<id>"} (et le nombre de contrôles en échec sous dumbmonit_security_checks_failed). Deux règles intégrées l’utilisent : Security score dropped (10 points ou plus sous la meilleure valeur des dernières 24 heures) et Security score low (sous 40). Voir Règles d’alerte.

Machines avec l’agent. Les contrôles SSH et pare-feu demandent un agent de la même version que le serveur ; avec un agent plus ancien, ils sont inconnus.

ContrôleGravitéDonnée
Security updates installedhighmises à jour de sécurité en attente (là où le gestionnaire de paquets les distingue)
No pending updateslowmises à jour en attente
No reboot pendingmediumredémarrage requis
SSH root login with a password refusedhighPermitRootLogin de sshd -T (prohibit-password réussit)
SSH accepts keys onlymediumPasswordAuthentication, et KbdInteractiveAuthentication avec UsePAM
Host firewall filters inbound traffichighune chaîne input nftables ou iptables qui rejette ou abandonne
SELinux enforcingmediummode SELinux (inconnu là où SELinux est absent)
Container images up to datemediumimage plus récente dans le registre (uniquement avec des conteneurs)
No container image older than 180 dayslowâge de l’image (uniquement avec des conteneurs)

Pour l’améliorer :

  1. Installez les mises à jour de sécurité en attente, puis activez les mises à jour de sécurité automatiques : unattended-upgrades sur Debian et Ubuntu, dnf-automatic sur Fedora et RHEL.
  2. Redémarrez après les mises à jour du noyau ou des bibliothèques.
  3. Vérifiez que votre clé SSH fonctionne, puis définissez PermitRootLogin no, PasswordAuthentication no et KbdInteractiveAuthentication no dans /etc/ssh/sshd_config et rechargez sshd.
  4. Activez un pare-feu d’hôte qui rejette le trafic entrant non sollicité : ufw enable sur Ubuntu, firewalld sur Fedora et RHEL, un jeu de règles nftables ailleurs.
  5. Gardez SELinux en mode enforcing là où la distribution le fournit ; tirez régulièrement les images de conteneurs plus récentes.

Sources : CIS Controls, sshd_config(5), Red Hat — Using SELinux.

Machines avec l’agent Windows, de la même version que le serveur (lus depuis le registre ; un agent plus ancien ne remonte aucun de ces contrôles).

ContrôleGravitéDonnée
Windows Firewall on for every profilehighprofils domaine, privé et public (stratégie de groupe d’abord)
No reboot pendingmediumWindows Update ou maintenance de composants en attente d’un redémarrage
Remote Desktop requires Network Level Authenticationhighréussit quand le Bureau à distance est désactivé
SMBv1 disabledhighparamètre du serveur SMBv1

Pour l’améliorer :

  1. Installez les mises à jour Windows (Paramètres → Windows Update) et redémarrez quand c’est demandé.
  2. Gardez le Pare-feu Windows Defender activé pour les profils domaine, privé et public.
  3. Si le Bureau à distance est activé, exigez l’authentification au niveau du réseau (NLA) et accédez-y par un VPN, jamais directement depuis Internet.
  4. Supprimez SMBv1 : Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol.

Sources : Windows Firewall, SMBv1.

ContrôleGravitéDonnée
Security updates installedhighmises à jour de sécurité en attente par nœud (demande Sys.Modify sur le jeton, sinon inconnu)
Proxmox VE packages up to datemediumpaquets Proxmox pouvant être mis à niveau par nœud
Running the installed kernelmediumnoyau plus récent installé que celui qui tourne
No test repository in usemediumdépôts standard activés
Package repositories correctly configuredmediumerreurs et avertissements que Proxmox VE remonte sur les dépôts
Enterprise repository subscriptionlowétat de l’abonnement par nœud
Web interface certificate valid for 14+ daysmediumexpiration du certificat du nœud
Every guest is in a backup jobhighinvités non sélectionnés par aucun job de sauvegarde
Backup jobs succeedhighdernier résultat de chaque job de sauvegarde

Pour l’améliorer :

  1. Utilisez un dépôt auquel vous avez droit : enterprise avec un abonnement, sinon pve-no-subscription ; jamais pvetest sur un nœud qui compte.
  2. Installez les mises à jour depuis le panneau Updates du nœud, puis redémarrez sur le nouveau noyau.
  3. Mettez chaque VM et conteneur dans un job de sauvegarde, idéalement vers un Proxmox Backup Server, et corrigez tout job qui échoue.
  4. Remplacez le certificat web auto-signé par un certificat ACME.

Sources : System Software Updates, Package Repositories, Backup and Restore.

ContrôleGravitéDonnée
System updates installedhighmises à jour en attente (demande Sys.Modify sur /system)
Running the installed Backup Server versionmediumdémons tournant encore sur la version précédant la mise à niveau
Verify job scheduledhighnombre de jobs de vérification
Prune job scheduledmediumnombre de jobs de prune
Backups copied elsewhere (sync or tape)mediumjobs de synchronisation et de sauvegarde sur bande (règle 3-2-1)
Garbage collection clean, no bad chunkshighdernier résultat du GC et chunks défectueux par datastore
Certificate valid for 14+ daysmediumexpiration du certificat

Pour l’améliorer :

  1. Installez les mises à jour et redémarrez quand le noyau ou proxmox-backup a changé.
  2. Planifiez un job de vérification et un job de prune sur chaque datastore.
  3. Gardez une copie ailleurs : un job de synchronisation vers un second Backup Server, ou une bande.
  4. Utilisez un certificat ACME pour l’interface web.

Sources : Maintenance tasks, Remotes and sync.

ContrôleGravitéDonnée
DSM 7 or laterhighversion de DSM
DSM up to datehighune mise à jour de DSM est disponible (compte administrateur uniquement)
Built-in admin account disabledmediumétat du compte admin (compte administrateur uniquement)
Auto Block enabledmediumréglage Auto Block (compte administrateur uniquement)
DSM firewall enabledmediumréglage du pare-feu (compte administrateur uniquement)
Hyper Backup task configuredmediumnombre de tâches Hyper Backup
Hyper Backup tasks succeedhighdernier résultat de chaque tâche

Les quatre réglages sont lus une fois par heure et seulement quand DumbMonit se connecte avec un compte administrateur ; avec un compte ordinaire ils restent inconnus et ne comptent pas. La validation en deux étapes et la redirection HTTPS ne sont pas lues.

Pour l’améliorer :

  1. Utilisez la dernière version de DSM 7 pour votre modèle et laissez DSM installer automatiquement les mises à jour importantes (Panneau de configuration → Mise à jour et restauration).
  2. Désactivez le compte intégré admin ; connectez-vous avec un administrateur personnel protégé par la validation en deux étapes.
  3. Activez Auto Block et le pare-feu (Panneau de configuration → Sécurité), et ne redirigez pas les ports de DSM vers Internet : utilisez un VPN.
  4. Sauvegardez vers un autre appareil ou une destination cloud avec Hyper Backup, et corrigez toute tâche qui échoue : RAID et instantanés ne sont pas des sauvegardes.

Sources : Product support status, How to add extra security to your Synology NAS.

ContrôleGravitéDonnée
Firmware updates installedhighmises à jour de paquets en attente (inconnu tant qu’OPNsense n’a pas vérifié les mises à jour)
On the current major release seriesmediumnouvelle série majeure disponible
No reboot pending after an updatemediumredémarrage requis
Packet filter enabledcriticalétat de pf

Pour l’améliorer :

  1. Vérifiez les mises à jour dans System → Firmware → Status, installez-les, redémarrez quand c’est demandé.
  2. Passez à la nouvelle version majeure dès qu’elle est sortie.
  3. Gardez le filtre de paquets activé.
  4. N’autorisez l’interface web et SSH que depuis le LAN ou un VPN, jamais depuis le WAN.

Sources : OPNsense updates, OPNsense firewall.

Pour les surveillances HTTP(S) et TLS qui négocient TLS, et pour les surveillances Website health & SEO. Une surveillance HTTP en clair n’a pas de score.

ContrôleGravitéDonnée
Certificate valid for 14+ dayshighjours avant expiration (surveillances HTTP(S) et TLS)
Certificate chain trustedhighvérification de la chaîne (surveillances HTTP(S) et TLS)
TLS 1.3 negotiatedlowversion du protocole négocié (surveillances HTTP(S) et TLS)
Served over HTTPShighadresse finale après redirections (Website health)
Strict-Transport-Security headermediumen-tête avec un max-age supérieur à 0
X-Content-Type-Options: nosnifflowvaleur de l’en-tête
Protected against clickjackinglowX-Frame-Options ou frame-ancestors de la CSP
Content-Security-Policy headerlowune politique appliquée (le mode report-only ne compte pas)

Les en-têtes ne sont lus que sur les réponses HTTPS.

Pour l’améliorer :

  1. Servez le site uniquement en HTTPS, et redirigez le HTTP en clair vers HTTPS.
  2. Automatisez le renouvellement du certificat (ACME, p. ex. Let’s Encrypt) et servez la chaîne complète.
  3. Ajoutez des en-têtes de sécurité dans le serveur web ou le reverse proxy : Strict-Transport-Security, X-Content-Type-Options: nosniff, et une Content-Security-Policy avec frame-ancestors.
  4. Recoupez avec Mozilla HTTP Observatory, qui teste bien plus que ce score.

Sources : Mozilla Server Side TLS, MDN — HTTP headers.

Noté à partir des constats de type PingCastle du collecteur Active Directory : comptes Kerberoastables, comptes sans pré-authentification Kerberos, délégation non contrainte, ancienneté du mot de passe krbtgt, taille des groupes privilégiés, couverture LAPS, politique de mots de passe, comptes obsolètes. Chaque constat est un contrôle qui réussit quand il concerne zéro objet.

Pour l’améliorer :

  1. Corrigez d’abord les constats critiques et élevés : ce sont les chemins habituels vers les Domain Admins.
  2. Si le mot de passe krbtgt est ancien, réinitialisez-le deux fois, à quelques heures d’intervalle, et retirez la délégation non contrainte des ordinateurs qui ne sont pas des contrôleurs de domaine.
  3. Faites passer les services qui tournent sous des comptes utilisateurs avec SPN vers des comptes de service gérés de groupe (gMSA).
  4. Lancez PingCastle pour une évaluation complète.

Sources : PingCastle health check rules, Windows LAPS.

  • Le score ne reflète que ce que DumbMonit peut voir ; de nombreuses bonnes pratiques ne sont pas contrôlées faute de collecteur qui lise la donnée : pare-feu et authentification à deux facteurs de Proxmox, interface web d’OPNsense exposée sur le WAN, conteneurs Docker tournant en privilégié ou avec le socket Docker monté, TLS 1.0/1.1 encore proposés (la sonde ne négocie que TLS 1.2 et 1.3), et bien d’autres.
  • Un contrôle n’est aussi frais que sa donnée : certains collecteurs ne relisent les mises à jour que toutes les quelques heures.
  • Les poids sont un choix de produit, identique pour toutes les installations.
  • Seuls les types ci-dessus sont notés. Les autres (switchs, imprimantes, UniFi, pfSense…) n’affichent volontairement aucun badge : quelques contrôles donneraient une note qui ne veut rien dire.