Uporaba pregledovalnika ranljivosti za uporabljene knjižnice Preverjanje odvisnosti v GitlabCI

Pomemben del upravljanja ranljivosti je temeljito razumevanje in zavarovanje dobavne verige programskih komponent, ki sestavljajo sodobne sisteme. Ekipe Agile in DevOps v veliki meri uporabljajo odprtokodne knjižnice in ogrodja za zmanjšanje časa in stroškov razvoja. Toda ta medalja ima tudi slabo stran: možnost podedovanja napak in ranljivosti drugih ljudi.

Očitno bi morala ekipa vedeti, katere odprtokodne komponente so vključene v njene aplikacije, zagotoviti, da so znane zanesljive različice prenesene iz znanih zanesljivih virov, in prenesti posodobljene različice komponent, potem ko so na novo odkrite ranljivosti popravljene.

V tej objavi si bomo ogledali uporabo preverjanja odvisnosti OWASP za prekinitev gradnje, če zazna resne težave z vašo kodo.

V knjigi “Razvojna varnost v agilnih projektih” je opisano takole. OWASP Dependency Check je brezplačen pregledovalnik, ki katalogizira vse odprtokodne komponente, uporabljene v aplikaciji, in prikaže ranljivosti, ki jih vsebujejo. Obstajajo različice za Javo, .NET, Ruby (gemspec), PHP (kompozitor), Node.js in Python ter za nekatere projekte C/C++. Preverjanje odvisnosti se integrira z običajnimi gradbenimi orodji, vključno z Ant, Maven in Gradle, ter strežniki za stalno integracijo, kot je Jenkins.

Preverjanje odvisnosti poroča o vseh komponentah z znanimi ranljivostmi iz Nacionalne zbirke podatkov o ranljivosti (NVD) NIST in se posodablja s podatki iz virov novic NVD.

Na srečo je vse to mogoče storiti samodejno z uporabo orodij, kot je projekt preverjanja odvisnosti OWASP, ali komercialnih programov, kot je Črna raca, Rentgen JFrog, Snyk, Življenjski cikel Nexusa Sonatip oz SourceClear.

Ta orodja je mogoče vključiti v cevovode gradnje za samodejno popisovanje odprtokodnih odvisnosti, prepoznavanje zastarelih različic knjižnic in knjižnic, ki vsebujejo znane ranljivosti, ter prekinitev gradenj, če so odkrite resne težave.

Preverjanje odvisnosti OWASP

Za preizkus in predstavitev delovanja preverjanja odvisnosti uporabljamo to skladišče primer preverjanja odvisnosti.

Če si želite ogledati poročilo HTML, morate konfigurirati spletni strežnik nginx na vašem gitlab-runnerju.

Primer minimalne konfiguracije 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 {
    }
}

Na koncu sestavljanja lahko vidite to sliko:

Uporaba pregledovalnika ranljivosti za uporabljene knjižnice Preverjanje odvisnosti v GitlabCI

Sledite povezavi in ​​si oglejte poročilo o preverjanju odvisnosti.

Prvi posnetek zaslona je zgornji del poročila s povzetkom.

Uporaba pregledovalnika ranljivosti za uporabljene knjižnice Preverjanje odvisnosti v GitlabCI

Drugi posnetek zaslona s podrobnostmi CVE-2017-5638. Tukaj vidimo raven CVE in povezave do podvigov.

Uporaba pregledovalnika ranljivosti za uporabljene knjižnice Preverjanje odvisnosti v GitlabCI

Tretji posnetek zaslona prikazuje podrobnosti log4j-api-2.7.jar. Vidimo, da sta ravni CVE 7.5 in 9.8.

Uporaba pregledovalnika ranljivosti za uporabljene knjižnice Preverjanje odvisnosti v GitlabCI

Četrti posnetek zaslona prikazuje podrobnosti o commons-fileupload-1.3.2.jar. Vidimo, da sta ravni CVE 7.5 in 9.8.

Uporaba pregledovalnika ranljivosti za uporabljene knjižnice Preverjanje odvisnosti v GitlabCI

Če želite uporabljati strani gitlab, potem ne bo delovalo - padla naloga ne bo ustvarila artefakta.

Primer tukaj https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Izhod gradnje: brez artefaktov, ne vidim poročila html. Moral bi poskusiti Artifact: vedno

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

Uporaba pregledovalnika ranljivosti za uporabljene knjižnice Preverjanje odvisnosti v GitlabCI

Urejanje ravni ranljivosti CVE

Najpomembnejša vrstica v datoteki gitlab-ci.yaml:

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

S parametrom failBuildOnCVSS lahko prilagodite raven ranljivosti CVE, na katere se morate odzvati.

Prenos podatkovne zbirke ranljivosti NIST (NVD) z interneta

Ali ste opazili, da NIST nenehno prenaša zbirke podatkov NIST o ranljivostih (NVD) z interneta:

Uporaba pregledovalnika ranljivosti za uporabljene knjižnice Preverjanje odvisnosti v GitlabCI

Za prenos lahko uporabite pripomoček nist_data_mirror_golang

Namestimo in zaženemo.

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 ob zagonu naloži NIST JSON CVE v /var/www/repos/nist-data-mirror/ in posodobi podatke vsakih 24 ur.

Če želite prenesti CVE JSON NIST, morate konfigurirati spletni strežnik nginx (na primer na gitlab-runnerju).

Primer minimalne konfiguracije 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 {
    }

}

Da ne bi delali dolge vrstice, kjer se zažene mvn, bomo parametre premaknili v ločeno spremenljivko DEPENDENCY_OPTS.

Končna minimalna konfiguracija .gitlab-ci.yml bo videti takole:

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

Klepet v Telegramu o DevOps in varnosti
Telegram kanal DevSecOps / SSDLC - Varen razvoj

Vir: www.habr.com

Dodaj komentar