Comment renforcer la sécurité de votre pipeline CI/CD
12 juillet 2023
0 minutes de lectureDevSecOps désigne l’intégration des pratiques de sécurité au processus DevOps. Avec les cycles de développement modernes, vous ne pouvez pas vous permettre de remettre la sécurité à la fin. Elle doit être intégrée à chaque étape.
La sécurité de l’intégration continue et de la livraison continue (CI/CD) est un élément essentiel du DevSecOps. Il est crucial de sécuriser vos pipelines et de veiller à ce que les systèmes automatisés utilisés pour mettre en œuvre la CI/CD ne soient pas vulnérables aux attaques.
Dans cet article, vous découvrirez les risques de sécurité qui menacent votre pipeline CI/CD. Vous apprendrez également à créer des pipelines protégés contre les attaques et à les tester pour vérifier leur sécurité.
Pourquoi sécuriser votre pipeline CI/CD
En matière de sécurité, l’attention se porte généralement sur les applications web et les services accessibles au public. Il est facile de négliger des aspects apparemment secondaires, comme votre pipeline, mais c’est une erreur : les conséquences d’une sécurité CI/CD insuffisante peuvent être graves.
Un pipeline compromis peut permettre à des pirates d’accéder à vos systèmes, notamment à votre code, à des données précieuses et aux secrets de vos clients. Dès qu’une partie de votre pipeline est compromise, tout ce qu’il contient est vulnérable.
Il existe également un risque d’injection de code malveillant, une attaque discrète, mais extrêmement grave. Un acteur malveillant ayant accès à votre pipeline peut y insérer son propre code, qui sera ensuite intégré à votre version finale à votre insu. Votre application déployée est alors compromise, ce qui permet aux attaquants de voler librement vos données et celles de vos utilisateurs.
De plus, une chaîne de compilation compromise peut entraîner la fuite de secrets. Les mots de passe ou identifiants utilisés pour autoriser l’accès à vos outils peuvent être volés et servir à accéder à d’autres parties de votre système. Des identifiants volés peuvent causer de lourds dégâts : il est donc essentiel de les protéger.
Méfiez-vous également des composants obsolètes, qui sont souvent les plus vulnérables aux attaques. De nouveaux vecteurs d’attaque sont découverts en permanence et les logiciels sont mis à jour et corrigés pour les éliminer, mais les anciennes versions restent sans protection.
La mise à jour de vos logiciels vers les dernières versions présente de nombreux avantages, au-delà de la sécurité. Maintenir votre chaîne d’outils à jour doit être un pilier de votre stratégie de sécurité.
Créer un pipeline CI/CD sécurisé
Heureusement, vous pouvez prendre de nombreuses mesures pour vous protéger des attaques. Voyons lesquelles.
Mettre en place un contrôle d’accès basé sur les rôles
Le contrôle d’accès basé sur les rôles (RBAC) vous permet de limiter l’accès aux différentes parties de votre système. Vous pouvez ainsi accorder des accès en fonction du rôle de chacun. Il est alors plus facile de définir un ensemble de règles sécurisées prévoyant différents niveaux d’accès, que vous pouvez appliquer rapidement.
Gérer les accès utilisateur par utilisateur peut sembler sûr, mais en pratique, cela entraîne des problèmes : d’anciens comptes peuvent être oubliés et des privilèges accordés trop longtemps. Avec le RBAC, vous disposez d’un ensemble de règles prédéfinies que vous pouvez accorder ou retirer ensemble.
Rechercher les vulnérabilités
Les outils automatisés sont indispensables pour rechercher les vulnérabilités. Heureusement, de nombreux systèmes d’analyse de sécurité sont disponibles pour vous aider à détecter les problèmes rapidement et efficacement. Ils peuvent détecter les erreurs de codage ou les problèmes de configuration qui exposent votre système aux attaques.
Vous pouvez également faire appel à un prestataire externe pour réaliser un audit de sécurité et repérer les problèmes qui vous auraient échappé. Une personne moins impliquée dans le projet que vous peut déceler des angles morts auxquels vous n’auriez pas pensé.
Utiliser un gestionnaire de secrets
Les gestionnaires de secrets sont des outils qui stockent les données sensibles, telles que les identifiants ou les clés, et en gèrent les accès. En limitant qui peut accéder à ces données, où et comment, vous réduisez considérablement le risque de fuite. De plus, un bon outil de gestion des secrets chiffre les données au repos et en transit, ce qui limite les conséquences d’une fuite.
De nombreuses plateformes CI disposent de leur propre système intégré de gestion des secrets et des identifiants. Certaines peuvent également s’intégrer à des systèmes externes de gestion des secrets très répandus.
Gérer l’exposition réseau
Un accès réseau sans restriction peut exposer vos systèmes CI/CD aux attaques externes (trafic entrant) et faciliter l’exfiltration de données (trafic sortant). La gestion de l’exposition réseau, notamment en désactivant les accès dont votre pipeline n’a pas besoin, renforce votre sécurité.
Par exemple, n’ouvrez que le nombre minimal de ports et fermez-les dès qu’ils ne sont plus nécessaires. Désactivez également les fonctionnalités à distance dont vous n’avez pas besoin. Les sockets Docker, les API et tous les moyens de communication de vos systèmes avec le monde extérieur doivent être étroitement protégés.
Limiter les frontières de confiance
Vous pouvez également réduire les risques en limitant autant que possible les frontières de confiance. Toute communication avec des systèmes ou des utilisateurs externes doit être sécurisée. Limitez les autorisations à ce dont vous avez besoin et, dans l’idéal, n’accordez l’accès que pour une durée déterminée.
Réduire au minimum les informations divulguées par chaque partie de votre chaîne rend également le piratage plus difficile. Des sorties texte, comme les messages d’erreur, peuvent apparaître dans une partie de votre système accessible au public. Les pirates peuvent alors s’en servir pour dresser un portrait détaillé de votre infrastructure et mieux cibler leurs attaques.
Pour éviter cela, vous pouvez, dans certains cas, exécuter des commandes avec une sortie minimale. Ainsi, les journaux ou messages de sortie susceptibles d’être divulgués révèlent le moins d’informations possible sur votre système.
Par exemple, la commande wget dans Bash génère toutes sortes d’informations. Vous pouvez les masquer à l’aide de l’option q, comme ceci :
Les pirates explorent souvent votre chaîne d’outils et recueillent des informations sur votre système au fil de leur progression. En réduisant la sortie, vous réduisez aussi les possibilités qu’ils ont de le faire. Vous pouvez appliquer des options similaires à d’autres commandes.
Automatiser la sécurité de votre pipeline CI/CD
Heureusement, plusieurs de ces problèmes peuvent être traités à l’aide d’un produit de sécurité comme Snyk, intégré à votre pipeline de compilation pour vous aider à détecter et à résoudre rapidement les problèmes.
Par exemple, l’exécution d’un scanner de vulnérabilités dans votre pipeline peut détecter les problèmes liés à des composants obsolètes. Snyk peut détecter et repérer ce type de problème. Pour rechercher les problèmes depuis le terminal, saisissez simplement la commande suivante :
Vous pouvez également intégrer votre gestionnaire de code source, comme GitHub, à Snyk pour ajouter automatiquement des vérifications de pull request (PR) et détecter les nouvelles vulnérabilités introduites dans les dépendances, les conteneurs ou les règles d’infrastructure as code :

Pour en savoir plus sur l’intégration de Snyk aux vérifications de PR, consultez la documentation d’assistance de Snyk.
Intégrer les tests de sécurité à un pipeline CI/CD
Vous pouvez intégrer des tests de sécurité à votre pipeline. Ces tests peuvent porter sur différents aspects : veillez donc à tous les couvrir.
RBAC
Comme indiqué précédemment, le RBAC est un excellent moyen de sécuriser les différentes parties de votre système. Des tests réguliers permettent de vérifier que cette sécurité est maintenue. Des contrôles automatisés peuvent vérifier que les utilisateurs accèdent uniquement aux ressources correspondant à leur rôle. Par exemple, un test effectué avec un utilisateur anonyme ne devrait pas permettre d’accéder aux ressources réservées aux utilisateurs autorisés. Ce type de test peut échouer, par exemple, après une mise à jour logicielle qui modifie les paramètres : les changements de configuration précédemment appliqués ne prennent alors plus effet.
API
Les tests d’API peuvent eux aussi être automatisés. Là encore, pour garantir la sécurité, vous devez combiner des tests qui réussissent avec les bons identifiants et échouent en leur absence.
Accéder à une ressource sans les bons identifiants constitue une faille de sécurité. Les tests automatisés d’API permettent de vérifier ce point régulièrement et rapidement. Vous pouvez également vérifier que vos API renvoient les résultats attendus et répondent correctement aux requêtes malformées conçues pour compromettre votre sécurité.
Secrets
Les tests de secrets vous permettent de vérifier si vos secrets sont exposés à un moment donné. Les pipelines doivent gérer des mots de passe et des jetons, et les outils de votre chaîne ont besoin des privilèges appropriés pour remplir leur rôle.
Veillez à ne pas exposer vos secrets dans les tests, car ceux-ci peuvent être consultés. Snyk peut repérer les secrets codés en dur dans votre code ou vos scripts, afin que vous puissiez corriger le problème.
Sécuriser un pipeline CI/CD Jenkins avec Snyk
Pour commencer à utiliser Snyk, vous devez créer un compte et installer son client localement. Les instructions d’installation sont disponibles ici. Par exemple, si vous utilisez npm, vous pouvez exécuter le code suivant :
Snyk s’intègre également aux principaux fournisseurs de services cloud ainsi qu’à de nombreux autres outils CI/CD, grâce aux nombreux plug-ins Snyk disponibles. Par exemple, pour l’utiliser avec Jenkins, ouvrez le tableau de bord Jenkins, puis accédez à Manage Plugins. Recherchez ensuite Snyk Security dans l’onglet Available. N’oubliez pas d’enregistrer le plug-in et de le connecter à votre compte.
Une fois Snyk intégré, vous pouvez l’ajouter comme étape à votre pipeline avec l’entrée snykSecurity :
Voici d’autres commandes que vous pouvez utiliser pour configurer le comportement de Snyk :
failOnIssues et failOnError: ces commandes vous permettent d’interrompre votre script si l’une ou l’autre de ces conditions est remplie, afin d’empêcher le déploiement des problèmes détectés par Snyk. C’est particulièrement recommandé si votre processus CI/CD automatise le déploiement d’éléments mis en production.
severity: cette option vous permet de préciser le niveau de gravité des problèmes que Snyk doit examiner. Vous pouvez éventuellement ignorer les problèmes moins graves et laisser les compilations se poursuivre si seuls des problèmes mineurs sont détectés. Vous pouvez même exécuter une étape de compilation distincte dont le comportement varie selon la gravité du problème.
Lors de l’exécution de vos compilations, vous pouvez consulter la console Snyk pour repérer les problèmes et examiner les journaux en détail afin de déterminer les corrections à apporter.
Voilà comment configurer Snyk avec Jenkins. De nombreuses autres possibilités s’offrent à vous, notamment l’intégration de Snyk à GitHub ou à des fournisseurs de services cloud comme Amazon Web Services (AWS) et Azure.
Conclusion
Votre pipeline CI/CD est un élément essentiel de votre sécurité, mais il est facile de le négliger. Les pirates peuvent l’exploiter de nombreuses façons : il est donc indispensable de prendre des mesures pour atténuer chaque vecteur d’attaque.
Vous devez adopter une posture défensive et essayer de garder une longueur d’avance sur ceux qui cherchent à compromettre vos systèmes. Les mises à jour de sécurité, les tests automatisés et la gestion des rôles ne sont que quelques-uns des moyens de renforcer votre système et d’en tenir les personnes malveillantes à l’écart.
Snyk est un outil précieux dans votre arsenal, qui vous permet de contrôler votre pipeline. Découvrez notre site web et commencez dès maintenant à protéger votre environnement CI/CD. Avec Snyk, rester en sécurité devient facile.
Lancez-vous dans les compétitions Capture The Flag
Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.
