الدرس 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المصدر
SASTSemgrep، SonarQubeالبناء
فحص الحاوياتTrivy، Grypeالبناء/السجل
توليد SBOMSyft، Trivyالبناء
توقيع الصورCosignالبناء
التحقق من التوقيعKyverno، Gatekeeperالنشر
فحص التشغيلFalco، سحابي أصليالتشغيل

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

مراجعة سريعة: كيف تجد هذا الدرس؟

اختبار

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

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

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

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

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