أداة فحص الثغرات الأمنية لصور الحاويات وأنظمة الملفات. قم بتثبيت الملف الثنائي بسهولة لتجربته. يعمل مع Syft، أداة SBOM القوية (قائمة المواد البرمجية) لصور الحاويات وأنظمة الملفات.
التقويم: https://calendar.google.com/calendar/u/0/r?cid=Y182OTM4dGt0MjRtajI0NnNzOThiaGtnM29qNEBncm91cC5jYWxlbmRhci5nb29nbGUuY29t
جدول الأعمال: https://docs.google.com/document/d/1ZtSAa6fj2a6KRWviTn3WoJm09edvrNUp4Iz_dOjjyY8/edit?usp=sharing (انضم إلى هذه المجموعة للوصول للكتابة)
الجميع موضع ترحيب!
للحصول على خيارات الدعم التجاري مع Syft أو Grype، يرجى الاتصال بـ Anchore
قم بمسح محتويات صورة الحاوية أو نظام الملفات للعثور على نقاط الضعف المعروفة.
البحث عن نقاط الضعف في حزم أنظمة التشغيل الرئيسية:
جبال الألب
أمازون لينكس
BusyBox
سينت أو إس
CBL-مارينر
ديبيان
غير منزعج
أوراكل لينكس
ريد هات (RHEL)
أوبونتو
ولفي
البحث عن الثغرات الأمنية للحزم الخاصة باللغة:
روبي (الأحجار الكريمة)
جافا (JAR، WAR، EAR، JPI، HPI)
جافا سكريبت (NPM، الغزل)
Python (ملفات Egg وWheel وPoetry وrequirements.txt/setup.py)
الدوت نت (deps.json)
جولانج (go.mod)
PHP (الملحن)
الصدأ (البضائع)
يدعم تنسيقات الصور Docker وOCI وSingularity.
دعم OpenVEX لتصفية نتائج المسح وتعزيزها.
إذا واجهت مشكلة، فيرجى إخبارنا باستخدام أداة تعقب المشكلات.
حليقة -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
تثبيت خيارات البرنامج النصي:
-b
: حدد دليل التثبيت المخصص (الافتراضي هو ./bin
)
-d
: المزيد من مستويات التسجيل المطول ( -d
للتصحيح، -dd
للتتبع)
-v
: التحقق من توقيع القطعة الأثرية التي تم تنزيلها قبل التثبيت (يتطلب تثبيت cosign
)
يتم الحفاظ على توزيع الشوكولاتة للغريب من قبل المجتمع ولا يتم توزيعه من قبل فريق التثبيت.
شوكو تثبيت grype -y
مرساة / غريب الشراب تثبيت غريب
على نظام التشغيل macOS، يمكن أيضًا تثبيت Grype من المنفذ الذي يحتفظ به المجتمع عبر MacPorts:
ميناء سودو تثبيت grype
ملحوظة : حاليًا، تم تصميم Grype لنظامي التشغيل macOS وLinux فقط.
راجع DEVELOPING.md للحصول على إرشادات الإنشاء والتشغيل من المصدر.
إذا كنت تستخدم GitHub Actions، فيمكنك استخدام الإجراء المستند إلى Grype لتشغيل عمليات فحص الثغرات الأمنية على التعليمات البرمجية أو صور الحاوية الخاصة بك أثناء سير عمل CI الخاص بك.
يتم تطبيق المجموع الاختباري على جميع العناصر، ويتم توقيع ملف المجموع الاختباري الناتج باستخدام إشارة cosign.
أنت بحاجة إلى الأداة التالية للتحقق من التوقيع:
Cosign
خطوات التحقق هي كما يلي:
قم بتنزيل الملفات التي تريدها وملفات checksums.txt وchecksums.txt.pem وchecksums.txt.sig من صفحة الإصدارات:
التحقق من التوقيع:
علامة التحقق من النقطة <المسار إلى checksum.txt> --الشهادة <المسار إلى checksums.txt.pem> --التوقيع <المسار إلى checksums.txt.sig> --certificate-identity-regexp 'https://github.com/anchore/grype/.github/workflows/.+' --certificate-oidc-issuer "https://token.actions.githubusercontent.com"
بمجرد التأكد من صحة التوقيع، يمكنك المتابعة للتحقق من أن مجموع SHA256 يتوافق مع القطعة الأثرية التي تم تنزيلها:
sha256sum --تجاهل مفقود -c checksums.txt
قم بتثبيت الملف الثنائي، وتأكد من توفر grype
في المسار الخاص بك. للبحث عن الثغرات الأمنية في الصورة:
grype
يقوم الأمر أعلاه بفحص الثغرات الأمنية المرئية في الحاوية (أي التمثيل المضغوط للصورة). لتضمين برنامج من جميع طبقات الصورة في فحص الثغرات الأمنية، بغض النظر عن وجوده في الصورة النهائية، قم بتوفير --scope all-layers
:
grype--scope all-layers
لتشغيل grype من حاوية Docker حتى يتمكن من فحص حاوية قيد التشغيل، استخدم الأمر التالي:
تشغيل عامل ميناء --rm --volume /var/run/docker.sock:/var/run/docker.sock --اسم Grype مرساة/grype:latest $(ImageName):$(ImageTag)
يستطيع Grype فحص مجموعة متنوعة من المصادر بخلاف تلك الموجودة في Docker.
# scan a container image archive (from the result of `docker image save ...`, `podman save ...`, or `skopeo copy` commands) grype path/to/image.tar # scan a Singularity Image Format (SIF) container grype path/to/image.sif # scan a directory grype dir:path/to/dir
يمكن توفير المصادر بشكل صريح مع المخطط:
podman:yourrepo/yourimage:tag use images from the Podman daemon docker:yourrepo/yourimage:tag use images from the Docker daemon docker-archive:path/to/yourimage.tar use a tarball from disk for archives created from "docker save" oci-archive:path/to/yourimage.tar use a tarball from disk for OCI archives (from Skopeo or otherwise) oci-dir:path/to/yourimage read directly from a path on disk for OCI layout directories (from Skopeo or otherwise) singularity:path/to/yourimage.sif read directly from a Singularity Image Format (SIF) container on disk dir:path/to/yourproject read directly from a path on disk (any directory) file:path/to/yourfile read directly from a file on disk sbom:path/to/syft.json read Syft JSON from path on disk registry:yourrepo/yourimage:tag pull image directly from a registry (no container runtime required)
إذا لم يتم توفير مصدر صورة ولا يمكن اكتشافه من المرجع المحدد، فمن المفترض أنه يجب سحب الصورة من البرنامج الخفي Docker. إذا لم يكن عامل الإرساء موجودًا، فستتم محاولة استخدام برنامج Podman بعد ذلك، متبوعًا بالتواصل مباشرة مع سجل الصور أخيرًا.
يمكن تجاوز هذا السلوك الافتراضي باستخدام خيار التكوين default-image-pull-source
(راجع التكوين لمزيد من التفاصيل).
استخدم SBOMs لفحص الثغرات الأمنية بشكل أسرع في Grype:
# Then scan for new vulnerabilities as frequently as needed grype sbom:./sbom.json # (You can also pipe the SBOM into Grype) cat ./sbom.json | grype
يدعم Grype إدخال تنسيقات Syft وSPDX وCycloneDX SBOM. إذا قام Syft بإنشاء أي من أنواع الملفات هذه، فيجب أن يكون لديه المعلومات المناسبة للعمل بشكل صحيح مع Grype. من الممكن أيضًا استخدام SBOMs التي تم إنشاؤها بواسطة أدوات أخرى بدرجات متفاوتة من النجاح. شيئان يجعلان مطابقة Grype أكثر نجاحًا هما تضمين معلومات توزيع CPE وLinux. إذا لم يتضمن SBOM أي معلومات CPE، فمن الممكن إنشاء هذه المعلومات بناءً على معلومات الحزمة باستخدام العلامة --add-cpes-if-none
. لتحديد التوزيع، استخدم علامة --distro
. والمثال الكامل هو:
grype --add-cpes-if-none --distro alpine:3.10 sbom:some-alpine-3.10.spdx.json
أي إصدار من Grype قبل الإصدار 0.40.1 غير مدعوم. لن تتلقى الإصدارات غير المدعومة أي تحديثات للبرامج أو تحديثات لقاعدة بيانات الثغرات الأمنية. لا يزال بإمكانك إنشاء قواعد بيانات خاصة بالثغرات الأمنية لإصدارات Grype غير المدعومة باستخدام الإصدارات السابقة من vunnel لجمع البيانات الأولية وgrype-db لإنشاء قواعد بيانات للمخططات غير المدعومة.
يدعم Grype مسح SBOMs كمدخل عبر stdin. يمكن للمستخدمين استخدام cosign للتحقق من الشهادات باستخدام SBOM كمحتواه لمسح الصورة بحثًا عن الثغرات الأمنية:
COSIGN_EXPERIMENTAL=1 cosign verify-attestation caphill4/java-spdx-tools:latest | jq -r .payload | base64 --decode | jq -r .predicate.Data | grype
{ "وهن": { ... }، "نقاط الضعف ذات الصلة": [ ... ]، "تفاصيل المباراة": [ ... ]، "قطعة أثرية": { ... } }
الثغرة الأمنية : جميع المعلومات المتعلقة بالثغرة الأمنية المحددة التي تمت مطابقتها مباشرة (على سبيل المثال المعرف، والخطورة، ونقاط CVSS، ومعلومات الإصلاح، والروابط لمزيد من المعلومات)
نقاط الضعف ذات الصلة : المعلومات المتعلقة بالثغرات الأمنية التي تم اكتشاف أنها مرتبطة بالثغرة الأمنية الرئيسية المبلغ عنها. ربما كانت الثغرة الأمنية التي قمنا بمطابقتها هي الاستشارة الأمنية لـ GitHub، والتي تحتوي على CVE مبكرًا (في قاعدة بيانات الثغرات الأمنية الوطنية الرسمية). في هذه الحالات، نقوم بإدراج نقاط الضعف الأولية هنا.
تفاصيل المطابقة : يحاول هذا القسم شرح ما بحثنا عنه أثناء البحث عن تطابق وما هي التفاصيل الموجودة على الحزمة والثغرة الأمنية التي تؤدي إلى التطابق بالضبط.
قطعة أثرية : هذه مجموعة فرعية من المعلومات التي نعرفها عن الحزمة (عند مقارنتها بمخرجات Syft json، نقوم بتلخيص قسم البيانات الوصفية). يحتوي هذا على معلومات حول المكان الذي وجدنا فيه الحزمة داخل صورة الحاوية أو الدليل، ونوع الحزمة، ومعلومات الترخيص، وعناوين URL، وCPEs، وما إلى ذلك.
يمكن لـ Grype استبعاد الملفات والمسارات من الفحص داخل المصدر باستخدام تعبيرات شاملة مع واحد أو أكثر من معلمات --exclude
:
grype
ملاحظة: في حالة فحص الصور ، نظرًا لأنه يتم فحص نظام الملفات بالكامل، فمن الممكن استخدام المسارات المطلقة مثل /etc
أو /usr/**/*.txt
بينما تستبعد عمليات فحص الدليل الملفات المتعلقة بالدليل المحدد . على سبيل المثال: مسح /usr/foo
باستخدام --exclude ./package.json
سوف يستبعد /usr/foo/package.json
و --exclude '**/package.json'
سوف يستبعد جميع ملفات package.json
ضمن /usr/foo
. بالنسبة لعمليات فحص الدليل ، يلزم بدء تعبيرات المسار بـ ./
أو */
أو **/
، والتي سيتم حلها جميعًا بالنسبة إلى دليل الفحص المحدد . ضع في اعتبارك أن الصدفة الخاصة بك قد تحاول توسيع أحرف البدل، لذا ضع هذه المعلمات بين علامات اقتباس مفردة، مثل: '**/*.json'
.
يمكن تكوين Grype لدمج مصادر البيانات الخارجية لمزيد من الدقة في مطابقة الثغرات الأمنية. هذه الميزة معطلة حاليًا بشكل افتراضي. لتمكين هذه الميزة، قم بإضافة ما يلي إلى تكوين grype:
المصادر الخارجية: تمكين: true maven: search-upstream-by-sha1: عنوان URL الأساسي الحقيقي: https://repo1.maven.org/maven2
يمكنك أيضًا تكوين عنوان URL الأساسي إذا كنت تستخدم سجلاً آخر كنقطة نهاية مخضرمة.
تنسيق الإخراج لـ Grype قابل للتكوين أيضًا:
grype-o
حيث التنسيقات المتاحة هي:
table
: ملخص عمودي (افتراضي).
cyclonedx
: تقرير XML يتوافق مع مواصفات CycloneDX 1.6.
cyclonedx-json
: تقرير JSON يتوافق مع مواصفات CycloneDX 1.6.
json
: استخدم هذا للحصول على أكبر قدر ممكن من المعلومات من Grype!
sarif
: استخدم هذا الخيار للحصول على تقرير SARIF (تنسيق تبادل نتائج التحليل الثابت)
template
: يتيح للمستخدم تحديد تنسيق الإخراج. راجع "استخدام القوالب" أدناه.
يتيح لك Grype تحديد تنسيقات الإخراج المخصصة باستخدام قوالب Go. وإليك كيف يعمل:
حدد التنسيق الخاص بك كقالب Go، واحفظ هذا القالب كملف.
اضبط تنسيق الإخراج على "قالب" ( -o template
).
حدد المسار إلى ملف القالب ( -t ./path/to/custom.template
).
تستخدم معالجة قوالب Grype نفس نماذج البيانات مثل تنسيق إخراج json
- لذلك إذا كنت تتساءل عن البيانات المتاحة أثناء تأليف قالب، فيمكنك استخدام الإخراج من grype
كمرجع.
يرجى ملاحظة: يمكن للقوالب الوصول إلى معلومات حول النظام الذي تعمل عليه، مثل متغيرات البيئة. يجب ألا تقوم مطلقًا بتشغيل قوالب غير موثوقة.
يوجد العديد من أمثلة القوالب في دليل القوالب في مصدر Grype والتي يمكن أن تكون بمثابة نقطة بداية لتنسيق إخراج مخصص. على سبيل المثال، يُنتج ملف csv.tmpl تقريرًا عن الثغرة الأمنية بتنسيق CSV (قيمة مفصولة بفاصلة):
"Package","Version Installed","Vulnerability ID","Severity"
"coreutils","8.30-3ubuntu2","CVE-2016-2781","Low"
"libc-bin","2.31-0ubuntu9","CVE-2016-10228","Negligible"
"libc-bin","2.31-0ubuntu9","CVE-2020-6096","Low"
...
يمكنك أيضًا العثور على القالب الخاص بتنسيق إخراج "الجدول" الافتراضي في نفس المكان.
يتضمن Grype أيضًا مجموعة واسعة من وظائف قوالب الأدوات المساعدة من sprig بصرف النظر عن نص/قالب golang الافتراضي للسماح للمستخدمين بتخصيص الإخراج من Grype.
يمكن أن يكون لديك خروج Grype مع ظهور خطأ إذا تم الإبلاغ عن أي ثغرات أمنية عند مستوى الخطورة المحدد أو أعلى منه. يكون هذا مفيدًا عند استخدام Grype ضمن برنامج نصي أو خط أنابيب CI. للقيام بذلك، استخدم علامة --fail-on
CLI.
على سبيل المثال، إليك كيفية تشغيل فشل خط أنابيب CI إذا تم العثور على أي ثغرات أمنية في ubuntu:latest
image بدرجة خطورة "متوسطة" أو أعلى:
grype ubuntu:latest --fail-on medium
إذا كنت ترى نتائج إيجابية خاطئة لـ Grype أو أي تطابقات أخرى للثغرة الأمنية لا تريد رؤيتها، فيمكنك إخبار Grype بتجاهل التطابقات عن طريق تحديد واحدة أو أكثر من "قواعد التجاهل" في ملف تكوين Grype (على سبيل المثال ~/.grype.yaml
). يؤدي هذا إلى عدم قيام Grype بالإبلاغ عن أي تطابقات للثغرات الأمنية تفي بالمعايير المحددة بواسطة أي من قواعد التجاهل الخاصة بك.
يمكن لكل قاعدة تحديد أي مجموعة من المعايير التالية:
معرف الثغرة الأمنية (على سبيل المثال "CVE-2008-4318"
)
مساحة الاسم (على سبيل المثال "nvd"
)
حالة الإصلاح (القيم المسموح بها: "fixed"
أو "not-fixed"
أو "wont-fix"
أو "unknown"
)
اسم الحزمة (على سبيل المثال "libcurl"
)
إصدار الحزمة (على سبيل المثال "1.5.1"
)
لغة الحزمة (على سبيل المثال "python"
؛ يتم تعريف هذه القيم هنا)
نوع الحزمة (على سبيل المثال "npm"
؛ تم تعريف هذه القيم هنا)
موقع الحزمة (على سبيل المثال "/usr/local/lib/node_modules/**"
؛ يدعم أنماط الكرة الأرضية)
فيما يلي مثال ~/.grype.yaml
يوضح التنسيق المتوقع لقواعد التجاهل:
تجاهل: # هذه هي المجموعة الكاملة لحقول القواعد المدعومة: - الثغرة الأمنية: CVE-2008-4318 حالة الإصلاح: غير معروفة # تنطبق حقول VEX عندما يقرأ Grype بيانات vex: vex-status: not_affected vex-justification: الضعيف_code_not_present الحزمة: الاسم: libcurl الإصدار: 1.5.1 النوع: npm الموقع: "/ usr/local/lib/node_modules/**" # يمكننا إنشاء قواعد للمطابقة فقط من خلال معرف الثغرة الأمنية: - الثغرة الأمنية: CVE-2014-54321 # ... أو من خلال حقل حزمة واحد فقط: - العبوة: النوع: جوهرة
سيتم تجاهل مطابقات الثغرات الأمنية في حالة تطبيق أي قواعد على المطابقة. تعتبر القاعدة منطبقة على تطابق الثغرة الأمنية المحددة فقط إذا كانت كافة الحقول المحددة في القاعدة تنطبق على تطابق الثغرة الأمنية.
عند تشغيل Grype أثناء تحديد قواعد التجاهل، يحدث ما يلي لمطابقات الثغرة الأمنية التي تم "تجاهلها":
يتم إخفاء التطابقات التي تم تجاهلها تمامًا من مخرجات Grype، باستثناء عند استخدام تنسيقات إخراج json
أو template
؛ ومع ذلك، في هذين التنسيقين، تتم إزالة المطابقات التي تم تجاهلها من حقل مصفوفة matches
الموجودة، ويتم وضعها في حقل مصفوفة ignoredMatches
جديدة. تحتوي كل مطابقة تم تجاهلها أيضًا على حقل إضافي، appliedIgnoreRules
، وهو عبارة عن مصفوفة من أي قواعد تسببت في تجاهل Grype لمطابقة الثغرة الأمنية هذه.
لا تؤثر التطابقات التي تم تجاهلها في قرار حالة الخروج الخاص بـ Grype عند استخدام --fail-on
. على سبيل المثال، إذا حدد المستخدم --fail-on critical
، وتم تجاهل جميع مطابقات الثغرة الأمنية التي تم العثور عليها ذات خطورة "حرجة"، فسيخرج Grype من الصفر.
ملحوظة: يرجى الاستمرار في الإبلاغ عن أي نتائج إيجابية كاذبة تراها! حتى لو كان بإمكانك تصفية النتائج الإيجابية الخاطئة بشكل موثوق باستخدام قواعد التجاهل، فمن المفيد جدًا لمجتمع Grype أن يكون لدينا أكبر قدر ممكن من المعرفة حول النتائج الإيجابية الخاطئة لـ Grype. وهذا يساعدنا على تحسين Grype بشكل مستمر!
إذا كنت تريد من Grype فقط الإبلاغ عن الثغرات الأمنية التي تم إصلاحها بشكل مؤكد ، فيمكنك استخدام العلامة --only-fixed
. (يؤدي هذا تلقائيًا إلى إضافة قواعد التجاهل إلى تكوين Grype، بحيث يتم تجاهل الثغرات الأمنية التي لم يتم إصلاحها.)
على سبيل المثال، إليك فحص Alpine 3.10:
NAME INSTALLED FIXED-IN VULNERABILITY SEVERITY apk-tools 2.10.6-r0 2.10.7-r0 CVE-2021-36159 Critical libcrypto1.1 1.1.1k-r0 CVE-2021-3711 Critical libcrypto1.1 1.1.1k-r0 CVE-2021-3712 High libssl1.1 1.1.1k-r0 CVE-2021-3712 High libssl1.1 1.1.1k-r0 CVE-2021-3711 Critical
.. وإليك نفس الفحص، ولكن مع إضافة العلامة --only-fixed
:
NAME INSTALLED FIXED-IN VULNERABILITY SEVERITY apk-tools 2.10.6-r0 2.10.7-r0 CVE-2021-36159 Critical
إذا كنت تريد من Grype أن يقوم فقط بالإبلاغ عن الثغرات الأمنية التي لم يتم إصلاحها بشكل مؤكد ، فيمكنك استخدام العلامة --only-notfixed
. وبدلاً من ذلك، يمكنك استخدام علامة --ignore-states
لتصفية النتائج بحثًا عن الثغرات الأمنية ذات الحالات المحددة مثل wont-fix
(راجع --help
للحصول على قائمة بحالات الإصلاح الصالحة). تضيف هذه العلامات تلقائيًا قواعد التجاهل إلى تكوين Grype، بحيث يتم تجاهل الثغرات الأمنية التي تم إصلاحها أو التي لن يتم إصلاحها.
يمكن لـ Grype استخدام بيانات VEX (تبادل قابلية استغلال الثغرات الأمنية) لتصفية النتائج الإيجابية الخاطئة أو توفير سياق إضافي، وزيادة المطابقات. عند مسح صورة حاوية، يمكنك استخدام علامة --vex
للإشارة إلى مستند OpenVEX واحد أو أكثر.
ترتبط عبارات VEX بمنتج (صورة حاوية)، والثغرة الأمنية، وحالة VEX للتعبير عن تأكيد تأثير الثغرة الأمنية. هناك أربع حالات VEX: not_affected
، affected
، fixed
و under_investigation
.
فيما يلي مثال على مستند OpenVEX البسيط. (نصيحة: استخدم vexctl
لإنشاء مستنداتك الخاصة).
" مستخدم Grype"، "الطابع الزمني": "2023-07-17T18:28:47.696004345-06:00"، "الإصدار": 1، "البيانات": [ { "الثغرة الأمنية": { "الاسم": "CVE-2023-1255" }، "منتجات": [ { "@id": "pkg:oci/alpine@sha256%3A124c7d2707904eea7431fffe91522a01e5a861a624ee31d03372cc1d138a3126"، "المكونات الفرعية": [ { "@id": "pkg:apk/alpine/[email protected]" }, { "@id": "pkg:apk/alpine/[email protected]" } ] } ]، "الحالة": "ثابت" } ] }
افتراضيًا، سيستخدم Grype أي عبارات في مستندات VEX محددة بحالة not_affected
أو fixed
لنقل التطابقات إلى مجموعة التجاهل.
يتم وضع علامة على أي تطابقات تم تجاهلها كنتيجة لعبارات VEX عند استخدام --show-suppressed
:
libcrypto3 3.0.8-r3 3.0.8-r4 apk CVE-2023-1255 Medium (suppressed by VEX)
سيتم اعتبار البيانات ذات الحالة affected
أو under_investigation
فقط لزيادة مجموعة النتائج عند طلبها على وجه التحديد باستخدام متغير البيئة GRYPE_VEX_ADD
أو في ملف التكوين.
يمكن كتابة قواعد التجاهل للتحكم في كيفية احترام Grype لعبارات VEX. على سبيل المثال، لتكوين Grype للعمل فقط على عبارات VEX عندما يكون التبرير vulnerable_code_not_present
، يمكنك كتابة قاعدة مثل هذه:
---يتجاهل: - حالة vex: not_affected vex-justification: عرضة للخطر_code_not_present
راجع قائمة المبررات للحصول على التفاصيل. يمكنك مزج vex-status
vex-justification
مع معلمات قاعدة التجاهل الأخرى.
عندما يقوم Grype بإجراء فحص بحثًا عن الثغرات الأمنية، فإنه يفعل ذلك باستخدام قاعدة بيانات الثغرات المخزنة في نظام الملفات المحلي الخاص بك، والتي يتم إنشاؤها عن طريق سحب البيانات من مجموعة متنوعة من مصادر بيانات الثغرات الأمنية المتاحة للعامة. وتشمل هذه المصادر:
جبال الألب لينكس SecDB: https://secdb.alpinelinux.org/
أمازون لينكس للأسف: https://alas.aws.amazon.com/AL2/alas.rss
تشينجوارد SecDB: https://packages.cgr.dev/chainguard/security.json
متتبع Debian Linux CVE: https://security-tracker.debian.org/tracker/data/json
نصائح أمان GitHub (GHSAs): https://github.com/advisories
قاعدة بيانات الضعف الوطنية (NVD): https://nvd.nist.gov/vuln/data-feeds
أوراكل لينكس البيضاوي: https://linux.Oracle.com/security/oval/
بيانات أمان RedHat Linux: https://access.redhat.com/hydra/rest/securitydata/
ريدهات RHSAs: https://www.redhat.com/security/data/oval/
سوزي لينكس البيضاوي: https://ftp.suse.com/pub/projects/security/oval/
أمان أوبونتو لينكس: https://people.canonical.com/~ubuntu-security/
ولفي سيك دي بي: https://packages.wolfi.dev/os/security.json
افتراضيًا، يقوم Grype تلقائيًا بإدارة قاعدة البيانات هذه نيابةً عنك. يتحقق Grype من وجود تحديثات جديدة لقاعدة بيانات الثغرات الأمنية للتأكد من أن كل عملية فحص تستخدم معلومات الثغرات المحدثة. هذا السلوك قابل للتكوين. لمزيد من المعلومات، راجع قسم إدارة قاعدة بيانات Grype.
قاعدة بيانات الثغرات الأمنية الخاصة بـ Grype عبارة عن ملف SQLite، يُسمى vulnerability.db
. تحديثات قاعدة البيانات هي تحديثات ذرية: يتم استبدال قاعدة البيانات بأكملها ثم يتم التعامل معها على أنها "للقراءة فقط" بواسطة Grype.
الخطوة الأولى لـ Grype في تحديث قاعدة البيانات هي اكتشاف قواعد البيانات المتوفرة للاسترجاع. يقوم Grype بذلك عن طريق طلب "ملف قائمة" من نقطة نهاية عامة:
https://toolbox-data.anchore.io/grype/databases/listing.json
يحتوي ملف القائمة على إدخالات لكل قاعدة بيانات متاحة للتنزيل.
فيما يلي مثال على الإدخال في ملف القائمة:
{ "مُصمم": "2021-10-21T08:13:41Z"، "الإصدار": 3، "url": "https://toolbox-data.anchore.io/grype/databases/vulnerability-db_v3_2021-10- ""}
باستخدام هذه المعلومات، يمكن لـ Grype تحديد قاعدة البيانات الصحيحة (أحدث قاعدة بيانات تم إنشاؤها بإصدار المخطط الحالي)، وتنزيل قاعدة البيانات، والتحقق من سلامة قاعدة البيانات باستخدام قيمة checksum
المدرجة.
ملاحظة: أثناء الاستخدام العادي، ليست هناك حاجة للمستخدمين لإدارة قاعدة بيانات Grype! تدير Grype قاعدة بياناتها خلف الكواليس. ومع ذلك، بالنسبة للمستخدمين الذين يحتاجون إلى مزيد من التحكم، يوفر Grype خيارات لإدارة قاعدة البيانات بشكل أكثر وضوحًا.
افتراضيًا، يتم تخزين قاعدة البيانات مؤقتًا على نظام الملفات المحلي في الدليل $XDG_CACHE_HOME/grype/db/
. على سبيل المثال، في نظام التشغيل macOS، سيتم تخزين قاعدة البيانات في ~/Library/Caches/grype/db/3/
. (لمزيد من المعلومات حول مسارات XDG، راجع مواصفات دليل XDG الأساسية.)
يمكنك تعيين مسار دليل ذاكرة التخزين المؤقت باستخدام متغير البيئة GRYPE_DB_CACHE_DIR
. إذا لم ينجح إعداد هذا المتغير وحده، فقد يلزم أيضًا تعيين متغير البيئة TMPDIR
.
يحتاج Grype إلى معلومات محدثة عن الثغرات الأمنية لتوفير مطابقات دقيقة. افتراضيًا، سيفشل التنفيذ إذا لم يتم إنشاء قاعدة البيانات المحلية في آخر 5 أيام. يمكن تكوين التحقق من فساد البيانات عبر متغير البيئة GRYPE_DB_MAX_ALLOWED_BUILT_AGE
و GRYPE_DB_VALIDATE_AGE
أو الحقل max-allowed-built-age
و validate-age
، ضمن db
. ويستخدم بناء جملة المدة الزمنية لجولانج. قم بتعيين GRYPE_DB_VALIDATE_AGE
أو validate-age
على false
لتعطيل التحقق من الصلاحية.
افتراضيًا، يبحث Grype عن قاعدة بيانات جديدة في كل مرة يتم فيها تشغيله، عن طريق إجراء اتصال عبر الشبكة عبر الإنترنت. يمكنك إخبار Grype بعدم إجراء هذا التحقق عن طريق تعيين متغير البيئة GRYPE_DB_AUTO_UPDATE
إلى false
.
وطالما أنك تضع ملفات Grype vulnerability.db
db و metadata.json
في دليل ذاكرة التخزين المؤقت لإصدار المخطط المتوقع، فلن يحتاج Grype إلى الوصول إلى الشبكة. بالإضافة إلى ذلك، يمكنك الحصول على قائمة بأرشيفات قاعدة البيانات المتاحة للتنزيل من أمر grype db list
في بيئة عبر الإنترنت، وتنزيل أرشيف قاعدة البيانات، ونقله إلى بيئتك غير المتصلة بالإنترنت، واستخدام grype db import
إلى استخدام قاعدة البيانات المحددة في وضع عدم الاتصال.
إذا كنت ترغب في توزيع قواعد بيانات Grype الخاصة بك داخليًا دون الحاجة إلى استخدام db import
يدويًا، فيمكنك الاستفادة من آلية تحديث قاعدة بيانات Grype. للقيام بذلك، يمكنك إنشاء ملف listing.json
الخاص بك المشابه للملف الموجود بشكل عام (راجع grype db list -o raw
للحصول على مثال لملف listing.json
العام الخاص بنا) وتغيير عنوان URL للتنزيل للإشارة إلى نقطة نهاية داخلية (على سبيل المثال دلو S3 خاص، خادم ملفات داخلي، الخ). يمكن لأي تثبيت داخلي لـ Grype تلقي تحديثات قاعدة البيانات تلقائيًا عن طريق تكوين db.update-url
(مثل متغير البيئة GRYPE_DB_UPDATE_URL
) للإشارة إلى ملف listing.json
المستضاف الذي قمت بإنشائه.
يوفر Grype أوامر CLI خاصة بقاعدة البيانات للمستخدمين الذين يرغبون في التحكم في قاعدة البيانات من سطر الأوامر. فيما يلي بعض الأوامر المفيدة المقدمة:
grype db status
- الإبلاغ عن الحالة الحالية لقاعدة بيانات Grype (مثل موقعها وتاريخ بنائها والمجموع الاختباري)
grype db check
- معرفة ما إذا كانت التحديثات متوفرة لقاعدة البيانات
grype db update
- تأكد من تنزيل أحدث قاعدة بيانات إلى دليل ذاكرة التخزين المؤقت (يقوم Grype بهذه العملية في بداية كل عملية فحص بشكل افتراضي)
grype db list
- قم بتنزيل ملف القائمة الذي تم تكوينه على db.update-url
وإظهار قواعد البيانات المتوفرة للتنزيل
grype db import
- تزويد rype بأرشيف قاعدة بيانات لاستخدامه بشكل صريح (مفيد لتحديثات قاعدة البيانات دون اتصال بالإنترنت)
grype db providers
- يقدمون قائمة مفصلة بموفري قواعد البيانات
يمكنك العثور على معلومات كاملة عن أوامر قاعدة بيانات Grype عن طريق تشغيل grype db --help
.
تزود Grype بإكمال الصدفة من خلال تطبيق CLI (الكوبرا). قم بإنشاء رمز الإكمال لـ Shell الخاص بك عن طريق تشغيل أحد الأوامر التالية:
grype completion
go run ./cmd/grype completion
سيؤدي هذا إلى إخراج برنامج نصي shell إلى STDOUT، والذي يمكن استخدامه بعد ذلك كبرنامج نصي إكمال لـ Grype. سيؤدي تشغيل أحد الأوامر المذكورة أعلاه باستخدام علامتي -h
أو --help
إلى توفير إرشادات حول كيفية القيام بذلك للقذيفة التي اخترتها.
في حالة عدم وجود وقت تشغيل للحاوية، لا يزال بإمكان grype استخدام بيانات الاعتماد التي تم تكوينها في مصادر بيانات الاعتماد الشائعة (مثل ~/.docker/config.json
). سيتم سحب الصور من السجلات الخاصة باستخدام بيانات الاعتماد هذه. ملف التكوين هو المكان الذي يتم فيه تخزين بيانات الاعتماد الخاصة بك عند المصادقة مع السجلات الخاصة عبر بعض الأوامر مثل docker login
. لمزيد من المعلومات، راجع وثائق go-containerregistry
.
يبدو مثال config.json
كما يلي:
// config.json { "auths": { "registry.example.com": { "username": "AzureDiamond", "password": "hunter2" } } }
يمكنك تشغيل الأمر التالي كمثال. وهو يعرض تفاصيل تكوين التثبيت/البيئة الذي تحتاجه الحاوية للوصول إلى سجل خاص:
docker run -v ./config.json:/config/config.json -e "DOCKER_CONFIG=/config" anchore/grype:latest
يعرض القسم أدناه سير عمل بسيطًا حول كيفية تحميل ملف التكوين هذا باعتباره سرًا في حاوية على kubernetes.
خلق سرا. قيمة config.json
مهمة. يشير إلى المواصفات المفصلة هنا. يوجد أسفل هذا القسم ملف secret.yaml
الذي سيستهلكه تكوين البود كمجلد. المفتاح config.json
مهم. سينتهي به الأمر ليكون اسم الملف عند تثبيته في الكبسولة.
apiVersion: v1
kind: Secret
metadata:
name: registry-config
namespace: grype
data:
config.json:
```
`kubectl apply -f secret.yaml`
قم بإنشاء جرابك الذي يعمل بالجريب. يعد env DOCKER_CONFIG
مهمًا لأنه يعلن عن مكان البحث عن ملف بيانات الاعتماد. في المثال أدناه، يؤدي الإعداد DOCKER_CONFIG=/config
إلى إعلام grype بأنه يمكن العثور على بيانات الاعتماد في /config/config.json
. ولهذا السبب استخدمنا config.json
كمفتاح لسرنا. عند تركيبه في حاويات، يتم استخدام مفتاح الأسرار كاسم ملف. يقوم قسم volumeMounts
بتثبيت سرنا على /config
. يقوم قسم volumes
بتسمية المجلد الخاص بنا ويستفيد من السر الذي أنشأناه في الخطوة الأولى.
apiVersion: v1
kind: Pod
spec:
containers:
- image: anchore/grype:latest
name: grype-private-registry-demo
env:
- name: DOCKER_CONFIG
value: /config
volumeMounts:
- mountPath: /config
name: registry-config
readOnly: true
args:
-
volumes:
- name: registry-config
secret:
secretName: registry-config
```
`kubectl apply -f pod.yaml`
يمكن للمستخدم الآن تشغيل kubectl logs grype-private-registry-demo
. يجب أن تُظهر السجلات تحليل الجرب لـ
المتوفر في تكوين الجراب.
باستخدام المعلومات المذكورة أعلاه، يجب أن يكون المستخدمون قادرين على تكوين الوصول إلى التسجيل الخاص دون الحاجة إلى القيام بذلك في ملفات تكوين grype
أو syft
. كما أنها لن تعتمد على برنامج docker الخفي (أو بعض برامج وقت التشغيل الأخرى) لتكوين التسجيل والوصول إليه.
مسارات بحث التكوين الافتراضية (راجع كل grype config locations
):
.grype.yaml
.grype/config.yaml
~/.grype.yaml
استخدم grype config
لطباعة نموذج ملف التكوين إلى stdout. استخدم grype config --load
لطباعة التكوين الحالي بعد تحميل جميع القيم إلى stdout.
يمكنك تحديد الملفات مباشرة باستخدام علامات --config
/ -c
لتوفير ملفات/مسارات التكوين الخاصة بك:
grype-c /path/to/config.yaml
خيارات التكوين (قيم المثال هي الافتراضية):
# تمكين/تعطيل التحقق من تحديثات التطبيق عند بدء التشغيل # مثل GRYPE_CHECK_FOR_APP_UPDATE env varcheck-for-app-update: true# يسمح للمستخدمين بتحديد مصدر الصورة الذي يجب استخدامه لإنشاء sbom# القيم الصالحة هي: التسجيل، docker، podman# نفس GRYPE_DEFAULT_IMAGE_PULL_SOURCE env vardefault-image-pull-source: ""# نفس --name; قم بتعيين اسم الهدف الذي يتم تحليله: ""# عند المسح، إذا تم العثور على خطورة عند أو أعلى من الخطورة المحددة، فسيكون رمز الإرجاع 1# الافتراضي غير محدد والذي سيتخطى هذا التحقق من الصحة (الخيارات: لا تذكر، منخفض، متوسط ، عالي، حرج)# مثل --fail-on ؛ GRYPE_FAIL_ON_SEVERITY env varfail-on-severity: ""# تنسيق الإخراج لتقرير الثغرة الأمنية (options: table, template, json, cyclonedx)# عند استخدام القالب كنوع الإخراج، يجب عليك أيضًا توفير قيمة لـ 'output-template- file'# نفس -o ؛ GRYPE_OUTPUT env varoutput: "table"# إذا كنت تستخدم إخراج القالب، فيجب عليك توفير مسار إلى ملف قالب Go# راجع https://github.com/anchore/grype#using-templates لمزيد من المعلومات حول إخراج القالب # المسار الافتراضي إلى ملف القالب هو دليل العمل الحالي # ملف قالب الإخراج: .grype/html.tmpl # كتابة تقرير الإخراج إلى ملف (الافتراضي هو الكتابة إلى stdout) # مثل --file؛ GRYPE_FILE env varfile: ""# قائمة بالمجموعات الكروية المراد استبعادها من المسح، على سبيل المثال:# Except:# - '/etc/**'# - './out/**/*.json'# نفس -- استبعاد؛ GRYPE_EXCLUDE env varexclude: []# تتضمن المطابقات على حزم رؤوس kernel التي تتم مطابقتها مع حزمة kernel الأولية # إذا كانت "خطأ"، يتم وضع علامة على أي من هذه المطابقات على أنها متجاهلة - مطابقة-upstream-kernel-headers: false # نظام تشغيل و/أو بنية لاستخدامها عندما الرجوع إلى صور الحاوية (على سبيل المثال "windows/armv6" أو "arm64")# مثل --platform؛ GRYPE_PLATFORM env varplatform: ""# في حالة استخدام إدخال SBOM، قم بإنشاء CPEs تلقائيًا عندما لا تحتوي الحزم على noneadd-cpes-if-none: false# حدد بشكل صريح توزيعة Linux لاستخدامها كـ: مثل alpine:3.10distro:external -مصادر: تمكين: false maven: search-upstream-by-sha1: عنوان URL الأساسي الحقيقي: https://repo1.maven.org/maven2db: # تحقق من تحديثات قاعدة البيانات عند التنفيذ # مثل GRYPE_DB_AUTO_UPDATE env var auto-update: الموقع الحقيقي # لكتابة ذاكرة التخزين المؤقت لقاعدة بيانات الثغرات الأمنية؛ الإعدادات الافتراضية هي $XDG_CACHE_HOME/grype/db # مثل GRYPE_DB_CACHE_DIR env var Cache-dir: "" # عنوان URL لقاعدة بيانات الثغرة الأمنية # مثل GRYPE_DB_UPDATE_URL env var update-url: "https://toolbox-data.anchore.io/grype /databases/listing.json" # يضمن أن بناء قاعدة البيانات ليس أقدم من الحد الأقصى المسموح به للعمر # المعين على false لتعطيل التحقق من صحة العمر: true # الحد الأقصى للعمر المسموح به لقاعدة بيانات الثغرات الأمنية، # age هو الوقت منذ ذلك الحين تم إنشاؤه # الحد الأقصى الافتراضي للعمر هو 120 ساعة (أو خمسة أيام) max-allowed-built-age: "120h" # مهلة تنزيل GRYPE_DB_UPDATE_URL لمعرفة ما إذا كانت قاعدة البيانات بحاجة إلى التنزيل # هذا الملف هو ~156 كيلو بايت اعتبارًا من 2024-04 -17 لذا يجب أن يكون التنزيل سريعًا؛ اضبط حسب الحاجة update-available-timeout: "30s" # مهلة تنزيل قاعدة البيانات الخاصة بالثغرة الفعلية # تبلغ قاعدة البيانات حوالي 156 ميجابايت اعتبارًا من 17 أبريل 2024، لذا قد تتجاوز الاتصالات الأبطأ المهلة الافتراضية؛ اضبط حسب الحاجة مهلة التحديث والتنزيل: بحث "120 ثانية": # مساحة البحث للبحث عن الحزم (الخيارات: جميع الطبقات، مضغوطة) # نفس -s ؛ GRYPE_SEARCH_SCOPE env varscope: "squashed" # البحث داخل الأرشيفات التي تحتوي على فهرس ملفات للبحث عنه (zip) # ملاحظة: في الوقت الحالي ينطبق هذا فقط على كتالوج حزمة جافا # مثل GRYPE_PACKAGE_SEARCH_INDEXED_ARCHIVES env var Indexed-archives: true # search داخل الأرشيفات التي لا تحتوي على فهرس ملف للبحث فيه (tar، tar.gz، tar.bz2، إلخ) # ملاحظة: تمكين هذا قد يؤدي إلى تأثير على الأداء حيث سيتم فك ضغط جميع ملفات tar المضغوطة المكتشفة # ملاحظة: في الوقت الحالي هذا ينطبق فقط على كتالوج حزمة جافا # مثل GRYPE_PACKAGE_SEARCH_UNINDEXED_ARCHIVES env var unindexed-archives: false # options عند السحب مباشرة من السجل عبر مخطط "التسجيل:" التسجيل: # تخطي التحقق من TLS عند الاتصال بالسجل # نفس GRYPE_REGISTRY_INSECURE_SKIP_TLS_VERIFY env var insecure -skip-tls-verify: false # استخدم http بدلاً من https عند الاتصال بالتسجيل # مثل GRYPE_REGISTRY_INSECURE_USE_HTTP env var insecure-use-http: false # مسار الملف إلى شهادة CA (أو الدليل الذي يحتوي على *.crt، *.cert، *.pem) المستخدمة لإنشاء شهادة العميل # GRYPE_REGISTRY_CA_CERT env var ca-cert: "" # بيانات اعتماد لسجلات محددة auth: # عنوان URL للسجل (على سبيل المثال، "docker.io"، "localhost:5000"، وما إلى ذلك) # GRYPE_REGISTRY_AUTH_AUTHORITY env var - السلطة: "" # GRYPE_REGISTRY_AUTH_USERNAME env var username: "" # GRYPE_REGISTRY_AUTH_PASSWORD env var كلمة المرور: "" # ملاحظة: الرمز المميز واسم المستخدم/كلمة المرور حصريان بشكل متبادل # GRYPE_REGISTRY_AUTH_TOKEN env var token: "" # مسار الملف إلى شهادة العميل المستخدمة لمصادقة TLS إلى التسجيل # GRYPE_REGISTRY_AUTH_TLS_CERT env var tls-cert: "" # مسار الملف إلى مفتاح العميل المستخدم لمصادقة TLS إلى التسجيل # GRYPE_REGISTRY_AUTH_TLS_KEY env var tls-key: "" # - ... # ملاحظة، يمكن توفير المزيد من بيانات الاعتماد عبر ملف التكوين فقط (وليس env vars) السجل: # منع جميع المخرجات (باستثناء قائمة الثغرات الأمنية) # نفس -q ؛ GRYPE_LOG_QUIET env var الهادئ: false # زيادة الإسهاب # نفس GRYPE_LOG_VERBOSITY env var verbosity: 0 # مستوى السجل؛ ملاحظة: التسجيل التفصيلي يمنع ETUI # مثل GRYPE_LOG_LEVEL env var # يستخدم مستويات تسجيل logrus: https://github.com/sirupsen/logrus#level-logging مستوى: "خطأ" # موقع لكتابة ملف السجل (الافتراضي ليس كذلك) للحصول على ملف سجل) # مثل ملف GRYPE_LOG_FILE env var: ""match: # يضبط المطابقات أدناه لاستخدام cpes عند محاولة العثور على # تطابقات للثغرات الأمنية. مُطابق المخزون هو الرقم الافتراضي عندما لا يمكن تحديد مُطابق أساسي. جافا: باستخدام-cpes: خطأ بيثون: باستخدام-cpes: خطأ جافا سكريبت: باستخدام-cpes: خطأ روبي: باستخدام-cpes: خطأ dotnet: باستخدام-cpes: خطأ جولانج: باستخدام-cpes: خطأ # حتى إذا تم تعطيل مطابقة CPE، قم بإجراء استثناء عند البحث عن "stdlib". Always-use-cpe-for-stdlib: true # السماح للإصدارات الزائفة للوحدة الرئيسية، والتي ربما تم "تخمينها" فقط بواسطة Syft، لاستخدامها في مطابقة الثغرات الأمنية، تسمح بمقارنة النسخة الزائفة للوحدة الرئيسية: مخزون خاطئ : استخدام-cpes: صحيح
ويجري حاليًا دراسة مجالات التطوير المحتملة التالية:
دعم القائمة المسموح بها، وتعيين الحزمة