Introduction

La sécurité de vos applications est un enjeu majeur. Un des fléaux les plus dangereux lorsque l’on déploie et gère des applications est le leak de données de données/informations de connexion.

Au mois de Février 2021, une équipe de hacker éthique a découvert plus de 35 site internets appartenant au gouvernement Indien avec des informations de connexion exposée. Par la faute de mauvaises configurations et de mauvaises pratiques, des fichiers d’environnements avec l’ensemble des informations de connexion étaient disponible depuis internet.

Untitled(1).png

Le domaine de la gestion de données privées / informations de connexion est très vaste. Dans cet article nous allons nous concentrer sur comment ne pas laisser fuire des informations de connexion (tels que connexion à la base de données, identifiants d’utilisateurs de services etc …) dans vos applications et vos repository git.

Outils pre-commit

Dans cette partie nous allons lister les outils disponibles que l’on peut utiliser avant de réaliser un commit. Ces outils peuvent être intégré automatiquement via des tâches de pré-commit pour être sur d’être exécuter avant de commit (et donc de pousser le code sur le repository origine).

Voici une liste exhaustive des outils disponibles.

git-secrets

Git-secrets est un simple outil qui permet d’installer des hooks de pre-commit afin de vérifier qu’aucun pattern de mot de passe ne se retrouve dans le commit. Ainsi, si nous ajoutons un mot de passe (par exemple des informations de connexion à la CLI AWS), nous pouvons voir l’erreur :

git secrets --install
✓ Installed commit-msg hook to .git/hooks/commit-msg
✓ Installed pre-commit hook to .git/hooks/pre-commit
✓ Installed prepare-commit-msg hook to .git/hooks/prepare-commit-msg

git secrets --register-aws
OK

git secrets --scan
main.tf:3:  access_key = "ASIAXXXXXXXXXXXXXX"
main.tf:4:  secret_key = "sqzXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

[ERROR] Matched one or more prohibited patterns

Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- List your configured allowed patterns in .gitallowed at repository's root directory
- Use --no-verify if this is a one-time false positive

gitLeaks

GitLeaks est un outil qui permet de scanner votre repository est de trouver des secrets à l’intérieur de vos fichiers. Cet aussi est disponible en tant que hook de pre-commit ainsi qu’en Github actions.

Avec gitLeaks, vous pouvez aussi réaliser des règles personallisées pour détecter des patterns de mot de passe correspondant à vos besoins

gitleaks protect -v

○
    │╲
    │ ○
    ○ ░
    ░    gitleaks

{
	"Description": "AWS",
	"StartLine": 24,
	"EndLine": 24,
	"StartColumn": 18,
	"EndColumn": 37,
	"Match": "AKIAXXXXXXXXXXXXXXXXX",
	"Secret": "AKIAXXXXXXXXXXXXXXXXX",
	"File": "main.go",
	"Commit": "",
	"Entropy": 3.0841837,
	"Author": "",
	"Email": "",
	"Date": "0001-01-01T00:00:00Z",
	"Message": "",
	"Tags": [],
	"RuleID": "aws-access-token"
}
3:01PM INF scan completed in 58.321372ms
3:01PM WRN leaks found: 1

gittyleaks

Gittyleaks est un outil permettant de rechercher des mots de passes dans des fichiers de configurations et des fichiers de données (comme du JSON ou yaml). Gittyleaks a la particularité de pouvoir être exécuter après avoir pousser du code sur la branche distante.

En local :

gittyleaks

--------------------------------------------------------------------------------
                     gittyleaks' Bot Detective at work ...
--------------------------------------------------------------------------------
----------------------------------------
data.json: "password": "PleaseHideMe"