Nggunakake pemindai kerentanan kanggo perpustakaan sing digunakake Dependency-Check ing GitlabCI

Bagean penting saka manajemen kerentanan yaiku ngerti lan ngamanake rantai pasokan komponen piranti lunak sing nggawe sistem modern. Tim Agile lan DevOps nggunakake perpustakaan sumber terbuka lan kerangka kerja kanggo nyuda wektu lan biaya pangembangan. Nanging medali iki uga duwe kekurangan: kesempatan kanggo marisi kesalahan lan kerentanan wong liya.

Temenan, tim kudu ngerti komponen open source sing kalebu ing aplikasi kasebut, mesthekake yen versi sing dipercaya diundhuh saka sumber sing bisa dipercaya, lan ndownload versi komponen sing dianyari sawise kerentanan sing anyar ditemokake ditambal.

Ing kirim iki, kita bakal ndeleng nggunakake OWASP Dependency Check kanggo mbatalake mbangun yen ndeteksi masalah serius karo kode sampeyan.

Ing buku "Keamanan Pembangunan ing Proyek Agile" diterangake kaya ing ngisor iki. OWASP Dependency Check minangka scanner gratis sing menehi katalog kabeh komponen open source sing digunakake ing aplikasi lan nuduhake kerentanan sing ana. Ana versi Jawa, .NET, Ruby (gemspec), PHP (komposer), Node.js lan Python, uga kanggo sawetara proyek C/C ++. Dependency Check terintegrasi karo alat mbangun umum, kalebu Ant, Maven lan Gradle, lan server integrasi terus kaya Jenkins.

Dependency Check nglaporake kabeh komponen sing duwe kerentanan sing dikenal saka NIST's National Vulnerability Database (NVD) lan dianyari karo data saka feed warta NVD.

Untunge, kabeh iki bisa ditindakake kanthi otomatis nggunakake piranti kaya proyek OWASP Dependency Check utawa program komersial kaya Bebek Ireng, Xray JFrog, Snyk, Siklus Urip Nexus Sonatype utawa SourceClear.

Piranti kasebut bisa dilebokake ing saluran pipa kanggo inventarisasi dependensi sumber terbuka kanthi otomatis, ngenali versi perpustakaan lan perpustakaan sing wis lawas sing ngemot kerentanan sing dikenal, lan mbatalake mbangun yen ana masalah serius.

Priksa Ketergantungan OWASP

Kanggo nyoba lan nduduhake cara kerjane Dependency Check, kita nggunakake gudang iki ketergantungan-mriksa-conto.

Kanggo ndeleng laporan HTML, sampeyan kudu ngatur server web nginx ing gitlab-runner.

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

Ing pungkasan perakitan sampeyan bisa ndeleng gambar iki:

Nggunakake pemindai kerentanan kanggo perpustakaan sing digunakake Dependency-Check ing GitlabCI

Tindakake tautan lan deleng laporan Priksa Ketergantungan.

Gambar pisanan minangka bagean ndhuwur laporan kanthi ringkesan.

Nggunakake pemindai kerentanan kanggo perpustakaan sing digunakake Dependency-Check ing GitlabCI

Rincian gambar kapindho CVE-2017-5638. Ing kene kita ndeleng level CVE lan pranala menyang eksploitasi.

Nggunakake pemindai kerentanan kanggo perpustakaan sing digunakake Dependency-Check ing GitlabCI

Gambar katelu yaiku rincian log4j-api-2.7.jar. Kita weruh yen level CVE yaiku 7.5 lan 9.8.

Nggunakake pemindai kerentanan kanggo perpustakaan sing digunakake Dependency-Check ing GitlabCI

Gambar kaping papat yaiku rincian commons-fileupload-1.3.2.jar. Kita weruh yen level CVE yaiku 7.5 lan 9.8.

Nggunakake pemindai kerentanan kanggo perpustakaan sing digunakake Dependency-Check ing GitlabCI

Yen sampeyan pengin nggunakake kaca gitlab, mula ora bakal bisa - tugas sing tiba ora bakal nggawe artefak.

Tuladha ing kene https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Mbangun output: ora ana artefak, aku ora weruh laporan html. Sampeyan kudu nyoba Artifact: tansah

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

Nggunakake pemindai kerentanan kanggo perpustakaan sing digunakake Dependency-Check ing GitlabCI

Ngatur tingkat kerentanan CVE

Baris paling penting ing file gitlab-ci.yaml:

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

Kanthi parameter failBuildOnCVSS sampeyan bisa nyetel tingkat kerentanan CVE sing sampeyan kudu nanggapi.

Ngundhuh NIST Vulnerability Database (NVD) saka Internet

Apa sampeyan ngerteni manawa NIST terus-terusan ndownload database kerentanan (NVD) NIST saka Internet:

Nggunakake pemindai kerentanan kanggo perpustakaan sing digunakake Dependency-Check ing GitlabCI

Kanggo ngundhuh, sampeyan bisa nggunakake sarana nist_data_mirror_golang

Ayo nginstal lan miwiti.

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 upload NIST JSON CVE menyang /var/www/repos/nist-data-mirror/ nalika wiwitan lan nganyari data saben 24 jam.

Kanggo ndownload CVE JSON NIST, sampeyan kudu ngatur server web nginx (contone, ing gitlab-runner).

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

}

Supaya ora nggawe baris dawa ngendi mvn dibukak, kita bakal mindhah paramèter menyang variabel kapisah DEPENDENCY_OPTS.

Konfigurasi minimal pungkasan .gitlab-ci.yml bakal katon kaya iki:

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 babagan DevOps lan Keamanan
Saluran Telegram DevSecOps / SSDLC - Pangembangan sing aman

Source: www.habr.com

Add a comment