DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Pentingnya analisis komponen perangkat lunak pihak ketiga (Software Composition Analysis - SCA) dalam proses pengembangan semakin berkembang dengan dirilisnya laporan tahunan tentang kerentanan perpustakaan sumber terbuka, yang diterbitkan oleh Synopsys, Sonatype, Snyk, dan White Source . Menurut laporan itu Keadaan Kerentanan Keamanan Sumber Terbuka tahun 2020 jumlah kerentanan open source yang teridentifikasi pada tahun 2019 meningkat hampir 1.5 kali lipat dibandingkan tahun sebelumnya, sementara komponen open source digunakan oleh 60% hingga 80% proyek. Secara independen, proses SCA merupakan praktik terpisah dari OWASP SAMM dan BSIMM sebagai indikator kematangan, dan pada paruh pertama tahun 2020, OWASP merilis Standar Verifikasi Komponen Perangkat Lunak (SCVS) OWASP yang baru, yang memberikan praktik terbaik untuk memverifikasi pihak ketiga. komponen pihak dalam rantai pasokan BY.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Salah satu kasus yang paling ilustratif telah terjadi dengan Equifax pada Mei 2017. Penyerang tak dikenal memperoleh informasi sekitar 143 juta orang Amerika, termasuk nama lengkap, alamat, nomor Jaminan Sosial, dan surat izin mengemudi. Dalam 209 kasus, dokumen tersebut juga memuat informasi tentang kartu bank korban. Kebocoran ini terjadi sebagai akibat dari eksploitasi kerentanan kritis di Apache Struts 000 (CVE-2-2017), sementara perbaikannya dirilis pada bulan Maret 5638. Perusahaan memiliki waktu dua bulan untuk menginstal pembaruan, tetapi tidak ada yang mempedulikannya.

Artikel ini akan membahas masalah pemilihan alat untuk melakukan SCA dilihat dari kualitas hasil analisis. Perbandingan fungsional alat juga akan diberikan. Proses integrasi ke dalam CI/CD dan kemampuan integrasi akan diserahkan pada publikasi berikutnya. Berbagai macam alat disajikan oleh OWASP di situs Anda, tetapi dalam ulasan kali ini kami hanya akan membahas alat open source paling populer, Dependency Check, platform open source yang sedikit kurang terkenal, Dependency Track, dan solusi Enterprise Sonatype Nexus IQ. Kami juga akan memahami cara kerja solusi ini dan membandingkan hasil yang diperoleh untuk positif palsu.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Prinsip operasi

Pemeriksaan Ketergantungan adalah utilitas (CLI, maven, modul jenkins, ant) ​​​​yang menganalisis file proyek, mengumpulkan informasi tentang dependensi (nama paket, groupid, judul spesifikasi, versi...), membuat baris CPE (Common Platform Enumeration) , URL Paket ( PURL) dan mengidentifikasi kerentanan untuk CPE/PURL dari database (NVD, Sonatype OSS Index, NPM Audit API...), setelah itu membuat laporan satu kali dalam format HTML, JSON, XML...

Mari kita lihat seperti apa CPE itu:

cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other

  • Bagian: Indikasi bahwa komponen berhubungan dengan aplikasi (a), sistem operasi (o), perangkat keras (h) (Wajib)
  • Vendor: Nama Produsen Produk (Wajib)
  • Produk: Nama Produk (Wajib)
  • Versi: Versi komponen (Item usang)
  • Update: Pembaruan paket
  • Edisi: Versi lama (Item tidak digunakan lagi)
  • Bahasa: Bahasa didefinisikan dalam RFC-5646
  • Edisi SW: Versi perangkat lunak
  • Sasaran SW: Lingkungan perangkat lunak tempat produk beroperasi
  • Sasaran HW: Lingkungan perangkat keras tempat produk beroperasi
  • Lain: Informasi Pemasok atau Produk

Contoh CPE terlihat seperti ini:

cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*

Garis tersebut berarti CPE versi 2.3 menjelaskan komponen aplikasi dari pabrikan pivotal_software dengan namanya spring_framework versi 3.0.0. Jika kita membuka kerentanan CVE-2014-0225 di NVD, kita bisa melihat penyebutan CPE ini. Masalah pertama yang harus segera Anda perhatikan adalah CVE di NVD, menurut CPE, melaporkan masalah pada framework, dan bukan pada komponen tertentu. Artinya, jika pengembang terikat erat dengan kerangka kerja, dan kerentanan yang teridentifikasi tidak memengaruhi modul yang digunakan pengembang, spesialis keamanan harus membongkar CVE ini dan memikirkan untuk memperbaruinya.

URL juga digunakan oleh alat SCA. Format URL paketnya adalah sebagai berikut:

scheme:type/namespace/name@version?qualifiers#subpath

  • Skema: Akan selalu ada 'pkg' yang menunjukkan bahwa ini adalah URL paket (Wajib)
  • Tipe: "Jenis" paket atau "protokol" paket, seperti maven, npm, nuget, gem, pypi, dll. (Barang yang diperlukan)
  • Ruang nama: Beberapa awalan nama, seperti ID grup Maven, pemilik image Docker, pengguna GitHub, atau organisasi. Opsional dan tergantung jenisnya.
  • Nama: Nama paket (Wajib)
  • Versi: Versi paket
  • Kualifikasi: Data kualifikasi tambahan untuk paket, seperti OS, arsitektur, distribusi, dll. Opsional dan spesifik tipe.
  • Subjalur: Jalur tambahan dalam paket yang berhubungan dengan root paket

Sebagai contoh:

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

Jalur Ketergantungan — platform web lokal yang menerima Bill of Materials (BOM) siap pakai yang dibuat TopanDX и SPDX, yaitu spesifikasi siap pakai tentang dependensi yang ada. Ini adalah file XML yang menjelaskan dependensi - nama, hash, url paket, penerbit, lisensi. Selanjutnya, Dependency Track mem-parsing BOM, melihat CVE yang tersedia untuk dependensi yang teridentifikasi dari database kerentanan (NVD, Sonatype OSS Index...), setelah itu membuat grafik, menghitung metrik, dan secara berkala memperbarui data tentang status kerentanan komponen .

Contoh tampilan BOM dalam format 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 dapat digunakan tidak hanya sebagai parameter input untuk Dependency Track, namun juga untuk menginventarisasi komponen perangkat lunak dalam rantai pasokan, misalnya, untuk menyediakan perangkat lunak kepada pelanggan. Pada tahun 2014, sebuah undang-undang bahkan diusulkan di Amerika Serikat "Undang-Undang Manajemen Rantai Pasokan Siber dan Transparansi Tahun 2014", yang menyatakan bahwa saat membeli perangkat lunak, negara bagian mana pun. Lembaga tersebut harus meminta BOM untuk mencegah penggunaan komponen rentan, namun undang-undang tersebut belum berlaku.

Kembali ke SCA, Dependency Track memiliki integrasi siap pakai dengan Platform Notifikasi seperti Slack, sistem manajemen kerentanan seperti Kenna Security. Perlu juga dikatakan bahwa Dependency Track, antara lain, mengidentifikasi versi paket yang sudah ketinggalan zaman dan memberikan informasi tentang lisensi (karena dukungan SPDX).

Jika kita berbicara secara khusus tentang kualitas SCA, maka ada perbedaan mendasar.

Dependency Track tidak menerima proyek sebagai masukan, melainkan BOM. Artinya jika kita ingin menguji proyek tersebut, kita perlu membuat bom.xml terlebih dahulu, misalnya menggunakan CycloneDX. Jadi, Dependency Track bergantung langsung pada CycloneDX. Pada saat yang sama, ini memungkinkan penyesuaian. Inilah yang ditulis oleh tim OZON Modul siklonDX untuk merakit file BOM untuk proyek Golang untuk pemindaian lebih lanjut melalui Dependency Track.

Nexus IQ adalah solusi SCA komersial dari Sonatype, yang merupakan bagian dari ekosistem Sonatype, yang juga mencakup Nexus Repository Manager. Nexus IQ dapat menerima arsip perang (untuk proyek Java) sebagai masukan melalui antarmuka web atau API, dan BOM, jika organisasi Anda belum beralih dari CycloneDX ke solusi baru. Tidak seperti solusi sumber terbuka, IQ tidak hanya mengacu pada CP/PURL pada komponen yang diidentifikasi dan kerentanan terkait dalam database, tetapi juga mempertimbangkan penelitiannya sendiri, misalnya, nama fungsi atau kelas yang rentan. Mekanisme IQ akan dibahas nanti dalam analisis hasil.

Mari kita rangkum beberapa fitur fungsional, dan pertimbangkan juga bahasa yang didukung untuk analisis:

Bahasa
Nexus IQ
Pemeriksaan Ketergantungan
Jalur Ketergantungan

Jawa
+
+
+

C / C ++
+
+
-

C#
+
+
-

.Bersih
+
+
+

erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Ular sanca
+
+
+

Rubi
+
+
+

Perl
-
-
-

Scala
+
+
+

Tujuan C
+
+
-

cepat
+
+
-

R
+
-
-

Go
+
+
+

Fungsionalitas

Fungsionalitas
Nexus IQ
Pemeriksaan Ketergantungan
Jalur Ketergantungan

Kemampuan untuk memastikan bahwa komponen yang digunakan dalam kode sumber diperiksa kemurnian lisensinya
+
-
+

Kemampuan untuk memindai dan menganalisis kerentanan dan kebersihan lisensi untuk image Docker
+ Integrasi dengan Clair
-
-

Kemampuan untuk mengonfigurasi kebijakan keamanan untuk menggunakan perpustakaan sumber terbuka
+
-
-

Kemampuan untuk memindai repositori sumber terbuka untuk mencari komponen yang rentan
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Ketersediaan kelompok penelitian khusus
+
-
-

Operasi loop tertutup
+
+
+

Menggunakan database pihak ketiga
+ Basis data Sonatype tertutup
+ Sonatype OSS, Penasihat Publik NPM
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, dukungan untuk database kerentanannya sendiri

Kemampuan untuk memfilter komponen sumber terbuka ketika mencoba memuat ke dalam loop pengembangan sesuai dengan kebijakan yang dikonfigurasi
+
-
-

Rekomendasi untuk memperbaiki kerentanan, ketersediaan tautan untuk perbaikan
+
+- (tergantung deskripsi di database publik)
+- (tergantung deskripsi di database publik)

Pemeringkatan kerentanan yang terdeteksi berdasarkan tingkat keparahannya
+
+
+

Model akses berbasis peran
+
-
+

dukungan CLI
+
+
+- (hanya untuk CycloneDX)

Pengambilan sampel/penyortiran kerentanan menurut kriteria yang ditentukan
+
-
+

Dasbor berdasarkan status aplikasi
+
-
+

Menghasilkan laporan dalam format PDF
+
-
-

Menghasilkan laporan dalam format JSONCSV
+
+
-

Dukungan bahasa Rusia
-
-
-

Kemampuan integrasi

Integrasi
Nexus IQ
Pemeriksaan Ketergantungan
Jalur Ketergantungan

Integrasi LDAP/Direktori Aktif
+
-
+

Integrasi dengan sistem integrasi berkelanjutan Bamboo
+
-
-

Integrasi dengan sistem integrasi berkelanjutan TeamCity
+
-
-

Integrasi dengan sistem integrasi berkelanjutan GitLab
+
+- (sebagai plugin untuk GitLab)
+

Integrasi dengan sistem integrasi berkelanjutan Jenkins
+
+
+

Ketersediaan plugin untuk IDE
+ IntelliJ, Gerhana, Visual Studio
-
-

Dukungan untuk integrasi khusus melalui layanan web (API) alat tersebut
+
-
+

Pemeriksaan Ketergantungan

Pertama mulai

Mari kita jalankan Pemeriksaan Ketergantungan pada aplikasi yang sengaja dibuat rentan DVDJA.

Untuk ini kami akan menggunakan Periksa Ketergantungan Plugin Maven:

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

Hasilnya, dependency-check-report.html akan muncul di direktori target.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Mari kita buka filenya. Setelah merangkum informasi tentang jumlah total kerentanan, kita dapat melihat informasi tentang kerentanan dengan tingkat Severity dan Confidence yang tinggi, yang menunjukkan paket, CPE, dan jumlah CVE.

Berikutnya adalah informasi yang lebih rinci, khususnya dasar pengambilan keputusan (bukti), yaitu BOM tertentu.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Berikutnya adalah deskripsi CPE, PURL dan CVE. Omong-omong, rekomendasi untuk koreksi tidak disertakan karena tidak ada dalam database NVD.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Untuk melihat hasil pemindaian secara sistematis, Anda dapat mengonfigurasi Nginx dengan pengaturan minimal, atau mengirimkan cacat yang dihasilkan ke sistem manajemen cacat yang mendukung konektor ke Pemeriksaan Ketergantungan. Misalnya, Dojo Cacat.

Jalur Ketergantungan

Instalasi

Dependency Track, pada gilirannya, adalah platform berbasis web dengan grafik tampilan, sehingga masalah mendesak dalam menyimpan cacat pada solusi pihak ketiga tidak muncul di sini.
Skrip yang didukung untuk instalasi adalah: Docker, WAR, Executable WAR.

Pertama mulai

Kami pergi ke URL layanan yang sedang berjalan. Kita login melalui admin/admin, ganti login dan password, lalu masuk ke Dashboard. Hal selanjutnya yang akan kita lakukan adalah membuat proyek untuk aplikasi pengujian di Java Beranda/Proyek → Buat Proyek . Mari kita ambil DVDJA sebagai contoh.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Karena Dependency Track hanya dapat menerima BOM sebagai input, BOM ini harus diambil. Mari manfaatkan Plugin Maven SiklonDX:

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

Kami mendapatkan bom.xml dan memuat file di proyek yang dibuat DVJA → Ketergantungan → Unggah BOM.

Mari kita pergi ke Administrasi → Analisa. Kami memahami bahwa kami hanya mengaktifkan Penganalisis Internal, yang mencakup NVD. Mari kita hubungkan juga Sonatype OSS Index.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Jadi, kami mendapatkan gambar berikut untuk proyek kami:

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Juga dalam daftar Anda dapat menemukan satu kerentanan yang berlaku untuk Sonatype OSS:

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Kekecewaan utama adalah Dependency Track tidak lagi menerima laporan Dependency Check xml. Versi terbaru integrasi Pemeriksaan Ketergantungan yang didukung adalah 1.0.0 - 4.0.2, sementara saya menguji 5.3.2.

di sini adalah Video (dan di sini) ketika hal itu masih memungkinkan.

Nexus IQ

Pertama mulai

Pemasangan Nexus IQ berasal dari arsip dokumentasi, tapi kami membuat image Docker untuk tujuan ini.

Setelah masuk ke konsol, Anda perlu membuat Organisasi dan Aplikasi.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Seperti yang Anda lihat, pengaturan dalam kasus IQ agak lebih rumit, karena kita juga perlu membuat kebijakan yang dapat diterapkan untuk “tahapan” yang berbeda (pengembangan, pembangunan, tahapan, rilis). Hal ini diperlukan untuk memblokir komponen yang rentan saat komponen tersebut bergerak melalui pipeline mendekati produksi, atau untuk memblokir komponen tersebut segera setelah komponen tersebut masuk ke Nexus Repo saat diunduh oleh pengembang.

Untuk merasakan perbedaan antara open source dan enterprise, mari lakukan pemindaian yang sama melalui Nexus IQ dengan cara yang sama Plugin Maven, setelah sebelumnya membuat aplikasi pengujian di antarmuka 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>

Ikuti URL ke laporan yang dihasilkan di antarmuka web IQ:

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Di sini Anda dapat melihat semua pelanggaran kebijakan yang menunjukkan tingkat signifikansi berbeda (dari Info hingga Kritis Keamanan). Huruf D di sebelah komponen berarti komponen tersebut Ketergantungan Langsung, dan huruf T di sebelah komponen berarti komponen tersebut Ketergantungan Transitif, yaitu bersifat transitif.

Ngomong-ngomong, laporannya Laporan Keamanan Sumber Terbuka 2020 dari Snyk melaporkan bahwa lebih dari 70% kerentanan open source yang ditemukan di Node.js, Java, dan Ruby berada dalam ketergantungan transitif.

Jika kita membuka salah satu pelanggaran kebijakan Nexus IQ, kita dapat melihat deskripsi komponen, serta Grafik Versi, yang menunjukkan lokasi versi saat ini dalam grafik waktu, serta pada titik mana kerentanan berhenti terjadi. menjadi rentan. Ketinggian candle pada grafik menunjukkan popularitas penggunaan komponen ini.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Jika Anda masuk ke bagian kerentanan dan memperluas CVE, Anda dapat membaca deskripsi kerentanan ini, rekomendasi penghapusan, serta alasan mengapa komponen ini dilanggar, yaitu kehadiran kelas DiskFileitem.class.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Mari kita rangkum hanya yang terkait dengan komponen Java pihak ketiga, dengan menghapus komponen js. Dalam tanda kurung kami menunjukkan jumlah kerentanan yang ditemukan di luar NVD.

Jumlah IQ Nexus:

  • Dependensi yang Dipindai: 62
  • Ketergantungan Rentan: 16
  • Kerentanan Ditemukan: 42 (8 sonatype db)

Pemeriksaan Ketergantungan Total:

  • Dependensi yang Dipindai: 47
  • Ketergantungan Rentan: 13
  • Kerentanan Ditemukan: 91 (14 sonatype oss)

Jalur Ketergantungan Total:

  • Ketergantungan yang Dipindai: 59
  • Ketergantungan Rentan: 10
  • Kerentanan Ditemukan: 51 (1 sonatype oss)

Pada langkah selanjutnya, kami akan menganalisis hasil yang diperoleh dan mencari tahu kerentanan mana yang merupakan cacat nyata dan mana yang merupakan positif palsu.

еймер

Ulasan ini bukanlah kebenaran yang tak terbantahkan. Penulis tidak memiliki tujuan untuk membedakan satu instrumen dengan latar belakang instrumen lainnya. Tujuan dari tinjauan ini adalah untuk menunjukkan mekanisme pengoperasian alat SCA dan cara untuk memeriksa hasilnya.

Perbandingan hasil

Syarat dan kondisi:

Positif palsu untuk kerentanan komponen pihak ketiga adalah:

  • Ketidakcocokan CVE dengan komponen yang teridentifikasi
  • Misalnya, jika kerentanan teridentifikasi dalam kerangka struts2, dan alat tersebut menunjuk ke komponen kerangka struts-tiles, dimana kerentanan ini tidak berlaku, maka ini adalah positif palsu.
  • CVE tidak cocok dengan versi komponen yang teridentifikasi
  • Misalnya, kerentanan terkait dengan versi python> 3.5 dan alat menandai versi 2.7 sebagai rentan - ini adalah positif palsu, karena sebenarnya kerentanan hanya berlaku untuk cabang produk 3.x
  • Duplikat CVE
  • Misalnya, jika SCA menentukan CVE yang mengaktifkan RCE, maka SCA menentukan CVE untuk komponen yang sama yang berlaku untuk produk Cisco yang terpengaruh oleh RCE tersebut. Dalam hal ini akan menjadi positif palsu.
  • Misalnya, CVE ditemukan di komponen spring-web, setelah itu SCA menunjuk ke CVE yang sama di komponen lain dari Spring Framework, sedangkan CVE tidak ada hubungannya dengan komponen lainnya. Dalam hal ini akan menjadi positif palsu.

Objek penelitian adalah proyek Open Source DVDJA. Penelitian ini hanya melibatkan komponen Java (tanpa js).

Hasil ringkasan

Mari langsung ke hasil tinjauan manual terhadap kerentanan yang teridentifikasi. Laporan lengkap untuk masing-masing CVE dapat dilihat pada Lampiran.

Hasil ringkasan untuk semua kerentanan:

Parameter
Nexus IQ
Pemeriksaan Ketergantungan
Jalur Ketergantungan

Total kerentanan teridentifikasi
42
91
51

Kerentanan yang salah diidentifikasi (positif palsu)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Tidak ditemukan kerentanan relevan (negatif palsu)
10
20
27

Ringkasan hasil berdasarkan komponen:

Parameter
Nexus IQ
Pemeriksaan Ketergantungan
Jalur Ketergantungan

Total komponen teridentifikasi
62
47
59

Total komponen rentan
16
13
10

Komponen rentan yang salah diidentifikasi (positif palsu)
1
5
0

Komponen rentan yang salah diidentifikasi (positif palsu)
0
6
6

Mari buat grafik visual untuk mengevaluasi rasio positif palsu dan negatif palsu terhadap jumlah total kerentanan. Komponen ditandai secara horizontal, dan kerentanan yang teridentifikasi di dalamnya ditandai secara vertikal.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Sebagai perbandingan, penelitian serupa dilakukan oleh tim Sonatype yang menguji proyek 1531 komponen menggunakan OWASP Dependency Check. Seperti yang bisa kita lihat, rasio kebisingan terhadap respons yang benar sebanding dengan hasil kami.

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu
Sumber: www.sonatype.com/why-precision-matters-ebook

Mari kita lihat beberapa CVE dari hasil pemindaian kami untuk memahami alasan hasil ini.

lebih

№ 1

Mari kita lihat dulu beberapa poin menarik tentang Sonatype Nexus IQ.

Nexus IQ menunjukkan masalah deserialisasi dengan kemampuan melakukan RCE di Spring Framework beberapa kali. CVE-2016-1000027 di spring-web:3.0.5 pertama kali, dan CVE-2011-2894 dalam spring-context:3.0.5 dan spring-core:3.0.5. Pada awalnya, tampak adanya duplikasi kerentanan di beberapa CVE. Sebab, jika melihat CVE-2016-1000027 dan CVE-2011-2894 di database NVD, sepertinya semuanya sudah jelas

Komponen
Kerentanan

web pegas:3.0.5
CVE-2016-1000027

konteks pegas:3.0.5
CVE-2011-2894

inti pegas:3.0.5
CVE-2011-2894

Описание CVE-2011-2894 dari NVD:
DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Описание CVE-2016-1000027 dari NVD:
DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

CVE-2011-2894 sendiri cukup terkenal. Dalam laporan Sumber Putih 2011 CVE ini diakui sebagai salah satu yang paling umum. Deskripsi untuk CVE-2016-100027, pada prinsipnya, sedikit di NVD, dan tampaknya hanya berlaku untuk Spring Framework 4.1.4. Mari kita lihat referensi dan di sini semuanya menjadi lebih atau kurang jelas. Dari Artikel yang dapat dipertahankan Kami memahami bahwa selain kerentanan di RemoteInvocationSerializingExporter di CVE-2011-2894, kerentanan diamati di HttpInvokerServiceExporter. Inilah yang disampaikan Nexus IQ kepada kita:

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Namun, tidak ada yang seperti ini di NVD, itulah sebabnya Pemeriksaan Ketergantungan dan Jalur Ketergantungan masing-masing menerima negatif palsu.

Dari uraian CVE-2011-2894 juga dapat dipahami bahwa kerentanan memang ada pada spring-context:3.0.5 dan spring-core:3.0.5. Konfirmasi mengenai hal ini dapat ditemukan dalam artikel dari orang yang menemukan kerentanan ini.

№ 2

Komponen
Kerentanan
Hasil

struts2-inti:2.3.30
CVE-2016-4003
SALAH

Jika kami mempelajari kerentanan CVE-2016-4003, kami akan memahami bahwa kerentanan tersebut telah diperbaiki di versi 2.3.28, namun Nexus IQ melaporkannya kepada kami. Ada catatan dalam deskripsi kerentanan:

DevSecOps: prinsip operasi dan perbandingan SCA. Bagian satu

Artinya, kerentanan hanya ada jika dikaitkan dengan versi JRE yang sudah ketinggalan zaman, yang mereka putuskan untuk diperingatkan kepada kami. Namun demikian, kami menganggap ini Positif Palsu, meskipun bukan yang terburuk.

# 3

Komponen
Kerentanan
Hasil

xkerja-inti:2.3.30
CVE-2017-9804
BENAR

xkerja-inti:2.3.30
CVE-2017-7672
SALAH

Jika kita melihat deskripsi CVE-2017-9804 dan CVE-2017-7672, kita akan memahami bahwa masalahnya adalah URLValidator class, dengan CVE-2017-9804 berasal dari CVE-2017-7672. Kehadiran kerentanan kedua tidak membawa beban yang berguna selain fakta bahwa tingkat keparahannya telah meningkat menjadi Tinggi, sehingga kita dapat menganggapnya sebagai kebisingan yang tidak perlu.

Secara keseluruhan, tidak ada hasil positif palsu lainnya yang ditemukan untuk Nexus IQ.

№ 4

Ada beberapa hal yang membuat IQ menonjol dari solusi lainnya.

Komponen
Kerentanan
Hasil

web pegas:3.0.5
CVE-2020-5398
BENAR

CVE di NVD menyatakan hanya berlaku untuk versi 5.2.x sebelum 5.2.3, 5.1.x sebelum 5.1.13, dan versi 5.0.x sebelum 5.0.16, namun jika kita melihat deskripsi CVE di Nexus IQ , maka kita akan melihat yang berikut:
Pemberitahuan Deviasi Penasihat: Tim peneliti keamanan Sonatype menemukan bahwa kerentanan ini diperkenalkan di versi 3.0.2.RELEASE dan bukan 5.0.x seperti yang dinyatakan dalam penasihat.

Ini diikuti oleh PoC untuk kerentanan ini, yang menyatakan bahwa kerentanan tersebut ada di versi 3.0.5.

Negatif palsu dikirim ke Pemeriksaan Ketergantungan dan Jalur Ketergantungan.

№ 5

Mari kita lihat positif palsu untuk Pemeriksaan Ketergantungan dan Jalur Ketergantungan.

Dependency Check menonjol karena mencerminkan CVE yang berlaku pada seluruh kerangka kerja di NVD hingga komponen yang tidak menerapkan CVE ini. Ini menyangkut CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, yang Dependency Check-nya “kacau” ” ke struts-taglib:1.3.8 dan struts-tiles-1.3.8. Komponen-komponen ini tidak ada hubungannya dengan apa yang dijelaskan dalam CVE - pemrosesan permintaan, validasi halaman, dan sebagainya. Hal ini disebabkan oleh fakta bahwa kesamaan CVE dan komponen ini hanyalah kerangka kerja, itulah sebabnya Dependency Check menganggapnya sebagai kerentanan.

Situasi yang sama terjadi pada spring-tx:3.0.5, dan situasi serupa dengan struts-core:1.3.8. Untuk struts-core, Dependency Check dan Dependency Track telah menemukan banyak kerentanan yang sebenarnya dapat diterapkan pada struts2-core, yang pada dasarnya merupakan framework terpisah. Dalam hal ini, Nexus IQ dengan benar memahami gambaran tersebut dan dalam CVE yang dikeluarkannya, hal ini menunjukkan bahwa struts-core telah mencapai akhir masa pakainya dan perlu dipindahkan ke struts2-core.

№ 6

Dalam beberapa situasi, tidak adil untuk menafsirkan kesalahan Pemeriksaan Ketergantungan dan Jalur Ketergantungan yang jelas. Khususnya CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, yaitu Pemeriksaan Ketergantungan dan Jalur Ketergantungan dikaitkan dengan spring-core:3.0.5 sebenarnya milik spring-web:3.0.5. Pada saat yang sama, beberapa CVE ini juga ditemukan oleh Nexus IQ, namun IQ dengan tepat mengidentifikasinya ke komponen lain. Karena kerentanan ini tidak ditemukan di spring-core, tidak dapat dikatakan bahwa kerentanan tersebut pada prinsipnya tidak ada dalam kerangka kerja dan alat sumber terbuka dengan tepat menunjukkan kerentanan ini (hanya sedikit terlewatkan).

Temuan

Seperti yang bisa kita lihat, menentukan keandalan kerentanan yang teridentifikasi melalui tinjauan manual tidak memberikan hasil yang jelas, itulah sebabnya timbul isu kontroversial. Hasilnya adalah solusi Nexus IQ memiliki tingkat positif palsu terendah dan akurasi tertinggi.

Pertama-tama, hal ini disebabkan oleh fakta bahwa tim Sonatype memperluas deskripsi untuk setiap kerentanan CVE dari NVD dalam databasenya, menunjukkan kerentanan untuk versi komponen tertentu hingga ke kelas atau fungsinya, melakukan penelitian tambahan (misalnya , memeriksa kerentanan pada versi perangkat lunak yang lebih lama).

Pengaruh penting pada hasil juga dimainkan oleh kerentanan yang tidak termasuk dalam NVD, namun tetap ada dalam database Sonatype dengan tanda SONATYPE. Menurut laporan itu Keadaan Kerentanan Keamanan Sumber Terbuka tahun 2020 45% dari kerentanan sumber terbuka yang ditemukan tidak dilaporkan ke NVD. Menurut database WhiteSource, hanya 29% dari semua kerentanan sumber terbuka yang dilaporkan di luar NVD yang akhirnya dipublikasikan di sana, oleh karena itu penting untuk mencari kerentanan di sumber lain juga.

Akibatnya, Pemeriksaan Ketergantungan menghasilkan banyak gangguan, kehilangan beberapa komponen yang rentan. Dependency Track menghasilkan lebih sedikit noise dan mendeteksi sejumlah besar komponen, sehingga tidak mengganggu tampilan antarmuka web secara visual.

Namun, praktik menunjukkan bahwa open source harus menjadi langkah pertama menuju DevSecOps yang matang. Hal pertama yang harus Anda pikirkan ketika mengintegrasikan SCA ke dalam pengembangan adalah proses, yaitu berpikir bersama dengan manajemen dan departemen terkait tentang seperti apa seharusnya proses ideal di organisasi Anda. Tampaknya untuk organisasi Anda, pada awalnya, Pemeriksaan Ketergantungan atau Pelacakan Ketergantungan akan mencakup semua kebutuhan bisnis, dan solusi Perusahaan akan menjadi kelanjutan logis karena semakin kompleksnya aplikasi yang sedang dikembangkan.

Lampiran A: Hasil Komponen
legenda:

  • Tinggi—kerentanan tingkat tinggi dan kritis dalam komponen
  • Sedang — Kerentanan dengan tingkat kekritisan sedang pada komponen
  • BENAR — Isu yang benar-benar positif
  • SALAH — Masalah positif palsu

Komponen
Nexus IQ
Pemeriksaan Ketergantungan
Jalur Ketergantungan
Hasil

dom4j: 1.6.1
High
High
High
BENAR

log4j-inti: 2.3
High
High
High
BENAR

log4j: 1.2.14
High
High
-
BENAR

koleksi bersama:3.1
High
High
High
BENAR

unggahan file umum:1.3.2
High
High
High
BENAR

commons-beanutils:1.7.0
High
High
High
BENAR

codec-commons: 1:10
Medium
-
-
BENAR

konektor-mysql-java:5.1.42
High
High
High
BENAR

ekspresi pegas:3.0.5
High
komponen tidak ditemukan

BENAR

web pegas:3.0.5
High
komponen tidak ditemukan
High
BENAR

konteks pegas:3.0.5
Medium
komponen tidak ditemukan
-
BENAR

inti pegas:3.0.5
Medium
High
High
BENAR

struts2-config-browser-plugin:2.3.30
Medium
-
-
BENAR

pegas-tx:3.0.5
-
High
-
SALAH

inti penyangga:1.3.8
High
High
High
BENAR

xwork-inti: 2.3.30
High
-
-
BENAR

struts2-inti: 2.3.30
High
High
High
BENAR

struts-taglib:1.3.8
-
High
-
SALAH

penyangga-ubin-1.3.8
-
High
-
SALAH

Lampiran B: Hasil Kerentanan
legenda:

  • Tinggi—kerentanan tingkat tinggi dan kritis dalam komponen
  • Sedang — Kerentanan dengan tingkat kekritisan sedang pada komponen
  • BENAR — Isu yang benar-benar positif
  • SALAH — Masalah positif palsu

Komponen
Nexus IQ
Pemeriksaan Ketergantungan
Jalur Ketergantungan
Kerasnya
Hasil
Komentar

dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
High
BENAR

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
High
BENAR

log4j-inti: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
High
BENAR

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Rendah
BENAR

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
High
BENAR

-
CVE-2020-9488
-
Rendah
BENAR

SONATYPE-2010-0053
-
-
High
BENAR

koleksi bersama:3.1
-
CVE-2015-6420
CVE-2015-6420
High
SALAH
Duplikat RCE (OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
High
SALAH
Duplikat RCE (OSSINDEX)

SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
High
BENAR

unggahan file umum:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
High
BENAR

SONATYPE-2014-0173
-
-
Medium
BENAR

commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
High
BENAR

-
CVE-2019-10086
CVE-2019-10086
High
SALAH
Kerentanan hanya berlaku untuk versi 1.9.2+

codec-commons: 1:10
SONATYPE-2012-0050
-
-
Medium
BENAR

konektor-mysql-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
High
BENAR

CVE-2019-2692
CVE-2019-2692
-
Medium
BENAR

-
CVE-2020-2875
-
Medium
SALAH
Kerentanan yang sama seperti CVE-2019-2692, namun dengan catatan “serangan dapat berdampak signifikan pada produk tambahan”

-
CVE-2017-15945
-
High
SALAH
Tidak relevan dengan mysql-connector-java

-
CVE-2020-2933
-
Rendah
SALAH
Duplikat CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
-
Medium
BENAR

ekspresi pegas:3.0.5
CVE-2018-1270
komponen tidak ditemukan
-
High
BENAR

CVE-2018-1257
-
-
Medium
BENAR

web pegas:3.0.5
CVE-2016-1000027
komponen tidak ditemukan
-
High
BENAR

CVE-2014-0225
-
CVE-2014-0225
High
BENAR

CVE-2011-2730
-
-
High
BENAR

-
-
CVE-2013-4152
Medium
BENAR

CVE-2018-1272
-
-
High
BENAR

CVE-2020-5398
-
-
High
BENAR
Contoh ilustratif yang mendukung IQ: “Tim peneliti keamanan Sonatype menemukan bahwa kerentanan ini diperkenalkan di versi 3.0.2.RELEASE dan bukan 5.0.x seperti yang dinyatakan dalam penasehat.”

CVE-2013-6429
-
-
Medium
BENAR

CVE-2014-0054
-
CVE-2014-0054
Medium
BENAR

CVE-2013-6430
-
-
Medium
BENAR

konteks pegas:3.0.5
CVE-2011-2894
komponen tidak ditemukan
-
Medium
BENAR

inti pegas:3.0.5
-
CVE-2011-2730
CVE-2011-2730
High
BENAR

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
BENAR

-
-
CVE-2013-4152
Medium
SALAH
Duplikat kerentanan yang sama di spring-web

-
CVE-2013-4152
-
Medium
SALAH
Kerentanan berkaitan dengan komponen spring-web

-
CVE-2013-6429
CVE-2013-6429
Medium
SALAH
Kerentanan berkaitan dengan komponen spring-web

-
CVE-2013-6430
-
Medium
SALAH
Kerentanan berkaitan dengan komponen spring-web

-
CVE-2013-7315
CVE-2013-7315
Medium
SALAH
BERPISAH dari CVE-2013-4152. + Kerentanan berkaitan dengan komponen web pegas

-
CVE-2014-0054
CVE-2014-0054
Medium
SALAH
Kerentanan berkaitan dengan komponen spring-web

-
CVE-2014-0225
-
High
SALAH
Kerentanan berkaitan dengan komponen spring-web

-
-
CVE-2014-0225
High
SALAH
Duplikat kerentanan yang sama di spring-web

-
CVE-2014-1904
CVE-2014-1904
Medium
SALAH
Kerentanan berkaitan dengan komponen spring-web-mvc

-
CVE-2014-3625
CVE-2014-3625
Medium
SALAH
Kerentanan berkaitan dengan komponen spring-web-mvc

-
CVE-2016-9878
CVE-2016-9878
High
SALAH
Kerentanan berkaitan dengan komponen spring-web-mvc

-
CVE-2018-1270
CVE-2018-1270
High
SALAH
Untuk ekspresi musim semi/pesan musim semi

-
CVE-2018-1271
CVE-2018-1271
Medium
SALAH
Kerentanan berkaitan dengan komponen spring-web-mvc

-
CVE-2018-1272
CVE-2018-1272
High
BENAR

CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Medium
BENAR

SONATYPE-2015-0327
-
-
Rendah
BENAR

struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
Medium
BENAR

pegas-tx:3.0.5
-
CVE-2011-2730
-
High
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2011-2894
-
High
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2013-4152
-
Medium
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2013-6429
-
Medium
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2013-6430
-
Medium
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2013-7315
-
Medium
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2014-0054
-
Medium
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2014-0225
-
High
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2014-1904
-
Medium
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2014-3625
-
Medium
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2016-9878
-
High
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2018-1270
-
High
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2018-1271
-
Medium
SALAH
Kerentanannya tidak spesifik untuk spring-tx

-
CVE-2018-1272
-
Medium
SALAH
Kerentanannya tidak spesifik untuk spring-tx

inti penyangga:1.3.8
-
CVE-2011-5057 (OSSINDEX)

Medium
GAGAL
Kerentanan terhadap Struts 2

-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
High
SALAH
Kerentanan terhadap Struts 2

-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
SALAH
Kerentanan terhadap Struts 2

-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
High
SALAH
Kerentanan terhadap Struts 2

CVE-2016-1182
3VE-2016-1182
-
High
BENAR

-
-
CVE-2011-5057
Medium
SALAH
Kerentanan terhadap Struts 2

-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
High
SALAH
Kerentanan terhadap Struts 2

-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
SALAH
Kerentanan terhadap Struts 2

CVE-2015-0899
CVE-2015-0899
-
High
BENAR

-
CVE-2012-0394
CVE-2012-0394
Medium
SALAH
Kerentanan terhadap Struts 2

-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
High
SALAH
Kerentanan terhadap Struts 2

-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
High
SALAH
Kerentanan terhadap Struts 2

-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
High
GAGAL
Kerentanan terhadap Struts 2

-
CVE-2013-2115
CVE-2013-2115
High
GAGAL
Kerentanan terhadap Struts 2

-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
High
GAGAL
Kerentanan terhadap Struts 2

-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
High
GAGAL
Kerentanan terhadap Struts 2

CVE-2014-0114
CVE-2014-0114
-
High
BENAR

-
CVE-2015-2992
CVE-2015-2992
Medium
SALAH
Kerentanan terhadap Struts 2

-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
High
SALAH
Kerentanan terhadap Struts 2

CVE-2016-1181
CVE-2016-1181
-
High
BENAR

-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
High
SALAH
Kerentanan terhadap Struts 2

xkerja-inti:2.3.30
CVE-2017-9804
-
-
High
BENAR

SONATYPE-2017-0173
-
-
High
BENAR

CVE-2017-7672
-
-
High
SALAH
Duplikat CVE-2017-9804

SONATYPE-2016-0127
-
-
High
BENAR

struts2-inti:2.3.30
-
CVE-2016-6795
CVE-2016-6795
High
BENAR

-
CVE-2017-9787
CVE-2017-9787
High
BENAR

-
CVE-2017-9791
CVE-2017-9791
High
BENAR

-
CVE-2017-9793
-
High
SALAH
Duplikat CVE-2018-1327

-
CVE-2017-9804
-
High
BENAR

-
CVE-2017-9805
CVE-2017-9805
High
BENAR

CVE-2016-4003
-
-
Medium
SALAH
Berlaku untuk Apache Struts 2.x sampai dengan 2.3.28 yaitu versi 2.3.30. Namun berdasarkan uraian, CVE berlaku untuk semua versi Struts 2 jika digunakan JRE 1.7 atau kurang. Rupanya mereka memutuskan untuk mengasuransikan kembali kami di sini, tetapi sepertinya SALAH

-
CVE-2018-1327
CVE-2018-1327
High
BENAR

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
High
BENAR
Kerentanan yang sama yang dieksploitasi oleh peretas Equifax pada tahun 2017

CVE-2017-12611
CVE-2017-12611
-
High
BENAR

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
High
BENAR

struts-taglib:1.3.8
-
CVE-2012-0394
-
Medium
SALAH
Untuk struts2-core

-
CVE-2013-2115
-
High
SALAH
Untuk struts2-core

-
CVE-2014-0114
-
High
SALAH
Untuk commons-beanutils

-
CVE-2015-0899
-
High
SALAH
Tidak berlaku untuk taglib

-
CVE-2015-2992
-
Medium
SALAH
Mengacu pada struts2-core

-
CVE-2016-1181
-
High
SALAH
Tidak berlaku untuk taglib

-
CVE-2016-1182
-
High
SALAH
Tidak berlaku untuk taglib

penyangga-ubin-1.3.8
-
CVE-2012-0394
-
Medium
SALAH
Untuk struts2-core

-
CVE-2013-2115
-
High
SALAH
Untuk struts2-core

-
CVE-2014-0114
-
High
SALAH
Di bawah commons-beanutils

-
CVE-2015-0899
-
High
SALAH
Tidak berlaku untuk ubin

-
CVE-2015-2992
-
Medium
SALAH
Untuk struts2-core

-
CVE-2016-1181
-
High
SALAH
Tidak berlaku untuk taglib

-
CVE-2016-1182
-
High
SALAH
Tidak berlaku untuk taglib

Sumber: www.habr.com

Tambah komentar