أمان التبعيات والحاويات
أمان الحاويات مع 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
بعد ذلك، سنستكشف تقوية الصور الأساسية والحاويات بدون توزيعة. :::