
إطار عمل للفريق الأحمر في CI/CD لإظهار مخاطر أمان خطوط البناء.
إطار عمل الفريق الأحمر لـ CI/CD
مثل Metasploit، لكن لخطوط أنابيب CI/CD.
من صناع poutine ماسح SAST لخطوط البناء في BoostSecurity Labs.

تحذير: هذه الأداة مخصصة لاختبار الأمان المصرح به فقط.
SmokedMeat موجودة لأن تهديدات خطوط أنابيب CI/CD يتم التقليل من شأنها بشكل كبير. نادرًا ما يغطي التدريب التقليدي للأمان هجمات سلسلة التوريد، مما يترك المدافعين غير مستعدين لتقنيات يستغلها الخصوم بنشاط في البرية.
لقد بنينا هذا لإعطاء فرق الأمان القدرة على التعلم والممارسة والتحقق من الدفاعات ضد تقنيات هجوم CI/CD المتقدمة من خلال تمارين الفريق الأحمر الواقعية.
استخدم فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها.
SmokedMeat هو إطار عمل ما بعد الاستغلال لخطوط أنابيب CI/CD. قم بتوجيهه إلى منظمة GitHub، ودعه يجد سير العمل الضعيفة، وانشر غرسة في مشغل مخترق، ثم تنقل عبر موفري السحابة، واستخرج الأسرار، وارسم خريطة لنطاق الانفجار - كل ذلك من واجهة مستخدم طرفية.
ما يفعله:
الفلسفة: جريء وصاخب. هذه ليست أداة لتجنب EDR. إنه إطار عرض يوضح مدى عمق اختراق CI/CD قبل أن يطلق أي شيء إنذارًا.
لمن هو:
لتجربة SmokedMeat لأول مرة، قم بتثبيت Docker و make. Go غير مطلوب.
git clone https://github.com/boostsecurityio/smokedmeat.git
cd smokedmeat
make quickstart
make quickstart هو التشغيل الأول الموصى به. يبدأ مجموعة البداية السريعة للإصدار المستقر محليًا ويطلق واجهة المشغل الطرفية (Counter) ضد خادم فريق C2 المحلي (Kitchen).
التشغيل الأول الموصى به:
whoolipublic_repo⚠ يُفضل PAT كلاسيكي. يمكن أن تكون PATs الدقيقة مقيدة جدًا وقد تمنع اختبار الأهداف العامة في منظمات أخرى، بما في ذلك whooli.
whooli هي ساحة لعب هجوم CI/CD الضعيفة عن قصد من SmokedMeat. إنها الهدف الأول الموصى به للمسار العام.
يرشدك معالج الإعداد خلال:
repo.whooli أو المنظمة/المستودع الخاص بكللحصول على تدفق التحدي الكامل، راجع دليل whooli أو انتقل مباشرة إلى منظمة whooli على GitHub.
عند الانتهاء:
make quickstart-down # إيقاف الحاويات
make quickstart-purge # إيقاف وحذف جميع البيانات
إذا كنت ترغب في العمل من المصدر بدلاً من ذلك، راجع التطوير.
إذا كنت تشارك أو تكرر على شجرة المصدر محليًا، قم بتثبيت Go 1.26+ واستخدم البداية السريعة للتطوير:
make dev-quickstart
make dev-quickstart يبني صورة smokedmeat-cloud-shell المحلية، ويبدأ cloudflared و nats وخادم فريق C2 (Kitchen)، ثم يطلق واجهة المشغل الطرفية من المصدر.
إذا كنت تريد البنية التحتية أولاً وواجهة المشغل لاحقًا:
make dev-quickstart-up
make dev-quickstart-counter
عند الانتهاء:
make dev-quickstart-down # إيقاف الحاويات
make dev-quickstart-purge # إيقاف وحذف جميع البيانات
مزيد من أنماط النشر وتفاصيل التطوير المحلي موجودة في [docs/deployment.md](https://github.com/boostsecurityio/smokedmeat/blob/HEAD/docs/deployment.md).
## التحقق من الإصدار
يتحقق Counter من وجود إصدارات أحدث من SmokedMeat عند بدء التشغيل. يمكن تعطيل ذلك بتعيين متغير البيئة `SMOKEDMEAT_DISABLE_VERSION_CHECK`.
## المكونات الأساسية
| المصطلح القياسي | اسم SmokedMeat | الوصف |
|---------------|-----------------|-------------|
| **واجهة المشغل الطرفية** | `Counter` | واجهة طرفية للتحليل وتسليم الحمولة وسير عمل ما بعد الاستغلال. |
| **خادم فريق C2** | `Kitchen` | خادم API وWebSocket لجلسات المشغل والمنصبات والاستدعاءات وحالة الرسم البياني. |
| **الغرسة** | `Brisket` | وكيل يتم تسليمه إلى مشغلات CI المخترقة للاتصال وتنفيذ الأوامر والتنقل. |
| **عرض الرسم البياني في المتصفح** | `Browser View` | رسم بياني حي للهجوم يقدمه خادم فريق C2 في `/graph`. |
## أنماط النشر
| النمط | استخدمه عندما | نقطة الدخول |
|------|-------------|-------------|
| **البداية السريعة** | أسرع تشغيل أول على الإصدار المثبت | `make quickstart` |
| **البداية السريعة للتطوير** | العمل على شجرة المصدر محليًا | `make dev-quickstart` |
| **خادم فريق مستضاف** | تشغيل مشاركة حقيقية مع نطاق ثابت | [docs/deployment.md](https://github.com/boostsecurityio/smokedmeat/blob/HEAD/docs/deployment.md) |
خادم الفريق المستضاف يشغل خادم فريق C2 على مضيف مخصص وواجهة المشغل الطرفية محليًا على كل محطة عمل مشغل.
## البنية المعمارية
على مستوى عالٍ، تتحدث واجهة المشغل الطرفية (`Counter`) مع خادم فريق C2 (`Kitchen`)، الذي يدير الغرسات (`Brisket`) التي تعمل على مشغلات CI المخترقة ويقدم الرسم البياني الحي للهجوم.
┌──────────────┐ │ SSH AGENT │ │ (Auth) │ └──────┬───────┘ │ ▼ ┌──────────────┐ ┌──────────────┐ │ THE COUNTER │ ───────────────▶│ THE KITCHEN │ │ (Operator) │ WebSocket │ (Teamserver) │ │ Bubbletea │◀─────────────── │ │ │ TUI │ Events/Graph │ ┌──────────┐ │ └──────────────┘ │ │ Database │ │ │ └──────────┘ │ ┌──────────────┐ │ │ │ BROWSER │ ───────────────▶│ │ │ Graph View │ WebSocket │ │ │ Visualizer │◀─────────────── │ │ └──────────────┘ Live Updates └──────────────┘ │ ▲ │ │ Creates PR │ │ Stager fetches implant binary │ │ Implant HTTP Beacon/Commands ▼ │ ┌────────────────────────────────────────────┴──────────────────────────────────┐ │ GITHUB.COM │ │ │ │ ┌─────────────────────┐ ┌─────────────────────────────────────────┐ │ │ │ Malicious PR │ triggers │ GitHub Actions Runner │ │ │ │ (Vulnerable │─────────▶│ │ │ │ │ Workflow) │ │ ┌────────────┐ ┌────────────────┐ │ │ │ └─────────────────────┘ │ │ Stager │─────▶│ THE BRISKET │ │ │ │ │ │ │ │ (Implant) │ │ │ │ │ └────────────┘ └────────────────┘ │ │ │ └─────────────────────────────────────────┘ │ └───────────────────────────────────────────────────────────────────────────────┘
## الميزات
التفاصيل الكاملة في [docs/FEATURES.md](https://github.com/boostsecurityio/smokedmeat/blob/HEAD/docs/FEATURES.md).
| الفئة | القدرات |
|----------|-------------|
| **الاستطلاع** | الكشف التلقائي عن 6 منصات CI (GitHub Actions، GitLab CI، Azure DevOps، CircleCI، Jenkins، Bitbucket). تصنيف الأسرار، فحص توفر OIDC، جمع بيانات تعريف المشغل. |
| **استخراج الأسرار** | مسح ذاكرة عملية Runner.Worker عبر `/proc` لاستعادة `secrets.*` و `vars.*` غير المقنعة وخرائط أذونات `GITHUB_TOKEN` التي يخفيها GitHub من السجلات. |
| **تحليل الثغرات** | [poutine](https://github.com/boostsecurityio/poutine) SAST مدمج لثغرات الحقن والمحفزات الخطيرة وتصنيف بوابة `if:` لسير العمل. فحص عميق بواسطة Gitleaks للمفاتيح الخاصة وPATs في تاريخ git. |
| **التسليم** | 5 طرق آلية: PR، issue، تعليق، LOTP، workflow dispatch - بالإضافة إلى النسخ فقط واليدوي. دعم PR المسودة، الإغلاق التلقائي عند الاستدعاء، الفحص المسبق للتسليم من جانب الخادم. |
| **حمولات الحقن** | توليد حمولات مدركة للسياق لـ 8 نواقل حقن (اسم الفرع، عنوان/محتوى PR، رسالة الالتزام، عنوان/محتوى issue، github-script، bash run) بتقنيات مدركة للقيود. |
| **LOTP** | كتالوج العيش خارج خط الأنابيب: 15 أداة بناء (npm، pip، cargo، make، docker، gradle، maven، وغيرها) مع حمولات ملفات التكوين لتنفيذ الكود أثناء التثبيت/البناء/الاختبار. |
| **تسميم ذاكرة التخزين المؤقت** | تصنيف كاتب/ضحية، تنبؤ دقيق بمفتاح ذاكرة التخزين المؤقت، تدريج الأرشيف عبر واجهة برمجة تطبيقات ذاكرة التخزين المؤقت لـ Actions. تدفق موجه بالمعالج مع تسليح الغرسة. |
| **تعداد الرموز** | فحص رموز GitHub مقابل نقاط نهاية API لتعداد 10 نطاقات أذونات، تحديد نوع الرمز، وسرد المستودعات والمنظمات القابلة للوصول. |
| **التنقلات السحابية** | تبادل رموز OIDC لـ AWS (`sts:AssumeRoleWithWebIdentity`) و GCP (Workload Identity Federation) و Azure (AAD) و Kubernetes. تعداد الموارد بعد التنقل. |
| **الصدفة السحابية** | جلسات محلية دائمة مع `cloud shell` (gcloud/aws/az مهيأة مسبقًا) و `cloud export` وفحوصات سريعة للمزود. |
| **التنقل عبر SSH** | فحص المستودعات للوصول إلى مفتاح نشر SSH (قراءة/كتابة)، `ssh shell` مع وكيل مؤقت، تأكيد الوصول المستمر في الرسم البياني. |
| **التنقل عبر GitHub** | `pivot github` لاكتشاف المستودعات، `pivot app` لتبادل PEM لتطبيق GitHub إلى رمز التثبيت. المستودعات المكتشفة تصطف تلقائيًا للتحليل. |
| **رسم بياني للهجوم** | رسم بياني موجه مستمر (BBolt) مع عقد المنظمة/المستودع/سير العمل/الوظيفة/الثغرة/الرمز/السحابة. تصور حي في المتصفح باستخدام Cytoscape.js في `/graph`. |
| **واجهة المشغل الطرفية** | سير عمل مدرك للمرحلة، معالج إعداد من 7 خطوات، تنقل شجري للهجوم، معالج استغلال، مخزن غنائم، بحث في شريط الأوامر، إكمال تلقائي، روابط OSC 8. |
| **خادم الفريق** | مصادقة SSH أو رمز، ناقل رسائل NATS JetStream، وكيل واجهة برمجة تطبيقات GitHub (تبقى الرموز جانب الخادم)، شهادة TLS تلقائية عبر Caddy، سجل العمليات. |
## كومة التكنولوجيا
| الطبقة | التقنية |
|-------|------------|
| اللغة | Go 1.26+ |
| إطار عمل TUI | [Bubbletea v2](https://github.com/charmbracelet/bubbletea) + [Lipgloss v2](https://github.com/charmbracelet/lipgloss) |
| تخطيط TUI | [Ultraviolet](https://github.com/charmbracelet/ultraviolet) layout + تركيب شاشة آمن لـ ANSI |
| ناقل الرسائل | [NATS JetStream](https://nats.io/) |
| رسم بياني للهجوم | [hmdsefi/gograph](https://github.com/hmdsefi/gograph) |
| تصور الرسم البياني | [Cytoscape.js](https://js.cytoscape.org/) |
| قاعدة البيانات | [BBolt](https://github.com/etcd-io/bbolt) |
| ماسح CI/CD | [poutine](https://github.com/boostsecurityio/poutine) (مضمن) |
| ماسح الأسرار | [gitleaks](https://github.com/gitleaks/gitleaks) (مضمن، قواعد مخصصة) |
| استخراج أسرار المشغل | gump (مضمن، مسح ذاكرة `/proc`) |
| حزم SDK السحابية | AWS SDK v2، Google Cloud، Azure SDK لـ Go |
| وكيل عكسي | [Caddy](https://caddyserver.com/) (TLS تلقائي) |
## الاختبار
```bash
make test # اختبارات الوحدة
make lint # المدقق
make e2e-smoke # مسار الدخان السريع للاستغلال العام
make e2e-goat # سلسلة الماعز الكاملة إلى علم السحابة
يبني SmokedMeat على أبحاث من:
GNU Affero General Public License v3.0 - راجع LICENSE للتفاصيل.
بُني للمدافعين الذين يريدون فهم تقنيات المهاجمين.