
Analyse les dumps de domaines Azure exportés à la recherche de mots de passe en clair, de chaînes de connexion, de clés de stockage et d'autres secrets ; génère des rapports CSV/HTML expurgés pour les flux de travail d'audit en lecture seule.
Un scanner PowerShell qui fouille la sortie de MicroBurst
Get-AzDomainInfo à la recherche de mots de passe en clair, de clés, de chaînes de connexion et
d'autres secrets qui ne devraient jamais rester non chiffrés dans un environnement Azure.
Conçu pour des workflows d'audit en lecture seule : vous collectez un dump de domaine avec MicroBurst
(l'accès Lecteur suffit pour Get-AzDomainInfo), puis vous pointez cet outil vers le
dossier de sortie. Il ne touche pas Azure lui-même — il lit uniquement les fichiers que vous
avez déjà exportés. Les valeurs secrètes sont masquées dans chaque rapport, de sorte que la sortie
peut être jointe en toute sécurité aux constatations.
# Clone / copy this folder, then from a PowerShell prompt:
.\Scan-MicroBurst.ps1 -Path .\MicroBurst-2026 -Verbose
Ou importez le module et utilisez le cmdlet directement :
Import-Module .\MicroBurstSecretsHunter.psd1 -Force
Invoke-MBSecretScan -Path .\MicroBurst-2026
Les rapports sont écrits dans un dossier horodaté (MBSecretScan-<timestamp>) dans le
répertoire courant, sauf si vous passez -OutputDirectory.
Par défaut, chaque valeur est masquée afin que les rapports puissent être partagés en toute sécurité. La
quantité de caractères révélés est limitée à un quart de la longueur de la valeur (plafonné à 4
en tête + 2 en fin), et tout élément de 8 caractères ou moins est remplacé par un
masque de largeur fixe — ainsi un mot de passe typique s'affiche comme ********, tandis qu'une clé de 88
caractères reste identifiable comme AAAA**********AA. Les chaînes de contexte sont
masquées avant d'être tronquées, et chaque secret trouvé sur une ligne est
masqué dans le contexte de chaque constatation de cette ligne, de sorte qu'aucun texte en clair ne survit
dans un rapport. Lors du tri des faux positifs, il est souvent plus rapide de voir la valeur complète —
passez -ShowSecrets pour émettre des valeurs non masquées partout (console, CSV,
HTML). La console et le HTML portent alors une bannière d'avertissement claire, et les rapports
doivent être traités comme des informations d'identification réelles :
Invoke-MBSecretScan -Path .\dump -ShowSecrets # raw values, for local triage
Fonctionne sur Windows PowerShell 5.1 et PowerShell 7+ (Windows, Linux, macOS).
Chaque exécution produit trois éléments :
| Sortie | Description |
|---|---|
| Résumé console | Décomptes colorés par sévérité/catégorie plus les principales constatations critiques/élevées. |
findings.csv | Une ligne par constatation (sévérité, règle, fichier, ligne, valeur masquée, contexte) pour le tri dans Excel. Les champs contenant du contenu analysé sont échappés contre l'injection de formules dans les feuilles de calcul. |
report.html | Rapport HTML autonome (aucune ressource externe) avec cartes de sévérité, filtre de texte en direct et bascules de sévérité — partageable avec le client. |
Le cmdlet émet également des objets de constatation dans le pipeline, afin que vous puissiez post-traiter :
$f = Invoke-MBSecretScan -Path .\dump -Quiet
$f | Where-Object Severity -eq 'Critical' | Format-Table File,Line,RuleName
| Règle | Sévérité | Exemple de source dans un dump |
|---|---|---|
| Chaîne de connexion SQL/DB avec mot de passe intégré | Critique | Paramètres App Service, exports web.config |
| Chaîne de connexion de compte de stockage Azure / clé de 88 caractères | Critique | Paramètres d'application, exports Storage |
SharedAccessKey Service Bus / Event Hub | Critique | Configurations de ressources de messagerie |
| Clé de compte Cosmos DB | Critique | Paramètres d'application |
| Bloc de clé privée PEM | Critique | Exports Key Vault / certificats |
| Mot de passe Azure Redis Cache | Élevée | Chaînes de connexion du cache |
Secret client Azure AD (format …Q~… post-2021) | Élevée | Modèles ARM, paramètres d'application |
Jeton SAS / paramètre sig= | Élevée | URL SAS de stockage |
| Jeton JWT / bearer | Élevée | Jetons en cache, configurations |
Fichier de certificat / clé présent (.pfx, .pem, .key, …) | Élevée | N'importe où dans le dump |
Affectation générique password / pwd | Élevée | Variables d'automatisation, paramètres d'application, paramètres ARM |
Affectation générique secret / client_secret | Élevée | Paramètres d'application, modèles |
| Clé d'accès AWS / jetons GitHub / Slack | Élevée/Moyenne | Identifiants étrangers stockés dans des applications Azure |
api_key / access_key / connectionstring génériques | Moyenne | Paramètres d'application |
| Chaîne à haute entropie (heuristique) | Faible | Filet de sécurité pour les formats de clé inconnus — à activer explicitement via -IncludeEntropy |
L'ensemble de règles complet et modifiable se trouve dans Private/Get-MBSignature.ps1. Chaque règle est un [PSCustomObject] avec les champs suivants :
| Champ | Requis | Objectif |
|---|---|---|
Id, Name, Category, Severity | oui | Identité et manière dont la constatation est signalée et triée. |
Pattern | oui | Le regex. Compilé une fois par analyse. |
ValueGroup | oui | Groupe de capture contenant le secret (0 = correspondance entière). Pilote le masquage. |
MultiLine | non | Évaluer sur le texte entier du fichier plutôt que ligne par ligne (blocs PEM). Chaque correspondance est signalée, pas seulement la première. |
CaseSensitive | non | Désactive la compilation IgnoreCase par défaut. À définir pour les formats définis en respectant la casse (AKIA, ghp_, eyJ, Q~) — sans cela, des imitations à casse arbitraire correspondent. |
Redact | non | Définissez $false lorsque la valeur capturée est une étiquette plutôt qu'un secret (une ligne d'en-tête PEM, un nom de fichier de certificat) afin qu'elle apparaisse textuellement au lieu d'être masquée jusqu'à l'illisibilité. Par défaut, masque. |
Get-AzDomainInfo exporte les variables de compte d'automatisation et les paramètres d'application sous
forme de lignes Name,Value[,Encrypted]. Le secret se trouve dans la colonne Value tandis que
le mot-clé qui l'identifie (par exemple ServiceAccountPwd, dbConnectionString)
se trouve dans la colonne Name — de sorte qu'une regex simple ne les voit jamais sur la même
« ligne » et que le mot-clé est enfoui dans un jeton composé sans limite de mot.
Pour les fichiers .csv / .tsv, le scanner effectue en plus un appariement structuré des colonnes (Private/Get-MBCsvFinding.ps1) :
Encrypted=True sont ignorées (la valeur n'est pas en clair).Password ou StorageKey), chaque cellule qui n'est pas un espace réservé est signalée.Les valeurs déjà couvertes par une règle à haute confiance (chaînes de connexion, clés de stockage, SAS) sont différées vers le passage en ligne brute pour un masquage plus strict, et les constatations sont dédupliquées par catégorie afin que le même secret ne soit jamais signalé deux fois. Si un fichier ne peut pas être analysé comme CSV, le scanner revient automatiquement à l'analyse normale en ligne brute.
-ScanValues)L'appariement ci-dessus repose sur le nom d'un paramètre. Pour également détecter les secrets stockés sous un nom sans signification (par exemple Config1 = P@ssw0rd2026!), passez -ScanValues. Il inspecte le contenu des cellules de valeur avec deux heuristiques prudentes de sévérité Faible :