
محرك جمع واستخلاص. يقوم برسم خريطة لبيئتك، وتقييم الأذونات والثقة الفعلية، وكتابة رسم بياني كامل للهجوم في ملف واحد بامتداد .rage.ndjson. وهو المدخل لكل شيء آخر.
ليس لديك 4,000 نتيجة. لديك ستة مسارات إلى جواهر تاجك.

تمنحك أداة CSPM قائمة مسطحة ومنزوعة التكرار ومرتبة حسب الخطورة من الأخطاء الإعدادية، وتتركك لتخمّن أيّها يهم. يفكّر Thunderstorm في قابلية الوصول: فهو يجمع بيانات سحابتك للقراءة فقط، ويُمثّلها كرسم بياني للقدرات الأمنية، ويخبرك بأن ثقة GitHub Actions OIDC تؤدي، في أربع قفزات، إلى بحيرة بيانات الإنتاج لديك.
لا تُعدّ أي من القفزات أعلاه نتيجة بحد ذاتها. دلو عام، مفتاح في ملف حالة، دور قابل للافتراض، إجراء IAM واحد واسع النطاق. المسار هو النتيجة، والمسار هو ما لا يحسبه أي شيء آخر تقريبًا.
عمق في المنصة التي توجّهه إليها. شغّله ضد حساب AWS، أو اشتراك Azure، أو مشروع GCP، وسيرسم تلك البيئة الواحدة بمصطلحات المزوّد نفسه: افتراض الدور عبر STS وتصعيد الامتيازات في IAM في AWS، وسلاسل RBAC والهوية المُدارة في Azure، وانتحال هوية حساب الخدمة في 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 قابل للقراءة العامة عن سرّ للهوية الخدمية. ويرقّي Contributor نفسه بإذن إضافي واحد إلى مالك الاشتراك. لا استغلال لتطبيق؛ فقط خطأ إعدادي سحابي و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 |
|---|---|
| تصنيف العقد / الحافات، والشروط | vocab/{node-types,edge-types,conditions}.json |
| التعيينات من الأصلي إلى العام + وصفات الجمع | providers/{aws,gcp,azure}.json |
| مجموعة قواعد الاشتقاق | rules/ |
| كتالوج تعرض بيانات الاعتماد | exposure-db/{aws,gcp,azure}.json + vocabulary.json |
رابط الإصدار: spec_version في RAGE هو الرقم الوحيد الذي يثبّت Thunderstorm على
إصدار RAGE. يقرأه المجمّع مباشرةً من RAGE الذي بُني عليه
(يطبع thunderstorm version قيمة RAGE <v>) ويختمه في كل رسم بياني يصدره؛ ويقرأ Blaze
Lite ذلك الختم ويحذّر عندما يُبنى رسم بياني على إصدار لا يدعمه.
كيف يُحلّ RAGE (أول تطابق يفوز):
$RAGE_ROOT: نسخة RAGE حيّة، إن قمت بتعيينه (تجاوز للمطوّر؛ تُطبَّق التعديلات دون إعادة بناء).collectors/rage/، المدمجة في الملف التنفيذي.حدّث اللقطة باستخدام make RAGE_ROOT=/path/to/rage (أو go generate ./... في
collectors/). يوجد 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 يستخدم بيانات اعتماد التطبيق الافتراضية (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). هذه هي الأداة كاملة:
scan، redact، view، version.
STRUCTURAL ومُستبعَد من المسارات.Thunderstorm مرخّص بموجب GNU General Public License v3 (انظر LICENSE).
إنه أداة أمن هجومي تُقدَّم لاختبارات الأمان المصرّح بها، والتعليم،
والبحث فقط؛ احصل على تصريح صريح قبل تشغيله ضد أي بيئة
لا تملكها. انظر إشعار الاستخدام المصرّح به في أعلى LICENSE.