Bagian penting dari manajemen kerentanan adalah memahami dan mengamankan rantai pasokan komponen perangkat lunak yang membangun sistem modern. Tim yang menerapkan metode agile dan DevOps secara luas menggunakan pustaka dan kerangka kerja sumber terbuka untuk mengurangi waktu dan biaya pengembangan. Namun, hal ini memiliki sisi negatif: risiko mewarisi bug dan kerentanan orang lain.
Jelasnya, tim harus menyadari komponen sumber terbuka mana saja yang disertakan dalam aplikasinya, memastikan bahwa versi yang diketahui baik diunduh dari sumber yang diketahui baik, dan mengunduh versi terbaru komponen setelah kerentanan yang baru ditemukan ditambal.
Dalam postingan ini, kita akan melihat penggunaan OWASP Dependency Check untuk membatalkan pembuatan jika mendeteksi masalah serius dengan kode Anda.
Buku "Development Security in Agile Projects" menjelaskannya seperti ini. OWASP Dependency Check adalah pemindai gratis yang mengkatalogkan semua komponen sumber terbuka yang digunakan dalam aplikasi dan mengidentifikasi kerentanan yang mungkin ada di dalamnya. Versi-versinya tersedia untuk Java, .NET, Ruby (gemspec), PHP (composer), Node.js, dan Python, serta untuk beberapa proyek C/C++. Dependency Check terintegrasi dengan alat build populer, termasuk Ant, Maven, dan Gradle, serta server integrasi berkelanjutan seperti Jenkins.
Dependency Check melaporkan semua komponen dengan kerentanan yang diketahui dari Basis Data Kerentanan Nasional (NVD) NIST dan diperbarui berdasarkan data dari umpan berita NVD.
Untungnya, semua ini dapat dilakukan secara otomatis menggunakan alat seperti proyek OWASP Dependency Check atau program komersial seperti , , , Perusahaan Sonatype atau .
Alat-alat ini dapat dimasukkan ke dalam alur pembangunan untuk secara otomatis menginventarisasi dependensi sumber terbuka, mengidentifikasi versi pustaka yang ketinggalan zaman dan pustaka yang mengandung kerentanan yang diketahui, dan membatalkan pembangunan jika masalah serius terdeteksi.
Pemeriksaan Ketergantungan OWASP
Untuk menguji dan mendemonstrasikan pengoperasian Dependency Check, kami menggunakan repositori ini. .
Untuk melihat laporan HTML, Anda perlu mengonfigurasi server web nginx di gitlab-runner Anda.
Contoh konfigurasi minimal nginx:
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 {
}
}Pada akhir pembangunan Anda dapat melihat gambar seperti ini:

Ikuti tautan 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 menunjukkan detail log4j-api-2.7.jar. Kita melihat level CVE 7.5 dan 9.8.

Tangkapan layar keempat menunjukkan detail commons-fileupload-1.3.2.jar. Kita melihat level CVE 7.5 dan 9.8.

Jika Anda ingin menggunakan GitLab Pages, Anda tidak akan dapat melakukannya—tugas yang gagal tidak akan membuat artefak.
Contoh di sini .
Output build: tidak ada artefak, saya tidak melihat laporan HTML. Saya harus selalu mencoba Artefak.

Mengatur tingkat kerentanan CVE
Baris terpenting dalam berkas gitlab-ci.yaml:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7Parameter failBuildOnCVSS memungkinkan Anda mengontrol tingkat kerentanan CVE yang ingin Anda tanggapi.
Mengunduh Database Kerentanan NIST (NVD) dari Internet
Pernahkah Anda memperhatikan bahwa NIST terus-menerus mengunduh basis data kerentanan (NVD) dari Internet?

Anda dapat menggunakan utilitas untuk mengunduh
Mari kita instal dan jalankan.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/nist_data_mirror_golang
yum -y install nist-data-mirror
systemctl start nist-data-mirrorNist-data-mirror mengunggah NIST CVE JSON ke /var/www/repos/nist-data-mirror/ saat memulai dan memperbarui data setiap 24 jam.
Untuk mengunduh CVE JSON NIST, Anda perlu mengonfigurasi server web nginx (misalnya, di gitlab-runner Anda).
Contoh konfigurasi minimal nginx:
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 {
}
}Untuk menghindari pembuatan baris panjang saat mvn diluncurkan, kami akan memindahkan parameter ke variabel terpisah DEPENDENCY_OPTS.
Konfigurasi minimal akhir .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
