Aller au contenu
Sécurité medium

TruffleHog: Pour que vos secrets le restent

9 min de lecture

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

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.

Fenêtre de terminal
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 :

Fenêtre de terminal
trufflehog --version
trufflehog 3.83.6

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

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

Fenêtre de terminal
trufflehog filesystem path/to/dir

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 :

Fenêtre de terminal
trufflehog git <URL_du_dépôt>

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

Fenêtre de terminal
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.

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

Fenêtre de terminal
trufflehog --no-update --only-verified docker --image <nom_image>

Exemple :

Fenêtre de terminal
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.

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.

Fenêtre de terminal
trufflehog s3 --bucket=<nom_bucket>

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

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 :

Fenêtre de terminal
trufflehog gcs --project-id=<project-ID> --cloud-environment

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.

Fenêtre de terminal
trufflehog jenkins --url https://jenkins.example.com --username admin --password admin

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.

    Fenêtre de terminal
    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.

    Fenêtre de terminal
    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.

    Fenêtre de terminal
    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.

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.

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"'

Si vous ne maitrisez pas le gestionnaire de paquets apk, je vous recommande de lire mon guide sur apk pour mieux comprendre son fonctionnement.

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"]

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.

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

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.