
Scan هي أداة DevSecOps مجانية ومفتوحة المصدر لإجراء اختبار أمان قائم على التحليل الثابت لتطبيقاتك وتبعياتها. صديقة لـ CI و Git.
███████╗ ██████╗ █████╗ ███╗ ██╗
██╔════╝██╔════╝██╔══██╗████╗ ██║
███████╗██║ ███████║██╔██╗ ██║
╚════██║██║ ██╔══██║██║╚██╗██║
███████║╚██████╗██║ ██║██║ ╚████║
╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝
Scan هي أداة أمان مفتوحة المصدر ومجانية لفرق DevOps الحديثة. بفضل تصميمها المتكامل القائم على الماسحات المتعددة، يمكن لـ Scan اكتشاف أنواع مختلفة من الثغرات الأمنية في تطبيقك ورمز البنية التحتية في فحص واحد سريع دون الحاجة إلى أي خادم بعيد. تم تصميم Scan خصيصًا للتكامل مع سير العمل مع ميزات رائعة مثل كسر البناء التلقائي، وخط الأساس للنتائج، وتعليقات ملخص PR. منتجات Scan مفتوحة المصدر بموجب ترخيص Apache-2.0.
-o reports/source-ruby-report.jsonيرجى زيارة موقع الوثائق الرسمي لـ Scan للتعرف على خيارات التكوين والتكامل مع CI/CD. لدينا أيضًا قناة ديسكورد مخصصة للمشكلات والدعم.
Scan مثالي للاستخدام مع CI وكذلك كخطاف pre-commit للتطوير المحلي. يتم توزيع Scan كصورة حاوية shiftleft/scan، وكـ AppImage لتوزيعات لينكس المدعومة.
أمر سهل بسطر واحد أدناه:
sh <(curl https://slscan.sh)
الأمر أعلاه يستدعي ببساطة أمر docker run أدناه.
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --build
على نظام Windows، يتغير الأمر قليلاً حسب الطرفية.
cmd
docker run --rm -e "WORKSPACE=%cd%" -e "GITHUB_TOKEN=%GITHUB_TOKEN%" -v "%cd%:/app:cached" shiftleft/scan scan
PowerShell و PowerShell Core
docker run --rm -e "WORKSPACE=$(pwd)" -e "GITHUB_TOKEN=$env:GITHUB_TOKEN" -v "$(pwd):/app:cached" shiftleft/scan scan
WSL Bash
docker run --rm -e "WORKSPACE=${PWD}" -e "GITHUB_TOKEN=${GITHUB_TOKEN}" -v "$PWD:/app:cached" shiftleft/scan scan
git-bash
docker run --rm -e "WORKSPACE=${PWD}" -e "GITHUB_TOKEN=${GITHUB_TOKEN}" -v "/$PWD:/app:cached" shiftleft/scan scan
لا تنسَ الشرطة المائلة (/) قبل $PWD لـ git-bash!
فحص مشاريع متعددة
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app --type credscan,nodejs,python,yaml --out_dir /app/reports
فحص مشروع Java
بالنسبة للمشاريع القائمة على Java ولغة JVM، من المهم تجميع المشاريع قبل استدعاء sast-scan في سير عمل التطوير و CI.
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.m2:/.m2 -v <source path>:/app shiftleft/scan scan --src /app --type java
# For gradle project
docker run --rm -e "WORKSPACE=${PWD}" -v ~/.gradle:/.gradle -v <source path>:/app shiftleft/scan scan --src /app --type java
الكشف التلقائي عن المشروع
لا تتردد في تخطي --type لتمكين الكشف التلقائي. أو تمرير قيم مفصولة بفواصل إذا كان المشروع يحتوي على أنواع متعددة.
أصبح فحص صور الحاويات ممكنًا الآن باستخدام slscan. الطريقة الموصى بها هي تصدير صورة الحاوية باستخدام أمر docker أو podman save أولاً متبوعًا باستدعاء Scan مع ملف .tar.
docker pull shiftleft/scan-slim:latest
docker save -o scanslim.tar shiftleft/scan-slim:latest
# podman save --format oci-archive -o scanslim.tar shiftleft/scan-slim:latest
docker run --rm -e "WORKSPACE=${PWD}" -v $PWD:/app shiftleft/scan scan --src /app/scanslim.tar -o /app/reports --type docker
بدلاً من ذلك، من الممكن السماح لـ Scan بسحب صورة الحاوية قبل التحليل. ومع ذلك، فإنه يتطلب كشف مقبس الخفي (daemon socket) لـ docker أو podman وبالتالي غير موصى به. يمكنك تجربته إذا كنت تشعر بالمغامرة عن طريق تمرير المعاملات أدناه إلى أمر docker run.
-e "DOCKER_HOST=unix:/var/run/docker.sock:" -v "/var/run/docker.sock:/var/run/docker.sock"
مثال: لفحص صورة الحاوية shiftleft/scan-slim:
docker run --rm -e "WORKSPACE=$(pwd)" -e "DOCKER_HOST=unix:/var/run/docker.sock:" \
-v "/var/run/docker.sock:/var/run/docker.sock" \
-v "$(pwd):/app" shiftleft/scan scan -t docker -i shiftleft/scan-slim
مثال: لفحص صورة الحاوية redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e:
docker run --rm -e "WORKSPACE=$(pwd)" -e "DOCKER_HOST=unix:/var/run/docker.sock:" \
-v "/var/run/docker.sock:/var/run/docker.sock" \
-v "$(pwd):/app" shiftleft/scan scan -t docker -i redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e
نفس المثال مع podman
podman run --rm -e "WORKSPACE=$(pwd)" -e "DOCKER_HOST=unix:/run/user/1000/podman/podman.sock:" \
-v "/run/user/1000:/run/user/1000" \
-v "$(pwd):/app" shiftleft/scan scan -t docker -i redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e
سيتم إنشاء التقارير في الدليل المحدد لـ --out_dir. في الأمثلة أعلاه، تم تعيينه إلى reports والذي سيكون دليلاً تحت الدليل الجذر لشفرة المصدر.
سيتم تحويل بعض التقارير إلى معيار يسمى SARIF. ستنتهي هذه التقارير بالامتداد .sarif. يتطلب فتح وعرض ملفات sarif عارضًا مثل:
يتم عكس العديد من صور Scan إلى quay.io عبر خط أنابيب CI. ما عليك سوى إضافة البادئة quay.io/ لاسم الصورة. فيما يلي المرايا المتاحة.
يستخدم Scan من قبل العديد من المؤسسات وأكثر من آلاف المشاريع مفتوحة المصدر. بعض المؤسسات البارزة التي تستخدم Scan هي:
أرسل لنا طلب سحب (PR) لإدراج اسم مؤسستك هنا. يمكنك أيضًا إظهار دعمك لـ Scan باستخدام الوسوم #slscan على وسائل التواصل الاجتماعي.
| لغة البرمجة | الأدوات |
|---|
| ansible | ansible-lint |
| apex | pmd |
| arm | checkov |
| aws | checkov |
| bash | shellcheck |
| bom | cdxgen |
| credscan | gitleaks |
| depscan | dep-scan |
| dockerfile | checkov |
| go | gosec, staticcheck |
| groovy | find-sec-bugs |
| java | cdxgen, gradle, find-sec-bugs, pmd |
| jsp | pmd, find-sec-bugs |
| json | jq, jsondiff, jsonschema |
| kotlin | detekt, find-sec-bugs |
| scala | find-sec-bugs |
| kubernetes | checkov, kubesec, kube-score |
| nodejs | cdxgen, yarn, rush |
| php | psalm, phpstan (ide only) |
| plsql | pmd |
| python | cfg-scan (1), bandit, cdxgen |
| ruby | brakeman (2), dep-scan |
| rust | cdxgen |
| serverless | checkov |
| terraform | checkov, tfsec |
| Visual Force (vf) | pmd |
| Apache Velocity (vm) | pmd |
| yaml | yamllint |
| docker/container image | dep-scan |