
dockerscan v2.1.0
أكثر ماسح أمان لـ Docker شمولية
DockerScan v2.0
أكثر ماسح أمان Docker شمولاً
بواسطة Daniel Garcia (cr0hn) | GitHub | الموقع الإلكتروني
الميزات • التثبيت • بداية سريعة • التوثيق • حالات الاستخدام • ما الجديد • المساهمة
📑 جدول المحتويات
- نظرة عامة
- الميزات
- ما الجديد في v2.0
- التثبيت
- بداية سريعة
- الاستخدام
- ماسحات الأمان
- تنسيقات المخرجات
- حالات الاستخدام
- المقارنة
- الهندسة المعمارية
- المساهمة
- المراجع
- الترخيص
- المؤلف
🎯 نظرة عامة
DockerScan v2.0 هو ماسح أمان من الجيل التالي لحاويات وصور Docker، أعيدت كتابته بالكامل بلغة Go. يجمع بين تقنيات متعددة لفحص الأمان بناءً على أحدث الأبحاث في 2024-2025 والمعايير الصناعية (CIS Benchmark, NIST SP 800-190) وأنماط الهجمات الحقيقية المكتشفة في بيئات الإنتاج.
لماذا DockerScan v2.0؟
- ✅ الأكثر شمولاً: يجمع أكثر من 5 تقنيات لفحص الأمان في أداة واحدة
- ✅ أحدث الأبحاث: يعتمد على هجمات سلسلة التوريد و CVEs لعام 2024-2025
- ✅ جاهز للإنتاج: مخرجات SARIF للتكامل المستمر (CI/CD) ورموز الخروج للأتمتة
- ✅ سريع للغاية: مكتوب بلغة Go مع فحص متزامن
- ✅ قابل للتوسيع: هيكل إضافي لماسحات مخصصة
- ✅ مجاني ومفتوح المصدر: ترخيص BSD-3
🌟 الميزات
🛡️ وحدات فحص الأمان
1. CIS Docker Benchmark v1.7.0
فحص امتثال كامل بأكثر من 80 ضابطًا آليًا:
- ✅ أمان تكوين المضيف (13 فحصًا)
- ✅ تعزيز خادم Docker (18 فحصًا)
- ✅ صلاحيات الملفات والدلائل (9 فحوصات)
- ✅ أفضل ممارسات صور الحاويات (13 فحصًا)
- ✅ التحقق من أمان وقت التشغيل (31+ فحصًا)
- ✅ الامتثال لعمليات الأمان
2. كشف هجمات سلسلة التوريد 🆕
بناءً على حملات هجمات حقيقية لعام 2024:
- ✅ كشف الحاويات بدون صور - تحديد الحاويات الضارة بدون طبقات فعلية (تم العثور على 4 ملايين+ على Docker Hub)
- ✅ كشف عملات التعدين الخبيثة - كشف برامج التعدين الضارة (تم اكتشاف أكثر من 120 ألف سحب صورة ضارة)
- ✅ كشف المكتبات المخترقة - التعرف على التبعيات المخترقة (حوادث xz-utils, liblzma)
- ✅ التحقق من توقيع الصور - التحقق من التوقيعات باستخدام Notary/Cosign
- ✅ كشف المحتوى التصيدي - فحص التوثيق بحثًا عن الهندسة الاجتماعية
- ✅ وجهات الشبكة الخبيثة - التعرف على خوادم القيادة والتحكم (C2) ومجموعات التعدين وعُقد Tor
3. كشف الأسرار المتقدم 🔑
أكثر من 40 نمطًا للأسرار بما في ذلك واجهات برمجة التطبيقات الحديثة (تحديث 2024):
- ✅ مزوّدو الخدمات السحابية: بيانات اعتماد AWS، GCP، Azure
- ✅ أنظمة التحكم بالإصدارات: رموز GitHub، GitLab، Bitbucket
- ✅ واجهات الذكاء الاصطناعي/التعلم الآلي: مفاتيح OpenAI، Anthropic، Hugging Face
- ✅ الدفع: مفاتيح Stripe، PayPal، Square
- ✅ الاتصالات: رموز Slack، SendGrid، Twilio، Mailchimp
- ✅ المصادقة: رموز JWT، رموز OAuth
- ✅ التشفير: المفاتيح الخاصة (RSA، SSH، PGP، EC، DSA)، الشهادات
- ✅ قواعد البيانات: سلاسل اتصال PostgreSQL، MySQL، MongoDB
- ✅ Docker: رموز مصادقة السجل
- ✅ تحليل الإنتروبيا: حساب إنتروبيا شانون للأسرار غير المعروفة (عتبة >4.5)
4. فحص CVE والثغرات 🚨
كشف الثغرات الحرجة لعام 2024-2025:
- ✅ CVE-2024-21626 - هروب حاوية runc (CVSS 8.6)
- ✅ CVE-2024-23651 - تسمم ذاكرة التخزين المؤقت لـ BuildKit (CVSS 9.1)
- ✅ CVE-2024-23652 - حالة سباق BuildKit (CVSS 7.5)
- ✅ CVE-2024-23653 - تصعيد الامتيازات في BuildKit
- ✅ CVE-2024-8695/8696 - تنفيذ تعليمات برمجية عن بُعد في Docker Desktop (CVSS 8.8)
- ✅ CVE-2025-9074 - ثغرة الوصول المحلية في Docker Desktop
- ✅ كشف الصور الأساسية المنتهية الصلاحية
- ✅ فحص الحزم المعروفة الثغرات
5. تحليل أمان وقت التشغيل ⚙️
فحوصات تعزيز وقت تشغيل الحاوية:
- ✅ مراجعة قدرات Linux - كشف القدرات الخطيرة (CAP_SYS_ADMIN, CAP_NET_ADMIN، إلخ)
- ✅ التحقق من ملف تعريف Seccomp - التأكد من تمكين تصفية استدعاءات النظام
- ✅ فحوصات AppArmor/SELinux - التحقق من التحكم الإلزامي في الوصول
- ✅ كشف الحاويات المميزة - تحديد الحاويات ذات الوصول الكامل للمضيف
- ✅ عزل مساحة الاسم - فحوصات PID، IPC، الشبكة، مساحة اسم المستخدم
- ✅ مؤشرات هروب الحاوية - كشف تقنيات الهروب الشائعة
📊 التقارير والتكامل
- JSON - مخرجات قابلة للقراءة آليًا للأتمتة
- SARIF - تكامل أصلي مع:
- علامة التبويب الأمان في GitHub
- Azure DevOps
- إضافات VS Code
- لوحات أمان GitLab
- واجهة سطر أوامر جميلة - مستويات خطورة ملونة بالرموز التعبيرية
- رموز الخروج - متوافقة مع CI/CD (0=نظيف، 1=تحذيرات، 2=حرج)
🚀 الأداء
- ⚡ أسرع بـ10 مرات من بدائل Python
- 🔄 فحص متزامن باستخدام goroutines في Go
- 💾 بصمة ذاكرة منخفضة (~50-100MB)
- 📦 ملف ثنائي واحد - بدون تبعيات
🆕 ما الجديد في v2.0؟
DockerScan v2.0 هي إعادة كتابة كاملة من الصفر. إليك ما تغير من الإصدار v1.x:
التغييرات الرئيسية
| الميزة | v1.x (Python) | v2.0 (Go) |
|---|---|---|
| اللغة | Python 3.5+ | Go 1.21+ |
| الأداء | ~500 صورة/ساعة | ~5000 صورة/ساعة |
| استخدام الذاكرة | 200-500 MB | 50-100 MB |
| التوزيع | pip install + تبعيات | ملف ثنائي واحد |
| ماسحات الأمان | وحدتان | 5 وحدات |
| CIS Benchmark | جزئي | كامل v1.7.0 (أكثر من 80 فحصًا) |
| سلسلة التوريد | ❌ غير متوفرة | ✅ بناءً على أبحاث 2024 |
| أنماط الأسرار | 10 أنماط | أكثر من 40 نمطًا |
| كشف CVE | أساسي | CVEs لعام 2024-2025 |
| أمان وقت التشغيل | ❌ غير متوفرة | ✅ مراجعة كاملة للقدرات |
| مخرجات SARIF | ❌ غير متوفرة | ✅ دعم كامل |
| التكامل مع CI/CD | يدوي | أصلي (رموز الخروج، SARIF) |
ما تم الحفاظ عليه من v1.x
- ✅ الأدوات الهجومية - إمكانيات إقحام الصور (قريبًا في v2.1)
- ✅ عمليات السجل - عمليات الدفع والسحب والحذف (قريبًا في v2.1)
- ✅ فحص الشبكة - اكتشاف سجلات Docker (قريبًا في v2.1)
الجديد في v2.0.5 🔐
- 🔑 مصادقة السجل الخاص - دعم كامل لفحص الصور من السجلات الخاصة (إصلاح #24)
- 🌐 دعم عدة سجلات - Docker Hub، GHCR، ECR، GCR، ACR، GitLab، والسجلات المستضافة ذاتيًا
- 🔐 طرق مصادقة متعددة - متغيرات البيئة (CI/CD)، علامات سطر الأوامر (اختبار)، ملف تكوين Docker (سلس)
- 🎯 أولوية المصادقة الذكية - علامات سطر الأوامر > متغيرات البيئة > تكوين Docker (اختيار تلقائي)
- 📝 رسائل خطأ محسّنة - تلميحات خاصة بالسجل (انتهاء صلاحية رمز ECR، حدود المعدل، الشهادات)
- 🧪 اختبارات شاملة - 64 حالة اختبار، 91.2% تغطية، تم اختباره مع سجل خاص حقيقي
- 📚 توثيق كامل - أمثلة لجميع السجلات السحابية الرئيسية وطرق المصادقة
الجديد في v2.0.4
- 🗄️ تكامل قاعدة بيانات CVE - قاعدة بيانات SQLite محلية مع بيانات NVD (2.5 سنة من CVEs)
- 🔄 تحديثات تلقائية يومية - إجراء GitHub Action يحدّث قاعدة بيانات CVE كل يوم
- ⚡ تنزيلات CVE متوازية - 4 عمال لبناء قواعد البيانات بشكل أسرع (nvd2sqlite)
- 🔁 إعادة المحاولة مع التباطؤ - إعادة محاولة تلقائية لطلبات NVD المقيدة بالمعدل
- 📦 علامة
--from-file- تثبيت قاعدة بيانات CVE من ملف محلي (وضع عدم الاتصال/الهواء المغلق) - 🔇 الوضع الصامت (
-q) - إخفاء الشعار لخطوط أنابيب CI/CD - 🧹 تقليل النتائج الإيجابية الخاطئة - تحسين كشف الأسرار مع تصفية الإنتروبيا
لماذا إعادة الكتابة؟
- الأداء - توفر Go فحصًا أسرع بـ10 مرات باستخدام goroutines
- التهديدات الحديثة - تضمين أنماط الهجمات لعام 2024-2025
- جاهز للمؤسسات - مخرجات SARIF ورموز الخروج وتوزيع ملف ثنائي واحد
- قابلية التوسع - هيكل إضافي نظيف لماسحات مخصصة
- سهولة الصيانة - أمان النوع ومعالجة أفضل للأخطاء وسهولة المساهمة
📦 التثبيت
الخيار 1: تنزيل الملف الثنائي المُجمّع مسبقًا (مُوصى به)
يتم بناء الملفات الثنائية المُجمّعة تلقائيًا وإصدارها عبر GitHub Actions لكل علامة إصدار.
المنصات المدعومة:
- Linux: amd64، arm64، 386
- macOS: amd64 (Intel)، arm64 (Apple Silicon)
- Windows: amd64، arm64، 386
- FreeBSD: amd64
Linux (amd64)```bash
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -o dockerscan chmod +x dockerscan sudo mv dockerscan /usr/local/bin/
#### Linux (arm64)```bash
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-arm64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
macOS (Intel)```bash
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-darwin-amd64 -o dockerscan chmod +x dockerscan sudo mv dockerscan /usr/local/bin/
#### macOS (Apple Silicon)```bash
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-darwin-arm64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
Windows (PowerShell)```powershell
Invoke-WebRequest -Uri "https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-windows-amd64.exe" -OutFile "dockerscan.exe"
#### التحقق من التحميل (اختياري ولكن موصى به)```bash
# Download checksums
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/checksums.txt -o checksums.txt
# Verify (Linux/macOS)
sha256sum -c checksums.txt --ignore-missing
الخيار 2: البناء من المصدر```bash
Clone repository
git clone https://github.com/cr0hn/dockerscan cd dockerscan/dockerscan-v2
Build
make build
Install
sudo make install
Or build manually
go build -o bin/dockerscan ./cmd/dockerscan
### الخيار 3: تثبيت Go```bash
go install github.com/cr0hn/dockerscan/v2/cmd/dockerscan@latest
🚀 بداية سريعة
الإعداد لأول مرة
قبل المسح، قم بتنزيل قاعدة بيانات CVE (تُحدَّث يوميًا، حوالي 30 ميجابايت مضغوطة):```bash
Download latest CVE database from GitHub
dockerscan update-db
> **نصيحة**: يتم تحديث قاعدة البيانات يوميًا عبر إجراءات GitHub. قم بتشغيل `update-db` بشكل دوري للحصول على أحدث بيانات CVE.
### الفحص الأساسي```bash
# Scan a Docker image
dockerscan nginx:latest
# Scan with specific scanners
dockerscan --scanners cis,secrets ubuntu:22.04
# Scan and save reports
dockerscan alpine:latest --output /tmp/reports
# Quiet mode (suppress banner)
dockerscan -q nginx:latest
مخرجات مثال```
╔══════════════════════════════════════════════════════════════════════════╗ ║ ██████╗ ██████╗ ██████╗██╗ ██╗███████╗██████╗ ███████╗ ██████╗ █████╗ ███╗ ██╗ ║ ██╔══██╗██╔═══██╗██╔════╝██║ ██╔╝██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗████╗ ██║ ║ ██║ ██║██║ ██║██║ █████╔╝ █████╗ ██████╔╝███████╗██║ ███████║██╔██╗ ██║ ║ ██║ ██║██║ ██║██║ ██╔═██╗ ██╔══╝ ██╔══██╗╚════██║██║ ██╔══██║██║╚██╗██║ ║ ██████╔╝╚██████╔╝╚██████╗██║ ██╗███████╗██║ ██║███████║╚██████╗██║ ██║██║ ╚████║ ║ ║ ║ Advanced Docker Security Scanner v2.0.0 ║ ║ ║ ║ Author: Daniel Garcia (cr0hn) ║ ║ Website: https://cr0hn.com ║ ╚══════════════════════════════════════════════════════════════════════════════════════╝
🔍 Scanning image: nginx:latest
═══════════════════════════════════════════════════════════════════ SCAN RESULTS ═══════════════════════════════════════════════════════════════════
📊 Summary: Total Findings: 47 Duration: 2.3s
🔴 By Severity: Critical: 8 High: 15 Medium: 18 Low: 6
📁 By Category: CIS-Benchmark: 12 Secrets: 8 Supply-Chain: 5 Vulnerability: 10 Runtime-Security: 12
📄 JSON report saved to: dockerscan-report.json 📄 SARIF report saved to: dockerscan-report.sarif
---
## 📖 الاستخدام
### خيارات سطر الأوامر```bash
dockerscan [COMMAND] [OPTIONS] <IMAGE>
Commands:
scan Scan a Docker image (default)
update-db Download or update the CVE database
Options: --from-file <path> Install from local SQLite file
version Show version information
help Show help message
Options:
-h, --help Show help message
-v, --version Show version
-q, --quiet Suppress banner output (quiet mode)
--scanners SCANNERS Comma-separated list of scanners to run
(default: all)
Options: cis,secrets,supplychain,vulnerabilities,runtime
--output DIR Output directory for reports (default: .)
--only-critical Show only critical/high severity findings
--verbose, -v Show scan progress (scanner names, findings count, image pull status). Output to stderr.
--debug Show verbose output plus internal errors and technical details. Output to stderr.
Authentication (for private registries):
--registry-user <username> Registry username
--registry-password <password> Registry password (not recommended, use env vars)
--registry <url> Registry URL (optional, auto-detected from image)
--docker-config <path> Path to Docker config file (default: ~/.docker/config.json)
Environment variables (recommended for CI/CD):
DOCKER_USERNAME or REGISTRY_USERNAME Registry username
DOCKER_PASSWORD or REGISTRY_PASSWORD Registry password or token
DOCKER_REGISTRY or REGISTRY Registry URL (optional)
Exit Codes:
0 No issues found
1 HIGH severity issues found
2 CRITICAL severity found
أمثلة```bash
Scan with all scanners (default)
dockerscan myapp:latest
Only run specific scanners
dockerscan --scanners secrets,supplychain redis:7
Save reports to specific directory
dockerscan --output /var/reports postgres:14
Only show critical issues
dockerscan --only-critical production-app:v1.0
Ver progreso del scan (scanner names, findings count, image pull status)
dockerscan --verbose ubuntu:22.04
Debug detallado (errores internos, detalles técnicos)
dockerscan --debug ubuntu:22.04
Scan private registry images (see Authentication section below)
dockerscan ghcr.io/myorg/private-app:v1.0
### 🔐 مصادقة السجل الخاص
يدعم DockerScan ثلاث طرق للمصادقة مع السجلات الخاصة:
#### الطريقة 1: ملف تكوين Docker (موصى به للاستخدام المحلي)
الطريقة الأكثر ملاءمة - تستخدم بيانات اعتماد Docker الحالية الخاصة بك:```bash
# First, authenticate with your registry using Docker
docker login ghcr.io
# Username: your-username
# Password: ghp_your-token-here
# Now DockerScan can use these credentials automatically
dockerscan ghcr.io/myorg/private-app:latest
يقوم DockerScan تلقائيًا بقراءة بيانات الاعتماد من ~/.docker/config.json. يعمل هذا مع جميع السجلات التي قمت بتسجيل الدخول إليها باستخدام docker login.
المساعدات الخاصة ببيانات الاعتماد مدعومة بالكامل. يقوم DockerScan بحل بيانات الاعتماد بشكل أصلي عبر:
credsStore— مساعد بيانات الاعتماد العام (مثلosxkeychainعلى macOS مع Docker Desktop، وwincredعلى Windows، وpassعلى Linux)credHelpers— مساعدات بيانات الاعتماد لكل سجل (تأخذ الأولوية علىcredsStore)- التراجع التلقائي — إذا لم يتم تثبيت المساعد الثنائي المحدد، يتراجع DockerScan إلى كتلة
authsالنصية العادية فيconfig.json
على macOS مع Docker Desktop، يعمل هذا مباشرة دون أي تكوين إضافي:```json { "credsStore": "osxkeychain" }
DockerScan سوف يستدعي `docker-credential-osxkeychain` بشكل شفاف لاسترداد الرموز المميزة، لذا لن تحتاج أبدًا إلى تمرير بيانات الاعتماد بشكل صريح.
#### الطريقة الثانية: متغيرات البيئة (موصى بها لـ CI/CD)
الأفضل للبيئات الآلية وخطوط أنابيب CI/CD:```bash
# Set environment variables
export DOCKER_USERNAME=myusername
export DOCKER_PASSWORD=mytoken
# Scan private image
dockerscan ghcr.io/myorg/private-app:latest
# Or use alternative variable names
export REGISTRY_USERNAME=myusername
export REGISTRY_PASSWORD=mytoken
dockerscan myregistry.example.com/app:v1.0
مثال CI/CD (GitHub Actions):```yaml
- name: Scan private image env: DOCKER_USERNAME: ${{ secrets.REGISTRY_USERNAME }} DOCKER_PASSWORD: ${{ secrets.REGISTRY_TOKEN }} run: dockerscan ghcr.io/${{ github.repository }}:${{ github.sha }}
#### الطريقة 3: أعلام سطر الأوامر (غير موصى به)
للاختبار السريع فقط (بيانات الاعتماد مرئية في قائمة العمليات):```bash
dockerscan --registry-user myuser --registry-password mytoken ghcr.io/myorg/app:v1
تحذير أمني: تعرض هذه الطريقة بيانات الاعتماد في تاريخ شل وقائمة العمليات. استخدم متغيرات البيئة أو تكوين دوكر بدلاً من ذلك.
أمثلة خاصة بالسجل
Docker Hub (المستودعات الخاصة)```bash
Using Docker config
docker login docker.io dockerscan myusername/private-repo:latest
Using environment variables
export DOCKER_USERNAME=myusername export DOCKER_PASSWORD=dckr_pat_XXXXXXXXXXXXX dockerscan myusername/private-repo:latest
#### GitHub Container Registry (GHCR)```bash
# Using Docker config
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin
dockerscan ghcr.io/myorg/myapp:v1.0
# Using environment variables
export DOCKER_USERNAME=myusername
export DOCKER_PASSWORD=ghp_XXXXXXXXXXXXXXXXXXXX
dockerscan ghcr.io/myorg/myapp:v1.0
AWS Elastic Container Registry (ECR)```bash
Get login credentials from AWS
aws ecr get-login-password --region us-east-1 |
docker login --username AWS --password-stdin
123456789012.dkr.ecr.us-east-1.amazonaws.com
Scan ECR image
dockerscan 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
Or use environment variables with ECR credentials
export DOCKER_USERNAME=AWS export DOCKER_PASSWORD=$(aws ecr get-login-password --region us-east-1) dockerscan 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
#### Google Container Registry (GCR) / Artifact Registry```bash
# Authenticate with gcloud
gcloud auth configure-docker gcr.io
# Scan GCR image
dockerscan gcr.io/my-project/myapp:latest
# For Artifact Registry
gcloud auth configure-docker us-docker.pkg.dev
dockerscan us-docker.pkg.dev/my-project/my-repo/myapp:latest
# Or use service account JSON key
export DOCKER_USERNAME=_json_key
export DOCKER_PASSWORD="$(cat service-account-key.json)"
dockerscan gcr.io/my-project/myapp:latest
سجل حاويات Azure (ACR)```bash
Login with Azure CLI
az acr login --name myregistry
Scan ACR image
dockerscan myregistry.azurecr.io/myapp:v1.0
Or use service principal credentials
export DOCKER_USERNAME= export DOCKER_PASSWORD= dockerscan myregistry.azurecr.io/myapp:v1.0
#### GitLab Container Registry```bash
# Using Docker config
docker login registry.gitlab.com
dockerscan registry.gitlab.com/mygroup/myproject/myapp:latest
# Using environment variables with deploy token
export DOCKER_USERNAME=gitlab+deploy-token-1
export DOCKER_PASSWORD=DEPLOY_TOKEN_HERE
dockerscan registry.gitlab.com/mygroup/myproject/myapp:latest
السجلات المستضافة ذاتيًا / الخاصة```bash
Standard authentication
docker login myregistry.example.com:5000 dockerscan myregistry.example.com:5000/myapp:latest
With environment variables
export DOCKER_USERNAME=admin export DOCKER_PASSWORD=secret dockerscan myregistry.example.com:5000/myapp:latest
Insecure registries (not recommended for production)
Add to Docker daemon config: /etc/docker/daemon.json
{
"insecure-registries": ["myregistry.example.com:5000"]
}
### استكشاف أخطاء المصادقة وإصلاحها
#### المشكلات الشائعة
**1. خطأ "مطلوب المصادقة"**```bash
# Make sure you're logged in
docker login <registry>
# Or set environment variables
export DOCKER_USERNAME=your-username
export DOCKER_PASSWORD=your-token
2. خطأ "unauthorized: authentication failed"
- تحقق من صحة بيانات اعتمادك
- تحقق مما إذا كانت صلاحية رمزك قد انتهت (خاصة لمزودي الخدمات السحابية)
- تأكد من أن حسابك لديه أذونات pull للصورة
3. AWS ECR "authorization token has expired"```bash
ECR tokens expire after 12 hours - refresh them
aws ecr get-login-password --region us-east-1 |
docker login --username AWS --password-stdin
123456789012.dkr.ecr.us-east-1.amazonaws.com
**4. تحديد معدل الطلبات على Docker Hub**
- المصادقة لزيادة حدود المعدل (200 سحب/6 ساعات للحسابات المجانية)
- فكر في استخدام حساب Docker Hub Pro للحصول على حدود أعلى
**5. أخطاء الشهادة مع الشهادات الموقعة ذاتيًا**
- أضف شهادة CA إلى مخزن الثقة في نظامك
- أو قم بتكوين Docker للثقة في السجل (انظر وثائق Docker)
---
## 🔍 ماسحات الأمان
### CIS Docker Benchmark
فحص الامتثال التلقائي مقابل CIS Docker Benchmark v1.7.0:```bash
dockerscan --scanners cis nginx:latest
تشمل الفحوصات:
- مستخدم الحاوية ليس root
- عدم وجود حزم غير ضرورية مثبتة
- وجود تعليمة HEALTHCHECK
- إصدارات محددة (وليس
:latest) - الحد الأدنى من المنافذ المكشوفة
- عدم وجود حاويات مميزة (privileged)
- تقييد إمكانيات Linux
- تطبيق ملفات تعريف Seccomp/AppArmor
- نظام ملفات الجذر للقراءة فقط
- وأكثر من 70 فحصًا آخر...
أمان سلسلة التوريد
اكتشف هجمات سلسلة التوريد الواقعية:```bash dockerscan --scanners supplychain suspicious-image:1.0
يكتشف:
- حاويات بدون صور (هجمات تعتمد على التوثيق فقط)
- عمال منجم العملات الرقمية (xmrig, claymore, إلخ)
- مكتبات بها باب خلفي (حالة xz-utils)
- صور غير موقعة/غير موثقة
- محاولات تصيد في الوثائق
- اتصالات بمجمعات التعدين، خوادم القيادة والتحكم
### كشف الأسرار
ابحث عن الأسرار المضمنة في الكود:```bash
dockerscan --scanners secrets webapp:prod
اكتشافات:
- بيانات اعتماد السحابة (AWS, GCP, Azure)
- مفاتيح API (أكثر من 40 خدمة)
- المفاتيح الخاصة والشهادات
- بيانات اعتماد قاعدة البيانات
- مصادقة سجل Docker
- سلاسل عالية الإنتروبيا (أسرار محتملة غير معروفة)
فحص الثغرات الأمنية
اكتشف CVEs المعروفة:```bash dockerscan --scanners vulnerabilities node:16
يتحقق من:
- ثغرات Docker الحرجة (2024-2025)
- ثغرات الهروب من الحاوية
- ثغرات تنفيذ الأوامر عن بُعد في BuildKit
- صور أساسية منتهية الصلاحية
- الحزم المعرضة للخطر
### أمان وقت التشغيل
مراجعة إعدادات وقت التشغيل:```bash
dockerscan --scanners runtime running-container
يحلل:
- قدرات Linux (مثل CAP_SYS_ADMIN، إلخ.)
- ملفات تعريف Seccomp
- سياسات AppArmor/SELinux
- عزل Namespace
- استخدام الوضع المميز
📁 تنسيقات الإخراج
إخراج JSON```json
{ "target": { "image_name": "nginx:latest" }, "start_time": "2024-11-22T10:30:00Z", "findings": [ { "id": "CIS-4.1", "title": "Container should not run as root", "severity": "HIGH", "category": "CIS-Benchmark", "description": "Running containers as root increases attack surface...", "remediation": "Use USER instruction in Dockerfile..." } ], "summary": { "total_findings": 47, "by_severity": { "CRITICAL": 8, "HIGH": 15 } } }
### SARIF Output
متوافق مع GitHub Security وAzure DevOps وVS Code:```json
{
"$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
"version": "2.1.0",
"runs": [
{
"tool": {
"driver": {
"name": "DockerScan",
"version": "2.0.0"
}
},
"results": [...]
}
]
}
💼 حالات الاستخدام
1. تكامل مسار CI/CD
GitHub Actions:```yaml name: Docker Security Scan
on: [push]
jobs: security-scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
- name: Install DockerScan
run: |
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -o dockerscan
chmod +x dockerscan
- name: Update CVE Database
run: ./dockerscan update-db
- name: Run Security Scan
run: ./dockerscan -q myapp:${{ github.sha }}
- name: Upload SARIF results
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: dockerscan-report.sarif
**GitLab CI:**```yaml
docker-security-scan:
stage: test
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- wget https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -O dockerscan
- chmod +x dockerscan
- ./dockerscan update-db
- ./dockerscan -q $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
artifacts:
reports:
sast: dockerscan-report.sarif
2. تدقيقات الأمان```bash
Comprehensive audit of production images
for image in $(docker images --format "{{.Repository}}:{{.Tag}}"); do echo "Scanning $image..." dockerscan $image --output /audit-reports/ done
Generate summary report
cat /audit-reports/*.json | jq -s ' { total_images: length, total_findings: map(.summary.total_findings) | add, critical_findings: map(.summary.by_severity.CRITICAL // 0) | add } '
### 3. **التحقق قبل النشر**```bash
# Fail deployment if critical issues found
dockerscan production-app:v2.0
exit_code=$?
if [ $exit_code -eq 2 ]; then
echo "❌ Critical vulnerabilities found. Deployment blocked."
exit 1
elif [ $exit_code -eq 1 ]; then
echo "⚠️ High severity issues found. Manual review required."
# Send notification...
else
echo "✅ No critical issues. Proceeding with deployment."
fi
4. تقارير الامتثال```bash
Generate CIS compliance report
dockerscan --scanners cis --only-critical all-production-images:* > cis-compliance-report.txt
Weekly security scan for compliance
0 0 * * 0 /usr/local/bin/dockerscan --scanners cis,vulnerabilities production-images:latest --output /compliance/weekly/
### 5. **سير عمل المطور**```bash
# Pre-commit hook
#!/bin/bash
# .git/hooks/pre-commit
docker build -t local-test:latest .
dockerscan --only-critical local-test:latest
if [ $? -ne 0 ]; then
echo "❌ Docker security scan failed. Fix issues before committing."
exit 1
fi
📊 مقارنة مع الأدوات الأخرى
| الميزة | DockerScan v2.0 | Trivy | Clair | Snyk | Grype |
|---|---|---|---|---|---|
| معيار CIS الإصدار 1.7 | ✅ كامل (أكثر من 80 فحصًا) | ❌ | ❌ | جزئي | ❌ |
| كشف سلسلة التوريد (2024) | ✅ نعم | ❌ | ❌ | ❌ | ❌ |
| فحص الأسرار | ✅ أكثر من 40 نمطًا | أساسي | ❌ | ✅ | ❌ |
| قاعدة بيانات الثغرات | ✅ ثغرات 2024-2025 | ✅ | ✅ | ✅ | ✅ |
| أمان وقت التشغيل | ✅ كامل | ❌ | ❌ | ❌ | ❌ |
| مخرجات SARIF | ✅ | ✅ | ❌ | ✅ | ✅ |
| السرعة (Go) | ⚡ سريع جدًا | ⚡ سريع جدًا | 🐌 بطيء | ⚡ سريع | ⚡ سريع جدًا |
| قابلية التوسع | ✅ نظام إضافات | محدود | محدود | ❌ | محدود |
| رموز الخروج | ✅ جاهز للتكامل المستمر | ✅ | جزئي | ✅ | ✅ |
| التكلفة | 🆓 مجاني | 🆓 مجاني | 🆓 مجاني | 💰 مستويات مدفوعة | 🆓 مجاني |
| وضع عدم الاتصال | ✅ | ✅ | ❌ | ❌ | ✅ |
| الترخيص | خاص – متاح المصدر | Apache-2.0 | Apache-2.0 | خاص | Apache-2.0 |
لماذا تختار DockerScan؟
- الأشمل: الأداة الوحيدة التي تجمع معيار CIS + سلسلة التوريد + الأسرار + الثغرات + وقت التشغيل
- أحدث الأبحاث: مرتكزة على هجمات العالم الحقيقي 2024-2025
- بدون أي تهيئة: تعمل فورًا
- صديقة للمطورين: واجهة سطر أوامر جميلة مع إصلاحات قابلة للتنفيذ
- جاهزة للمؤسسات: SARIF + رموز الخروج + مخرجات JSON
🏗️ البنية
هيكل المشروع```
dockerscan/ ├── logo.png # Project logo ├── cmd/ │ ├── dockerscan/ # Main CLI application │ │ └── main.go │ └── nvd2sqlite/ # CVE database builder tool │ └── main.go ├── data/ # CVE database (auto-updated daily) │ ├── latest.db.gz # Compressed SQLite database │ └── metadata.json # Database version info ├── internal/ │ ├── scanner/ # Extensible scanner framework │ │ ├── scanner.go # Scanner interface & registry │ │ ├── cis/ # CIS Benchmark implementation │ │ ├── secrets/ # Secrets detection │ │ ├── supplychain/ # Supply chain attacks │ │ ├── vulnerabilities/ # CVE scanning │ │ └── runtime/ # Runtime security │ ├── report/ # Report generators │ │ ├── json.go # JSON reporter │ │ └── sarif.go # SARIF reporter │ ├── models/ # Data models │ │ └── models.go # Findings, scan results, etc. │ └── config/ # Configuration │ └── config.go # App config & banner └── pkg/docker/ # Docker client wrapper └── client.go
### قاعدة بيانات CVE وأداة nvd2sqlite
يستخدم DockerScan قاعدة بيانات SQLite محلية للبحث عن CVEs. يتم **تحديث قاعدة البيانات تلقائياً يومياً** عبر GitHub Actions واستضافتها في المستودع، بحيث يكون لديك دائماً إمكانية الوصول إلى أحدث بيانات CVE.
#### ميزات قاعدة البيانات
- 🗄️ **قاعدة بيانات جاهزة** - جاهزة للاستخدام، لا حاجة لإعداد يدوي
- 🔄 **تحديثات يومية** - يقوم GitHub Action بتحديث قاعدة البيانات يومياً عند الساعة 00:00 UTC
- 📅 **2.5 سنة من بيانات CVE** - تغطي CVEs من منتصف 2022 حتى الآن
- ⚡ **بحث سريع** - SQLite مع فهارس محسّنة
- 🌐 **مستضافة على GitHub** - يتم تنزيلها تلقائياً باستخدام أمر `update-db`
#### تحديث قاعدة البيانات```bash
# Download latest database from GitHub (recommended)
dockerscan update-db
# Install from local file (for air-gapped/offline environments)
dockerscan update-db --from-file /path/to/cve-db.sqlite
ملاحظة: في المرة الأولى التي تشغل فيها
dockerscan، سيطلب منك تنزيل قاعدة البيانات. بعد ذلك، يمكنك تحديثها دوريًا باستخدامupdate-db.
بناء قاعدة البيانات يدويًا (nvd2sqlite)
للمستخدمين المتقدمين، يمكنك بناء قاعدة بيانات CVE من NVD مباشرة:```bash
Build the tool
make build # Builds both dockerscan and nvd2sqlite
Download CVEs (last 2.5 years by default)
./bin/nvd2sqlite --output data/cve-db.sqlite --verbose
With NVD API key (10x faster - 50 req/30sec vs 5 req/30sec)
NVD_API_KEY=your-key ./bin/nvd2sqlite --output data/cve-db.sqlite --verbose
Custom date range
./bin/nvd2sqlite --output data/cve-db.sqlite
--start-date 2023-01-01
--end-date 2024-12-31
**ميزات nvd2sqlite:**
- ⚡ **4 عمال تنزيل متوازيين** لتنزيل أسرع
- 🔄 **إعادة محاولة تلقائية مع تراجع أسي** لتقييد المعدل (HTTP 429)
- 📦 **التنزيل إلى دليل مؤقت**، ثم المعالجة بالتسلسل
- 🗄️ **مخرجات SQLite** مع جداول مفهرسة للبحث السريع
---
### قابلية التوسع
إضافة ماسح ضوئي جديد بسيطة:```go
package myscan
import (
"context"
"github.com/cr0hn/dockerscan/v2/internal/models"
"github.com/cr0hn/dockerscan/v2/internal/scanner"
)
type MyScanner struct {
scanner.BaseScanner
}
func NewMyScanner() *MyScanner {
return &MyScanner{
BaseScanner: scanner.NewBaseScanner(
"my-scanner",
"Description of my scanner",
true, // enabled
),
}
}
func (s *MyScanner) Scan(ctx context.Context, target models.ScanTarget) ([]models.Finding, error) {
var findings []models.Finding
// Your scanning logic here...
return findings, nil
}
// Register in main.go:
// registry.Register(myscan.NewMyScanner())
🤝 المساهمة
المساهمات مرحب بها! تم تصميم DockerScan ليكون قابلاً للتوسيع.
كيفية المساهمة
- Fork المستودع
- Create فرع ميزة (
git checkout -b feature/amazing-scanner) - Add الماسح الخاص بك في
internal/scanner/ - Write اختبارات (نحافظ على تغطية 90%+)
- Commit تغييراتك (
git commit -am 'Add amazing scanner') - Push إلى الفرع (
git push origin feature/amazing-scanner) - Open طلب سحب (Pull Request)
التطوير```bash
Clone and setup
git clone https://github.com/cr0hn/dockerscan cd dockerscan/dockerscan-v2
Install dependencies
make deps
Run tests
make test
Run with coverage
make coverage
Build
make build
Format code
make fmt
Lint
make lint
### إضافة ماسحات ضوئية جديدة
نرحب بشكل خاص بـ:
- التكامل مع قواعد بيانات الثغرات (NVD، إشعارات أمان GitHub)
- فحص أمان Kubernetes
- أمان سجل الحاويات
- تحليل أمان Docker Compose
- فحص البنية التحتية كرمز (IaC) (ملفات Dockerfiles)
---
## 📚 المراجع
### المعايير والمقاييس
- [CIS Docker Benchmark v1.7.0](https://www.cisecurity.org/benchmark/docker) - مركز أمان الإنترنت
- [NIST SP 800-190](https://csrc.nist.gov/publications/detail/sp/800-190/final) - دليل أمان حاويات التطبيقات
- [OWASP Docker Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html)
### الأبحاث و CVEs
- [4M Malicious Imageless Containers](https://thehackernews.com/2024/04/millions-of-malicious-imageless.html) - The Hacker News, أبريل 2024
- [Supply Chain Attacks Using Container Images](https://www.aquasec.com/blog/supply-chain-threats-using-container-images/) - Aqua Security
- [CVE-2024-21626: runc Container Escape](https://nvd.nist.gov/vuln/detail/CVE-2024-21626) - NIST NVD
- [CVE-2024-23651: BuildKit RCE](https://nvd.nist.gov/vuln/detail/CVE-2024-23651) - NIST NVD
- [xz-utils Backdoor (March 2024)](https://www.openwall.com/lists/oss-security/2024/03/29/4) - OpenWall
### الأدوات والمشاريع
- [Trivy](https://github.com/aquasecurity/trivy) - ماسح الثغرات
- [Docker Bench Security](https://github.com/docker/docker-bench-security) - سكريبت المعيار CIS
- [Cosign](https://github.com/sigstore/cosign) - توقيع الحاويات والتحقق منها
- [SARIF Specification](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) - تنسيق نتائج التحليل الثابت
---
## 📄 الترخيص
هذا المشروع مرخص بموجب **رخصة DockerScan الاحتكارية المتاحة المصدر**.
### ماذا يعني هذا
✅ **يمكنك (مجانًا):**
- استخدام DockerScan **مجانًا** لفحص الأمان الداخلي
- استخدامه في **خطوط أنابيب CI/CD** وسير عمل الأمان الخاصة بك
- **تعديله، وإنشاء فرع منه، والمساهمة** في المجتمع
- استخدامه لأغراض **تعليمية وبحثية**
- استخدامه كـ **أداة في الخدمات المهنية** (استشارات، مراجعات أمان، اختبار الاختراق)
- **دمجه** في منتجات أخرى حيث يكون مكونًا مساعدًا
❌ **لا يمكنك (بدون إذن كتابي صريح أو ترخيص تجاري):**
- تقديم **فحص Docker كخدمة SaaS تجارية**
- **بيع نسخ مستضافة** من DockerScan
- بناء **منصة تجارية** تعتمد بشكل أساسي على DockerScan
- إنشاء **خدمة مُدارة مدفوعة** حيث تكون DockerScan هي العرض الرئيسي
### لماذا هذا الترخيص؟
يحمي هذا الترخيص استدامة المشروع عن طريق:
- ✅ منح **الحرية** لاستخدام البرنامج لأغراض مشروعة
- ❌ منع **الركوب المجاني الضار** حيث تحقق الشركات أرباحًا من تقديمه كخدمة دون المساهمة في المقابل
- 💰 ضمان بقاء المشروع **مستدامًا** من خلال الترخيص التجاري للاستخدامات التنافسية
- 🔓 إبقاء **الكود المصدري متاحًا** للشفافية والمساهمات المجتمعية
**هذا ليس مفتوح المصدر** - إنه **متاح المصدر** مع قيود على الاستخدام التجاري التنافسي.
### الترخيص التجاري
**مطلوب من أجل:**
- عروض SaaS أو الاستضافة
- المنصات التجارية التي تستخدم DockerScan كميزة أساسية
- إعادة البيع أو إعادة التوزيع كمنتج تجاري
- الخدمات المُدارة حيث تكون DockerScan هي العرض الأساسي
**للاتصال بخصوص الترخيص التجاري:**
📧 Email: cr0hn [at] cr0hn.com
🌐 Website: https://cr0hn.com
💼 شروط ترخيص مرنة متاحة للشركات الكبيرة والناشئة
انظر ملف [LICENSE](https://github.com/cr0hn/dockerscan/blob/HEAD/LICENSE) للشروط القانونية الكاملة.
---
## 👤 المؤلف
<div align="center">
### **Daniel Garcia (cr0hn)**
[](https://cr0hn.com)
[](https://github.com/cr0hn)
[](https://twitter.com/ggdaniel)
**باحث أمني | مطور مفتوح المصدر | خبير أمان Docker**
</div>
---
## 🙏 الشكر والتقدير
شكر خاص لـ:
- مجتمع أمان Docker
- CIS على معيار Docker Benchmark
- NIST على SP 800-190
- الباحثين الأمنيين الذين اكتشفوا هجمات سلسلة التوريد لعام 2024
- جميع المساهمين والمستخدمين في DockerScan
---
## 📞 الدعم
- **المشكلات**: [GitHub Issues](https://github.com/cr0hn/dockerscan/issues)
- **المناقشات**: [GitHub Discussions](https://github.com/cr0hn/dockerscan/discussions)
- **الأمان**: أبلغ عن الثغرات إلى [email protected]
---
<div align="center">
**⭐ إذا وجدت DockerScan مفيدًا، يرجى وضع نجمة على المستودع! ⭐**
*جعل أمان Docker متاحًا للجميع*
[⬆ العودة إلى الأعلى](#-dockerscan-v20)
</div>