
환경을 매핑하고, 실효 권한과 신뢰를 평가하며, 완전한 공격 그래프를 단일 .rage.ndjson 파일로 작성하는 수집 및 도출 엔진. 다른 모든 것의 입력.
당신에게 4,000개의 취약점이 있는 게 아니다. 왕관의 보석으로 가는 여섯 개의 경로가 있을 뿐이다.

CSPM은 중복 제거되고 심각도순으로 정렬된 평면적인 오구성 목록을 던져주고, 그중 무엇이 중요한지 추측하라고 내버려둔다. Thunderstorm은 **도달 가능성(reachability)**을 추론한다. 클라우드를 읽기 전용으로 수집하고, 이를 보안 역량의 그래프로 모델링한 뒤, GitHub Actions OIDC 신뢰가 네 홉 만에 프로덕션 데이터 레이크로 이어진다고 알려준다.
위의 홉 중 어느 것도 그 자체로는 취약점이 아니다. 공개 버킷, state 파일에 들어 있는 키, 수임 가능한 역할, 지나치게 광범위한 IAM 액션 하나. 경로가 곧 취약점이며, 경로는 다른 거의 어떤 도구도 계산하지 않는 것이다.
지목한 플랫폼에 깊이 들어간다. AWS 계정, Azure 구독, 또는 GCP 프로젝트를 대상으로 실행하면, 해당 환경 하나를 그 공급자의 고유 용어로 매핑한다. AWS의 STS assume-role과 IAM 권한 상승, Azure의 RBAC와 관리 ID 체인, GCP의 서비스 계정 임퍼소네이션. 하나의 환경, 하나의 그래프, 그 클라우드가 실제로 작동하는 방식 그대로 모델링된다.
더 많이 열거하는 도구는 많다. 여기서의 주장은 Thunderstorm이 열거한 것을 실제 깊이로 추론한다는 것이다. 219개 리소스 유형, 80개 엣지 유형, 2,400개 이상의 도출 규칙, 1,049개의 매핑된 자격 증명 유출 지점, 모두 RAGE에서 가져온 것이다.
RAGE는 형식이고, Thunderstorm은 그것을 생성하며, Blaze는 그것을 탐색한다.
이것들은 Thunderstorm이 단일 scan으로 생성하는 결과물이다.
오구성된 S3 버킷 하나. Thunderstorm은 이를 여섯 홉 거슬러 프로덕션 고객 데이터베이스까지 추적하고, 데이터베이스 마스터 시크릿으로 곧장 이어지는 두 번째 경로도 찾아낸다.
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)
모든 홉은 그것을 부여하는 권한, 그것을 증명하는 증거, 그리고 평이한 영어 서술을 함께 지닌다. 유출된 값들도 함께 나온다:

공개적으로 읽을 수 있는 blob이 서비스 주체(service-principal) 시크릿을 유출한다. 권한 하나를 더 가진 Contributor가 스스로를 구독 Owner로 승격시킨다. 앱 익스플로잇은 없다. 그저 클라우드 오구성과 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
서비스 계정 임퍼소네이션은 대부분의 도구에게 보이지 않는다. Thunderstorm은
iam.serviceAccounts.getAccessToken을 그것이 실제로 그렇듯 측면 이동 엣지로 취급한다.

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가 브라우저에서 그것을 연다. 아무것도 업로드되지 않는다.collectors/, engine/).Thunderstorm은 자체적인 분류 체계, 매핑, 규칙을 전혀 갖지 않는다. RAGE 표준을 엔드투엔드로 소비한다:
| 관심사 | RAGE에 위치 |
|---|---|
| 노드 / 엣지 분류 체계, 조건 |
버전 연결: RAGE의 spec_version은 Thunderstorm을 RAGE 릴리스에 고정하는 단일
숫자다. 수집기는 빌드 대상이 된 RAGE에서 이를 실시간으로 읽고(thunderstorm version이
RAGE <v>를 출력한다) 내보내는 모든 그래프에 이를 각인한다. Blaze Lite는 그 각인을
읽고, 그래프가 지원하지 않는 버전에 대해 빌드된 경우 경고한다.
RAGE 해석 방식 (먼저 일치하는 것이 이긴다):
$RAGE_ROOT: 설정한 경우, 라이브 RAGE 체크아웃 (개발용 오버라이드; 재빌드 없이 편집 적용).collectors/rage/에 있는 벤더링된 스냅샷, 바이너리에 내장됨.스냅샷은 make RAGE_ROOT=/path/to/rage (또는 collectors/에서 go generate ./...)로
갱신한다. RAGE는 github.com/trustedsec/rage에 있다.
Thunderstorm은 기존 클라우드 자격 증명을 사용해 읽기 전용으로 스캔한다. 시크릿을
관리하지 않고 대상에 쓰지도 않는다. 공급자의 일반적인 도구로 로그인한 뒤, scan을
계정 / 프로젝트 / 구독으로 향하게 하라.
AWS는 표준 AWS SDK 자격 증명 체인(명명된 프로필, 환경 변수, SSO, 또는 인스턴스 역할)을 사용한다:
aws configure --profile myprofile # or: aws sso login --profile myprofile
./bin/thunderstorm scan --profile myprofile [--region us-east-1]
GCP는 Application Default Credentials (ADC)를 사용한다. 로그인한 뒤 프로젝트를 전달하라:
gcloud auth application-default login
./bin/thunderstorm scan --provider gcp --project my-project-id
서비스 계정 키도 GOOGLE_APPLICATION_CREDENTIALS=/path/key.json을 통해 작동한다.
Azure는 Azure CLI / DefaultAzureCredential 체인을 사용한다. 로그인한 뒤 선택적으로 하나의 구독으로 범위를 지정하라:
az login
./bin/thunderstorm scan --provider azure [--subscription <sub-id>]
서비스 주체도 AZURE_CLIENT_ID / AZURE_CLIENT_SECRET / AZURE_TENANT_ID를 통해 작동한다.
여러 계정을 한 번에 스캔하려면 --aws-profiles, --gcp-projects,
--azure-subscriptions, 또는 --scopes 파일(줄마다 provider:scope)을 사용한다.
빌드 (./bin/thunderstorm 생성):
make # build with the embedded RAGE snapshot
make RAGE_ROOT=/path/to/RAGE # re-vendor from a live RAGE checkout, then build
스캔한 뒤 탐색:
./bin/thunderstorm scan --profile <aws-profile> # → a single .rage.ndjson attack graph
./bin/thunderstorm view --in engagement.zip # open it offline in Blaze Lite
./bin/thunderstorm redact --in engagement.zip --out redacted.zip # de-identify for sharing
--out이 없으면, 결과물은 ./output/에 저장된다 (git-ignored). 이것이 도구의 전부다:
scan, redact, view, version.
STRUCTURAL이며 경로에서 제외된다.Thunderstorm은 GNU General Public License v3에 따라 라이선스된다 (LICENSE 참조).
이것은 승인된 보안 테스트, 교육, 연구 전용으로 제공되는 공격적 보안 도구다. 소유하지
않은 어떤 환경에 대해서든 실행하기 전에 명시적 승인을 받아라. LICENSE 상단의
Authorized-Use 고지를 참조하라.
vocab/{node-types,edge-types,conditions}.json |
| 네이티브→일반 매핑 + 수집 레시피 | providers/{aws,gcp,azure}.json |
| 도출 규칙 코퍼스 | rules/ |
| 자격 증명 노출 카탈로그 | exposure-db/{aws,gcp,azure}.json + vocabulary.json |