الرئيسيةمن أناالدوراتالمدونةسوق الأوامرالمناهج والباقاتالشركاء

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • المناهج والباقات
  • سوق الأوامر
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالمناهجالمدونةالدخول
الأوتوميشن

افحص صور Docker بـ Trivy وأوقف الثغرات قبل ما توصل الإنتاج

متوسط13 أغسطس 20265 دقائق قراءة
افحص صور Docker بـ Trivy وأوقف الثغرات قبل ما توصل الإنتاج

مستوى المقال: متوسط. يفترض إنك تعرف تبني صورة Docker وتشغّل GitHub Actions، لكن لسه ما أضفتش فحص ثغرات آلي لخط الـ CI.

في آخر هذا المقال هيبقى عندك بوابة أمان تلقائية توقف الـ build وتمنع أي صورة فيها ثغرة حرجة من الوصول للإنتاج، بأقل من 15 سطر YAML.

افحص صور Docker بـ Trivy قبل ما توصل الإنتاج

الرقم اللي يخليك تقرأ: حسب تقرير Sysdig لسنة 2024، 86% من الأحمال في الإنتاج فيها ثغرة قابلة للترقيع من مستوى عالٍ أو أعلى. يعني الاحتمال الأكبر إن الصورة اللي بتنشرها دلوقتي فيها CVE معروف انت مش شايفه.

شاشة سوداء تعرض سطور كود بلون أخضر ترمز لفحص الثغرات الأمنية في صور الحاويات داخل خط CI

المشكلة باختصار

صورتك مش بس الكود اللي كتبته. هي كمان نظام تشغيل أساسي (زي debian أو alpine) وعشرات المكتبات اللي جت مع npm install أو pip install. أي حزمة فيهم ممكن يكون فيها ثغرة متسجّلة بمعرّف CVE.

المثال الأشهر: ثغرة Log4Shell (CVE-2021-44228) في مكتبة Log4j. سطر واحد في سجلّ عادي كان بيسمح بتنفيذ كود عن بُعد على السيرفر. ملايين الصور اللي كانت شغّالة عادي بقت مكشوفة بين ليلة وضحاها، من غير ما يتغيّر سطر واحد في كودهم.

يعني إيه فحص الثغرات؟ الفكرة بمثال

تخيّل بوّاب مطار بيقارن كل حقيبة بقائمة أشياء ممنوعة محدّثة يوميًا. مش بيخمّن، وبيفتّش بالظبط جوّه الشنطة ويطابق محتواها مع القائمة. لو لقى حاجة ممنوعة، بيوقف الراكب عند البوابة، مش بعد ما يركب الطيارة.

الآن بالتفاصيل والدقة: Trivy (من Aqua Security) بيعمل نفس الدور للصورة. بيفكّك طبقاتها، بيطلّع قائمة كل حزمة وإصدارها (اللي بتتسمّى SBOM)، وبيطابقها مع قواعد بيانات ثغرات عامة زي NVD. لو حزمة عندك إصدارها مذكور في CVE معروف، Trivy بيبلّغك بمستوى الخطورة: LOW أو MEDIUM أو HIGH أو CRITICAL.

الحل: بوابة فحص في خط الـ CI

الفكرة إن الفحص يشتغل تلقائيًا على كل push، والأهم: يوقف الـ build لو لقى ثغرة خطيرة. ده اللي بيحوّل الفحص من تقرير بيتجاهله الكل إلى بوابة فعلية.

الأول جرّبه محليًا على جهازك قبل ما تدفع:

Bash
# افحص صورة محليًا، ورجّع كود خطأ لو فيه ثغرة حرجة أو عالية
trivy image --severity CRITICAL,HIGH --ignore-unfixed --exit-code 1 myapp:1.5.0

وبعدين حطّه في GitHub Actions كبوابة على كل Pull Request:

YAML
name: security-scan
on: [push, pull_request]

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

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

      - name: Scan with Trivy
        uses: aquasecurity/trivy-action@0.28.0
        with:
          image-ref: myapp:${{ github.sha }}
          severity: CRITICAL,HIGH
          ignore-unfixed: true
          vuln-type: os,library
          exit-code: '1'   # يفشّل الـ build لو لقى ثغرة

الخطوة الأهم هي exit-code: '1'. من غيرها Trivy بيطبع تقرير ويكمّل بنجاح، والكل هيتجاهله. معاها، الـ build بيفشل في حدود 30 إلى 60 ثانية، فالمطوّر مضطر يصلّح قبل الدمج.

خزائن خوادم في مركز بيانات تمثل بيئة الإنتاج التي نحميها من الصور المصابة بثغرات قبل النشر

سيناريو واقعي

افترض عندك متجر إلكتروني عربي بـ 50 ألف طلب في اليوم، شغّال على صورة node أساسية اتبنت من 4 شهور. الأساس نفسه دلوقتي فيه 3 ثغرات حرجة اتسجّلت بعد ما بنيت الصورة. من غير فحص، انت مش هتعرف غير لما حد يستغلّها. مع البوابة دي، أول Pull Request بيحاول يعيد البناء هيفشل على الـ 3 ثغرات، فتترقّي الأساس بـ docker build --pull وتقفلهم قبل الإنتاج.

الـ trade-offs وما يجب الانتباه له

الفحص مش ببلاش. اللي بتكسبه: منع الثغرات المعروفة من الوصول للإنتاج. اللي بتدفعه:

  • وقت CI زيادة: من 30 إلى 90 ثانية لكل build، حسب حجم الصورة وكاش قاعدة الثغرات.
  • ضجيج: صورة كبيرة ممكن تطلّع 100+ تحذير. عشان كده استخدمنا ignore-unfixed: true — تركّز بس على اللي ليه ترقيع متاح فعلًا وتقدر تصلّحه.
  • إيجابيات كاذبة أو ثغرات غير قابلة للاستغلال: حسب Sysdig، حوالي 15% فقط من الثغرات الحرجة والعالية اللي ليها ترقيع بتكون في حزم محمّلة وقت التشغيل فعلًا. الباقي موجود في الصورة بس مش مستخدَم. لذلك لو ثغرة معيّنة تحت المراجعة، استثنيها بوضوح بدل ما توقف كل الفريق:
Bash
# .trivyignore — استثناء مؤقت وموثّق، مش دائم
# قيد المراجعة، تُراجَع 2026-09-01
CVE-2025-12345

الافتراض هنا إن الفريق بيراجع ملف .trivyignore دوريًا. لو الاستثناءات بتتراكم بدون تاريخ انتهاء، البوابة بتفقد قيمتها.

متى لا تستخدم هذه الطريقة

لو انت في تجربة أولية (prototype) عمرها أيام ومش رايحة إنتاج، البوابة الصارمة هتعطّلك بلا مقابل. الأنسب وقتها تشغّل Trivy بـ exit-code: '0' — يبلّغك بس من غير ما يفشّل الـ build. كذلك لو صورتك scratch أو distroless بلا مدير حزم، سطح الهجوم صغير أصلًا والعائد من الفحص أقل، رغم إنه يفضل مفيد للمكتبات.

الخطوة التالية

افتح آخر صورة نشرتها وشغّل عليها أمر واحد الآن: trivy image --severity CRITICAL,HIGH --ignore-unfixed اسم_الصورة:الوسم. لو طلع أي CRITICAL، ده معناه إن الإنتاج بتاعك مكشوف دلوقتي — ابدأ بترقية الصورة الأساسية قبل أي حاجة.

المصادر

  • Trivy — التوثيق الرسمي: trivy.dev
  • Trivy GitHub Action ومدخلاته (image-ref, severity, exit-code, ignore-unfixed): github.com/aquasecurity/trivy-action
  • إحصائية 86–87% من صور/أحمال الحاويات فيها ثغرات عالية أو حرجة، و15% منها فقط محمّلة وقت التشغيل — تقرير Sysdig 2023/2024: sysdig.com
  • ثغرة Log4Shell (CVE-2021-44228) — قاعدة بيانات NVD: nvd.nist.gov

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة