Aller au contenu principal

Sécurité du cycle DevOps

Sécurisation des processus d'intégration et de déploiement dans un environnement DevOps

Notions théoriques

L'intégration de la sécurité dans le cycle DevOps est une approche appelée DevSecOps.

Elle vise à intégrer des pratiques de sécurité dès les premières étapes du développement logiciel, plutôt que d'ajouter des contrôles de sécurité à la fin du processus.

Principes du DevSecOps

Le DevSecOps repose sur plusieurs principes fondamentaux :

  • Automatisation de la sécurité : Intégrer des outils de sécurité dans les pipelines CI/CD.
  • Détection précoce des vulnérabilités : Analyser le code et les dépendances dès le développement.
  • Collaboration entre équipes : Développeurs, administrateurs système et experts en sécurité travaillent ensemble.
  • Surveillance continue : Mettre en place des outils de monitoring pour détecter les menaces en temps réel.

Sécurité dans le pipeline CI/CD

Un pipeline CI/CD (Intégration Continue / Déploiement Continu) est un ensemble d'étapes automatisées permettant de tester et déployer une application. L'intégration de la sécurité dans ce pipeline passe par :

  1. Analyse statique du code (SAST) : Outils comme SonarQube ou Snyk pour détecter les failles dans le code source.
  2. Analyse dynamique des applications (DAST) : Tests de sécurité sur l'application en cours d'exécution.
  3. Gestion des dépendances : Vérification des bibliothèques utilisées pour identifier les vulnérabilités connues.
  4. Contrôle des accès et gestion des secrets : Utilisation de coffres-forts numériques comme HashiCorp Vault.
  5. Tests d'intrusion automatisés : Simulation d'attaques pour identifier les faiblesses du système.

Bonnes pratiques du DevSecOps

  • Éviter les secrets en dur : Ne pas stocker de mots de passe ou de clés API dans le code source.
  • Utiliser des images Docker sécurisées : Privilégier des images officielles et régulièrement mises à jour.
  • Activer les logs et audits : Conserver une traçabilité des événements pour détecter les anomalies.
  • Appliquer le principe du moindre privilège : Limiter les permissions des utilisateurs et des services.

Exemple pratique

Il est possible d'intégrer la sécurité dans un pipeline CI/CD en utilisant GitHub Actions et Trivy pour analyser les vulnérabilités d'une image Docker avant son déploiement.

Étape 1 : Création d'un fichier de workflow GitHub Actions

Créer un fichier .github/workflows/security-scan.yml dans un dépôt GitHub contenant :

name: Security Scan

on:
push:
branches:
- main

jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Récupération du code
uses: actions/checkout@v3

- name: Installation de Trivy
run: |
sudo apt-get install -y wget
wget https://github.com/aquasecurity/trivy/releases/latest/download/trivy_0.44.0_Linux-64bit.tar.gz
tar -xvf trivy_0.44.0_Linux-64bit.tar.gz
sudo mv trivy /usr/local/bin/

- name: Analyse de l'image Docker
run: trivy image mon-image:latest

Étape 2 : Exécution du pipeline

Pousser le fichier dans le dépôt et observer l'exécution du workflow dans l'onglet "Actions" de GitHub.

Étape 3 : Analyse des résultats

Si des vulnérabilités sont détectées, elles seront affichées avec leur niveau de gravité (faible, moyen, critique).

Test de mémorisation/compréhension


Quel est l'objectif principal du DevSecOps ?


Quel outil permet d'analyser les vulnérabilités dans une image Docker ?


Quelle est la fonction principale d'un pipeline CI/CD ?


Quelle pratique est recommandée pour gérer les secrets dans une application ?


Quel est l'intérêt de l'analyse statique du code (SAST) ?


Pourquoi est-il important d'utiliser des images Docker officielles ?


Quelle est la meilleure façon de surveiller les menaces en temps réel ?


Quel est le rôle des tests d'intrusion automatisés ?


Quel principe de sécurité consiste à limiter les permissions des utilisateurs ?


Pourquoi est-il important de gérer les dépendances dans un projet ?



TP pour réfléchir et résoudre des problèmes

Objectif du TP

L'objectif de ce TP est de sécuriser un pipeline CI/CD en mettant en place une analyse des vulnérabilités sur le code source et les dépendances d'un projet Node.js.

astuce

Ce TP utilise GitHub Actions et Snyk pour détecter les failles de sécurité dans le code et les bibliothèques utilisées.

Étape 1 : Création d'un projet Node.js et initialisation d'un dépôt Git

Créer un projet Node.js et l'ajouter à un dépôt GitHub.

  1. Ouvrir un terminal et exécuter les commandes suivantes :
mkdir projet-securise
cd projet-securise
npm init -y
  1. Initialiser un dépôt Git et créer un fichier .gitignore :
git init
echo "node_modules/" > .gitignore
git add .
git commit -m "Initialisation du projet"
  1. Créer un dépôt GitHub et le lier au projet local :
git remote add origin https://github.com/utilisateur/projet-securise.git
git branch -M main
git push -u origin main
info

Cette étape permet de mettre en place un projet Node.js et de l'envoyer sur GitHub.

  • npm init -y génère un fichier package.json avec les paramètres par défaut.
  • .gitignore empêche l'envoi du dossier node_modules/ dans le dépôt.
  • git remote add origin lie le dépôt local au dépôt distant sur GitHub.
  • git push -u origin main envoie les fichiers sur la branche principale du dépôt GitHub.

Une fois terminé, vérifier sur GitHub que le projet est bien en ligne.


Étape 2 : Installation de Snyk pour l'analyse des vulnérabilités

Snyk est un outil permettant d'identifier les failles de sécurité dans les dépendances d'un projet.

  1. Installer Snyk en tant que dépendance de développement :
npm install --save-dev snyk
  1. Ajouter un script dans le fichier package.json pour exécuter l'analyse de sécurité :
"scripts": {
"test": "echo \"No test specified\" && exit 0",
"security-check": "snyk test"
}
  1. Tester l'analyse de sécurité localement :
npx snyk test
info

L'installation de Snyk permet d’analyser les dépendances du projet.

  • npm install --save-dev snyk installe Snyk en tant que dépendance de développement.
  • Le script "security-check": "snyk test" permet d'exécuter l'analyse avec npm run security-check.
  • npx snyk test lance Snyk et affiche les vulnérabilités détectées.

Si des vulnérabilités sont trouvées, elles apparaissent avec leur niveau de gravité.


Étape 3 : Création d'un workflow GitHub Actions pour exécuter Snyk

Créer un fichier .github/workflows/security.yml pour automatiser l'analyse des vulnérabilités à chaque push.

  1. Créer les dossiers nécessaires et le fichier de workflow :
mkdir -p .github/workflows
nano .github/workflows/security.yml
  1. Ajouter le contenu suivant dans security.yml :
name: Security Scan

on:
push:
branches:
- main

jobs:
security:
runs-on: ubuntu-latest
steps:
- name: Récupération du code
uses: actions/checkout@v3

- name: Installation de Node.js
uses: actions/setup-node@v3
with:
node-version: '18'

- name: Installation des dépendances
run: npm install

- name: Analyse des vulnérabilités avec Snyk
run: npx snyk test
  1. Ajouter et pousser le fichier dans le dépôt :
git add .github/workflows/security.yml
git commit -m "Ajout du workflow de sécurité"
git push origin main
info

Ce workflow GitHub Actions exécute Snyk à chaque push sur la branche main.

  • actions/checkout@v3 récupère le code source.
  • actions/setup-node@v3 installe Node.js.
  • npm install installe les dépendances du projet.
  • npx snyk test exécute l'analyse de sécurité.

Une fois le fichier poussé, vérifier dans l'onglet "Actions" de GitHub que le workflow s'exécute correctement.


Étape 4 : Vérification des résultats et correction des vulnérabilités

  1. Aller dans l'onglet "Actions" du dépôt GitHub et ouvrir le workflow "Security Scan".
  2. Vérifier les résultats de l'analyse de Snyk.
  3. Si des vulnérabilités sont détectées, mettre à jour les dépendances avec :
npm audit fix
  1. Relancer l'analyse pour vérifier que les failles ont été corrigées :
npx snyk test
info

L'analyse de Snyk signale les vulnérabilités présentes dans les dépendances du projet.

  • npm audit fix tente de corriger automatiquement les failles en mettant à jour les bibliothèques concernées.
  • npx snyk test permet de vérifier si les vulnérabilités ont bien été corrigées.

Si certaines failles persistent, il peut être nécessaire de mettre à jour manuellement certaines dépendances.


Étape 5 : Ajout d'un badge de sécurité dans le README

Ajouter un badge GitHub Actions dans le fichier README.md pour afficher le statut du workflow.

  1. Ouvrir le fichier README.md et ajouter la ligne suivante en haut du fichier :
![Security Scan](https://github.com/utilisateur/projet-securise/actions/workflows/security.yml/badge.svg)
  1. Ajouter et pousser les modifications :
git add README.md
git commit -m "Ajout du badge de sécurité"
git push origin main
info

L'ajout d'un badge permet de voir rapidement si le workflow de sécurité est en succès ou en échec.

  • Le badge est généré automatiquement par GitHub Actions.
  • Il affiche le statut du dernier run du workflow security.yml.

Une fois le fichier poussé, vérifier sur GitHub que le badge s'affiche bien dans le README.md.