Objectifs pédagogiques¶
- Comprendre les risques liés aux fuites de secrets dans les dépôts Git
- Installer et configurer Gitleaks
- Détecter des secrets exposés dans un historique Git
- Mettre en place des mesures préventives
- Intégrer Gitleaks dans un pipeline CI/CD
Leaks & Théorie¶
Secrets leaks : définitions¶
Une fuite de secrets survient lorsque des informations sensibles sont accidentellement exposées dans le code source ou l'historique Git.
Ces secrets peuvent inclure :
- Clés API (AWS, Google Cloud, Stripe, etc.)
- Mots de passe de bases de données
- Tokens d'authentification (JWT, OAuth)
- Clés privées SSH ou certificats
- Chaînes de connexion à des services
- Secrets de chiffrement
Secrets leaks : impacts¶
Les conséquences d'une fuite de secrets peuvent être catastrophiques :
- Accès non autorisé : Un attaquant peut accéder à vos systèmes, bases de données ou services cloud
- Coûts financiers : Utilisation frauduleuse de services cloud facturables
- Vol de données : Exposition de données clients ou propriétaires
- Atteinte à la réputation : Perte de confiance des clients et partenaires
- Conformité : Violations RGPD, sanctions réglementaires
Pourquoi l'historique Git est-il problématique ?¶
Même si vous supprimez un secret d'un fichier, il reste dans l'historique Git.
Supprimer un commit récent ne suffit pas car :
- L'historique est distribué (clones, forks, mirrors)
- Les commits restent accessibles via leur hash
- Les sauvegardes peuvent conserver l'historique
- Les dépôts publics sont crawlés par des bots en temps réel
Gitleaks & Pratique¶
Présentation de Gitleaks¶
Gitleaks est un outil open-source de détection de secrets qui :
- Scanne l'historique complet d'un dépôt Git
- Utilise des expressions régulières et l'entropie pour détecter les secrets
- Propose des règles prédéfinies pour plus de 100 types de secrets
- S'intègre facilement dans les pipelines CI/CD via CLI
- Fonctionne en mode pré-commit pour prévenir les fuites
Architecture : Gitleaks analyse chaque commit, chaque fichier, chaque ligne pour identifier des patterns de secrets.
Installation de Gitleaks¶
Sur Linux/macOS :
# Via Homebrew
brew install gitleaks
# Via script d'installation
curl -sSfL https://raw.githubusercontent.com/gitleaks/gitleaks/master/scripts/install.sh | sh -s -- -b /usr/local/bin
# Vérifier l'installation
gitleaks version
Sur Windows :
# Via Chocolatey
choco install gitleaks
# Ou télécharger le binaire depuis GitHub
# https://github.com/gitleaks/gitleaks/releases
Configuration de base¶
Gitleaks utilise un fichier .gitleaks.toml pour sa configuration
Voici un exemple basique :
Configuration avancée¶
Ajout de règles custom, gérer les faux-positifs...
[[rules]]
id = "custom-api-key"
description = "Détection de clés API personnalisées"
regex = '''api[_-]?key[_-]?=[\s]*['""]?([a-zA-Z0-9]{32,})['""]?'''
tags = ["api", "key"]
[allowlist]
description = "Faux positifs autorisés"
paths = [
'''node_modules/''',
]
regexes = [
'''example\.com''',
]
Exercice¶
Objectifs :
- Créer un dépôt et y commettre (pousser) intentionnellement deux types de secrets différents pour compromettre l'historique :
- Un secret standard (ex: clé AWS)
- Un secret au format custom (défini par une règle spécifique)
- Mettre en place la configuration Gitleaks via un fichier .gitleaks.toml pour :
- Ajouter une règle personnalisée ([[rules]]) qui détecte le secret custom
- Ajouter une entrée à la liste blanche ([allowlist]) pour exclure un faux positif
- Intégrer Gitleaks dans la chaîne de production :
- Via un pipeline CI/CD (GitLab ou GitHub Actions) en mode détection rétrospective
- Via un pre-commit hook Git local pour la prévention proactive (bloquer le secret avant le commit)
- Valider que les secrets initiaux sont détectés par le CI/CD et que les tentatives de nouveaux commits secrets sont bloquées localement par le hook