Ngagunakeun scanner kerentanan pikeun perpustakaan dipaké Dependency-Check di GitlabCI

Bagian penting tina manajemén kerentanan nyaéta ngartos sareng ngamankeun ranté suplai komponén parangkat lunak anu ngawangun sistem modéren. Tim Agile sareng DevOps ngagunakeun éksténsif perpustakaan open source sareng kerangka pikeun ngirangan waktos sareng biaya pangwangunan. Tapi medali ieu ogé boga downside a: kasempetan pikeun inherit kasalahan jeung vulnerabilities batur urang.

Jelas, tim kedah yakin terang komponén open source mana anu kalebet dina aplikasina, mastikeun yén versi anu dipercaya diunduh tina sumber anu tiasa dipercaya, sareng unduh vérsi komponén anu diropéa saatos kerentanan anu nembe kapendak ditambal.

Dina postingan ieu, urang bakal ningali ngagunakeun OWASP Dependency Check pikeun ngabatalkeun ngawangun upami éta ngadeteksi masalah serius sareng kode anjeun.

Dina buku "Development Security in Agile Projects" dijelaskeun kieu. OWASP Dependency Check mangrupikeun scanner gratis anu katalog sadaya komponén open source anu dianggo dina aplikasi sareng nunjukkeun kerentanan anu dikandungna. Aya versi pikeun Java, .NET, Ruby (gemspec), PHP (komposer), Node.js jeung Python, kitu ogé pikeun sababaraha proyék C / C ++. Dependency Check integrates sareng alat ngawangun umum, kalebet Ant, Maven sareng Gradle, sareng server integrasi kontinyu sapertos Jenkins.

Dependency Check ngalaporkeun sadaya komponén anu gaduh kerentanan anu dipikanyaho ti NIST's National Vulnerability Database (NVD) sareng diropéa nganggo data tina feed warta NVD.

Kabeneran, sadayana ieu tiasa dilakukeun sacara otomatis nganggo alat sapertos proyék OWASP Dependency Check atanapi program komérsial sapertos Bebek Hideung, Xray JFrog, Snyk, Daur hirup Nexus Sonatype atawa SourceClear.

Alat-alat ieu tiasa dilebetkeun dina ngawangun saluran pipa pikeun otomatis ngainventarisasi katergantungan sumber terbuka, ngaidentipikasi vérsi perpustakaan sareng perpustakaan kuno anu ngandung kerentanan anu dipikanyaho, sareng ngabatalkeun ngawangun upami aya masalah anu serius.

Cék Depéndénsi OWASP

Pikeun nguji sareng nunjukkeun kumaha Depéndency Check jalan, kami nganggo gudang ieu kagumantungan-cek-conto.

Pikeun ningali laporan HTML, anjeun kedah ngonpigurasikeun pangladén wéb nginx dina gitlab-runner anjeun.

Conto 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 {
    }
}

Dina ahir assembly anjeun tiasa ningali gambar ieu:

Ngagunakeun scanner kerentanan pikeun perpustakaan dipaké Dependency-Check di GitlabCI

Turutan tautan sareng tingali laporan Pamariksaan Dependency.

Potret layar kahiji nyaéta bagian luhur laporan kalayan kasimpulan.

Ngagunakeun scanner kerentanan pikeun perpustakaan dipaké Dependency-Check di GitlabCI

Rincian screenshot kadua CVE-2017-5638. Di dieu urang ningali tingkat CVE sareng numbu ka eksploitasi.

Ngagunakeun scanner kerentanan pikeun perpustakaan dipaké Dependency-Check di GitlabCI

Potret layar katilu nyaéta detil log4j-api-2.7.jar. Kami ningali yén tingkat CVE nyaéta 7.5 sareng 9.8.

Ngagunakeun scanner kerentanan pikeun perpustakaan dipaké Dependency-Check di GitlabCI

Potret layar kaopat nyaéta detil ngeunaan commons-fileupload-1.3.2.jar. Kami ningali yén tingkat CVE nyaéta 7.5 sareng 9.8.

Ngagunakeun scanner kerentanan pikeun perpustakaan dipaké Dependency-Check di GitlabCI

Upami anjeun hoyong nganggo halaman gitlab, maka éta moal jalan - tugas anu murag moal nyiptakeun artefak.

Contona di dieu https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Ngawangun kaluaran: euweuh artefak, abdi teu ningali laporan html. Anjeun kedah nyobian Artefak: salawasna

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

Ngagunakeun scanner kerentanan pikeun perpustakaan dipaké Dependency-Check di GitlabCI

Ngatur tingkat kerentanan CVE

Garis anu paling penting dina file gitlab-ci.yaml:

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

Kalayan parameter failBuildOnCVSS anjeun tiasa nyaluyukeun tingkat kerentanan CVE anu anjeun kedah réspon.

Ngundeur NIST Vulnerability Database (NVD) tina Internét

Naha anjeun perhatikeun yén NIST terus-terusan ngaunduh database kerentanan NIST (NVD) tina Internét:

Ngagunakeun scanner kerentanan pikeun perpustakaan dipaké Dependency-Check di GitlabCI

Pikeun ngundeur, anjeun tiasa nganggo utiliti nist_data_mirror_golang

Hayu urang pasang sareng jalankeunana.

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 unggah NIST JSON CVE ka /var/www/repos/nist-data-mirror/ dina ngamimitian sareng ngapdet data unggal 24 jam.

Pikeun ngundeur CVE JSON NIST, anjeun kedah ngonpigurasikeun pangladén wéb nginx (contona, dina gitlab-runner anjeun).

Conto 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 {
    }

}

Dina raraga teu nyieun garis panjang dimana mvn dibuka, urang bakal mindahkeun parameter kana variabel misah DEPENDENCY_OPTS.

Konfigurasi minimal final .gitlab-ci.yml bakal siga kieu:

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

Telegram ngobrol ngeunaan DevOps sareng Kaamanan
Saluran Telegram DevSecOps / SSDLC - Pangwangunan aman

sumber: www.habr.com

Tambahkeun komentar