الدرس 20 من 24

أمان الحاويات و Kubernetes

أمان سلسلة التوريد

4 دقيقة للقراءة

هجمات سلسلة توريد البرمجيات زادت 742% من 2019-2022. تأمين خط بناء الحاويات—من الكود المصدري إلى الإنتاج—حرج لمنع اختراق التطبيقات السحابية الأصلية.

متجهات هجوم سلسلة التوريد

سطح الهجوم

┌─────────────────────────────────────────────────────┐
│              سلسلة توريد البرمجيات                  │
├─────────────────────────────────────────────────────┤
│  الكود المصدر → البناء → التعبئة → النشر → التشغيل  │
│      │           │        │         │         │     │
│   commits   CI/CD       صور      صور غير   الانحراف│
│   خبيثة    مخترق      أساسية    موقعة              │
└─────────────────────────────────────────────────────┘
المرحلة متجه الهجوم مثال
المصدر تبعية خبيثة typosquatting في PyPI
البناء CI/CD مخترق SolarWinds (2020)
التعبئة صورة أساسية ضعيفة Log4Shell في الحاويات
النشر صور غير موقعة حقن man-in-the-middle
التشغيل انحراف التكوين خطأ تكوين Kubernetes

فاتورة مواد البرمجيات (SBOM)

لماذا SBOM مهم

  • الأمر التنفيذي الأمريكي 14028 يلزم SBOM لموردي الحكومة
  • يمكّن الاستجابة السريعة للثغرات (استجابة Log4Shell)
  • مطلوب للامتثال (FedRAMP، SOC2)

توليد SBOM

Syft - مولد SBOM:

# توليد SBOM من صورة حاوية
syft myapp:latest -o spdx-json > sbom.spdx.json

# توليد بتنسيق CycloneDX
syft myapp:latest -o cyclonedx-json > sbom.cdx.json

# فحص نظام الملفات
syft dir:/path/to/project -o spdx-json > sbom.spdx.json

Trivy - فحص مدمج + SBOM:

# توليد SBOM
trivy image --format spdx-json -o sbom.json myapp:latest

# فحص SBOM موجود للثغرات
trivy sbom sbom.json

مثال SBOM (CycloneDX)

{
  "bomFormat": "CycloneDX",
  "specVersion": "1.4",
  "components": [
    {
      "type": "library",
      "name": "express",
      "version": "4.18.2",
      "purl": "pkg:npm/express@4.18.2"
    },
    {
      "type": "library",
      "name": "lodash",
      "version": "4.17.21",
      "purl": "pkg:npm/lodash@4.17.21"
    }
  ],
  "dependencies": [
    {
      "ref": "pkg:npm/express@4.18.2",
      "dependsOn": ["pkg:npm/body-parser@1.20.0"]
    }
  ]
}

توقيع الصور والتحقق

سير عمل Cosign

# توليد مفاتيح التوقيع
cosign generate-key-pair

# توقيع الصورة بعد البناء
cosign sign --key cosign.key gcr.io/project/myapp:v1.0.0

# التحقق قبل النشر
cosign verify --key cosign.pub gcr.io/project/myapp:v1.0.0

التوقيع بدون مفتاح مع Sigstore

# التوقيع بهوية OIDC (بدون إدارة مفاتيح)
cosign sign gcr.io/project/myapp:v1.0.0

# التحقق بهوية الشهادة
cosign verify \
  --certificate-identity developer@company.com \
  --certificate-oidc-issuer https://accounts.google.com \
  gcr.io/project/myapp:v1.0.0

فرض الصور الموقعة في Kubernetes

سياسة Kyverno:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: verify-image-signatures
spec:
  validationFailureAction: Enforce
  background: false
  rules:
  - name: verify-signature
    match:
      any:
      - resources:
          kinds:
          - Pod
    verifyImages:
    - imageReferences:
      - "gcr.io/project/*"
      attestors:
      - entries:
        - keyless:
            subject: "*@company.com"
            issuer: https://accounts.google.com

خط CI/CD آمن

أفضل ممارسات أمان الخط

# خط GitHub Actions آمن
name: Secure Build

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write  # للتوقيع بدون مفتاح
      packages: write

    steps:
    - uses: actions/checkout@v4

    # فحص التبعيات
    - name: Scan dependencies
      uses: snyk/actions/node@master
      with:
        args: --severity-threshold=high

    # البناء بقاعدة بسيطة
    - name: Build image
      run: |
        docker build -t myapp:${{ github.sha }} \
          --build-arg VERSION=${{ github.sha }} .

    # فحص الثغرات
    - name: Scan image
      uses: aquasecurity/trivy-action@master
      with:
        image-ref: myapp:${{ github.sha }}
        exit-code: 1
        severity: CRITICAL,HIGH

    # توليد SBOM
    - name: Generate SBOM
      uses: anchore/sbom-action@v0
      with:
        image: myapp:${{ github.sha }}
        output-file: sbom.spdx.json

    # توقيع الصورة
    - name: Sign image
      uses: sigstore/cosign-installer@main
    - run: |
        cosign sign --yes gcr.io/project/myapp:${{ github.sha }}

    # دفع للسجل
    - name: Push image
      run: |
        docker push gcr.io/project/myapp:${{ github.sha }}

أمان بيئة البناء

الضابط التنفيذ
runners مؤقتة بيئة جديدة لكل بناء
صلاحيات بسيطة رموز OIDC، وليس أسرار طويلة العمر
تثبيت التبعيات ملفات القفل، التحقق من الهاش
شهادة البناء مصدر SLSA
توقيع القطع Cosign/Sigstore

إطار SLSA

مستويات SLSA

المستوى المتطلبات الحماية
SLSA 1 التوثيق لا شيء (خط أساس)
SLSA 2 بناء مستضاف، مصدر موقع التلاعب البسيط
SLSA 3 بناء مقوى، غير قابل للتزوير اختراق البناء
SLSA 4 بناء محكم، مراجعة شخصين التهديدات الداخلية

توليد مصدر SLSA

# مولد SLSA لـ GitHub Actions
- uses: slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@v1.9.0
  with:
    image: gcr.io/project/myapp
    digest: ${{ needs.build.outputs.digest }}
  secrets:
    registry-username: ${{ secrets.REGISTRY_USERNAME }}
    registry-password: ${{ secrets.REGISTRY_PASSWORD }}

إدارة الثغرات

استراتيجية الفحص المستمر

┌────────────────────────────────────────────────────┐
│            الفحص المستمر للثغرات                   │
├────────────────────────────────────────────────────┤
│  المطور    │  CI/CD    │  السجل    │  التشغيل   │
│  فحص IDE  │  بوابة    │  فحص      │  فحص       │
│  Pre-commit│  البناء   │  التخزين  │  التشغيل   │
│            │           │           │            │
│  Shift-left│  البوابة  │  الاكتشاف │  الكشف    │
└────────────────────────────────────────────────────┘

فحص سجل السحابة

# AWS ECR - تفعيل الفحص
aws ecr put-image-scanning-configuration \
    --repository-name myapp \
    --image-scanning-configuration scanOnPush=true

# الحصول على نتائج الفحص
aws ecr describe-image-scan-findings \
    --repository-name myapp \
    --image-id imageTag=latest

# GCP - تحليل Artifact
gcloud artifacts docker images scan \
    us-central1-docker.pkg.dev/project/repo/myapp:latest \
    --format=json

# Azure ACR
az acr repository show-manifests \
    --name myregistry \
    --repository myapp \
    --detail

قائمة تحقق أمان سلسلة التوريد

الضابط الأداة المرحلة
فحص التبعيات Snyk، Dependabot المصدر
SAST Semgrep، SonarQube البناء
فحص الحاويات Trivy، Grype البناء/السجل
توليد SBOM Syft، Trivy البناء
توقيع الصور Cosign البناء
التحقق من التوقيع Kyverno، Gatekeeper النشر
فحص التشغيل Falco، سحابي أصلي التشغيل

الوحدة التالية: تقنيات اختبار اختراق السحابة ومنهجيات تقييم الأمان. :::

اختبار

الوحدة 5: أمان الحاويات و Kubernetes

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.