واحدة من أكثر الحالات التي تم الكشف عنها حدثت مع Equifax في مايو 2017. استولى مهاجمون مجهولون على معلومات عن 143 مليون أمريكي ، بما في ذلك الأسماء الكاملة والعناوين وأرقام الضمان الاجتماعي ورخص القيادة. في 209000 حالة ، تضمنت الوثائق أيضًا معلومات حول البطاقات المصرفية للضحايا. كان هذا التسرب بسبب استغلال ثغرة خطيرة في Apache Struts 2 (CVE-2017-5638) ، بينما تم إصدار الإصلاح مرة أخرى في مارس 2017. كان لدى الشركة شهرين لتثبيت التحديث ، لكن لم يكلف أحد عناء ذلك.
ستناقش هذه المقالة مسألة اختيار أداة لإجراء SCA من حيث جودة نتائج التحليل. ستكون هناك أيضًا مقارنة وظيفية للأدوات. سيتم ترك عملية التضمين في CI / CD وإمكانيات التكامل للمنشورات المستقبلية. تم تقديم قائمة واسعة من الأدوات بواسطة OWASP على موقعها على الإنترنت ، ولكن كجزء من المراجعة الحالية ، سنتطرق فقط إلى الأداة مفتوحة المصدر الأكثر شيوعًا Dependency Check ، وهي منصة مفتوحة المصدر أقل شهرة ، حل Dependency Track and Enterprise Sonatype Nexus IQ. سنكتشف أيضًا كيفية عمل هذه الحلول ونقارن النتائج التي تم الحصول عليها للإيجابيات الخاطئة.
مبدأ التشغيل
Dependency Check هي أداة مساعدة (CLI ، maven ، jenkins module ، ant) تقوم بتحليل ملفات المشروع ، وتجمع أجزاء من معلومات التبعية (اسم الحزمة ، ومعرّف المجموعة ، وعنوان المواصفات ، والإصدار ...) ، وتبني خط CPE - (تعداد النظام الأساسي المشترك) ، الحزمة URL (PURL) ويكتشف نقاط الضعف لـ CPE / PURL من قواعد البيانات (NVD ، Sonatype OSS Index ، NPM Audit API ...) ، ثم ينشئ تقريرًا لمرة واحدة بتنسيق HTML و JSON و XML ...
دعونا نرى كيف يبدو CPE:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- الجزء: إشارة إلى أن المكون ينتمي إلى التطبيق (أ) ، نظام التشغيل (س) ، الأجهزة (ح) (عنصر إلزامي)
- البائع: اسم الشركة المصنعة للمنتج (مطلوب)
- المنتج: اسم المنتج (عنصر مطلوب)
- الإصدار: إصدار المكون (مهمل)
- التحديث: قم بتحديث الحزمة
- الإصدار: إصدار قديم (مهمل)
- اللغة: اللغة كما تم تعريفها في RFC-5646
- إصدار SW: إصدار البرنامج
- الهدف SW: بيئة البرنامج التي يتم فيها تشغيل المنتج
- الهدف HW: بيئة الأجهزة التي يتم تشغيل المنتج فيها
- أخرى: معلومات المورد أو المنتج
مثال CPE يبدو كالتالي:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
يعني السطر أن CPE الإصدار 2.3 يصف أحد مكونات التطبيق من الشركة المصنعة
pivotal_software باسم spring_frameworkالإصدار 3.0.0. إذا فتحنا ثغرة CVE-2014-0225 في NVD ، يمكننا أن نرى إشارة إلى CPE هذا. المشكلة الأولى التي يجب ملاحظتها على الفور هي أن CVE في NVD ، وفقًا لـ CPE ، تشير إلى وجود مشكلة في إطار العمل ، وليس في مكون معين. بمعنى ، إذا كان المطورون مرتبطين بإحكام بإطار العمل ، ولا تنطبق الثغرة الأمنية المحددة على تلك الوحدات النمطية التي يستخدمها المطورون ، فسيتعين على أخصائي الأمان بطريقة ما تفكيك CVE والتفكير في التحديث.
يتم استخدام عنوان URL أيضًا بواسطة أدوات SCA. تنسيق عنوان url للحزمة هو كما يلي:
scheme:type/namespace/name@version?qualifiers#subpath
- Sheme: سيكون هناك دائمًا "pkg" للإشارة إلى أن هذا عنوان url للحزمة (مطلوب)
- النوع: "نوع" الحزمة أو "بروتوكول" الحزمة ، مثل maven و npm و nuget و gem و pypi وما إلى ذلك. (شرط إلزامي)
- Namespace: بادئة اسم ما ، مثل معرف مجموعة Maven أو مالك صورة Docker أو مستخدم GitHub أو المؤسسة. اختياري ويعتمد على النوع.
- الاسم: اسم الحزمة (مطلوب)
- الإصدار: إصدار الحزمة
- المؤهلات: مؤهلات إضافية للحزمة ، مثل نظام التشغيل ، والهندسة المعمارية ، والتوزيع ، وما إلى ذلك. العنصر الاختياري والنوع المحدد.
- المسار الفرعي: مسار إضافي في الحزمة بالنسبة إلى جذر الحزمة
على سبيل المثال:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/io@1.3.4
pkg:pypi/django-package@1.11.1.dev1
Dependency Track هو نظام أساسي على شبكة الإنترنت يقبل قائمة المواد الجاهزة (BOM) التي تم إنشاؤها بواسطة CycloneDX و SPDX ، أي المواصفات الجاهزة حول التبعيات الحالية. هذا ملف XML مع وصف التبعيات - الاسم ، التجزئة ، عنوان url للحزمة ، الناشر ، الترخيص. بعد ذلك ، يوزع مسار التبعية BOM ، وينظر في CVEs المتاحة للتبعيات المحددة من قاعدة بيانات الثغرات الأمنية (NVD ، Sonatype OSS Index ...) ، ثم يبني الرسوم البيانية ، ويحسب المقاييس ، ويحدث بانتظام بيانات حالة الثغرات الأمنية للمكون.
مثال لما قد يبدو عليه BOM في تنسيق XML:
<?xml version="1.0" encoding="UTF-8"?>
<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1">
<components>
<component type="library">
<publisher>Apache</publisher>
<group>org.apache.tomcat</group>
<name>tomcat-catalina</name>
<version>9.0.14</version>
<hashes>
<hash alg="MD5">3942447fac867ae5cdb3229b658f4d48</hash>
<hash alg="SHA-1">e6b1000b94e835ffd37f4c6dcbdad43f4b48a02a</hash>
<hash alg="SHA-256">f498a8ff2dd007e29c2074f5e4b01a9a01775c3ff3aeaf6906ea503bc5791b7b</hash>
<hash alg="SHA-512">e8f33e424f3f4ed6db76a482fde1a5298970e442c531729119e37991884bdffab4f9426b7ee11fccd074eeda0634d71697d6f88a460dce0ac8d627a29f7d1282</hash>
</hashes>
<licenses>
<license>
<id>Apache-2.0</id>
</license>
</licenses>
<purl>pkg:maven/org.apache.tomcat/tomcat-catalina@9.0.14</purl>
</component>
<!-- More components here -->
</components>
</bom>
يمكن استخدام قائمة مكونات الصنف ليس فقط كمعلمات إدخال لمسار التبعية ، ولكن أيضًا لجرد مكونات البرامج في سلسلة التوريد ، على سبيل المثال ، لتوفير البرامج للعميل. في عام 2014 ، تم اقتراح قانون الشفافية وإدارة سلسلة التوريد السيبراني لعام 2014 للنظر فيه في الولايات المتحدة ، والذي نص على أنه عند شراء برنامج ، أي دولة. يجب على المؤسسة أن تطلب BOM لمنع استغلال المكونات الضعيفة ، لكن القانون لم يدخل حيز التنفيذ أبدًا.
بالعودة إلى SCA ، فإن Dependency Track لديه تكامل خارج الصندوق مع منصات الإخطار مثل Slack وأنظمة إدارة الثغرات الأمنية مثل Kenna Security. يجب أن يقال أيضًا أن Dependency Track ، من بين أشياء أخرى ، يكتشف الإصدارات القديمة من الحزم ويوفر معلومات حول التراخيص (بسبب دعم SPDX).
إذا تحدثنا عن جودة SCA ، فهناك فرق جوهري.
لا يقبل مسار التبعية المشروع كمدخلات ، ولكنه يقبل قائمة المواد. هذا يعني أنه إذا أردنا التحقق من المشروع ، فسنحتاج أولاً إلى إنشاء bom.xml ، على سبيل المثال ، باستخدام CycloneDX. وبالتالي ، يعتمد مسار التبعية بشكل مباشر على CycloneDX. في نفس الوقت ، يسمح بالتخصيص. لذلك كتب فريق OZON وحدة CycloneDX لبناء ملفات BOM لمشاريع Golang لمزيد من المسح عبر مسار التبعية.
نيكزس آي كيوهو أحد حلول SCA التجارية من Sonatype ، وهو جزء من نظام Sonatype البيئي ، والذي يتضمن أيضًا Nexus Repository Manager. يمكن لـ Nexus IQ قبول كل من أرشيفات الحرب (لمشاريع جافا) باعتبارها بيانات إدخال عبر واجهة الويب أو واجهة برمجة التطبيقات ، و BOM ، إذا لم تتمكن مؤسستك من إعادة البناء من CycloneDX إلى حل جديد. على عكس الحلول مفتوحة المصدر ، لا يشير معدل الذكاء إلى CPE / PURL للمكون المحدد والثغرة الأمنية المقابلة في قاعدة البيانات ، ولكنه يأخذ أيضًا في الاعتبار البحث الخاص به ، على سبيل المثال ، اسم الوظيفة أو الفئة المعرضة للخطر. ستتم مناقشة آليات معدل الذكاء لاحقًا في تحليل النتائج.
دعنا نلخص بعض الميزات الوظيفية ، وننظر أيضًا في اللغات المدعومة للتحليل:
| لغة | Nexus IQ | فحص التبعية | مسار التبعية |
|---|---|---|---|
| جافا | + | + | + |
| C / C ++ | + | + | - |
| سي # | + | + | - |
| .شبكة | + | + | + |
| إرلانج | - | - | + |
| جافا سكريبت (NodeJS) | + | + | + |
| بي أتش بي | + | + | + |
| بايثون | + | + | + |
| روبي | + | + | + |
| بيرل | - | - | - |
| سكالا | + | + | + |
| ج موضوعية | + | + | - |
| سويفت | + | + | - |
| ر | + | - | - |
| اذهب | + | + | + |
وظائف
| وظائف | Nexus IQ | فحص التبعية | مسار التبعية |
|---|---|---|---|
| القدرة على توفير التحقق من المكونات المستخدمة في الكود المصدري للنقاء المرخص | + | - | + |
| القدرة على مسح وتحليل نقاط الضعف ونقاء الترخيص لصور Docker | + التكامل مع كلير | - | - |
| نهج أمان قابل للتكوين لاستخدام مكتبات مفتوحة المصدر | + | - | - |
| القدرة على مسح مستودعات مفتوحة المصدر للمكونات الضعيفة | + RubyGems و Maven و NPM و Nuget و Pypi و Conan و Bower و Conda و Go و p2 و R و Yum و Helm و Docker و CocoaPods و Git LFS | - | + Hex ، RubyGems ، Maven ، NPM ، Nuget ، Pypi |
| توافر مجموعة بحثية متخصصة | + | - | - |
| حلقة العمل المغلقة | + | + | + |
| استخدام قواعد بيانات الطرف الثالث | + DB Sonatype مغلق | + Sonatype OSS ، NPM Public Advisors | + Sonatype OSS ، NPM Public Advisors ، RetireJS ، VulnDB ، دعم قاعدة البيانات الخاصة به من نقاط الضعف |
| القدرة على تصفية المكونات مفتوحة المصدر عند محاولة التحميل إلى حلقة تطوير وفقًا للسياسات المكونة | + | - | - |
| توصيات لإصلاح الثغرات الأمنية ، وتوافر روابط الإصلاح | + | + - (يعتمد على الوصف في قواعد البيانات العامة) | + - (يعتمد على الوصف في قواعد البيانات العامة) |
| ترتيب الثغرات المكتشفة حسب الخطورة | + | + | + |
| نموذج الوصول القائم على الدور | + | - | + |
| دعم CLI | + | + | + - (لـ CycloneDX فقط) |
| اختيار / فرز نقاط الضعف وفقًا لمعايير محددة | + | - | + |
| لوحة القيادة حسب حالة التطبيق | + | - | + |
| توليد التقارير بصيغة PDF | + | - | - |
| إنشاء التقارير بتنسيق JSON \ CSV | + | + | - |
| دعم اللغة الروسية | - | - | - |
فرص الاندماج
| دمج | Nexus IQ | فحص التبعية | مسار التبعية |
|---|---|---|---|
| التكامل مع LDAP / Active Directory | + | - | + |
| التكامل مع نظام التكامل المستمر من الخيزران | + | - | - |
| التكامل مع نظام التكامل المستمر TeamCity | + | - | - |
| التكامل مع نظام التكامل المستمر GitLab | + | + - (كمكوِّن إضافي لـ GitLab) | + |
| التكامل مع نظام التكامل المستمر جنكينز | + | + | + |
| توافر المكونات الإضافية لـ IDE | + IntelliJ و Eclipse و Visual Studio | - | - |
| دعم التكامل المخصص عبر خدمات الويب للأداة (API) | + | - | + |
فحص التبعية
البداية الأولى
لنقم بتشغيل Dependency Check على تطبيق DVJA ضعيف بشكل متعمد .
للقيام بذلك ، سوف نستخدم برنامج Dependency Check Maven Plugin :
mvn org.owasp:dependency-check-maven:check
نتيجة لذلك ، سوف تظهر تبعية-check-report.html في الدليل الهدف.
لنفتح الملف. بعد المعلومات الموجزة حول العدد الإجمالي للثغرات الأمنية ، يمكننا رؤية معلومات حول نقاط الضعف بمستوى عالٍ من الخطورة والثقة ، تشير إلى الحزمة ، CPE ، رقم CVE.
يتبع ذلك معلومات أكثر تفصيلاً ، لا سيما ما استند إليه الدليل ، أي قائمة مواد معينة.
يأتي بعد ذلك وصف CPE و PURL و CVE. بالمناسبة ، لم يتم إرفاق توصيات الإصلاح بسبب غيابها في قاعدة بيانات NVD.
لمراجعة نتائج الفحص بشكل منهجي ، يمكنك تكوين Nginx مع الحد الأدنى من الإعدادات ، أو إرسال العيوب الناتجة إلى نظام إدارة العيوب الذي يدعم موصلات التحقق من التبعية. على سبيل المثال ، Defect Dojo.
مسار التبعية
التركيب
يعد Dependency Track ، بدوره ، نظامًا أساسيًا على الويب به مخططات عرض ، لذلك لا توجد مشكلة حادة في تخزين العيوب في حل جهة خارجية.
هناك البرامج النصية التالية المدعومة للتثبيت: Docker ، WAR ، Executable WAR.
البداية الأولى
انتقل إلى عنوان URL للخدمة قيد التشغيل. ندخل من خلال admin / admin ، ونغير اسم المستخدم وكلمة المرور ، ثم نصل إلى لوحة التحكم الرئيسية. الشيء التالي الذي سنفعله هو إنشاء مشروع لتطبيق اختبار Java في الصفحة الرئيسية / المشاريع → إنشاء مشروع . لنأخذ DVJA كمثال.
نظرًا لأن مسار التبعية لا يمكنه قبول قائمة مكونات الصنف إلا كمدخلات ، يجب استرداد قائمة مكونات الصنف. استخدام دعونا في CycloneDX مخضرم البرنامج المساعد :
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
نحصل على bom.xml ونقوم بتحميل الملف في المشروع الذي تم إنشاؤه DVJA → التبعيات → تحميل BOM .
دعنا ننتقل إلى الإدارة ← المحللات. نحن نتفهم أنه لدينا فقط محلل داخلي ممكّن ، بما في ذلك NVD. سنقوم أيضًا بتوصيل مؤشر Sonatype OSS.
وبالتالي ، سوف نحصل على الصورة التالية لمشروعنا:
أيضًا في القائمة ، يمكنك العثور على ثغرة واحدة تنطبق على Sonatype OSS:
خيبة الأمل الرئيسية هي أن Dependency Track لم يعد يقبل تقارير Dependency Check xml. كانت آخر الإصدارات المدعومة من تكامل Dependency Check 1.0.0 - 4.0.2 ، بينما اختبرت 5.3.2.
إليك مقطع فيديو ( والآن ) عندما كان لا يزال ممكنًا.
Nexus IQ
البداية الأولى
يتم تثبيت Nexus IQ من أرشيفات التوثيق ، لكننا قمنا بتجميع صورة Docker لهذا الغرض.
بعد تسجيل الدخول إلى وحدة التحكم ، تحتاج إلى إنشاء منظمة وتطبيق.
كما ترى ، يعد الإعداد في حالة معدل الذكاء أكثر تعقيدًا بعض الشيء ، لأننا نحتاج أيضًا إلى إنشاء سياسات قابلة للتطبيق على "المراحل" المختلفة (التطوير ، والبناء ، والمسرح ، والإصدار). يعد هذا ضروريًا لمنع المكونات الضعيفة أثناء تحركها على طول خط الأنابيب بالقرب من المنتج ، أو حظرها بمجرد دخولها إلى Nexus Repo عند تنزيلها بواسطة المطورين.
لتشعر بالفرق بين المصدر المفتوح والمؤسسة ، دعنا نجري نفس الفحص من خلال Nexus IQ بنفس الطريقة من خلال المكون الإضافي Maven ، بعد أن أنشأنا مسبقًا تطبيق اختبار في واجهة NexusIQ
dvja-test-and-compare:
mvn com.sonatype.clm:clm-maven-plugin:evaluate -Dclm.applicationId=dvja-test-and-compare -Dclm.serverUrl=<NEXUSIQIP> -Dclm.username=<USERNAME> -Dclm.password=<PASSWORD>
اتبع عنوان URL للتقرير الذي تم إنشاؤه في واجهة الويب الخاصة بـ IQ:
هنا يمكنك رؤية جميع انتهاكات السياسة بمستويات مختلفة من الأهمية (من المعلومات إلى الأمان الحرجة). يعني الحرف D الموجود بجوار المكون أن المكون هو تبعية مباشرة ، ويعني الحرف T الموجود بجوار المكون أن المكون تبعية انتقالية ، أي أنه متعد.
بالمناسبة ، أفاد تقرير Snyk's State of Open Source Security لعام 2020 أن أكثر من 70٪ من الثغرات الأمنية مفتوحة المصدر الموجودة في Node.js و Java و Ruby هي في تبعيات متعدية.
إذا فتحنا أحد انتهاكات سياسة Nexus IQ ، فيمكننا رؤية وصف المكون ، بالإضافة إلى مخطط الإصدار ، الذي يعرض موقع الإصدار الحالي على المخطط الزمني ، وكذلك في أي نقطة لم تعد الثغرة الأمنية عرضة للخطر. يوضح ارتفاع الشمعدانات على الرسم البياني مدى شعبية هذا المكون.
إذا انتقلت إلى قسم الثغرات الأمنية وكشفت عن CVE ، فيمكنك قراءة وصف لهذه الثغرة الأمنية ، وتوصيات للتخلص منها ، بالإضافة إلى سبب انتهاك هذا المكون ، أي وجود فئة
DiskFileitem.class.
دعنا نلخص فقط مكونات Java التابعة لجهات خارجية ، مع إزالة مكونات js. بين قوسين ، سوف نشير إلى عدد تلك الثغرات الأمنية التي تم العثور عليها خارج NVD.
إجمالي نسبة الذكاء في Nexus:
- التبعيات الممسوحة ضوئيًا: 62
- التبعيات المستضعفة: 16
- تم العثور على ثغرات أمنية: 42 (8 سوناتيب ديسيبل)
فحص التبعية الإجمالية:
- التبعيات الممسوحة ضوئيًا: 47
- التبعيات المستضعفة: 13
- تم العثور على ثغرات أمنية: 91 (14 sonatype oss)
إجمالي مسار التبعية:
- التبعيات الممسوحة ضوئيًا: 59
- التبعيات المستضعفة: 10
- تم العثور على نقاط ضعف: 51 (1 sonatype Ooss)
في الخطوات التالية ، سنقوم بتحليل النتائج ومعرفة أي من هذه الثغرات هو عيب حقيقي وأيها إيجابي كاذب.
تنصل
هذه المراجعة ليست حقيقة لا يمكن إنكارها. لم يكن للمؤلف هدف لتمييز أداة منفصلة عن الآخرين. كان الهدف من المراجعة إظهار كيفية عمل أدوات SCA وكيفية التحقق من نتائجها.
مقارنة النتائج
الشروط:
إيجابية كاذبة للثغرات الأمنية في مكونات الطرف الثالث هي:
- عدم تطابق CVE مع المكون المحدد
- , struts2, struts-tiles, , false positive
- CVE
- , python > 3.5 2.7 — false positive, 3.x
- CVE
- , SCA CVE, RCE, SCA CVE, Cisco, RCE. false positive.
- على سبيل المثال ، تم العثور على مكافحة التطرف العنيف في مكون ربيع الويب ، وبعد ذلك تشير SCA إلى نفس مكافحة التطرف العنيف في المكونات الأخرى لإطار الربيع ، في حين أن مكافحة التطرف العنيف لا علاقة لها بالمكونات الأخرى. في هذه الحالة ، ستكون موجبة كاذبة.
تم اختيار مشروع المصدر المفتوح DVJA ليكون موضوع البحث. اشتملت الدراسة على مكونات جافا فقط (بدون js).
نتائج موجزة
دعنا ننتقل مباشرة إلى نتيجة المراجعة اليدوية للثغرات الأمنية المحددة. يمكن العثور على التقرير الكامل لكل CVE في الملحق.
نتائج موجزة لجميع نقاط الضعف:
| معامل | Nexus IQ | فحص التبعية | مسار التبعية |
|---|---|---|---|
| تحديد إجمالي نقاط الضعف | 42 | 91 | 51 |
| تم اكتشاف ثغرات أمنية بشكل غير صحيح (إيجابية كاذبة) | 2 (4.76٪) | 62 (68.13٪) | 29 (56.86٪) |
| لم يتم العثور على ثغرات أمنية ذات صلة (سلبية كاذبة) | عشرة | 20 | 27 |
النتائج الموجزة حسب المكون:
| معامل | Nexus IQ | فحص التبعية | مسار التبعية |
|---|---|---|---|
| تم تحديد إجمالي المكونات | 62 | 47 | 59 |
| مجموع المكونات الضعيفة | السادس عشر | ثلاثة عشر | عشرة |
| تم تحديد المكونات الضعيفة بشكل غير صحيح (إيجابية كاذبة) | 1 | خمسة | 0 |
| تم تحديد المكونات الضعيفة بشكل غير صحيح (إيجابية كاذبة) | 0 | 6 | 6 |
دعونا نبني الرسوم البيانية المرئية لتقييم نسبة الإيجابية الزائفة والسلبية الزائفة إلى إجمالي عدد نقاط الضعف. يتم تمييز المكونات أفقيًا ، ويتم تمييز الثغرات التي تم تحديدها فيها عموديًا.
في المقابل ، أجرى فريق Sonatype دراسة مماثلة لاختبار 1،531 مكونًا باستخدام OWASP Dependency Check. كما نرى ، فإن نسبة الضوضاء إلى المشغلات الصحيحة يمكن مقارنتها بنتائجنا.
المصدر: www.sonatype.com/why-precision-matters-ebook
دعونا نلقي نظرة على بعض CVEs من نتائج الفحص لدينا لفهم سبب هذه النتائج.
المزيد من التفاصيل
# 1
دعونا نلقي نظرة على بعض النقاط المثيرة للاهتمام في Sonatype Nexus IQ أولاً.
يشير Nexus IQ إلى مشكلة إلغاء التسلسل مع القدرة على تنفيذ RCE في Spring Framework عدة مرات. CVE-2016-1000027 في spring-web: 3.0.5 لأول مرة ، و CVE-2011-2894 في سياق الربيع: 3.0.5 ونواة الربيع: 3.0.5. في البداية ، يبدو أن هناك ازدواجية في نقاط الضعف عبر العديد من مكافحة التطرف العنيف. إذا نظرت إلى CVE-2016-1000027 و CVE-2011-2894 في قاعدة بيانات NVD ، فيبدو أن كل شيء واضح
| مكون | عالي التأثر |
|---|---|
| سبرينج ويب: 3.0.5 | CVE-2016-1000027 |
| سياق الربيع: 3.0.5 | CVE-2011-2894 |
| نواة الربيع: 3.0.5 | CVE-2011-2894 |
وصف CVE-2011-2894 من NVD :
وصف CVE-2016-1000027 من NVD :
CVE-2011-2894 نفسها مشهورة جدًا. صنف تقرير المصدر الأبيض لعام 2011 هذه التطرف العنيف على أنها من أكثر الحالات التي يتم مواجهتها بشكل متكرر. أوصاف CVE-2016-100027 ، من حيث المبدأ ، قليلة في NVD ، ويبدو أنها قابلة للتطبيق فقط لـ Spring Framework 4.1.4. ألق نظرة على المرجع وهنا يصبح أكثر أو أقل وضوحًا. نحن نفهم من مقالة
RemoteInvocationSerializingExporter Tenable أنه بالإضافة إلى الثغرة الأمنية في CVE-2011-2894 ، تمت ملاحظة الثغرة الأمنية في HttpInvokerServiceExporter. هذا ما يخبرنا به Nexus IQ:
ومع ذلك ، لا يوجد شيء مثل هذا في NVD ، ولهذا السبب يتلقى فحص التبعية ومسار التبعية سلبية خاطئة.
أيضًا ، من وصف CVE-2011-2894 ، يمكنك أن تفهم أن الثغرة موجودة بالفعل في سياق الربيع: 3.0.5 والربيع الأساسي: 3.0.5. يمكن العثور على تأكيد لهذا في المقالة من الشخص الذي وجد هذه الثغرة الأمنية.
# 2
| مكون | عالي التأثر | نتيجة |
|---|---|---|
| 2-النواة: 2.3.30 | CVE-2016-4003 | خاطئة |
إذا قمنا بدراسة الثغرة الأمنية CVE-2016-4003 ، فسوف نفهم أنه تم إصلاحها في الإصدار 2.3.28 ، ومع ذلك فإن Nexus IQ يعلمنا بذلك. هناك ملاحظة في وصف الثغرة الأمنية:
أي أن الثغرة موجودة فقط بالاقتران مع نسخة قديمة من JRE ، والتي قرروا تحذيرنا بشأنها. ومع ذلك ، فإننا نعتبر هذا خطأ إيجابيًا ، على الرغم من أنه ليس الأسوأ.
رقم 3
| مكون | عالي التأثر | نتيجة |
|---|---|---|
| xwork-core: 2.3.30 | CVE-2017-9804 | صحيح |
| xwork-core: 2.3.30 | CVE-2017-7672 | خاطئة |
إذا نظرنا إلى أوصاف CVE-2017-9804 و CVE-2017-7672 ، فسوف نفهم أن المشكلة هي
URLValidator class، وتتبع CVE-2017-9804 من CVE-2017-7672. لا يحمل وجود الثغرة الأمنية الثانية أي حمولة ، باستثناء أن شدتها قد نمت إلى عالية ، لذلك يمكن اعتبار ذلك ضوضاء غير ضرورية.
بشكل عام ، لم يتم العثور على إيجابيات خاطئة أخرى لـ Nexus IQ.
# 4
هناك العديد من الأشياء التي تميز معدل الذكاء عن القرارات الأخرى.
| مكون | عالي التأثر | نتيجة |
|---|---|---|
| سبرينج ويب: 3.0.5 | CVE-2020-5398 | صحيح |
تقول CVE في NVD إنها قابلة للتطبيق فقط للإصدارات 5.2.x حتى 5.2.3 و 5.1.x حتى 5.1.13 والإصدارات 5.0.x حتى 5.0.16 ، ومع ذلك ، إذا نظرنا إلى وصف CVE في Nexus IQ ، سنرى ما يلي:
إشعار إرشادي للانحراف: اكتشف فريق البحث الأمني في Sonatype أن هذه الثغرة الأمنية قد تم تقديمها في الإصدار 3.0.2.RELEASE وليس 5.0.x كما هو مذكور في الاستشارة.
يتبع ذلك إثبات PoC لهذه الثغرة الأمنية ، والتي تفيد بوجودها في الإصدار 3.0.5.
يتم إرسال سلبية كاذبة إلى التحقق من التبعية ومسار التبعية.
# 5
لنلقِ نظرة على النتائج الإيجابية الخاطئة لفحص التبعية ومسار التبعية.
تبرز عملية التحقق من التبعية من حيث أنها تعكس تحديات التطرف العنيف التي تنطبق على إطار العمل بأكمله في NVD على تلك المكونات التي لا تنطبق عليها هذه التعقيدات. ينطبق هذا على CVE-2012-0394 ، CVE-2013-2115 ، CVE -porate114 ، CVE-2015-0899 ، CVE-2015-2992 ، CVE-2016-1181 ، CVE-2016-1182 ، والتي "تم تثبيتها" إلى الدعامات - تاجليب: 1.3.8 و الدعامات - البلاط - 1.3.8. لا علاقة لهذه المكونات بما هو موصوف في CVE - معالجة الطلب والتحقق من صحة الصفحة وما إلى ذلك. ويرجع ذلك إلى حقيقة أن العامل المشترك بين هذه مكافحة التطرف العنيف والمكونات هو إطار العمل فقط ، ولهذا السبب اعتبرته أداة التحقق من التبعية ثغرة أمنية.
نفس الوضع مع spring-tx: 3.0.5 ، وحالة مماثلة مع الدعامات الأساسية: 1.3.8. بالنسبة لـ struts-core ، وجد فحص التبعية ومسار التبعية الكثير من نقاط الضعف التي يمكن تطبيقها بالفعل على struts2-core ، والتي تعد في الأساس إطار عمل منفصل. في هذه الحالة ، فهم Nexus IQ الصورة بشكل صحيح وفي تلك CVEs التي أصدرها ، أشار إلى أن الدعامات الأساسية انتهت من عمرها وأنه كان من الضروري الانتقال إلى struts2-core.
# 6
في بعض الحالات ، من غير العدل تفسير خطأ صريح في فحص التبعية وتتبع التبعية. على وجه الخصوص CVE-2013-4152 ، CVE-2013-6429 ، CVE-2013-6430 ، CVE-2013-7315 ، CVE-2014-0054 ، CVE-2014-0225 ، CVE -25 ، وهي فحص التبعية ومسار التبعية يشير إلى Spring-core: 3.0.5 تشير في الواقع إلى Spring-web: 3.0.5. في الوقت نفسه ، تم العثور على بعض من هذه التطرف العنيف ، ومع ذلك ، حددها معدل الذكاء لمكون آخر. نظرًا لأن هذه الثغرات الأمنية لم يتم العثور عليها في Spring-core ، فلا يمكن القول إنها ليست في إطار العمل ، من حيث المبدأ ، وأن أدوات المصدر المفتوح أشارت بشكل صحيح إلى هذه الثغرات (لقد فاتتهم قليلاً).
الاستنتاجات
كما نرى ، فإن تحديد موثوقية الثغرات الأمنية التي تم تحديدها من خلال المراجعة اليدوية لا يعطي نتائج واضحة ، مما يسبب مشاكل مثيرة للجدل. النتائج هي أن حل Nexus IQ لديه أقل معدل موجب كاذب وأعلى دقة.
بادئ ذي بدء ، يرجع هذا إلى حقيقة أن فريق Sonatype قد وسع الوصف لكل ثغرة من ثغرات CVE من NVD في قواعد بياناتهم ، مع تحديد فئة أو وظيفة الثغرة الأمنية لإصدار معين من المكون ، وإجراء بحث إضافي (على سبيل المثال ، التحقق من نقاط الضعف على أقدم إصدارات البرامج).
تلعب نقاط الضعف تلك التي لم يتم تضمينها في NVD تأثيرًا مهمًا على النتائج ، ولكنها مع ذلك موجودة في قاعدة بيانات Sonatype بعلامة SONATYPE. وفقًا لحالة الثغرات الأمنية مفتوحة المصدر لعام 202045٪ من الثغرات الأمنية مفتوحة المصدر لم يتم إبلاغ NVD عنها. وفقًا لقاعدة بيانات WhiteSource ، يتم نشر 29٪ فقط من جميع الثغرات الأمنية مفتوحة المصدر التي تم الإبلاغ عنها خارج NVD ، وهذا هو سبب أهمية البحث في مكان آخر عن الثغرات أيضًا.
نتيجة لذلك ، يُنتج فحص التبعية الكثير من الضوضاء ، ويفقد بعض المكونات الضعيفة. تنتج Dependency Track ضوضاء أقل وتكشف عن عدد كبير من المكونات ، والتي لا تؤذي العين في واجهة الويب بصريًا.
ومع ذلك ، تُظهر الممارسة أن المصدر المفتوح هو الذي يجب أن يكون الخطوات الأولى على الطريق لنضج DevSecOps. أول شيء يجب التفكير فيه من أجل تضمين SCA في التنمية هو العمليات ، أي التفكير مع الإدارة والإدارات ذات الصلة حول الشكل الذي يجب أن تبدو عليه العمليات المثالية في مؤسستهم. قد يتضح أنه بالنسبة لمؤسستك ، في البداية ، سيغطي فحص التبعية أو تتبع التبعية جميع احتياجات العمل ، وستكون حلول المؤسسات استمرارًا منطقيًا بسبب التعقيد المتزايد للتطبيقات المطورة.
الملحق أ. النتائج المطبقة على المكونات
:
- High —
- Medium —
- TRUE — (True positive issue)
- FALSE — (False positive issue)
| Nexus IQ | Dependency Check | Dependency Track | ||
|---|---|---|---|---|
| dom4j: 1.6.1 | High | High | High | TRUE |
| log4j-core: 2.3 | High | High | High | TRUE |
| log4j: 1.2.14 | High | High | - | TRUE |
| commons-collections:3.1 | High | High | High | TRUE |
| commons-fileupload:1.3.2 | High | High | High | TRUE |
| commons-beanutils:1.7.0 | High | High | High | TRUE |
| commons-codec:1:10 | Medium | - | - | TRUE |
| mysql-connector-java:5.1.42 | High | High | High | TRUE |
| spring-expression:3.0.5 | High |
|
TRUE | |
| spring-web:3.0.5 | High | High | TRUE | |
| spring-context:3.0.5 | Medium | - | TRUE | |
| spring-core:3.0.5 | Medium | High | High | TRUE |
| struts2-config-browser-plugin:2.3.30 | Medium | - | - | TRUE |
| spring-tx:3.0.5 | - | High | - | FALSE |
| struts-core:1.3.8 | High | High | High | TRUE |
| xwork-core: 2.3.30 | High | - | - | TRUE |
| struts2-core: 2.3.30 | High | High | High | TRUE |
| struts-taglib:1.3.8 | - | High | - | FALSE |
| struts-tiles-1.3.8 | - | High | - | FALSE |
الملحق ب. نتائج الثغرات الأمنية
:
- High —
- Medium —
- TRUE — (True positive issue)
- FALSE — (False positive issue)
| Nexus IQ | Dependency Check | Dependency Track | Severity | |||
|---|---|---|---|---|---|---|
| dom4j: 1.6.1 | CVE-2018-1000632 | CVE-2018-1000632 | CVE-2018-1000632 | High | TRUE | |
| CVE-2020-10683 | CVE-2020-10683 | CVE-2020-10683 | High | TRUE | ||
| log4j-core: 2.3 | CVE-2017-5645 | CVE-2017-5645 | CVE-2017-5645 | High | TRUE | |
| CVE-2020-9488 | CVE-2020-9488 | CVE-2020-9488 | Low | TRUE | ||
| log4j: 1.2.14 | CVE-2019-17571 | CVE-2019-17571 | - | High | TRUE | |
| - | CVE-2020-9488 | - | Low | TRUE | ||
| SONATYPE-2010-0053 | - | - | High | TRUE | ||
| commons-collections:3.1 | - | CVE-2015-6420 | CVE-2015-6420 | High | FALSE | RCE(OSSINDEX)
|
| - | CVE-2017-15708 | CVE-2017-15708 | High | FALSE | RCE(OSSINDEX)
|
|
| SONATYPE-2015-0002 | RCE (OSSINDEX) | RCE(OSSINDEX) | High | TRUE | ||
| commons-fileupload:1.3.2 | CVE-2016-1000031 | CVE-2016-1000031 | CVE-2016-1000031 | High | TRUE | |
| SONATYPE-2014-0173 | - | - | Medium | TRUE | ||
| commons-beanutils:1.7.0 | CVE-2014-0114 | CVE-2014-0114 | CVE-2014-0114 | High | TRUE | |
| - | CVE-2019-10086 | CVE-2019-10086 | High | FALSE | 1.9.2+
|
|
| commons-codec:1:10 | SONATYPE-2012-0050 | - | - | Medium | TRUE | |
| mysql-connector-java:5.1.42 | CVE-2018-3258 | CVE-2018-3258 | CVE-2018-3258 | High | TRUE | |
| CVE-2019-2692 | CVE-2019-2692 | - | Medium | TRUE | ||
| - | CVE-2020-2875 | - | Medium | FALSE | CVE-2019-2692, c «attacks may significantly impact additional products»
|
|
| - | CVE-2017-15945 | - | High | FALSE | mysql-connector-java
|
|
| - | CVE-2020-2933 | - | Low | FALSE | CVE-2020-2934
|
|
| CVE-2020-2934 | CVE-2020-2934 | - | Medium | TRUE | ||
| spring-expression:3.0.5 | CVE-2018-1270 | - | High | TRUE | ||
| CVE-2018-1257 | - | - | Medium | TRUE | ||
| spring-web:3.0.5 | CVE-2016-1000027 | - | High | TRUE | ||
| CVE-2014-0225 | - | CVE-2014-0225 | High | TRUE | ||
| CVE-2011-2730 | - | - | High | TRUE | ||
| - | - | CVE-2013-4152 | Medium | TRUE | ||
| CVE-2018-1272 | - | - | High | TRUE | ||
| CVE-2020-5398 | - | - | High | TRUE | IQ: «The Sonatype security research team discovered that this vulnerability was introduced in version 3.0.2.RELEASE and not 5.0.x as stated in the advisory.»
|
|
| CVE-2013-6429 | - | - | Medium | TRUE | ||
| CVE-2014-0054 | - | CVE-2014-0054 | Medium | TRUE | ||
| CVE-2013-6430 | - | - | Medium | TRUE | ||
| spring-context:3.0.5 | CVE-2011-2894 | - | Medium | TRUE | ||
| spring-core:3.0.5 | - | CVE-2011-2730 | CVE-2011-2730 | High | TRUE | |
| CVE-2011-2894 | CVE-2011-2894 | CVE-2011-2894 | Medium | TRUE | ||
| - | - | CVE-2013-4152 | Medium | FALSE | spring-web
|
|
| - | CVE-2013-4152 | - | Medium | FALSE | spring-web
|
|
| - | CVE-2013-6429 | CVE-2013-6429 | Medium | FALSE | spring-web
|
|
| - | CVE-2013-6430 | - | Medium | FALSE | spring-web
|
|
| - | CVE-2013-7315 | CVE-2013-7315 | Medium | FALSE | SPLIT CVE-2013-4152. + spring-web
|
|
| - | CVE-2014-0054 | CVE-2014-0054 | Medium | FALSE | spring-web
|
|
| - | CVE-2014-0225 | - | High | FALSE | spring-web
|
|
| - | - | CVE-2014-0225 | High | FALSE | spring-web
|
|
| - | CVE-2014-1904 | CVE-2014-1904 | Medium | FALSE | spring-web-mvc
|
|
| - | CVE-2014-3625 | CVE-2014-3625 | Medium | FALSE | spring-web-mvc
|
|
| - | CVE-2016-9878 | CVE-2016-9878 | High | FALSE | spring-web-mvc
|
|
| - | CVE-2018-1270 | CVE-2018-1270 | High | FALSE | spring-expression / spring-messages
|
|
| - | CVE-2018-1271 | CVE-2018-1271 | Medium | FALSE | spring-web-mvc
|
|
| - | CVE-2018-1272 | CVE-2018-1272 | High | TRUE | ||
| CVE-2014-3578 | CVE-2014-3578 (OSSINDEX) | CVE-2014-3578 | Medium | TRUE | ||
| SONATYPE-2015-0327 | - | - | Low | TRUE | ||
| struts2-config-browser-plugin:2.3.30 | SONATYPE-2016-0104 | - | - | Medium | TRUE | |
| spring-tx:3.0.5 | - | CVE-2011-2730 | - | High | FALSE | spring-tx
|
| - | CVE-2011-2894 | - | High | FALSE | spring-tx
|
|
| - | CVE-2013-4152 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2013-6429 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2013-6430 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2013-7315 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2014-0054 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2014-0225 | - | High | FALSE | spring-tx
|
|
| - | CVE-2014-1904 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2014-3625 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2016-9878 | - | High | FALSE | spring-tx
|
|
| - | CVE-2018-1270 | - | High | FALSE | spring-tx
|
|
| - | CVE-2018-1271 | - | Medium | FALSE | spring-tx
|
|
| - | CVE-2018-1272 | - | Medium | FALSE | spring-tx
|
|
| struts-core:1.3.8 | - | CVE-2011-5057 (OSSINDEX)
|
Medium | FASLE | Struts 2
|
|
| - | CVE-2012-0391 (OSSINDEX) | CVE-2012-0391 | High | FALSE | Struts 2
|
|
| - | CVE-2014-0094 (OSSINDEX) | CVE-2014-0094 | Medium | FALSE | Struts 2
|
|
| - | CVE-2014-0113 (OSSINDEX) | CVE-2014-0113 | High | FALSE | Struts 2
|
|
| CVE-2016-1182 | 3VE-2016-1182 | - | High | TRUE | ||
| - | - | CVE-2011-5057 | Medium | FALSE | Struts 2
|
|
| - | CVE-2012-0392 (OSSINDEX) | CVE-2012-0392 | High | FALSE | Struts 2
|
|
| - | CVE-2012-0393 (OSSINDEX) | CVE-2012-0393 | Medium | FALSE | Struts 2
|
|
| CVE-2015-0899 | CVE-2015-0899 | - | High | TRUE | ||
| - | CVE-2012-0394 | CVE-2012-0394 | Medium | FALSE | Struts 2
|
|
| - | CVE-2012-0838 (OSSINDEX) | CVE-2012-0838 | High | FALSE | Struts 2
|
|
| - | CVE-2013-1965 (OSSINDEX) | CVE-2013-1965 | High | FALSE | Struts 2
|
|
| - | CVE-2013-1966 (OSSINDEX) | CVE-2013-1966 | High | FASLE | Struts 2
|
|
| - | CVE-2013-2115 | CVE-2013-2115 | High | FASLE | Struts 2
|
|
| - | CVE-2013-2134 (OSSINDEX) | CVE-2013-2134 | High | FASLE | Struts 2
|
|
| - | CVE-2013-2135 (OSSINDEX) | CVE-2013-2135 | High | FASLE | Struts 2
|
|
| CVE-2014-0114 | CVE-2014-0114 | - | High | TRUE | ||
| - | CVE-2015-2992 | CVE-2015-2992 | Medium | FALSE | Struts 2
|
|
| - | CVE-2016-0785 (OSSINDEX) | CVE-2016-0785 | High | FALSE | Struts 2
|
|
| CVE-2016-1181 | CVE-2016-1181 | - | High | TRUE | ||
| - | CVE-2016-4003 (OSSINDEX) | CVE-2016-4003 | High | FALSE | Struts 2
|
|
| xwork-core:2.3.30 | CVE-2017-9804 | - | - | High | TRUE | |
| SONATYPE-2017-0173 | - | - | High | TRUE | ||
| CVE-2017-7672 | - | - | High | FALSE | CVE-2017-9804
|
|
| SONATYPE-2016-0127 | - | - | High | TRUE | ||
| struts2-core:2.3.30 | - | CVE-2016-6795 | CVE-2016-6795 | High | TRUE | |
| - | CVE-2017-9787 | CVE-2017-9787 | High | TRUE | ||
| - | CVE-2017-9791 | CVE-2017-9791 | High | TRUE | ||
| - | CVE-2017-9793 | - | High | FALSE | CVE-2018-1327
|
|
| - | CVE-2017-9804 | - | High | TRUE | ||
| - | CVE-2017-9805 | CVE-2017-9805 | High | TRUE | ||
| CVE-2016-4003 | - | - | Medium | FALSE | Apache Struts 2.x 2.3.28, 2.3.30. , , CVE Struts 2, JRE 1.7 . , FALSE
|
|
| - | CVE-2018-1327 | CVE-2018-1327 | High | TRUE | ||
| CVE-2017-5638 | CVE-2017-5638 | CVE-2017-5638 | High | TRUE | , Equifax 2017
|
|
| CVE-2017-12611 | CVE-2017-12611 | - | High | TRUE | ||
| CVE-2018-11776 | CVE-2018-11776 | CVE-2018-11776 | High | TRUE | ||
| struts-taglib:1.3.8 | - | CVE-2012-0394 | - | Medium | FALSE | struts2-core |
| - | CVE-2013-2115 | - | High | FALSE | struts2-core | |
| - | CVE-2014-0114 | - | High | FALSE | commons-beanutils
|
|
| - | CVE-2015-0899 | - | High | FALSE | taglib
|
|
| - | CVE-2015-2992 | - | Medium | FALSE | struts2-core
|
|
| - | CVE-2016-1181 | - | High | FALSE | taglib
|
|
| - | CVE-2016-1182 | - | High | FALSE | taglib
|
|
| struts-tiles-1.3.8 | - | CVE-2012-0394 | - | Medium | FALSE | struts2-core |
| - | CVE-2013-2115 | - | High | FALSE | struts2-core | |
| - | CVE-2014-0114 | - | High | FALSE | commons-beanutils
|
|
| - | CVE-2015-0899 | - | High | FALSE | tiles
|
|
| - | CVE-2015-2992 | - | Medium | FALSE | struts2-core | |
| - | CVE-2016-1181 | - | High | FALSE | taglib
|
|
| - | CVE-2016-1182 | - | High | FALSE | taglib
|