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

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

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:

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

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

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

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

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

Jika Anda ingin menggunakan GitLab Pages, Anda tidak akan dapat melakukannya—tugas yang gagal tidak akan membuat artefak.

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

Output build: tidak ada artefak, saya tidak melihat laporan HTML. Saya harus selalu mencoba Artefak.

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 berkas gitlab-ci.yaml:

mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7

Parameter 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?

Menggunakan pemindai kerentanan untuk perpustakaan bekas Pemeriksaan Ketergantungan di GitlabCI

Anda dapat menggunakan utilitas untuk mengunduh nist_data_mirror_golang

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-mirror

Nist-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

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

Sumber: www.habr.com

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster