Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

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 Bebek Hitam, Sinar X JFrog, Snyk, Siklus Hidup Nexus Sonatipe atau SumberHapus.

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 contoh-pemeriksaan ketergantungan.

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:

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

Ikuti tautannya dan lihat laporan Pemeriksaan Ketergantungan.

Tangkapan layar pertama adalah bagian atas laporan dengan ringkasan.

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

Tangkapan layar kedua merinci CVE-2017-5638. Di sini kita melihat level CVE dan tautan ke eksploitasi.

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

Tangkapan layar ketiga adalah detail log4j-api-2.7.jar. Kita melihat bahwa level CVE adalah 7.5 dan 9.8.

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

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

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

Jika Anda ingin menggunakan halaman gitlab, maka itu tidak akan berfungsi - tugas yang gagal tidak akan membuat artefak.

Contoh di sini https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Keluaran build: tidak ada artefak, saya tidak melihat laporan html. Anda harus mencoba Artifact: selalu

https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages/-/jobs/400004246

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

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:

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

Untuk mengunduh, Anda dapat menggunakan utilitas nist_data_mirror_golang

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

Obrolan Telegram tentang DevOps dan Keamanan
Saluran Telegram DevSecOps / SSDLC - Pengembangan aman

Sumber: www.habr.com

Tambah komentar