Security/Privacy by design - Mesures proactives
⚠️ Cette section est en cours de construction.
Module : Avenirs-ESR / ePortfolio - Mesures proactives
Objet : Liste de mesures proactive à intégrer dans tous les développements
Révision : 1.0.0.
Date : 10/04/2024.
Auteur : A. Deman.
Commentaire : Version initiale - Draft
Sources
OWASP Top Ten Proactive Controls 2024
Points de vérification
-
Contrôle d’accès (ou Autorisation): C1: Implement Access Control
- Définir le contrôle d’accès dès les début. -> [TODO] Choisir le pattern (RBAC). Probablement RBAC (Role Based Access Control)
- Tous les accès doivent passer par le contrôle d’accès.
- Utiliser une seule implémentation : éviter l’exploitation d’un implémentation plus faible ou défaillante.
- Deny par défaut : toutes les requêtes non spécifiquement autorisées doivent être rejetées.
- Respecter le principe de moindre privilège : créer un rôle privilégié pour chaque fonction critique et éviter un compte administrateur avec tous les privilèges.
- Just-in-time (JIT) et just enough access (JEA) : donner juste l’accès nécessaire et pour un temps donné.
- Pas de rôle codé en dur (e.g. user.hasRole(“ADMIN”))
- Chiffrement : C2: Use Cryptography the proper way.
- Ne pas faire transiter les données en clair.
- Utiliser des algorithmes de chiffrement standard et éprouvés.
- Les données sensibles dont stockées chiffrées, notament les données personnelles des utlisateurs.
- Stocker les mots de passes chiffrés (cf point 3).
- Gérer les clés secrètes
- protéger leur accès.
- Logguer leur accès.
- Utiliser des clés indépendentes s’il y en a plusieurs
- Préparer les mise à jours des clés (changement d’algorithme, rotation/révocation des clés)
- Entrées utilsateur et gestion des exceptions : C3: Validate all Input & Handle Exceptions
Risques: SQL injection, Remote Command Injection. Découlent d’une confusion, au niveau de l’application, entre données utilisateur et commande à exécuter.
- Vérification syntaxique : longueur, type de données, etc.
- Vérification sémantique : intervalle de valeurs, date de début avant date de fin, etc.
- Repose sur plusieur mécanismes : filtrage, echappemet, requêtes paramétrées, renforcement, etc (défense en profondeur).
- Vérification côté client et côté serveur.
- Mass Assignment : éviter le binding automatiques entre les paramètres HTTP et les objets côté serveur ou le limiter [TODO] intégrer les recommandation de cette cheat sheet.
-
C4: Use Secure Architecture Patterns [TODO] documenter les principaux patterns
-
Utiliser des configuations sécurisées par défaut : C5: Secure By Default Configurations
- Gestion des dépendances : C6: Keep your Components Secure
- Utiliser des sources officielles
- Favoriser les dépendances les plus utilisées.
- Utiliser des dépendances activement maintenues.
- Utiliser des version stables.
- Favoriser la simplicité (moins de fonctionnalités, moins de dépendances).
- Pour les dépendances open source utiliser une application de test static (SAST : Static Application Security Testing) ou un logiciel d’analyse de composison (SCA: Software Composition Anldalysis)
- Authentification : (C7: Implement Digital Identity)[https://owasp.org/www-project-proactive-controls/v4/en/c7-implement-digital-identity.html]
- 3 niveaux possibles
- L1 : mot de passe,
- L2 MFA,
- L3 par certificat.
- 3 niveaux possibles
- Renforcement du navigateur: C8: Help the Browser defend its User
Le renforcement est réalisé via les header ou des tag HTML (meta)
- Prévenir les divulgations d’inforamations :
- Activer HSTS : HTTP Strict Transport Security (pas de connexion http)
- Activer les CSP
- Mettre en place une Referrer-Policy pour éviter de transmettre des informations à des sites extérieurs.
- Prévenir les divulgations d’inforamations :
- Clickjacking
- X-Frame-Options (XFO)
- CSP
- CSRF
- Utliser des cookies “Same-Origin”
Prérequis
- Matrice des permissions/rôles
- Dictionnaire des données classifié par niveau de criticité.
Actions
- Utiliser un contrôle de entrées coté client.
- Utiliser un contrôle des entrés utilisateur coté serveur:
- Utiliser une deny list : exemple rechercher la chaine
- Utiliser une allow list : regles de validation syntaxique et sémantique.
- Mass Assignment : Désactiver le binding automatique. Utiliser des Value Objects.
- Activer HSTS
- XSS (Cross-Site Scripting)
- Marquer les cookies sensibles en httpOnly pour que javascript ne puisse y accéder.
- Content Security Policy CSP : reduire la surface d’attaque. [TODO] déterminer les bonne CSP. [TODO] définir les CSP : CSP de base & CSP spécifiques ?
- activer le secure flag pour les cookies pour bloquer leur transmission en clair.
- Marquer les cookies SameSite.
- Eviter les mécanismes de sérialisation / désérialisation autant que possible et préférer un format de type JSON. Si impossble reprendre les préconisations OWASP.
- Utiliser des “Secure Architecture Patterns”.
- Vérifier les dépendances : dépendances inutiles et failles de sécurités (CI).
- Mettre à jour les dépendances de façon pro active.
- Mettre en place/utiliser la Referrer-Policy.
- Utiliser Trusted Types API.
- Utiliser le header X-Frame-Options et vérifier qu’il n’est présent qu’une seule fois.