Korištenje skenera ranjivosti za korištene biblioteke Dependency-Check u GitlabCI

Važan dio upravljanja ranjivostima je temeljno razumijevanje i osiguranje lanca nabavke softverskih komponenti koje čine moderne sisteme. Agile i DevOps timovi uveliko koriste biblioteke i okvire otvorenog koda kako bi smanjili vrijeme i troškove razvoja. Ali ova medalja ima i lošu stranu: mogućnost da se naslijede tuđe greške i ranjivosti.

Očigledno, tim bi trebao biti siguran da zna koje su komponente otvorenog koda uključene u njegove aplikacije, osigurati da se poznate pouzdane verzije preuzimaju iz poznatih pouzdanih izvora i preuzimaju ažurirane verzije komponenti nakon što se novootkrivene ranjivosti zakrpe.

U ovom postu ćemo pogledati korištenje OWASP Provjere ovisnosti za prekid izgradnje ako otkrije ozbiljne probleme s vašim kodom.

U knjizi “Razvojna sigurnost u agilnim projektima” opisano je kako slijedi. OWASP Dependency Check je besplatni skener koji katalogizira sve komponente otvorenog koda koje se koriste u aplikaciji i pokazuje ranjivosti koje sadrže. Postoje verzije za Java, .NET, Ruby (gemspec), PHP (kompozitor), Node.js i Python, kao i za neke C/C++ projekte. Dependency Check se integriše sa uobičajenim alatima za pravljenje, uključujući Ant, Maven i Gradle, i serverima za kontinuiranu integraciju kao što je Jenkins.

Provera zavisnosti izveštava o svim komponentama sa poznatim ranjivostima iz NIST-ove Nacionalne baze podataka o ranjivosti (NVD) i ažurira se podacima iz NVD vesti.

Srećom, sve se ovo može obaviti automatski pomoću alata poput projekta OWASP Dependency Check ili komercijalnih programa poput Crna patka, JFrog Xray, Snyk, Nexus životni ciklus Sonatype ili SourceClear.

Ovi alati mogu biti uključeni u cevovode za izgradnju kako bi se automatski inventarizirale ovisnosti otvorenog koda, identificirale zastarjele verzije biblioteka i biblioteka koje sadrže poznate ranjivosti i prekinule gradnje ako se otkriju ozbiljni problemi.

OWASP Provjera ovisnosti

Za testiranje i demonstraciju kako Provjera ovisnosti funkcionira, koristimo ovo spremište primjer za provjeru zavisnosti.

Da biste vidjeli HTML izvještaj, trebate konfigurirati nginx web server na vašem gitlab-runneru.

Primjer minimalne nginx konfiguracije:

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 kraju montaže možete vidjeti ovu sliku:

Korištenje skenera ranjivosti za korištene biblioteke Dependency-Check u GitlabCI

Slijedite vezu i pogledajte izvještaj o provjeri zavisnosti.

Prvi snimak ekrana je gornji deo izveštaja sa rezimeom.

Korištenje skenera ranjivosti za korištene biblioteke Dependency-Check u GitlabCI

Detalji druge slike ekrana CVE-2017-5638. Ovdje vidimo CVE nivo i veze do eksploatacija.

Korištenje skenera ranjivosti za korištene biblioteke Dependency-Check u GitlabCI

Treći snimak ekrana su detalji o log4j-api-2.7.jar. Vidimo da su CVE nivoi 7.5 i 9.8.

Korištenje skenera ranjivosti za korištene biblioteke Dependency-Check u GitlabCI

Četvrti snimak ekrana su detalji commons-fileupload-1.3.2.jar. Vidimo da su CVE nivoi 7.5 i 9.8.

Korištenje skenera ranjivosti za korištene biblioteke Dependency-Check u GitlabCI

Ako želite da koristite gitlab stranice, onda to neće raditi - pali zadatak neće stvoriti artefakt.

Primjer ovdje https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Izlaz gradnje: nema artefakata, ne vidim html izvještaj. Trebali biste isprobati Artifact: uvijek

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

Korištenje skenera ranjivosti za korištene biblioteke Dependency-Check u GitlabCI

Regulisanje nivoa CVE ranjivosti

Najvažnija linija u datoteci gitlab-ci.yaml:

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

Pomoću parametra failBuildOnCVSS možete podesiti razinu CVE ranjivosti na koju trebate odgovoriti.

Preuzimanje NIST baze podataka ranjivosti (NVD) sa Interneta

Jeste li primijetili da NIST stalno preuzima NIST baze podataka ranjivosti (NVD) sa interneta:

Korištenje skenera ranjivosti za korištene biblioteke Dependency-Check u GitlabCI

Za preuzimanje možete koristiti uslužni program nist_data_mirror_golang

Hajde da ga instaliramo i pokrenemo.

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 otprema NIST JSON CVE na /var/www/repos/nist-data-mirror/ pri pokretanju i ažurira podatke svaka 24 sata.

Da biste preuzeli CVE JSON NIST, morate konfigurirati nginx web server (na primjer, na vašem gitlab-runneru).

Primjer minimalne nginx konfiguracije:

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

}

Kako ne bismo napravili dugu liniju gdje je pokrenut mvn, parametre ćemo premjestiti u zasebnu varijablu DEPENDENCY_OPTS.

Konačna minimalna konfiguracija .gitlab-ci.yml će izgledati ovako:

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 chat o DevOps-u i sigurnosti
Telegram kanal DevSecOps / SSDLC - Siguran razvoj

izvor: www.habr.com

Dodajte komentar