
Durchsucht exportierte Azure-Domain-Dumps nach Klartext-Passwörtern, Verbindungszeichenfolgen, Speicherschlüsseln und anderen Geheimnissen; erstellt geschwärzte CSV/HTML-Berichte für schreibgeschützte Audit-Workflows.
Ein PowerShell-Scanner, der MicroBurst-Ausgaben von Get-AzDomainInfo nach Klartext-Passwörtern, Schlüsseln, Verbindungszeichenfolgen und anderen Geheimnissen durchsucht, die niemals unverschlüsselt in einer Azure-Umgebung liegen sollten.
Entwickelt für Read-only-Audit-Workflows: Sie sammeln einen Domänen-Dump mit MicroBurst (Reader-Zugriff reicht für Get-AzDomainInfo), dann zeigen Sie mit diesem Tool auf den Ausgabeordner. Es greift nicht selbst auf Azure zu – es liest nur die Dateien, die Sie bereits exportiert haben. Geheimniswerte werden in jedem Bericht geschwärzt, sodass die Ausgabe bedenkenlos an Findings angehängt werden kann.
# Diesen Ordner klonen / kopieren, dann aus einer PowerShell-Eingabeaufforderung:
.\Scan-MicroBurst.ps1 -Path .\MicroBurst-2026 -Verbose
Oder das Modul importieren und das Cmdlet direkt verwenden:
Import-Module .\MicroBurstSecretsHunter.psd1 -Force
Invoke-MBSecretScan -Path .\MicroBurst-2026
Berichte werden in einen Zeitstempel-Ordner (MBSecretScan-<timestamp>) im aktuellen Verzeichnis geschrieben, sofern Sie nicht -OutputDirectory angeben.
Standardmäßig wird jeder Wert geschwärzt, damit die Berichte sicher geteilt werden können. Die sichtbaren Zeichen sind auf ein Viertel der Wertlänge begrenzt (max. 4 führende + 2 nachgestellte Zeichen), und alles, was 8 Zeichen oder kürzer ist, wird durch eine Maske fester Breite ersetzt – ein typisches Passwort erscheint also als ********, während ein 88 Zeichen langer Storage-Schlüssel als AAAA**********AA erkennbar bleibt. Kontextzeichenfolgen werden geschwärzt, bevor sie gekürzt werden, und jedes auf einer Zeile gefundene Geheimnis wird aus dem Kontext jedes Findings dieser Zeile entfernt, sodass in einem Bericht kein Klartext überlebt. Beim Triage von False Positives ist es oft schneller, den vollständigen Wert zu sehen – übergeben Sie -ShowSecrets, um ungeschwärzte Werte überall auszugeben (Konsole, CSV, HTML). Konsole und HTML tragen dann ein deutliches Warnbanner, und die Berichte müssen wie echtes Anmeldeinformationsmaterial behandelt werden:
Invoke-MBSecretScan -Path .\dump -ShowSecrets # Rohwerte, für lokales Triage
Funktioniert unter Windows PowerShell 5.1 und PowerShell 7+ (Windows, Linux, macOS).
Jeder Lauf erzeugt drei Dinge:
| Ausgabe | Beschreibung |
|---|---|
| Konsolenübersicht | Farbcodierte Zählungen nach Schweregrad/Kategorie sowie die wichtigsten Critical/High-Findings. |
findings.csv | Eine Zeile pro Finding (Schweregrad, Regel, Datei, Zeile, geschwärzter Wert, Kontext) für das Triage in Excel. Felder mit gescanntem Inhalt sind gegen Tabellenkalkulations-Formelinjektion geschützt. |
report.html | Eigenständiger HTML-Bericht (keine externen Ressourcen) mit Schweregrad-Karten, Live-Textfilter und Schweregrad-Umschaltern – mit dem Kunden teilbar. |
Das Cmdlet gibt außerdem Finding-Objekte an die Pipeline aus, sodass Sie nachverarbeiten können:
$f = Invoke-MBSecretScan -Path .\dump -Quiet
$f | Where-Object Severity -eq 'Critical' | Format-Table File,Line,RuleName
| Regel | Schweregrad | Beispielquelle in einem Dump |
|---|---|---|
| SQL-/DB-Verbindungszeichenfolge mit eingebettetem Passwort | Critical | App Service-Einstellungen, web.config-Exporte |
| Azure Storage-Kontoverbindungszeichenfolge / 88-Zeichen-Schlüssel | Critical | App-Einstellungen, Storage-Exporte |
Service Bus / Event Hub SharedAccessKey | Critical | Messaging-Ressourcenkonfigurationen |
| Cosmos DB-Kontoschlüssel | Critical | App-Einstellungen |
| PEM-Private-Key-Block | Critical | Key Vault / Zertifikatsexporte |
| Azure Redis Cache-Passwort | High | Cache-Verbindungszeichenfolgen |
Azure AD-Clientgeheimnis (Post-2021-…Q~…-Format) | High | ARM-Vorlagen, App-Einstellungen |
SAS-Token / sig=-Parameter | High | Storage-SAS-URLs |
| JWT-/Bearer-Token | High | Zwischengespeicherte Token, Konfigurationen |
Zertifikats-/Schlüsseldatei vorhanden (.pfx, .pem, .key, …) | High | Überall im Dump |
Generische password- / pwd-Zuweisung | High | Automation-Variablen, App-Einstellungen, ARM-Parameter |
Generische secret- / client_secret-Zuweisung | High | App-Einstellungen, Vorlagen |
| AWS-Zugriffsschlüssel / GitHub- / Slack-Token | High/Mittel | Fremde Anmeldeinformationen in Azure-Apps |
Generisches api_key / access_key / connectionstring | Mittel | App-Einstellungen |
| Zeichenfolge mit hoher Entropie (heuristisch) | Niedrig | Auffangnetz für unbekannte Schlüsselformate – Opt-in über -IncludeEntropy |
Der vollständige, bearbeitbare Regelsatz befindet sich in Private/Get-MBSignature.ps1. Jede Regel ist ein [PSCustomObject] mit diesen Feldern:
| Feld | Erforderlich | Zweck |
|---|---|---|
Id, Name, Category, Severity | ja | Identität sowie Art und Weise, wie das Finding gemeldet und sortiert wird. |
Pattern | ja | Der reguläre Ausdruck. Wird pro Scan einmal kompiliert. |
ValueGroup | ja | Welche Erfassungsgruppe das Geheimnis enthält (0 = gesamter Treffer). Steuert die Schwärzung. |
MultiLine | nein | Statt zeilenweise gegen den gesamten Dateitext auswerten (PEM-Blöcke). Jeder Treffer wird gemeldet, nicht nur der erste. |
CaseSensitive | nein | Verzicht auf die Standardkompilierung mit IgnoreCase. Für Formate festlegen, die case-sensitiv definiert sind (AKIA, ghp_, eyJ, Q~) – ohne dies werden beliebig großgeschriebene Ähnlichkeiten als Treffer gewertet. |
Redact | nein | Setzen Sie $false, wenn der erfasste Wert eher ein Label als ein Geheimnis ist (eine PEM-Headerzeile, ein Zertifikatsdateiname), damit er wörtlich erscheint, statt unlesbar maskiert zu werden. Standard ist Schwärzung. |
Get-AzDomainInfo exportiert Automation-Kontovariablen und App-Einstellungen als Name,Value[,Encrypted]-Zeilen. Das Geheimnis befindet sich in der Spalte Value, während das Schlüsselwort, das es identifiziert (z. B. ServiceAccountPwd, dbConnectionString), in der Spalte Name steht – ein einfacher regulärer Ausdruck sieht sie also nie in derselben "Zeile", und das Schlüsselwort ist ohne Wortgrenze in einem zusammengesetzten Token vergraben.
Für .csv-/.tsv-Dateien führt der Scanner zusätzlich eine strukturierte Spaltenpaarung durch (Private/Get-MBCsvFinding.ps1):
Encrypted=True werden übersprungen (der Wert ist kein Klartext).Password- oder StorageKey-Spalte), wird jede Zelle gemeldet, die kein Platzhalter ist.Werte, die bereits von einer Regel mit hoher Konfidenz abgedeckt werden (Verbindungszeichenfolgen, Storage-Schlüssel, SAS), werden an den Rohzeilen-Durchlauf zur engeren Schwärzung übergeben, und Findings werden nach Kategorie dedupliziert, sodass dasselbe Geheimnis nie doppelt gemeldet wird. Wenn eine Datei nicht als CSV geparst werden kann, greift der Scanner automatisch auf den normalen Rohzeilen-Scan zurück.
-ScanValues)Die obige Paarung knüpft an den Namen einer Einstellung an. Um auch Geheimnisse zu erfassen, die unter einem bedeutungslosen Namen gespeichert sind (z. B. Config1 = P@ssw0rd2026!), übergeben Sie -ScanValues. Dabei wird der Inhalt von Wert-Zellen mit zwei konservativen Heuristiken mit niedrigem Schweregrad untersucht: