أمان التبعيات والحاويات

أمان الحاويات مع Trivy

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

الحاويات تقدم أسطح هجوم جديدة: الصور الأساسية، حزم نظام التشغيل، وسوء التكوين. Trivy هو الماسح مفتوح المصدر الأمثل لأمان الحاويات.

لماذا أمان الحاويات مهم

┌─────────────────────────────────────────┐
│              تطبيقك                     │
├─────────────────────────────────────────┤
│         تبعيات التطبيق                  │  ← SCA (Snyk)
├─────────────────────────────────────────┤
│           حزم النظام                    │  ← فحص الحاوية
│        (apt, apk, yum)                  │
├─────────────────────────────────────────┤
│          الصورة الأساسية               │  ← فحص الحاوية
│     (ubuntu:22.04, node:20)             │
└─────────────────────────────────────────┘

ثغرات الحاويات حسب الطبقة:

  • الصور الأساسية: 40-60% من الثغرات تأتي من صور أساسية قديمة
  • حزم النظام: مكتبات نظام غير مرقعة
  • تبعيات التطبيق: مغطاة بالفعل بـ SCA
  • سوء التكوين: التشغيل كـ root، الأسرار المكشوفة

نظرة عامة على Trivy

الميزة الوصف
السعر مجاني ومفتوح المصدر
الأهداف الصور، أنظمة الملفات، مستودعات git، Kubernetes
قواعد البيانات NVD، Alpine، Debian، Ubuntu، Red Hat، إلخ.
الإخراج جدول، JSON، SARIF، CycloneDX
السرعة سريع جداً (يستخدم التخزين المحلي)

التثبيت

# macOS
brew install trivy

# Linux (Debian/Ubuntu)
sudo apt-get install trivy

# Docker
docker pull aquasec/trivy

فحص صور الحاويات

# فحص صورة محلية
trivy image my-app:latest

# فحص من السجل
trivy image nginx:1.25

# فحص مع تصفية الخطورة
trivy image --severity HIGH,CRITICAL nginx:1.25

# الإخراج كـ JSON
trivy image --format json -o results.json nginx:1.25

فهم مخرجات Trivy

nginx:1.25 (debian 12.1)
=========================
Total: 142 (UNKNOWN: 0, LOW: 82, MEDIUM: 43, HIGH: 15, CRITICAL: 2)

┌──────────────┬────────────────┬──────────┬─────────────────────────┐
│   المكتبة    │    الثغرة      │ الخطورة  │     النسخة المصلحة      │
├──────────────┼────────────────┼──────────┼─────────────────────────┤
│ libssl3      │ CVE-2024-0727  │ CRITICAL │ 3.0.13-1~deb12u1        │
│ openssl      │ CVE-2024-0727  │ CRITICAL │ 3.0.13-1~deb12u1        │
│ curl         │ CVE-2024-2398  │ HIGH     │ 7.88.1-10+deb12u5       │
└──────────────┴────────────────┴──────────┴─────────────────────────┘

تكامل CI/CD

GitHub Actions

# .github/workflows/trivy.yml
name: Container Security Scan

on:
  push:
    branches: [main]

jobs:
  trivy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Build image
        run: docker build -t my-app:${{ github.sha }} .

      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: 'my-app:${{ github.sha }}'
          format: 'sarif'
          output: 'trivy-results.sarif'
          severity: 'CRITICAL,HIGH'

      - name: Upload Trivy scan results
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: 'trivy-results.sarif'

خطاف ما قبل الدفع

#!/bin/bash
# .git/hooks/pre-push

IMAGE_NAME=$(docker images --format "{{.Repository}}:{{.Tag}}" | head -1)
trivy image --exit-code 1 --severity CRITICAL "$IMAGE_NAME"

فحص أهداف مختلفة

# فحص نظام الملفات (لسوء تكوين IaC)
trivy fs --security-checks vuln,config .

# فحص بيانات Kubernetes
trivy config ./k8s/

# فحص مستودع git
trivy repo https://github.com/your-org/your-repo

# فحص عنقود Kubernetes قيد التشغيل
trivy k8s --report summary cluster

فحص التكوين

Trivy أيضاً يجد سوء التكوين:

trivy config ./
Dockerfile (dockerfile)
=======================
Tests: 23 (SUCCESSES: 19, FAILURES: 4)

┌──────────────────────────────────────────────────────────┐
│ الإخفاقات: 4                                             │
├──────────────┬──────────┬────────────────────────────────┤
│   الفحص      │ الخطورة  │         الرسالة               │
├──────────────┼──────────┼────────────────────────────────┤
│ DS002        │ HIGH     │ التشغيل كمستخدم root          │
│ DS026        │ MEDIUM   │ لا توجد تعليمات HEALTHCHECK   │
│ DS001        │ LOW      │ استخدام وسم ':latest'         │
└──────────────┴──────────┴────────────────────────────────┘

تجاهل النتائج

# .trivyignore
# تجاهل CVEs محددة
CVE-2024-0727

# تجاهل حسب الحزمة
openssl

# تجاهل مع انتهاء الصلاحية
CVE-2024-2398 exp:2025-01-01

بعد ذلك، سنستكشف تقوية الصور الأساسية والحاويات بدون توزيعة. :::

اختبار

اختبار الوحدة 3: أمان التبعيات والحاويات

خذ الاختبار