Un motore di raccolta e derivazione. Mappa il tuo ambiente, valuta i permessi effettivi e la fiducia, e scrive un grafo di attacco completo come singolo file .rage.ndjson. L'input per tutto il resto.
Non hai 4.000 finding. Hai sei percorsi verso i tuoi gioielli della corona.

Un CSPM ti consegna una lista piatta, deduplicata e ordinata per severità di misconfigurazioni e ti lascia indovinare quali contano. Thunderstorm ragiona sulla raggiungibilità: raccoglie il tuo cloud in sola lettura, lo modella come un grafo di capacità di sicurezza e ti dice che una trust OIDC di GitHub Actions conduce, in quattro hop, al tuo data lake di produzione.
Nessuno degli hop sopra è un finding di per sé. Un bucket pubblico, una chiave in un file di stato, un ruolo assumibile, un'azione IAM troppo ampia. Il percorso è il finding, e il percorso è ciò che quasi nient'altro calcola.
Profondo sulla piattaforma verso cui lo punti. Eseguilo contro un account AWS, una sottoscrizione Azure o un progetto GCP, e mappa quell'unico ambiente nei termini propri del provider: STS assume-role e privilege escalation IAM in AWS, catene RBAC e managed-identity in Azure, impersonificazione di service-account in GCP. Un ambiente, un grafo, modellato nel modo in cui quel cloud funziona davvero.
Molti strumenti enumerano di più. L'affermazione qui è che Thunderstorm ragiona su ciò che enumera con vera profondità: 219 tipi di risorsa, 80 tipi di edge, oltre 2.400 regole di derivazione e 1.049 siti di credential-leak mappati, tutti provenienti da RAGE.
RAGE è il formato, Thunderstorm lo produce, Blaze lo esplora.
Sono ciò che Thunderstorm produce da un singolo scan.
Un singolo bucket S3 mal configurato. Thunderstorm lo traccia in sei hop fino al database clienti di produzione, e una seconda rotta dritta al master secret del database.
Internet ──public s3:GetObject──▶ acme-terraform-state (public bucket)
──ExposesCredential────▶ AKIA… (access key leaked in tfstate)
──CredentialsFor───────▶ ec2-app-role
──CanAssume────────────▶ terraform-exec (sts:AssumeRole)
──CanEscalateTo────────▶ OrganizationAdmin (iam:AttachRolePolicy)
──CanReadData──────────▶ acme-prod-customers (PII)
Ogni hop porta con sé il permesso che lo concede, l'evidenza che lo prova e una narrazione in linguaggio semplice. I valori trapelati escono insieme ad esso:

Un blob pubblicamente leggibile fa trapelare un secret di service-principal. Un Contributor con un permesso extra si promuove a Owner della sottoscrizione. Nessun exploit dell'app; solo misconfigurazione cloud e IAM.

Internet ──anonymous blob read──▶ acmedeploy (public Storage account)
──ExposesCredential────▶ automation-sp secret (in a deploy config blob)
──CredentialsFor───────▶ automation-sp (Contributor)
──CanEscalateTo────────▶ Owner (Microsoft.Authorization/roleAssignments/write)
──CanReadData──────────▶ acmedatalake
L'impersonificazione di service-account è invisibile alla maggior parte degli strumenti. Thunderstorm tratta
iam.serviceAccounts.getAccessToken come l'edge di movimento laterale che è.

Internet ──public allUsers───▶ acme-public-exports (GCS)
──ExposesCredential─▶ sa-deploy-key
──CredentialsFor────▶ sa-deploy
──CanImpersonate────▶ sa-data-pipeline
──CanImpersonate────▶ sa-org-admin
──CanReadData───────▶ acme_customers_pii (BigQuery)
view lo apre nel tuo browser; nulla viene caricato.collectors/, engine/).Thunderstorm non porta nessuna tassonomia, mappatura o regola propria. Consuma lo standard RAGE end-to-end:
| Aspetto | Vive in RAGE |
|---|---|
| Tassonomia di nodi / edge, condizioni | vocab/{node-types,edge-types,conditions}.json |
| Mappature native→generiche + ricette di raccolta | providers/{aws,gcp,azure}.json |
| Corpus di regole di derivazione | rules/ |
| Catalogo di esposizione delle credenziali | exposure-db/{aws,gcp,azure}.json + vocabulary.json |
Legame di versione: il spec_version di RAGE è l'unico numero che fissa Thunderstorm a una
release RAGE. Il collector lo legge live dal RAGE contro cui è stato compilato
(thunderstorm version stampa RAGE <v>) e lo marca in ogni grafo che emette; Blaze
Lite legge quel marchio e avvisa quando un grafo è stato costruito contro una versione che non supporta.
Come viene risolto RAGE (vince la prima corrispondenza):
$RAGE_ROOT: un checkout RAGE live, se lo imposti (override di sviluppo; le modifiche si applicano senza ricompilare).collectors/rage/, incorporato nel binario.Aggiorna lo snapshot con make RAGE_ROOT=/path/to/rage (o go generate ./... in
collectors/). RAGE vive su github.com/trustedsec/rage.
Thunderstorm scansiona in sola lettura usando le tue credenziali cloud esistenti; non gestisce mai
secret e non scrive mai sul target. Accedi con gli strumenti normali del provider, poi
punta scan verso l'account / progetto / sottoscrizione.