Aller au contenu

Modèle de sécurité

Cette page décrit ce que DumbMonit protège, à qui il fait confiance, comment sa conception limite les dégâts d’une erreur, et où regarder dans le code et les tests. Pour signaler une vulnérabilité, suivez la politique de sécurité.

DumbMonit tourne dans votre réseau. Il conserve les identifiants nécessaires pour lire chaque surveillance (communautés SNMP, jetons d’API, mots de passe), il reçoit les mesures des agents installés sur vos machines et il envoie des requêtes vers les adresses que vous configurez. Une compromission exposerait ces secrets et donnerait un point d’appui dans le réseau supervisé.

FrontièreDe l’autre côtéConfiance
Navigateur ou script vers /api/*Admins, opérateurs et lecteursAuthentifiés par cookie de session ou jeton d’API ; trois rôles limitent ce que chacun peut faire.
Agent vers /api/ingestMachines où vous avez installé un agentUn jeton par machine ; un jeton qui fuite se révoque seul.
Serveur vers surveillances et servicesSystèmes tiersNon fiables : les réponses sont analysées avec prudence et les redirections restent sur le même hôte.
Serveur vers canaux de notificationServices externesIdentifiants chiffrés au repos, jamais renvoyés par l’API.
Serveur vers VictoriaMetricsProcessus enfant en boucle locale, ou instance externeL’instance embarquée n’a pas d’authentification et écoute en boucle locale ; une instance externe relève de l’opérateur.
Volume /data et hôteL’opérateurDe confiance. Un attaquant qui contrôle l’hôte ou le volume est hors périmètre.
  • Moindre privilège. Le conteneur tourne sans privilège, sans capability, avec un système de fichiers racine en lecture seule et no-new-privileges. Trois rôles (lecteur, opérateur, admin) limitent les modifications (crates/server/src/auth/users.rs ; test operator_role_api.rs).
  • Sûr par défaut. Sur une instance neuve, seules les routes de santé, d’installation, de connexion et d’état d’authentification répondent tant que le premier admin n’existe pas (test api_open_security_api.rs).
  • Économie de mécanisme. Un binaire, un fichier SQLite, un processus enfant en boucle locale, une seule entrée pour tous les clients : /api/*.
  • Défauts sûrs. Un contrôle de sécurité sans donnée est unknown, jamais une réussite ; une surveillance injoignable et une erreur de configuration sont des états distincts.
  • Médiation complète. Un seul intergiciel d’authentification (crates/server/src/auth/middleware.rs) protège les routes de l’API.
  • Séparation des privilèges. Sessions, jetons d’API et jetons d’agent sont des identifiants différents, à la portée différente.
  • Défense en profondeur. Chiffrement au repos en plus du contrôle d’accès, en-tête anti-CSRF en plus des attributs du cookie, limitation des essais en plus du hachage des mots de passe.
  • Aucun secret ne revient. L’API renvoie has_secret et credential_kind, jamais le secret ; omettre un secret dans un PUT le conserve.
  • Cryptographie éprouvée uniquement. Mots de passe hachés avec Argon2, secrets chiffrés en AES-256-GCM (crypto.rs), double authentification TOTP avec codes de secours hachés à usage unique, OpenID Connect avec state, nonce et PKCE. Rien n’est maison.
Classe (thème OWASP Top 10)Mesures
Contrôle d’accès défaillantUn seul intergiciel d’authentification ; rôles ; une instance neuve refuse tout sauf installation, connexion, santé et état d’authentification.
Défaillances cryptographiquesAES-256-GCM au repos, clé hors de la base ; mots de passe hachés avec Argon2id (paramètres OWASP) ; HTTPS sur le port de l’interface lui-même (TLS 1.3/1.2 AEAD, X25519MLKEM768, HSTS, cookie de session __Host- Secure SameSite=Strict) ; canal des agents en TLS 1.3 avec certificats clients ; chaque connexion encore en clair est listée dans les réglages (HTTPS and encryption).
InjectionSQL via sqlx avec paramètres liés ; le proxy VictoriaMetrics ne transmet que des requêtes en lecture (tsdb/mod.rs, proxy_read) ; analyseurs testés unitairement.
Conception non sécuriséeLe modèle de menaces ci-dessus ; aucun secret ne revient ; instance à usage unique.
Mauvaise configurationFichiers Compose durcis, VictoriaMetrics en boucle locale, notes de durcissement dans la politique de sécurité.
Composants vulnérablescargo deny contrôle licences, interdits et avis RustSec ; scan Trivy hebdomadaire des images publiées ; Dependabot ; GitHub Actions épinglées par commit.
Défauts d’identification et d’authentificationLimitation des essais par adresse client et par compte (auth/rate_limit.rs), double authentification facultative, OpenID Connect, un admin peut réinitialiser le second facteur d’un utilisateur et le déconnecter.
Intégrité des logiciels et des donnéesLes installateurs d’agent vérifient le SHA-256 du binaire téléchargé ; les images publiées sont construites par la CI.
Journalisation et surveillanceUn journal de sécurité des connexions et changements sensibles (auth/audit.rs).
Falsification de requête côté serveurIntégrations et canaux ne suivent les redirections que vers le même hôte : une surveillance ne peut pas détourner une requête et sa clé d’API ailleurs.
Falsification de requête inter-sitesUne requête qui modifie l’état et s’appuie sur le cookie doit porter X-Requested-With: DumbMonit ou des métadonnées de même origine, sinon 403 ; les requêtes par jeton n’ont pas de cookie.

Chaque push et pull request exécute clippy -D warnings, la suite de tests Rust (dont les tests d’API, d’authentification et de rôles dans crates/server/tests/), les tests web dans web/tests/, les contrôles de dépendances et l’analyse CodeQL. L’OpenSSF Scorecard tourne périodiquement. Un correctif de sécurité vient avec un test de non-régression et figure, avec son identifiant CVE ou GHSA, dans les notes de version.

L’argumentaire d’assurance détaille le modèle de menace, l’argument de conception sûre et les preuves de chaque affirmation.

  • Le port de l’interface ne sert que du HTTPS ; une requête HTTP simple reçoit une redirection 308 vers le même hôte et le même port, et rien d’autre. Les reverse proxies doivent se connecter en HTTPS.
  • Le certificat autosigné n’est pas reconnu des navigateurs : la première visite demande de comparer son empreinte. Fournissez un certificat pour une installation sans avertissement.
  • Les options de surveillance sont stockées en clair. Mettez les secrets dans les champs d’identifiants.
  • Le VictoriaMetrics embarqué n’a pas d’authentification.
  • DumbMonit est avant la 1.0 ; les routes et les champs peuvent encore changer.