Bagian penting dari manajemen kerentanan adalah memahami dan mengamankan rantai pasokan komponen perangkat lunak yang membentuk sistem modern secara menyeluruh. Tim Agile dan DevOps memanfaatkan perpustakaan dan kerangka kerja sumber terbuka secara ekstensif untuk mengurangi waktu dan biaya pengembangan. Namun medali ini juga memiliki sisi negatifnya: peluang untuk mewarisi kesalahan dan kerentanan orang lain.
Tentu saja, tim harus mengetahui komponen sumber terbuka mana yang disertakan dalam aplikasinya, memastikan bahwa versi terpercaya yang diketahui diunduh dari sumber terpercaya yang dikenal, dan mengunduh versi komponen yang diperbarui setelah kerentanan yang baru ditemukan ditambal.
Dalam postingan ini, kita akan melihat penggunaan Pemeriksaan Ketergantungan OWASP untuk membatalkan build jika mendeteksi masalah serius dengan kode Anda.
Dalam buku βDevelopment Security in Agile Projectsβ dijelaskan sebagai berikut. Pemeriksaan Ketergantungan OWASP adalah pemindai gratis yang mengkatalogkan semua komponen sumber terbuka yang digunakan dalam aplikasi dan menunjukkan kerentanan yang dikandungnya. Ada versi untuk Java, .NET, Ruby (gemspec), PHP (composer), Node.js dan Python, serta untuk beberapa proyek C/C++. Dependency Check terintegrasi dengan alat build umum, termasuk Ant, Maven, dan Gradle, serta server integrasi berkelanjutan seperti Jenkins.
Dependency Check melaporkan semua komponen dengan kerentanan yang diketahui dari National Vulnerability Database (NVD) NIST dan diperbarui dengan data dari feed berita NVD.
Untungnya, semua ini dapat dilakukan secara otomatis menggunakan alat seperti proyek OWASP Dependency Check atau program komersial sejenisnya
Alat-alat ini dapat disertakan dalam alur build untuk secara otomatis menginventarisasi dependensi sumber terbuka, mengidentifikasi versi pustaka yang sudah ketinggalan zaman dan pustaka yang mengandung kerentanan yang diketahui, dan membatalkan build jika terdeteksi masalah serius.
Pemeriksaan Ketergantungan OWASP
Untuk menguji dan mendemonstrasikan cara kerja Pemeriksaan Ketergantungan, kami menggunakan repositori ini
Untuk melihat laporan HTML, Anda perlu mengkonfigurasi server web nginx di gitlab-runner Anda.
Contoh konfigurasi nginx minimal:
server {
listen 9999;
listen [::]:9999;
server_name _;
root /home/gitlab-runner/builds;
location / {
autoindex on;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Di akhir perakitan Anda dapat melihat gambar ini:
Ikuti tautannya dan lihat laporan Pemeriksaan Ketergantungan.
Tangkapan layar pertama adalah bagian atas laporan dengan ringkasan.
Tangkapan layar kedua merinci CVE-2017-5638. Di sini kita melihat level CVE dan tautan ke eksploitasi.
Tangkapan layar ketiga adalah detail log4j-api-2.7.jar. Kita melihat bahwa level CVE adalah 7.5 dan 9.8.
Tangkapan layar keempat adalah detail commons-fileupload-1.3.2.jar. Kita melihat bahwa level CVE adalah 7.5 dan 9.8.
Jika Anda ingin menggunakan halaman gitlab, maka itu tidak akan berfungsi - tugas yang gagal tidak akan membuat artefak.
Contoh di sini
Keluaran build: tidak ada artefak, saya tidak melihat laporan html. Anda harus mencoba Artifact: selalu
Mengatur tingkat kerentanan CVE
Baris terpenting dalam file gitlab-ci.yaml:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7
Dengan parameter failBuildOnCVSS Anda dapat menyesuaikan tingkat kerentanan CVE yang perlu Anda tanggapi.
Mengunduh Basis Data Kerentanan NIST (NVD) dari Internet
Pernahkah Anda memperhatikan bahwa NIST terus-menerus mengunduh basis data kerentanan NIST (NVD) dari Internet:
Untuk mengunduh, Anda dapat menggunakan utilitas
Mari kita instal dan luncurkan.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/nist_data_mirror_golang
yum -y install nist-data-mirror
systemctl start nist-data-mirror
Nist-data-mirror mengunggah NIST JSON CVE ke /var/www/repos/nist-data-mirror/ saat startup dan memperbarui data setiap 24 jam.
Untuk mengunduh CVE JSON NIST, Anda perlu mengonfigurasi server web nginx (misalnya, di gitlab-runner Anda).
Contoh konfigurasi nginx minimal:
server {
listen 12345;
listen [::]:12345;
server_name _;
root /var/www/repos/nist-data-mirror/;
location / {
autoindex on;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Agar tidak membuat antrean panjang saat peluncuran mvn, kami akan memindahkan parameter ke variabel terpisah DEPENDECY_OPTS.
Konfigurasi minimal terakhir .gitlab-ci.yml akan terlihat seperti ini:
variables:
MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
DEPENDENCY_OPTS: "-DfailBuildOnCVSS=7 -DcveUrlModified=http://localhost:12345/nvdcve-1.1-modified.json.gz -DcveUrlBase=http://localhost:12345/nvdcve-1.1-%d.json.gz"
cache:
paths:
- .m2/repository
verify:
stage: test
script:
- set +e
- mvn $MAVEN_CLI_OPTS install org.owasp:dependency-check-maven:check $DEPENDENCY_OPTS || EXIT_CODE=$?
- export PATH_WITHOUT_HOME=$(pwd | sed -e "s//home/gitlab-runner/builds//g")
- echo "************************* URL Dependency-check-report.html *************************"
- echo "http://$HOSTNAME:9999$PATH_WITHOUT_HOME/target/dependency-check-report.html"
- set -e
- exit ${EXIT_CODE}
tags:
- shell
Sumber: www.habr.com