DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Важноста на анализата на софтверските компоненти од трети страни (Software Composition Analysis - SCA) во процесот на развој расте со објавувањето на годишните извештаи за ранливостите на библиотеките со отворен код, кои се објавени од Synopsys, Sonatype, Snyk и White Source . Според извештајот Состојба на безбедносни ранливости со отворен код 2020 година бројот на идентификувани ранливости со отворен код во 2019 година се зголеми за речиси 1.5 пати во споредба со претходната година, додека компонентите со отворен код се користат од 60% до 80% од проектите. На независна основа, SCA процесите се посебна практика на OWASP SAMM и BSIMM како показател за зрелост, а во првата половина на 2020 година, OWASP го објави новиот стандард за верификација на компоненти на софтвер OWASP (SCVS), обезбедувајќи најдобри практики за верификација на трето партиски компоненти во синџирот на снабдување BY.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Еден од најилустративните случаи се случи со Equifax во мај 2017 година. Непознати напаѓачи добиле информации за 143 милиони Американци, вклучувајќи целосни имиња, адреси, броеви за социјално осигурување и возачки дозволи. Во 209 случаи, документите вклучувале и информации за банкарските картички на жртвите. Ова истекување се случи како резултат на искористување на критична ранливост во Apache Struts 000 (CVE-2-2017), додека поправката беше објавена уште во март 5638 година. Компанијата имаше два месеци да го инсталира ажурирањето, но никој не се замара со тоа.

Оваа статија ќе го разгледа прашањето за избор на алатка за спроведување на SCA од гледна точка на квалитетот на резултатите од анализата. Ќе биде обезбедена и функционална споредба на алатките. Процесот на интегрирање во CI/CD и можностите за интеграција ќе биде оставен за следните публикации. Широк спектар на алатки беше претставен од OWASP на вашиот сајт, но во тековниот преглед ќе ја допреме само најпопуларната алатка со отворен код Проверка на зависноста, малку помалку познатата платформа со отворен код Dependency Track и Enterprise решението Sonatype Nexus IQ. Исто така, ќе разбереме како функционираат овие решенија и ќе ги споредиме добиените резултати за лажни позитиви.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Принцип на работа

Проверка на зависност е алатка (CLI, maven, jenkins модул, мравка) која ги анализира проектните датотеки, собира делови од информации за зависности (име на пакет, група, наслов на спецификација, верзија...), гради линија CPE (Common Platform Enumeration) , 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

  • Шема: Секогаш ќе има „pkg“ што покажува дека ова е URL на пакетот (Задолжително)
  • тип: „Типот“ на пакувањето или „протоколот“ на пакетот, како што се maven, npm, nuget, gem, pypi итн. (Задолжително)
  • Простор за имиња: Некој префикс за име, како што е ID на групата Maven, сопственик на слика на Docker, корисник на GitHub или организација. Изборно и зависи од типот.
  • име: Име на пакетот (задолжително)
  • Верзија: Верзија на пакет
  • Квалификациите: Дополнителни квалификациски податоци за пакетот, како што се ОС, архитектура, дистрибуција итн. Изборни и специфични за типот.
  • Потпат: Дополнителна патека во пакетот во однос на коренот на пакетот

На пример:

pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]

Песна за зависност — веб-платформа во просторија која прифаќа готови генерирани Бил на материјали (BOM). CycloneDX и SPDX, односно готови спецификации за постоечките зависности. Ова е XML-датотека која ги опишува зависностите - име, хеш, URL на пакетот, издавач, лиценца. Следно, Dependency Track го анализира BOM, ги разгледува CVE достапните за идентификуваните зависности од базата на податоци за ранливост (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/[email protected]</purl>
    </component>
      <!-- More components here -->
  </components>
</bom>

BOM може да се користи не само како влезни параметри за Dependency Track, туку и за попис на софтверски компоненти во синџирот на снабдување, на пример, за обезбедување софтвер на клиент. Во 2014 година дури беше предложен закон во САД „Закон за управување со сајбер снабдувачки синџири и транспарентност од 2014 година“, кој наведе дека при купување софтвер, секоја држава. Институцијата мора да побара БОМ за да се спречи употребата на ранливи компоненти, но актот сè уште не стапил во сила.

Враќајќи се на SCA, Dependency Track има готови интеграции со платформи за известување како Slack, системи за управување со ранливост како Kenna Security. Исто така, вреди да се каже дека Dependency Track, меѓу другото, ги идентификува застарените верзии на пакетите и обезбедува информации за лиценците (поради поддршката за SPDX).

Ако зборуваме конкретно за квалитетот на SCA, тогаш постои фундаментална разлика.

Dependency Track не го прифаќа проектот како влез, туку BOM. Ова значи дека ако сакаме да го тестираме проектот, прво треба да генерираме bom.xml, на пример користејќи CycloneDX. Така, Dependency Track е директно зависна од CycloneDX. Во исто време, овозможува прилагодување. Ова го напиша тимот на ОЗОН Модул CycloneDX за склопување BOM-датотеки за Golang проекти за понатамошно скенирање преку Dependency Track.

Nexus IQ е комерцијално SCA решение од Sonatype, кое е дел од екосистемот Sonatype, кој го вклучува и Nexus Repository Manager. Nexus IQ може да ги прифати како влезни и воените архиви (за java проекти) преку веб-интерфејсот или API и BOM, ако вашата организација сè уште не се префрлила од CycloneDX на ново решение. За разлика од решенијата со отворен код, IQ се однесува не само на CP/PURL на идентификуваната компонента и соодветната ранливост во базата на податоци, туку го зема предвид и сопственото истражување, на пример, името на ранливата функција или класа. За механизмите на коефициент на интелигенција ќе се дискутира подоцна во анализата на резултатите.

Ајде да резимираме некои од функционалните карактеристики, а исто така да ги разгледаме поддржаните јазици за анализа:

Јазик
Nexus IQ
Проверка на зависност
Песна за зависност

Јава
+
+
+

C / C ++
+
+
-

C#
+
+
-

.Net
+
+
+

Ерланг
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Пајтон
+
+
+

Руби
+
+
+

Perl
-
-
-

Скала
+
+
+

Цел В
+
+
-

Свифт
+
+
-

R
+
-
-

Go
+
+
+

Функционалност

Функционалност
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

Достапност на специјализирана истражувачка група
+
-
-

Операција со затворена јамка
+
+
+

Користење на бази на податоци од трети страни
+ Затворена база на податоци Sonatype
+ Sonatype OSS, НПМ јавни советници
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, поддршка за сопствената база на податоци за ранливост

Способност за филтрирање на компоненти со отворен код кога се обидувате да се вчитаат во развојната јамка според конфигурираните политики
+
-
-

Препораки за поправање на пропусти, достапност на линкови до поправки
+
+- (зависи од описот во јавните бази на податоци)
+- (зависи од описот во јавните бази на податоци)

Рангирање на откриените ранливости по сериозност
+
+
+

Модел за пристап заснован на улоги
+
-
+

CLI поддршка
+
+
+- (само за CycloneDX)

Земање примероци/сортирање на ранливости според дефинирани критериуми
+
-
+

Контролна табла според статусот на апликацијата
+
-
+

Генерирање извештаи во PDF формат
+
-
-

Генерирање извештаи во JSONCSV формат
+
+
-

Поддршка на руски јазик
-
-
-

Способности за интеграција

Интеграција
Nexus IQ
Проверка на зависност
Песна за зависност

Интеграција на LDAP/Active Directory
+
-
+

Интеграција со системот за континуирана интеграција Bamboo
+
-
-

Интеграција со системот за континуирана интеграција TeamCity
+
-
-

Интеграција со системот за континуирана интеграција GitLab
+
+- (како додаток за GitLab)
+

Интеграција со системот за континуирана интеграција Џенкинс
+
+
+

Достапност на приклучоци за IDE
+ IntelliJ, Eclipse, Visual Studio
-
-

Поддршка за сопствена интеграција преку веб-услуги (API) на алатката
+
-
+

Проверка на зависност

Прв почеток

Ајде да извршиме проверка на зависноста на намерно ранлива апликација ДВЈА.

За ова ќе користиме Приклучокот за проверка на зависноста Maven:

mvn org.owasp:dependency-check-maven:check

Како резултат на тоа, dependency-check-report.html ќе се појави во целниот директориум.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Ајде да ја отвориме датотеката. По збирните информации за вкупниот број на ранливости, можеме да видиме информации за ранливости со високо ниво на сериозност и доверба, означувајќи го пакетот, CPE и бројот на CVE.

Следат подетални информации, особено основата врз која е донесена одлуката (докази), односно одреден БОМ.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Следно доаѓа описот CPE, PURL и CVE. Патем, препораките за корекција не се вклучени поради нивното отсуство во базата на податоци на НВД.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

За систематски преглед на резултатите од скенирањето, можете да го конфигурирате Nginx со минимални поставки или да ги испратите добиените дефекти до систем за управување со дефекти што поддржува конектори за проверка на зависноста. На пример, Defect Dojo.

Песна за зависност

Инсталација

Dependency Track, пак, е веб-базирана платформа со графикони за прикажување, така што тука не се појавува актуелното прашање за складирање на дефекти во решение од трета страна.
Поддржани скрипти за инсталација се: Docker, WAR, Executable WAR.

Прв почеток

Одиме до URL-то на услугата што работи. Се најавуваме преку администратор/администратор, ги менуваме најавувањето и лозинката, а потоа доаѓаме до Контролната табла. Следното нешто што ќе го направиме е да создадеме проект за тест апликација во Java во Почетна/Проекти → Креирај проект . Да ја земеме DVJA како пример.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Бидејќи Dependency Track може да прифати само BOM како влез, овој BOM мора да се преземе. Ајде да ги искористиме Приклучок CycloneDX Maven:

mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom

Добиваме bom.xml и ја вчитуваме датотеката во креираниот проект DVJA → Зависности → Постави BOM.

Ајде да одиме во Администрација → Анализатори. Разбираме дека имаме овозможен само внатрешен аналитичар, кој вклучува NVD. Ајде да го поврземе и Sonatype OSS Index.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Така, ја добиваме следната слика за нашиот проект:

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Исто така, во списокот можете да најдете една ранливост применлива за Sonatype OSS:

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Главното разочарување беше што Dependency Track повеќе не прифаќа извештаи за проверка на зависност од xml. Најновите поддржани верзии на интеграцијата за проверка на зависноста беа 1.0.0 - 4.0.2, додека јас ја тестирав 5.3.2.

тука е видеотука) кога сè уште беше можно.

Nexus IQ

Прв почеток

Инсталирањето на Nexus IQ доаѓа од архивите на документација, но изградивме слика на Docker за овие цели.

Откако ќе се најавите во конзолата, треба да креирате организација и апликација.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Како што можете да видите, поставувањето во случајот со коефициентот на интелигенција е нешто покомплицирано, бидејќи ние исто така треба да креираме политики кои се применливи за различни „фази“ (dev, build, stage, release). Ова е неопходно за да се блокираат ранливите компоненти додека се движат низ гасоводот поблиску до производството или да се блокираат веднаш штом ќе влезат во 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:

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Овде можете да ги видите сите прекршувања на правилата што укажуваат на различни нивоа на значајност (од информации до критични безбедносни). Буквата D до компонентата значи дека компонентата е Direct Dependency, а буквата T до компонентата значи дека компонентата е Transitive Dependency, односно е транзитивна.

Патем, извештајот Извештај за безбедност со отворен код за 2020 година од Snyk известува дека повеќе од 70% од пропустите со отворен код откриени во Node.js, Java и Ruby се во транзитивни зависности.

Ако отвориме едно од прекршувањата на политиката на Nexus IQ, можеме да видиме опис на компонентата, како и График на верзии, кој ја прикажува локацијата на тековната верзија во временскиот график, како и во кој момент ранливоста престанува да бидете ранливи. Висината на свеќите на графиконот ја покажува популарноста на користењето на оваа компонента.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Ако отидете во делот за ранливости и го проширите CVE, можете да прочитате опис на оваа ранливост, препораки за елиминација, како и причината зошто оваа компонента е прекршена, односно присуството на класата DiskFileitem.class.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Ајде да ги сумираме само оние поврзани со компонентите на Java од трета страна, отстранувајќи ги компонентите на js. Во загради го означуваме бројот на пропусти што се пронајдени надвор од NVD.

Вкупен IQ на Nexus:

  • Скенирани зависности: 62
  • Ранливи зависности: 16
  • Пронајдени ранливости: 42 (8 сонатип db)

Проверка на вкупна зависност:

  • Скенирани зависности: 47
  • Ранливи зависности: 13
  • Пронајдени ранливости: 91 (14 сонатип oss)

Вкупна песна за зависност:

  • Скенирани зависности: 59
  • Ранливи зависности: 10
  • Пронајдени ранливости: 51 (1 сонатип oss)

Во следните чекори, ќе ги анализираме добиените резултати и ќе откриеме која од овие пропусти е вистински дефект, а која е лажна позитивна.

Одрекување од одговорност

Овој преглед не е неоспорна вистина. Авторот немал цел да истакне посебен инструмент на позадината на другите. Целта на прегледот беше да се прикажат механизмите на работа на SCA алатките и начините за проверка на нивните резултати.

Споредба на резултатите

Рокови и услови:

Лажно позитивно за ранливости на компонентите од трети страни е:

  • CVE неусогласеност со идентификуваната компонента
  • На пример, ако е идентификувана ранливост во рамката struts2, а алатката укажува на компонента од рамката struts-tiles, на која оваа ранливост не важи, тогаш ова е лажно позитивно
  • CVE несовпаѓање со идентификуваната верзија на компонентата
  • На пример, ранливоста е поврзана со верзијата на python > 3.5 и алатката ја означува верзијата 2.7 како ранлива - ова е лажно позитивно, бидејќи всушност ранливоста се однесува само на гранката на производот 3.x
  • Дупликат CVE
  • На пример, ако SCA специфицира CVE што овозможува RCE, тогаш SCA одредува CVE за истата компонента што се однесува на производите на Cisco погодени од тој RCE. Во овој случај тоа ќе биде лажно позитивно.
  • На пример, CVE беше пронајден во пролет-веб компонента, по што SCA укажува на истиот CVE во другите компоненти на Spring Framework, додека CVE нема никаква врска со другите компоненти. Во овој случај тоа ќе биде лажно позитивно.

Цел на студијата беше проектот со отворен код ДВЈА. Студијата вклучуваше само java компоненти (без js).

Збирни резултати

Ајде да одиме директно на резултатите од рачниот преглед на идентификуваните пропусти. Целосниот извештај за секој CVE може да се најде во Додатокот.

Збирни резултати за сите ранливости:

Параметар
Nexus IQ
Проверка на зависност
Песна за зависност

Вкупно идентификувани пропусти
42
91
51

Неправилно идентификувани ранливости (лажно позитивни)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Не се пронајдени релевантни пропусти (лажно негативно)
10
20
27

Збирни резултати по компоненти:

Параметар
Nexus IQ
Проверка на зависност
Песна за зависност

Вкупно идентификувани компоненти
62
47
59

Вкупно ранливи компоненти
16
13
10

Неправилно идентификувани ранливи компоненти (лажно позитивни)
1
5
0

Неправилно идентификувани ранливи компоненти (лажно позитивни)
0
6
6

Ајде да изградиме визуелни графикони за да го оцениме односот на лажно позитивни и лажно негативни со вкупниот број на ранливости. Компонентите се означени хоризонтално, а ранливостите идентификувани во нив се означени вертикално.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

За споредба, слична студија беше спроведена од тимот на Sonatype кој тестираше проект од 1531 компонента користејќи OWASP Dependency Check. Како што можеме да видиме, односот на бучавата и точните одговори е споредлив со нашите резултати.

DevSecOps: принципи на работа и споредба на SCA. Дел Еден
Извор: www.sonatype.com/why-precision-matters-ebook

Ајде да погледнеме неколку CVE од нашите резултати од скенирањето за да ја разбереме причината за овие резултати.

Повеќе

№ 1

Ајде прво да погледнеме неколку интересни точки за Sonatype Nexus IQ.

Nexus IQ укажува на проблем со десериализацијата со способноста да се изврши RCE во Spring Framework повеќе пати. CVE-2016-1000027 во пролет-веб:3.0.5 прв пат, и CVE-2011-2894 во пролет-контекст:3.0.5 и пролет-јадро:3.0.5. На почетокот, се чини дека постои дуплирање на ранливоста кај повеќе CVE. Бидејќи, ако ги погледнете 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:
DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Опис CVE-2016-1000027 од NVD:
DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Самиот CVE-2011-2894 е доста познат. Во извештајот Бел извор 2011 година овој CVE беше препознаен како еден од најчестите. Описите за CVE-2016-100027, во принцип, се малку во NVD и се чини дека се применливи само за Spring Framework 4.1.4. Ајде да погледнеме во упатување и тука сè станува повеќе или помалку јасно. Од Одржливи статии Ние разбираме дека покрај ранливоста во RemoteInvocationSerializingExporter во CVE-2011-2894, ранливоста е забележана кај HttpInvokerServiceExporter. Еве што ни кажува Nexus IQ:

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Сепак, нема вакво нешто во 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 ни ја известува. Има забелешка во описот на ранливоста:

DevSecOps: принципи на работа и споредба на SCA. Дел Еден

Односно, ранливоста постои само во врска со застарена верзија на 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

Постојат неколку работи кои го прават IQ да се издвојува од другите решенија.

Компонента
Ранливост
Резултира

пролет-веб: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

Ајде да погледнеме лажно позитивно за проверка на зависност и песна за зависност.

Проверката на зависност се издвојува по тоа што ги рефлектира оние CVE кои се однесуваат на целата рамка во NVD на оние компоненти за кои овие CVE не се применуваат. Ова се однесува на CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182 проверки, зависни ” до потпори-taglib:1.3.8 и потпори-плочки-1.3.8. Овие компоненти немаат никаква врска со она што е опишано во CVE - обработка на барања, валидација на страницата итн. Ова се должи на фактот дека она што е заедничко за овие CVE и компоненти е само рамката, па затоа Dependency Check го сметаше за ранливост.

Истата ситуација е со пружината-tx:3.0.5, а слична е и со потпорите-јадро:1.3.8. За struts-core, Dependency Check и Dependency Track пронајдоа многу пропусти кои всушност се применливи за struts2-core, што во суштина е посебна рамка. Во овој случај, Nexus IQ правилно ја разбра сликата и во CVE што ги издаде, укажа дека јадрото на потпорите дошло до крајот на животот и дека е неопходно да се префрли на Struts2-core.

№ 6

Во некои ситуации, неправедно е да се протолкува очигледна грешка за проверка на зависност и песна за зависност. Конкретно CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225 Проверка на зависност и зависност припишан на пролет-јадро:3.0.5 всушност припаѓа на пролет-веб:3.0.5. Во исто време, некои од овие CVE беа пронајдени и од Nexus IQ, меѓутоа, IQ правилно ги идентификуваше во друга компонента. Бидејќи овие пропусти не беа пронајдени во пролетното јадро, не може да се тврди дека во принцип не се во рамката и алатките со отворен код со право ги посочија овие пропусти (само малку пропуштија).

Наоди

Како што можеме да видиме, утврдувањето на веродостојноста на идентификуваните пропусти со рачен преглед не дава недвосмислени резултати, поради што се појавуваат контроверзни прашања. Резултатите се дека решението Nexus IQ има најниска стапка на лажно позитивни и најголема прецизност.

Пред сè, ова се должи на фактот што тимот на Sonatype го прошири описот за секоја CVE ранливост од NVD во своите бази на податоци, укажувајќи на ранливостите за одредена верзија на компонентите до класата или функцијата, спроведувајќи дополнително истражување (на пример , проверка на пропустите на постарите верзии на софтвер).

Важно влијание врз резултатите имаат и оние пропусти кои не беа вклучени во NVD, но сепак се присутни во базата на податоци Sonatype со ознаката SONATYPE. Според извештајот Состојба на безбедносни ранливости со отворен код 2020 година 45% од откриените пропусти со отворен код не се пријавени на NVD. Според базата на податоци на WhiteSource, само 29% од сите пропусти со отворен код пријавени надвор од NVD завршуваат објавени таму, поради што е важно да се бараат пропусти и во други извори.

Како резултат на тоа, Dependency Check произведува многу бучава, пропуштајќи некои ранливи компоненти. Dependency Track произведува помалку шум и детектира голем број компоненти, што визуелно не ги повредува очите во веб-интерфејсот.

Сепак, практиката покажува дека отворениот код треба да стане првиот чекор кон зрели DevSecOps. Првото нешто на што треба да размислите кога го интегрирате SCA во развојот се процесите, имено, размислување заедно со менаџментот и сродните одделенија за тоа како треба да изгледаат идеалните процеси во вашата организација. Може да испадне дека за вашата организација, на почетокот, Dependency Check или Dependency Track ќе ги покрие сите деловни потреби, а Enterprise решенијата ќе бидат логично продолжение поради зголемената сложеност на апликациите што се развиваат.

Додаток А: Резултати од компонентите
Симболи:

  • Ранливост на високо-високо и критично ниво во компонентата
  • Медиум — Ранливост на средно ниво на критичност во компонентата
  • ВИСТИНА - Вистинско позитивно прашање
  • НЕТОЧНО - Лажно позитивно прашање

Компонента
Nexus IQ
Проверка на зависност
Песна за зависност
Резултира

dom4j: 1.6.1
Високо
Високо
Високо
ТОЧНО

log4j-јадро: 2.3
Високо
Високо
Високо
ТОЧНО

log4j: 1.2.14
Високо
Високо
-
ТОЧНО

Commons-збирки:3.1
Високо
Високо
Високо
ТОЧНО

Commons-upload:1.3.2
Високо
Високо
Високо
ТОЧНО

Commons-beanutils:1.7.0
Високо
Високо
Високо
ТОЧНО

Commons-codec:1:10
Медиум
-
-
ТОЧНО

mysql-connector-java:5.1.42
Високо
Високо
Високо
ТОЧНО

пролет-израз:3.0.5
Високо
компонента не е пронајдена

ТОЧНО

пролет-веб:3.0.5
Високо
компонента не е пронајдена
Високо
ТОЧНО

пролет-контекст:3.0.5
Медиум
компонента не е пронајдена
-
ТОЧНО

пролет-јадро: 3.0.5
Медиум
Високо
Високо
ТОЧНО

struts2-config-прелистувач-приклучок:2.3.30
Медиум
-
-
ТОЧНО

пролет-tx: 3.0.5
-
Високо
-
НЕТОЧНО

потпори-јадро:1.3.8
Високо
Високо
Високо
ТОЧНО

xwork-core: 2.3.30
Високо
-
-
ТОЧНО

потпори 2-јадро: 2.3.30
Високо
Високо
Високо
ТОЧНО

потпори-таглиб:1.3.8
-
Високо
-
НЕТОЧНО

потпори-плочки-1.3.8
-
Високо
-
НЕТОЧНО

Додаток Б: Резултати за ранливост
Симболи:

  • Ранливост на високо-високо и критично ниво во компонентата
  • Медиум — Ранливост на средно ниво на критичност во компонентата
  • ВИСТИНА - Вистинско позитивно прашање
  • НЕТОЧНО - Лажно позитивно прашање

Компонента
Nexus IQ
Проверка на зависност
Песна за зависност
Сериозност
Резултира
Коментар

dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
Високо
ТОЧНО

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Високо
ТОЧНО

log4j-јадро: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Високо
ТОЧНО

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Ниско
ТОЧНО

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
Високо
ТОЧНО

-
CVE-2020-9488
-
Ниско
ТОЧНО

СОНАТИП-2010-0053
-
-
Високо
ТОЧНО

Commons-збирки:3.1
-
CVE-2015-6420
CVE-2015-6420
Високо
НЕТОЧНО
Дупликати RCE(OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
Високо
НЕТОЧНО
Дупликати RCE(OSSINDEX)

СОНАТИП-2015-0002
RCE (OSSINDEX)
RCE (OSSINDEX)
Високо
ТОЧНО

Commons-upload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Високо
ТОЧНО

СОНАТИП-2014-0173
-
-
Медиум
ТОЧНО

Commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
Високо
ТОЧНО

-
CVE-2019-10086
CVE-2019-10086
Високо
НЕТОЧНО
Ранливоста се однесува само на верзиите 1.9.2+

Commons-codec:1:10
СОНАТИП-2012-0050
-
-
Медиум
ТОЧНО

mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
Високо
ТОЧНО

CVE-2019-2692
CVE-2019-2692
-
Медиум
ТОЧНО

-
CVE-2020-2875
-
Медиум
НЕТОЧНО
Истата ранливост како CVE-2019-2692, но со забелешката „нападите може значително да влијаат на дополнителни производи“

-
CVE-2017-15945
-
Високо
НЕТОЧНО
Не е релевантно за mysql-connector-java

-
CVE-2020-2933
-
Ниско
НЕТОЧНО
Дупликат на CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
-
Медиум
ТОЧНО

пролет-израз:3.0.5
CVE-2018-1270
компонента не е пронајдена
-
Високо
ТОЧНО

CVE-2018-1257
-
-
Медиум
ТОЧНО

пролет-веб:3.0.5
CVE-2016-1000027
компонента не е пронајдена
-
Високо
ТОЧНО

CVE-2014-0225
-
CVE-2014-0225
Високо
ТОЧНО

CVE-2011-2730
-
-
Високо
ТОЧНО

-
-
CVE-2013-4152
Медиум
ТОЧНО

CVE-2018-1272
-
-
Високо
ТОЧНО

CVE-2020-5398
-
-
Високо
ТОЧНО
Илустративен пример во корист на IQ: „Тимот за истражување на безбедноста на Sonatype откри дека оваа ранливост е воведена во верзијата 3.0.2.RELEASE, а не 5.0.x како што е наведено во советот“.

CVE-2013-6429
-
-
Медиум
ТОЧНО

CVE-2014-0054
-
CVE-2014-0054
Медиум
ТОЧНО

CVE-2013-6430
-
-
Медиум
ТОЧНО

пролет-контекст:3.0.5
CVE-2011-2894
компонента не е пронајдена
-
Медиум
ТОЧНО

пролет-јадро: 3.0.5
-
CVE-2011-2730
CVE-2011-2730
Високо
ТОЧНО

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Медиум
ТОЧНО

-
-
CVE-2013-4152
Медиум
НЕТОЧНО
Дупликат на истата ранливост во пролет-веб

-
CVE-2013-4152
-
Медиум
НЕТОЧНО
Ранливоста се однесува на компонентата пролет-веб

-
CVE-2013-6429
CVE-2013-6429
Медиум
НЕТОЧНО
Ранливоста се однесува на компонентата пролет-веб

-
CVE-2013-6430
-
Медиум
НЕТОЧНО
Ранливоста се однесува на компонентата пролет-веб

-
CVE-2013-7315
CVE-2013-7315
Медиум
НЕТОЧНО
СПЛИТ од CVE-2013-4152. + Ранливоста се однесува на компонентата пролет-веб

-
CVE-2014-0054
CVE-2014-0054
Медиум
НЕТОЧНО
Ранливоста се однесува на компонентата пролет-веб

-
CVE-2014-0225
-
Високо
НЕТОЧНО
Ранливоста се однесува на компонентата пролет-веб

-
-
CVE-2014-0225
Високо
НЕТОЧНО
Дупликат на истата ранливост во пролет-веб

-
CVE-2014-1904
CVE-2014-1904
Медиум
НЕТОЧНО
Ранливоста се однесува на компонентата Spring-web-mvc

-
CVE-2014-3625
CVE-2014-3625
Медиум
НЕТОЧНО
Ранливоста се однесува на компонентата Spring-web-mvc

-
CVE-2016-9878
CVE-2016-9878
Високо
НЕТОЧНО
Ранливоста се однесува на компонентата Spring-web-mvc

-
CVE-2018-1270
CVE-2018-1270
Високо
НЕТОЧНО
За пролет-израз/пролет-пораки

-
CVE-2018-1271
CVE-2018-1271
Медиум
НЕТОЧНО
Ранливоста се однесува на компонентата Spring-web-mvc

-
CVE-2018-1272
CVE-2018-1272
Високо
ТОЧНО

CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Медиум
ТОЧНО

СОНАТИП-2015-0327
-
-
Ниско
ТОЧНО

struts2-config-прелистувач-приклучок:2.3.30
СОНАТИП-2016-0104
-
-
Медиум
ТОЧНО

пролет-tx: 3.0.5
-
CVE-2011-2730
-
Високо
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2011-2894
-
Високо
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2013-4152
-
Медиум
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2013-6429
-
Медиум
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2013-6430
-
Медиум
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2013-7315
-
Медиум
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2014-0054
-
Медиум
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2014-0225
-
Високо
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2014-1904
-
Медиум
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2014-3625
-
Медиум
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2016-9878
-
Високо
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2018-1270
-
Високо
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2018-1271
-
Медиум
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

-
CVE-2018-1272
-
Медиум
НЕТОЧНО
Ранливоста не е специфична за пролетта-tx

потпори-јадро:1.3.8
-
CVE-2011-5057 (OSSINDEX)

Медиум
ФАСЛЕ
Ранливост на потпори 2

-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Високо
НЕТОЧНО
Ранливост на потпори 2

-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Медиум
НЕТОЧНО
Ранливост на потпори 2

-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Високо
НЕТОЧНО
Ранливост на потпори 2

CVE-2016-1182
3VE-2016-1182
-
Високо
ТОЧНО

-
-
CVE-2011-5057
Медиум
НЕТОЧНО
Ранливост на потпори 2

-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Високо
НЕТОЧНО
Ранливост на потпори 2

-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Медиум
НЕТОЧНО
Ранливост на потпори 2

CVE-2015-0899
CVE-2015-0899
-
Високо
ТОЧНО

-
CVE-2012-0394
CVE-2012-0394
Медиум
НЕТОЧНО
Ранливост на потпори 2

-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Високо
НЕТОЧНО
Ранливост на потпори 2

-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Високо
НЕТОЧНО
Ранливост на потпори 2

-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Високо
ФАСЛЕ
Ранливост на потпори 2

-
CVE-2013-2115
CVE-2013-2115
Високо
ФАСЛЕ
Ранливост на потпори 2

-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Високо
ФАСЛЕ
Ранливост на потпори 2

-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Високо
ФАСЛЕ
Ранливост на потпори 2

CVE-2014-0114
CVE-2014-0114
-
Високо
ТОЧНО

-
CVE-2015-2992
CVE-2015-2992
Медиум
НЕТОЧНО
Ранливост на потпори 2

-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Високо
НЕТОЧНО
Ранливост на потпори 2

CVE-2016-1181
CVE-2016-1181
-
Високо
ТОЧНО

-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Високо
НЕТОЧНО
Ранливост на потпори 2

xwork-core: 2.3.30
CVE-2017-9804
-
-
Високо
ТОЧНО

СОНАТИП-2017-0173
-
-
Високо
ТОЧНО

CVE-2017-7672
-
-
Високо
НЕТОЧНО
Дупликат на CVE-2017-9804

СОНАТИП-2016-0127
-
-
Високо
ТОЧНО

потпори 2-јадро: 2.3.30
-
CVE-2016-6795
CVE-2016-6795
Високо
ТОЧНО

-
CVE-2017-9787
CVE-2017-9787
Високо
ТОЧНО

-
CVE-2017-9791
CVE-2017-9791
Високо
ТОЧНО

-
CVE-2017-9793
-
Високо
НЕТОЧНО
Дупликат на CVE-2018-1327

-
CVE-2017-9804
-
Високо
ТОЧНО

-
CVE-2017-9805
CVE-2017-9805
Високо
ТОЧНО

CVE-2016-4003
-
-
Медиум
НЕТОЧНО
Применливо за Apache Struts 2.x до 2.3.28, што е верзија 2.3.30. Сепак, врз основа на описот, CVE важи за која било верзија на Struts 2 доколку се користи JRE 1.7 или помалку. Очигледно решиле овде да не реосигуруваат, но повеќе личи на ЛАЖНО

-
CVE-2018-1327
CVE-2018-1327
Високо
ТОЧНО

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Високо
ТОЧНО
Истата ранливост што хакерите на Equifax ја искористија во 2017 година

CVE-2017-12611
CVE-2017-12611
-
Високо
ТОЧНО

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Високо
ТОЧНО

потпори-таглиб:1.3.8
-
CVE-2012-0394
-
Медиум
НЕТОЧНО
За потпори со 2 јадра

-
CVE-2013-2115
-
Високо
НЕТОЧНО
За потпори со 2 јадра

-
CVE-2014-0114
-
Високо
НЕТОЧНО
За обичните бобини

-
CVE-2015-0899
-
Високо
НЕТОЧНО
Не се однесува на taglib

-
CVE-2015-2992
-
Медиум
НЕТОЧНО
Се однесува на потпори 2-јадро

-
CVE-2016-1181
-
Високо
НЕТОЧНО
Не се однесува на taglib

-
CVE-2016-1182
-
Високо
НЕТОЧНО
Не се однесува на taglib

потпори-плочки-1.3.8
-
CVE-2012-0394
-
Медиум
НЕТОЧНО
За потпори со 2 јадра

-
CVE-2013-2115
-
Високо
НЕТОЧНО
За потпори со 2 јадра

-
CVE-2014-0114
-
Високо
НЕТОЧНО
Под комонс-беанутил

-
CVE-2015-0899
-
Високо
НЕТОЧНО
Не се однесува на плочки

-
CVE-2015-2992
-
Медиум
НЕТОЧНО
За потпори со 2 јадра

-
CVE-2016-1181
-
Високо
НЕТОЧНО
Не се однесува на taglib

-
CVE-2016-1182
-
Високо
НЕТОЧНО
Не се однесува на taglib

Извор: www.habr.com

Додадете коментар