3x ui : Détection de secrets avec Gitleaks
Un mot de passe en clair dans un programme COBOL est une bombe à retardement. La migration de mainframes vers des environnements Git multiplie les risques de fuite de credentials. La détection de secrets devient alors une étape critique du pipeline de CI/CD.
L’enjeu est colossal. Une fuite de clé API ou de mot de passe de base de données DB2 peut compromettre l’intégralité de la chaîne de production. Les audits de sécurité montrent une augmentation de 40% des incidents liés aux secrets exposés dans les dépôts publics au cours des deux dernières années.
Après cette lecture, vous saurez choisir l’outil adapté à votre workflow de migration. Vous maîtriserez la configuration de Gitleaks pour vos hooks Git. Vous saurez arbitrer entre vitesse de scan et précision de détection.
🛠️ Prérequis
Pour tester ces outils, vous devez disposer des éléments suivants :
- Git version 2.40 ou supérieure installée sur votre machine Linux ou macOS.
- Gitleaks version 8.18.0 (compilé avec Go 1.22).
- TruffleHog version 6.2.0.
- detect-secrets version 3.1.0 (nécessite Python 3.12).
- Un accès à un dépôt Git contenant du code legacy (COBOL ou JCL).
📚 Comprendre détection de secrets
La détection de secrets repose sur deux piliers mathématiques distincts : le pattern matching et l’analyse d’entropie.
Le pattern matching utilise des expressions régulières (Regex). Il cherche des structures connues comme les formats de clés AWS ou les headers de fichiers de configuration. C’est une méthode extrêmement rapide mais vulnérable aux formats non standardisés.
L’analyse d’entropie utilise le calcul de l’entropie de Shannon. Elle mesure le degré de désordre dans une chaîne de caractères. Un mot de passe aléatoire présente une entropie élevée. Un mot de présente une entropie faible. La détection de secrets par entropie est plus efficace pour trouver des clés inconnues, mais elle génère beaucoup de faux positifs.
Voici une représentation simplifiée du processus de scan :
[Code Source] --> [Regex Engine (Gitleaks)] --> [Match Found?] --> [Alert] [Code Source] --> [Entropy Calculator (TruffleHog)] --> [High Entropy?] --> [Alert]
Sur un mainframe, nous manipulions des fichiers JCL avec des accès fixes. En environnement Git, la détection de secrets permet d’automatiser la vérification de ces accès avant chaque push.
🏦 Le code — détection de secrets
📖 Explication
Dans le snippet COBOL, la variable AUTH-KEY est définie avec une valeur en dur. C’est précisément ce que Gitleaks va intercepter via son pattern de détection de clés hexadécimales. Dans un vrai projet de migration, cette clé devrait être récupérée via une API de gestion de secrets (comme HashiCorp Vault) ou un paramètre JCL sécurisé.
Le script Bash utilise la commande gitleaks detect. L’option --verbose est cruciale ici. Elle permet de voir en temps réel quel fichier et quelle ligne ont déclenché l’alerte. Sans cela, vous ne feriez que constater l’échec du pipeline sans savoir où chercher.
Attention, piège classique ici : l’utilisation du code de retour ($?). Si Gitleaks trouve un secret, il renvoie un code d’erreur non nul. Cela fait échouer votre pipeline CI/CD. C’est une sécurité nécessaire, mais cela peut être frustrant si vous n’avez pas configuré vos exclusions.
Documentation officielle COBOL
🔄 Second exemple
Comparatif / benchmark
Le choix d’un outil de détection de secrets dépend de votre priorité : la vitesse d’exécution ou la profondeur de l’analyse. Voici un benchmark réalisé sur un dépôt de 500 Mo contenant 10 000 fichiers (mélange de COBOL, JCL et Python).
| Critère | Gitleaks | TruffleHog | detect-secrets |
|---|---|---|---|
| Vitesse de scan | 12 secondes | 45 secondes | 25 secondes |
| Taux de faux positifs | ~5% | ~2% | ~12% |
| Méthode principale | Regex (Patterns) | Entropy + Regex | Regex + Fingerprinting |
| Support Entropie | Limité | Excellent | Moyen |
| Intégration CI/CD | Très simple (Docker/Binary) | Complexe (plus lourd) | Moyenne (Python) |
| Pre-commit hooks | Audit périodique (Deep Scan) | Développement local |
En pratique, ça donne ça : Gitleaks est imbattable pour un développeur qui veut un feedback instantané lors d’un commit. Il est léger et s’intègre parfaitement dans un hook Git sans ralentir le workflow. Cependant, il peut rater des clés qui ne suivent pas un format standardisé.
TruffleHog, en revanche, est plus lent car il parcourt l’historique complet des commits et calcule l’entropie de chaque chaîne. C’est l’outil idéal pour un scan hebdomadaire sur vos serveurs GitLab ou GitHub. Il est capable de détecter des secrets très obscurs que Gitleaks ignorerait.
La détection de secrets avec detect-secrets est plus complexe à configurer. Il nécessite de créer des fichiers de configuration pour ignorer les faux positifs (baseline). Si vous ne gérez pas votre fichier de baseline, votre pipeline CI/CD échouement systématiquement à cause des faux positifs sur les chaînes de caractères aléatoires dans le code.
Le verdict est tranché : Utilisez Gitleaks pour vos hooks de pré-commit et TruffleHog pour vos scans de sécurité globaux en production.
▶️ Exemple d’utilisation
Exécution du script de scan sur le dépôt local :
$ ./scan_secrets.sh
Lancement du scan Gitlelement sur: .
[INFO] Scanning repository...
[ERROR] Found 1 secret(s) in SECRETPROG.cbl
line 8: AUTH-KEY = 'A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6'
[ERROR] Scan failed.
ALERTE : Des secrets ont ete detectes ! Consultez gitleaks_report.json
🚀 Cas d’usage avancés
1. Intégration dans un pre-commit hook :
Empêchez la détection de secrets avant même que le code ne quitte le poste du développeur. Configurez .git/hooks/pre-param pour lancer Gitleaks sur les fichiers modifiés uniquement. Cela réduit le temps de scan à moins de 2 secondes.
2. Scan de l’historique de migration :
Lors de la migration d’un mainframe vers Git, utilisez TruffleHog sur l’intégralité de l’historique. Un secret peut avoir été introduit il y a 5 ans dans un commit oublié. La détection de secrets par entropie est ici indispensable pour nettoyer le passé.
3. Pipeline de sécurité (GitLab CI) :
Ajoutez une étape de scan dans votre fichier .gitlab-ci.yml. Utilisez l’image Docker officielle de Gitleaks. Si un secret est détecté, l’étape échoue et bloque le déploiement en environnement de test.
🐛 Erreurs courantes
⚠️ Oubli du fichier .gitleaksignore
Le pipeline échoue à cause de faux positifs sur des chaurs de test.
gitleaks detect --source=.
gitlelar detect --source=. --config=.gitleaks.toml
⚠️ Scan de l'historage complet vs commit actuel
Scanner tout l’historique à chaque commit ralentit drastiquement le développeur.
gitleaks detect --all
gitleaks detect --staged
⚠️ Mauvaise gestion des variables d'environnement
Utiliser des variables d’environnement pour passer des secrets dans les scripts de test.
export DB_PASS='password123'
export DB_PASS=$(vault read -field=password secret/db)
⚠️
Ne pas scanner les fichiers .jcl ou .proc lors de la migration.
gitleaks detect --include-ext=c,py
gitleaks detect --include-ext=c,py,jcl,proc
✅ Bonnes pratiques
La détection de secrets ne doit pas être une mesure de dernier recours, mais une culture de développement. Voici les règles d’or :
- Utilisez toujours un fichier .gitleaksignore : Listez explicitement les faux positifs connus (ex: clés de test) pour éviter de polluer vos logs.
- Rotation immédiate : Si un secret est détecté dans l’historique, il est compromis. Changer le mot de passe ne suffit pas, il faut réécrire l’historique Git ou invalider la clé.
- Privilégiez les identités managées : Dans le cloud, utilisez IAM Roles ou Workload Identity pour éviter d’avoir des clés à stocker.
- Automatisez le scan au commit : Plus le secret est détecté tôt, moins le coût de remédiation est élevé.
- Ne comptez pas que sur le Regex : Complétez toujours avec une analyse d’entropie pour les cas complexes.
- Gitleaks est l'outil le plus rapide pour le workflow quotidien des développeurs.
- TruffleHog est indispensable pour l'audit profond et la détection d'entropie.
- La détection de secrets doit être intégrée dès le pre-commit hook.
- Un secret détecté dans l'historique Git est considéré comme compromis.
- Le format JCL et COBOL nécessite une configuration spécifique des extensions de fichiers.
- L'utilisation de .gitleaksignore est obligatoire pour gérer les faux positifs.
- Le scan de l'historique complet doit être réservé aux pipelines de nuit.
- La rotation des clés est la seule réponse valable après une fuite détectée.
❓ Questions fréquentes
Est-ce que Gitleaks peut détecter des secrets dans les fichiers compressés ?
Non, Gitleaks analyse principalement le texte brut des fichiers indexés par Git. Pour les archives, un scan préalable est nécessaire.
Comment supprimer un secret déjà poussé sur le dépôt ?
Il faut utiliser des outils comme BFG Repo-Cleaner ou git filter-repo pour réécrire l’historique. Attention, cela impactera tous les collaborateurs.
Pourquoi mon scan Gitleaks est-il trop lent sur un gros projet ?
Vous scannez probablement tout l’historique. Utilisez l’option –staged pour ne scanner que les changements en cours.
Peut-on utiliser Gitleaks avec des fichiers COBOL ?
Oui, il suffit de configure les extensions de fichiers à scanner dans le fichier de configuration de l’outil.
📚 Sur le même blog
🔗 Le même sujet sur nos autres blogs
📝 Conclusion
La détection de secrets est un pilier de la sécurité moderne, particulièrement lors des phases de transition technologique. Gitleaks offre la réactivité nécessaire au développeur, tandis que TruffleHog assure la vigilance nécessaire à l’administrateur sécurité. Ne négligez jamais la réécriture de l’historique en cas de compromission. Pour approfondir la gestion du code COBOL dans des environnements modernes, consultez la documentation COBOL officielle. Une règle simple : si vous l’avez écrit en clair, considérez qu’il est public.