
Analizza i dump di domini Azure esportati alla ricerca di password in chiaro, stringhe di connessione, chiavi di storage e altri segreti; genera report CSV/HTML oscurati per flussi di lavoro di audit in sola lettura.
Uno scanner PowerShell che esamina l'output di MicroBurst
Get-AzDomainInfo alla ricerca di password in chiaro, chiavi, stringhe di connessione e
altri segreti che non dovrebbero mai rimanere non cifrati in un ambiente Azure.
Progettato per flussi di lavoro di audit in sola lettura: raccogli un dump del
dominio con MicroBurst (l'accesso Reader è sufficiente per Get-AzDomainInfo), poi
punta questo strumento alla cartella di output. Non tocca affatto Azure stesso —
legge solo i file che hai già esportato. I valori segreti vengono oscurati in ogni
report, quindi l'output è sicuro da allegare ai finding.
# Clone / copy this folder, then from a PowerShell prompt:
.\Scan-MicroBurst.ps1 -Path .\MicroBurst-2026 -Verbose
Oppure importa il modulo e usa il cmdlet direttamente:
Import-Module .\MicroBurstSecretsHunter.psd1 -Force
Invoke-MBSecretScan -Path .\MicroBurst-2026
I report vengono scritti in una cartella con timestamp (MBSecretScan-<timestamp>)
nella directory corrente, a meno che non passi -OutputDirectory.
Per impostazione predefinita ogni valore viene oscurato, quindi i report sono
sicuri da condividere. I caratteri rivelati sono limitati a un quarto della
lunghezza del valore (massimo 4 iniziali + 2 finali), e qualsiasi valore di 8
caratteri o meno viene sostituito con una maschera a larghezza fissa — quindi una
password tipica appare come ********, mentre una chiave di archiviazione lunga 88
caratteri resta identificabile come AAAA**********AA. Le stringhe di contesto
vengono oscurate prima di essere troncate, e ogni segreto trovato su una riga
viene oscurato dal contesto di ogni finding su quella riga, quindi nessun testo in
chiaro sopravvive in un report. Quando fai triage dei falsi positivi, spesso è più
veloce vedere il valore completo — passa -ShowSecrets per emettere valori non
oscurati ovunque (console, CSV, HTML). Console e HTML mostrano quindi un chiaro
banner di avviso, e i report devono essere trattati come materiale di credenziali
attive:
Invoke-MBSecretScan -Path .\dump -ShowSecrets # raw values, for local triage
Funziona su Windows PowerShell 5.1 e PowerShell 7+ (Windows, Linux, macOS).
Ogni esecuzione produce tre cose:
| Output | Descrizione |
|---|---|
| Riepilogo console | Conteggi con codifica a colori per gravità/categoria più i principali finding Critical/High. |
findings.csv | Una riga per finding (gravità, regola, file, riga, valore oscurato, contesto) per il triage in Excel. I campi che contengono contenuto scansionato sono protetti contro l'iniezione di formule nei fogli di calcolo. |
report.html | Report HTML autonomo (nessuna risorsa esterna) con card di gravità, filtro di testo in tempo reale e interruttori di gravità — condivisibile con il cliente. |
Il cmdlet emette inoltre oggetti finding nella pipeline, così puoi fare post-elaborazione:
$f = Invoke-MBSecretScan -Path .\dump -Quiet
$f | Where-Object Severity -eq 'Critical' | Format-Table File,Line,RuleName
| Regola | Gravità | Esempio di origine in un dump |
|---|---|---|
| Stringa di connessione SQL/DB con password incorporata | Critical | Impostazioni di App Service, esportazioni web.config |
| Stringa di connessione dell'account di archiviazione Azure / chiave a 88 caratteri | Critical | Impostazioni dell'app, esportazioni di Storage |
SharedAccessKey di Service Bus / Event Hub | Critical | Configurazioni delle risorse di messaggistica |
| Chiave dell'account Cosmos DB | Critical | Impostazioni dell'app |
| Blocco di chiave privata PEM | Critical | Esportazioni Key Vault / certificati |
| Password della cache Azure Redis | High | Stringhe di connessione della cache |
Client secret di Azure AD (formato post-2021 …Q~…) | High | Template ARM, impostazioni dell'app |
Token SAS / parametro sig= | High | URL SAS di Storage |
| Token JWT / bearer | High | Token in cache, configurazioni |
File di certificato/chiave presente (.pfx, .pem, .key, …) | High | Ovunque nel dump |
Assegnazione generica di password / pwd | High | Variabili di automazione, impostazioni dell'app, parametri ARM |
Assegnazione generica di secret / client_secret | High | Impostazioni dell'app, template |
| Chiavi di accesso AWS / token GitHub / Slack | High/Med | Credenziali esterne archiviate nelle app Azure |
api_key / access_key / connectionstring generici | Medium | Impostazioni dell'app |
| Stringa ad alta entropia (euristica) | Low | Rete di sicurezza per formati di chiave sconosciuti — attivabile tramite -IncludeEntropy |
Il set di regole completo ed editabile si trova in Private/Get-MBSignature.ps1. Ogni
regola è un [PSCustomObject] con questi campi:
| Campo | Obbligatorio | Scopo |
|---|---|---|
Id, Name, Category, Severity | sì | Identità e come il finding viene riportato e ordinato. |
Pattern | sì | La regex. Compilata una volta per scansione. |
ValueGroup | sì | Quale gruppo di cattura contiene il segreto (0 = intera corrispondenza). Guida l'oscuramento. |
MultiLine | no | Valuta sul testo dell'intero file invece che riga per riga (blocchi PEM). Viene riportata ogni corrispondenza, non solo la prima. |
CaseSensitive | no | Disattiva la compilazione predefinita IgnoreCase. Impostalo per formati definiti con distinzione tra maiuscole e minuscole (AKIA, ghp_, eyJ, Q~) — senza, corrispondono anche stringhe simili con maiuscole/minuscole arbitrarie. |
Redact | no | Imposta $false quando il valore catturato è un'etichetta piuttosto che un segreto (una riga di intestazione PEM, un nome di file di certificato), così appare testualmente invece di essere mascherato fino a diventare illeggibile. L'impostazione predefinita è l'oscuramento. |
Get-AzDomainInfo esporta le variabili degli automation account e le impostazioni
delle app come righe Name,Value[,Encrypted]. Il segreto vive nella colonna Value,
mentre la parola chiave che lo identifica (es. ServiceAccountPwd, dbConnectionString)
vive nella colonna Name — quindi una semplice regex non li vede mai sulla stessa
"riga" e la parola chiave è sepolta dentro un token composto senza confine di parola.
Per i file .csv / .tsv lo scanner esegue inoltre l'associazione strutturata
delle colonne (Private/Get-MBCsvFinding.ps1):
Encrypted=True vengono saltate (il valore non è testo in chiaro).Password o StorageKey), viene riportata ogni cella
che non sia un placeholder.I valori già coperti da una regola ad alta confidenza (stringhe di connessione, chiavi di archiviazione, SAS) vengono rinviati al passaggio sulle righe grezze per un oscuramento più stretto, e i finding vengono de-duplicati per categoria così lo stesso segreto non viene mai riportato due volte. Se un file non può essere analizzato come CSV, lo scanner ripiega automaticamente sulla normale scansione delle righe grezze.
-ScanValues)L'associazione di cui sopra fa leva sul nome di un'impostazione. Per cogliere
anche i segreti archiviati sotto un nome senza significato (es.
Config1 = P@ssw0rd2026!), passa -ScanValues. Esamina il contenuto delle
celle dei valori con due euristiche conservative a gravità Low: