إدارة الأسرار وأمان البنية التحتية
الأسرار في CI/CD: المخاطر والأنماط الخاطئة
3 دقيقة للقراءة
الأسرار—مفاتيح API، كلمات المرور، الشهادات، الرموز—هي الجواهر الثمينة التي يبحث عنها المهاجمون. سر مسرب يمكن أن يعرض بنيتك التحتية بأكملها للخطر في دقائق.
حجم المشكلة
حوادث حقيقية:
- 2023: تسرب كود مصدر Okta عبر رمز GitHub مخترق
- 2022: اختراق Uber بدأ ببيانات اعتماد مشفرة
- 2021: هجوم سلسلة توريد Codecov عبر أسرار مكشوفة
- 2019: اختراق Capital One من دور IAM سيئ التكوين
إحصائيات:
- 4.6 مليون سر مكتشف في مستودعات GitHub العامة (2023)
- 67% من الأسرار المسربة لا تزال نشطة بعد 24 ساعة
- متوسط التكلفة: 4.5 مليون دولار لكل اختراق يتضمن بيانات اعتماد
- 65% من المؤسسات لديها أسرار مشفرة في الكود
أنواع الأسرار الشائعة في CI/CD
| نوع السر | مثال | مستوى المخاطر |
|---|---|---|
| مفاتيح API | OPENAI_API_KEY=sk-abc123... |
حرج |
| بيانات اعتماد قاعدة البيانات | DATABASE_URL=postgres://user:pass@... |
حرج |
| بيانات اعتماد السحابة | AWS_SECRET_ACCESS_KEY=... |
حرج |
| مفاتيح SSH الخاصة | -----BEGIN RSA PRIVATE KEY----- |
حرج |
| مفاتيح توقيع JWT | JWT_SECRET=supersecret |
عالي |
| رموز OAuth | GITHUB_TOKEN=ghp_xxxx |
عالي |
| الشهادات | ملفات .pem، .key |
عالي |
| URLs الداخلية | INTERNAL_API=http://10.0.0.x |
متوسط |
الأنماط الخاطئة: ما لا يجب فعله
1. الأسرار المشفرة
# لا تفعل هذا أبداً
api_key = "sk-1234567890abcdef" # سر مشفر
db_password = "production_pass123" # كلمة مرور مشفرة
2. الأسرار في ملفات البيئة
# ملف .env مرسل إلى git
DATABASE_URL=postgres://admin:secret@db.example.com/prod
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
3. الأسرار في سجلات CI/CD
# سيء: يطبع الأسرار في السجلات
- name: Debug
run: |
echo "API Key: ${{ secrets.API_KEY }}" # مكشوف في السجلات!
env # يفرغ جميع متغيرات البيئة
4. الأسرار ذات الصلاحيات المفرطة
# سيء: استخدام بيانات اعتماد الإنتاج في التطوير
- name: Deploy
env:
AWS_ACCESS_KEY_ID: ${{ secrets.PROD_AWS_KEY }} # وصول المسؤول الكامل!
5. الرموز طويلة العمر
# سيء: رمز لا ينتهي أبداً
GITHUB_TOKEN: ghp_xxxxxxxxxxxxxxxxxxxx # أُنشئ قبل سنتين
نواقل تعرض الأسرار
┌─────────────────────────────────────────────────────┐
│ نواقل تعرض الأسرار │
├─────────────────────────────────────────────────────┤
│ │
│ الكود المصدري ──────▶ تاريخ Git │
│ │ │ │
│ ▼ ▼ │
│ سجلات CI/CD تفرعات GitHub │
│ │ │ │
│ ▼ ▼ │
│ صور الحاويات رسائل الخطأ │
│ │ │ │
│ ▼ ▼ │
│ حالة Terraform الوثائق │
│ │
└─────────────────────────────────────────────────────┘
الكشف: العثور على الأسرار المسربة
فحص ما قبل الإرسال
# تثبيت detect-secrets
pip install detect-secrets
# إنشاء خط الأساس
detect-secrets scan > .secrets.baseline
# إضافة إلى pre-commit
# .pre-commit-config.yaml
repos:
- repo: https://github.com/Yelp/detect-secrets
rev: v1.4.0
hooks:
- id: detect-secrets
args: ['--baseline', '.secrets.baseline']
فحص CI/CD
# فحص الأسرار في GitHub Actions
- name: Scan for secrets
uses: trufflesecurity/trufflehog@main
with:
path: ./
extra_args: --only-verified
فحص تاريخ Git
# فحص تاريخ git بالكامل
trufflehog git file://. --since-commit=HEAD~100
# العثور على أنماط محددة
git log -p | grep -E "(password|api_key|secret)"
ما يحدث عندما تتسرب الأسرار
السر مُرسل
│
▼
مدفوع إلى GitHub ─────▶ البوتات تفحص في دقائق
│
▼
في تاريخ Git ─────▶ التفرعات تحفظ السر
│
▼
وصول المهاجم ─────▶ الحركة الجانبية تبدأ
│
▼
اختراق كامل ─────▶ تسريب البيانات
الجدول الزمني للاستجابة:
- 0-5 دقائق: البوتات الآلية تكتشف الأسرار المكشوفة
- 5-30 دقيقة: المهاجمون يبدأون الاستغلال
- ساعات-أيام: الحركة الجانبية والثبات يُنشأ
- أسابيع-أشهر: التأثير يُكتشف (إن اكتُشف)
بعد ذلك، سنستكشف HashiCorp Vault لإدارة الأسرار الآمنة. :::