Aller au contenu

TruffleHog: Pour que vos secrets le restent

Mise à jour :

TruffleHog

Les secrets (comme les mots de passe, clés API, tokens) peuvent devenir de réelles vulnérabilités s’ils sont exposés accidentellement dans le code ou dans les fichiers de configuration. TruffleHog est un outil conçu pour scanner non seulement l’historique des dépôts Git, mais aussi d’autres types de ressources.

L’exposition accidentelle de secrets dans le code ou les environnements de stockage cloud peut constituer une grave faille de sécurité. Ces informations sensibles peuvent être stockées dans des dépôts Git, images Docker, buckets Amazon S3 ou Google Cloud Storage (GCS), et même dans les pipelines CI/CD de services comme Jenkins. TruffleHog, initialement conçu pour scanner les dépôts Git, s’est enrichi pour couvrir ces nouvelles sources.

Grâce à ses deux techniques de détection – analyse par entropie et expressions régulièresTruffleHog peut identifier rapidement des secrets cachés dans divers environnements. Que ce soit dans un fichier, une image Docker, ou même un bucket cloud, TruffleHog vous aide à repérer et corriger ces fuites potentielles. Et c’est pas tout, TruffleHog peut scanner les clusters elasticsearch, les collections Postman et logs syslog

Installation de TruffleHog

Pour commencer à utiliser TruffleHog, voici les étapes d’installation.

Allez sur le dépôt Github de TruffleHog et téléchargez l’archive correspond à votre plateforme.

Terminal window
cd /tmp;
wget https://github.com/trufflesecurity/trufflehog/releases/download/v3.83.6/trufflehog_3.83.6_linux_amd64.tar.gz
tar xvfz trufflehog_3.83.6_linux_amd64.tar.gz
sudo install trufflehog /usr/local/bin

Vérifiez l’installation avec :

Terminal window
trufflehog --version
trufflehog 3.83.6

TruffleHog est maintenant prêt pour scanner vos projets à la recherche de secrets.

Utilisation de TruffleHog

Voici comment utiliser TruffleHog pour scanner différents types de ressources : dépôts Git, images Docker, buckets cloud, et autres.

Scan d’un répertoire local

Terminal window
trufflehog filesystem path/to/dir

Scan d’un Dépôt Git (GitHub, GitLab)

Pour un dépôt Git (sur GitHub, GitLab, ou en local), TruffleHog scanne l’intégralité de l’historique Git. La commande de base pour un dépôt en ligne est :

Terminal window
trufflehog git <URL_du_dépôt>

Pour un dépôt GitLab, la syntaxe est la même :

Terminal window
trufflehog --no-update --only-verified git https://gitlab.com/Bob74/terraform-ansible-gcp

--only-verified : Affiche uniquement les secrets vérifiés comme valides, pour des rapports plus ciblés. Les résultats non vérifiés sont ignorés. --no-update : Ne met pas à jour les dépendances.

Scan d’une Image Docker

Les images Docker contiennent souvent des configurations sensibles. TruffleHog permet de vérifier ces images pour détecter d’éventuels secrets.

Terminal window
trufflehog --no-update --only-verified docker --image <nom_image>

Exemple :

Terminal window
trufflehog --no-update --only-verified docker --image postgres:latest

TruffleHog scanne ainsi les fichiers et configurations internes de l’image pour détecter les secrets.

Scan des Buckets Amazon S3

Les buckets S3 d’Amazon sont utilisés pour stocker des fichiers, mais ils peuvent aussi inclure des données sensibles. TruffleHog peut analyser les fichiers stockés dans ces buckets.

Terminal window
trufflehog s3 --bucket=<nom_bucket>

Vérifiez que TruffleHog dispose des permissions adéquates pour accéder au bucket et lire son contenu.

Scan des Buckets Google Cloud Storage (GCS)

Similaire aux buckets S3, les buckets GCS de Google Cloud peuvent contenir des secrets dans les fichiers stockés. Utilisez la commande suivante pour scanner un bucket GCS :

Terminal window
trufflehog gcs --project-id=<project-ID> --cloud-environment

Scan des Pipelines Jenkins

TruffleHog peut analyser les fichiers de configuration et les scripts dans les pipelines Jenkins. Cette fonctionnalité est utile pour détecter les secrets dans les fichiers de build ou déploiement.

Terminal window
trufflehog jenkins --url https://jenkins.example.com --username admin --password admin

Options Avancées et Personnalisation

Pour adapter TruffleHog à vos besoins spécifiques, plusieurs options avancées sont disponibles :

  • Entropie : TruffleHog détecte les chaînes aléatoires (souvent des secrets) par défaut. Vous pouvez ajuster le seuil d’entropie pour réduire les faux positifs.

    Terminal window
    trufflehog --entropy=True --entropy-threshold=3.5 <URL_du_dépôt>
  • Regex : Définissez vos propres expressions régulières pour scanner des types de secrets particuliers.

    Terminal window
    trufflehog --regex aws_access_key_id <URL_du_dépôt>
  • Exclusion de chemins : Ignorer des répertoires ou fichiers spécifiques avec --exclude-paths peut être utile pour les fichiers de test.

    Terminal window
    trufflehog --exclude-paths="tests/*" <URL_du_dépôt>

Ces options offrent une flexibilité pour des scans précis, en fonction de la nature de vos données.

Lecture et Analyse des Résultats

TruffleHog génère un rapport listant tous les secrets détectés, avec les informations suivantes :

  • Chemin et ligne exacte : Emplacement du secret dans le code.
  • Type de détection : Indication si le secret a été repéré par entropie ou regex.
✅ Found verified result 🐷🔑
Detector Type: URI
Decoder Type: PLAIN
Raw result: https://admin:admin@the-internet.herokuapp.com
Commit: 77b2a3e56973785a52ba4ae4b8dac61d4bac016f
Email: counter <counter@counters-MacBook-Air.local>
File: keys
Line: 3
Repository: https://github.com/trufflesecurity/test_keys
Timestamp: 2022-06-16 17:27:56 +0000

Ces détails facilitent l’identification et la correction rapide des secrets exposés, comme la rotation des secrets ou la suppression des informations dans Git.

Intégration de TruffleHog dans un pipeline CI/CD

Pour automatiser les scans avec TruffleHog, intégrez-le dans un pipeline CI/CD, comme dans cet exemple pour GitLab :

stages:
- security
security-secrets:
stage: security
allow_failure: false
image: alpine:latest
variables:
SCAN_PATH: "." # Set the relative path in the repo to scan
before_script:
- apk add --no-cache git curl jq
- curl -sSfL https://raw.githubusercontent.com/trufflesecurity/trufflehog/main/scripts/install.sh | sh -s -- -b /usr/local/bin
script:
- trufflehog filesystem "$SCAN_PATH" --only-verified --fail --json | jq
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

Pre-commit

TruffleHog peut être intégré à Git pour exécuter des scans pré-commit.

repos:
- repo: local
hooks:
- id: trufflehog
name: TruffleHog
description: Detect secrets in your data.
entry: bash -c 'trufflehog git file://. --since-commit HEAD --only-verified --fail'
# For running trufflehog in docker, use the following entry instead:
# entry: bash -c 'docker run --rm -v "$(pwd):/workdir" -i --rm trufflesecurity/trufflehog:latest git file:///workdir --since-commit HEAD --only-verified --fail'
language: system
stages: ["commit", "push"]

Bonnes Pratiques et Limites de TruffleHog

TruffleHog est un outil efficace, mais ne doit pas être la seule solution de protection. Voici quelques bonnes pratiques complémentaires :

  1. Stockage des Secrets : Utilisez des gestionnaires de secrets (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault) pour sécuriser les secrets en dehors du code.
  2. Rotation des Secrets : Changez régulièrement vos secrets pour limiter les risques en cas d’exposition.
  3. Gestion des Faux Positifs : L’entropie élevée des chaînes dans certains fichiers peut entraîner des faux positifs ; utilisez des regex ou ajustez les seuils pour affiner la détection.

Alternatives et Outils Complémentaires

En complément de TruffleHog, vous pouvez explorer d’autres outils de détection de secrets comme Gitleaks.

Conclusion

TruffleHog est clairement un outil efficace pour détecter les secrets un peu partout. Comme je viens de le découvrir, il y a quelques jours, je mettrai à jour cette documentation au fil de mes découvertes.

Ressources