Devops - La sécurité devrait être votre priorité !
Publié le : 13 octobre 2021 | Mis à jour le : 22 janvier 2023Souvent laissée de côté, voir oubliée, la sécurité devrait être intégrée dans tous les projets Devops, et ce, dès le départ. En effet, les DevOps sont bien trop fréquemment concentré sur la livraison du code en prod, oubliant tous les principes de sécurité.
Il s’agit d'intégrer en amont dans vos pipelines des outils permettant de vérifier que vous ne laissez aucune faille exploitable. Donc il ne s’agit pas simplement de mettre en place des environnements de tests pour lancer des tests unitaires, des tests d’intégration, des tests d’acceptation, mais d’intégrer des contrôles de sécurité.
Parmi les erreurs les plus courantes, on retrouve :
- De réutiliser du code tiers sans vraiment en contrôler le contenu
- laisser des secrets dans les repositories
- D’utiliser les configurations par défaut des applications
- D'utiliser de nouveaux outils sans en connaître les possibilités et failles éventuelles
- Ou de ne pas protéger suffisamment les outils et l’infrastructure DevOps.
Quels outils sont à notre disposition pour contrôler le code ?
Je pense que vous avez déjà parcouru la table périodique du devops.
Non. Mais comment ça ?
Vu le rythme où des nouveaux outils devOps sortent, difficile de rester à jour. Ce tableau va vous permettre d'identifier quels outils qui peuvent répondre à vos besoins et quels sont les plus facilement intégrable dans vos pipelines. Il est mis à jour régulièrement et regroupe à ce jour plus d’une centaine d’applications.
Que propose-t-il pour la sécurité ?
On les retrouve en cliquant sur sécurité, en bleu dans le tableau et peuvent être les regrouper en 3 familles :
- SAST: Static Application Security Testing (Analyse de code statique des applications)
- DAST: Dynamic Application Security Testing (Tests dynamiques de sécurité des applications)
- SCA: Software Composition Analysis (Analyse de composition logicielle)
SAST : Les analyseurs de code statique
L’analyse statique consiste à parcourir le code source pour vérifier s’il respecte un ensemble de règles pour y déceler de potentielles vulnérabilités, bugs, code dupliqué…
Dans cette famille on retrouve :
- Checkmarx(https://checkmarx.com/)
- Fortify(https://www.microfocus.com/fr-fr/products/static-code-analysis-sast/overview)
- Sonarqube(https://www.sonarqube.org/)
- Veracode(https://www.veracode.com/products/binary-static-analysis-sast)
Avantages :
- Intervient au début du cycle de développement logiciel
- Réduit les coûts de remédiation
- Supporte de multiples langages
- Facilite la montée en compétences des développeurs sur le développement sécurisé
Inconvénients :
- Ne détecte pas les défauts à l’exécution
- Peux être très long d’exécution
- Génère de nombreux faux positifs
DAST : Les outils de tests dynamiques de sécurité
Ces outils vont permettre de détecter des vulnérabilités et des faiblesses dans la sécurité des applications lors de leur exécution.
Dans cette famille on retrouve :
Avantages:
- Ne dépends pas de la technologie applicative
- Détecte des vulnérabilités d’exécution et d’environnement
- Permet d’avoir une vision en mode attaquant donc formateur
Inconvénients:
- Nécessite une application déployée
- Intervient en fin de cycle de développement donc les coûts de correction sont plus élevés
SCA : Analyse de composition logicielle
Ces outils permettent de vérifier si les applications n’embarquent pas des composants connus comme vulnérables ou obsolètes.
Avantages :
- Génère une cartographie des librairies utilisées
- Mises à jour régulières des vulnérabilités
Inconvénients :
- Génère des faux positifs
Quels outils pour contrôler la présence de secrets ?
Il est fréquent qu’on retrouve dans les dépôts de code source des jetons, des certificats, des mots de passe, …. Et pourtant il s’agit bien d'informations ultra sensibles.
On ne se rend pas compte des risques que l’on fait courir à l’entreprise, et ce même si le projet se trouve dans un projet privé. En effet, ce code source peut être diffusé dans de nombreux endroits en utilisant des outils tiers, voir des outils en ligne.
N’oubliez pas non plus que Git conserve la trace de toutes les modifications apportées ! Même si le code est supprimé il restera dans l’historique.
Donc ces outils devraient être utilisés dès le départ de la conception d’un projet, et ce, avant même qu’il soit poussé dans le repository.
Il existe des outils qui permettent de les détecter :
Quels outils pour contrôler des images docker ?
De plus en plus utilisés, car ils nous facilitent la tâche, les conteneurs peuvent contenir des failles de sécurité ou ne pas respecter les bonnes pratiques. Je ne parle même pas de lancer un conteneur sans en connaître le contenu. Pourquoi ?
Par défaut, Docker nécessite des privilèges root
pour créer et gérer des
conteneurs. Et oui ! Ainsi des scripts malveillants peuvent exploiter cette
surface d’attaque. Il peut facilement, accéder à des données
sensibles comme des fichiers de mots de passe, des certificats, ou même
installer je ne sais quoi. Une solution simple à mettre en œuvre : migrer
vers podman qui lui est rootless.
Je vous déconseille aussi d’utiliser des images docker mais de plutôt les créer vous même en respectant ces règles:
- Créer un user et l’utiliser
USER
en effet par défaut, c’estroot
. - Ne mapper que les ports utiles.
- N’utilisez pas
privileged
donnez juste les droits nécessaires avec les CAPibilities
Mais aussi je vous conseille :
- D’interdire les communications entre containers (autorisées par défaut)
- De ne pas lancer vos containers en tant que root
- De pas y stocker des secrets mais plutôt les monter via des volumes avec buildkit.
- De ne pas utiliser une registry inconnue.
- De scanner régulièrement vos images avec des outils comme Clair, Trivy, Dagda à la recherche de failles.
- Mettez en place un outil scrutant pendant leur execution pour y repérer des opérations dangereuses : Falco ou Anchore Engine
Plus d’infos sur ce billet consacré à la sécurisation de Docker