
أكثر ماسح أمان لـ Docker شمولية
<div align="center">
<img src="https://assets.kitploit.com/production/public/readmes/1309/3345979faae1cdabbe2912dfcaf46221df5cb53697630a8e8dcc5eebf814e949.png" alt="شعار DockerScan" width="200">
# DockerScan v2.0
### *أكثر ماسح أمان Docker شمولاً*
[](LICENSE)
[](https://golang.org/)
[](https://github.com/cr0hn/dockerscan/releases)
[](https://github.com/cr0hn/dockerscan/actions/workflows/dockerscan.yml)
[](https://github.com/cr0hn/dockerscan)
[](https://goreportcard.com/report/github.com/cr0hn/dockerscan)
[](https://github.com/cr0hn/dockerscan/releases)
**بواسطة [Daniel Garcia (cr0hn)](https://cr0hn.com)** | [GitHub](https://github.com/cr0hn/dockerscan) | [الموقع الإلكتروني](https://cr0hn.com)
---
[الميزات](#-الميزات) •
[التثبيت](#-التثبيت) •
[بداية سريعة](#-بداية-سريعة) •
[التوثيق](#-التوثيق) •
[حالات الاستخدام](#-حالات-الاستخدام) •
[ما الجديد](#-ما-الجديد-في-v20) •
[المساهمة](#-المساهمة)
</div>
---
## 📑 جدول المحتويات
- [نظرة عامة](#-نظرة-عامة)
- [الميزات](#-الميزات)
- [ما الجديد في v2.0](#-ما-الجديد-في-v20)
- [التثبيت](#-التثبيت)
- [بداية سريعة](#-بداية-سريعة)
- [الاستخدام](#-الاستخدام)
- [مصادقة السجل الخاص](#-مصادقة-السجل-الخاص)
- [ماسحات الأمان](#-ماسحات-الأمان)
- [تنسيقات المخرجات](#-تنسيقات-المخرجات)
- [حالات الاستخدام](#-حالات-الاستخدام)
- [المقارنة](#-المقارنة-مع-الأدوات-الأخرى)
- [الهندسة المعمارية](#-الهندسة-المعمارية)
- [المساهمة](#-المساهمة)
- [المراجع](#-المراجع)
- [الترخيص](#-الترخيص)
- [المؤلف](#-المؤلف)
---
## 🎯 نظرة عامة
**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
- 🧹 **تقليل النتائج الإيجابية الخاطئة** - تحسين كشف الأسرار مع تصفية الإنتروبيا
### لماذا إعادة الكتابة؟
1. **الأداء** - توفر Go فحصًا أسرع بـ10 مرات باستخدام goroutines
2. **التهديدات الحديثة** - تضمين أنماط الهجمات لعام 2024-2025
3. **جاهز للمؤسسات** - مخرجات SARIF ورموز الخروج وتوزيع ملف ثنائي واحد
4. **قابلية التوسع** - هيكل إضافي نظيف لماسحات مخصصة
5. **سهولة الصيانة** - أمان النوع ومعالجة أفضل للأخطاء وسهولة المساهمة
---
## 📦 التثبيت
### الخيار 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=<service-principal-id>
export DOCKER_PASSWORD=<service-principal-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
---
[Read more](https://github.com/cr0hn/dockerscan)