Korištenje skenera ranjivosti za korištene biblioteke Provjera ovisnosti u GitlabCI

Važan dio upravljanja ranjivostima je temeljito razumijevanje i osiguranje opskrbnog lanca softverskih komponenti koje čine moderne sustave. Agile i DevOps timovi intenzivno koriste biblioteke i okvire otvorenog koda kako bi smanjili vrijeme i troškove razvoja. Ali ova medalja ima i lošu stranu: priliku naslijediti tuđe pogreške i ranjivosti.

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

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

U knjizi “Sigurnost razvoja u agilnim projektima” to je opisano na sljedeći način. OWASP Dependency Check besplatni je skener koji katalogizira sve komponente otvorenog koda koje se koriste u aplikaciji i prikazuje ranjivosti koje sadrže. Postoje verzije za Javu, .NET, Ruby (gemspec), PHP (kompozitor), Node.js i Python, kao i za neke C/C++ projekte. Provjera ovisnosti integrira se s uobičajenim alatima za izradu, uključujući Ant, Maven i Gradle, te kontinuiranim integracijskim poslužiteljima poput Jenkinsa.

Provjera ovisnosti izvještava o svim komponentama s poznatim ranjivostima iz NIST-ove nacionalne baze podataka o ranjivostima (NVD) i ažurira se podacima iz NVD izvora vijesti.

Srećom, sve se to može učiniti automatski pomoću alata poput OWASP projekta Provjera ovisnosti ili komercijalnih programa poput Crna patka, JFrog Xray, Snyk, Životni ciklus Nexusa Sonatip odn Izvor Clear.

Ovi se alati mogu uključiti u cjevovode za izradu za automatsku inventarizaciju ovisnosti otvorenog koda, identificiranje zastarjelih verzija biblioteka i biblioteka koje sadrže poznate ranjivosti i prekid izgradnje ako se otkriju ozbiljni problemi.

OWASP provjera ovisnosti

Da bismo testirali i demonstrirali kako funkcionira Provjera ovisnosti, koristimo ovo spremište ovisnost-provjera-primjer.

Za pregled HTML izvješća morate konfigurirati nginx web poslužitelj na svom gitlab-runner-u.

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 Provjera ovisnosti u GitlabCI

Slijedite vezu i pogledajte izvješće Provjera ovisnosti.

Prva snimka zaslona je gornji dio izvješća sa sažetkom.

Korištenje skenera ranjivosti za korištene biblioteke Provjera ovisnosti u GitlabCI

Druga snimka zaslona s detaljima CVE-2017-5638. Ovdje vidimo CVE razinu i poveznice na exploite.

Korištenje skenera ranjivosti za korištene biblioteke Provjera ovisnosti u GitlabCI

Treća snimka zaslona je detalji log4j-api-2.7.jar. Vidimo da su CVE razine 7.5 i 9.8.

Korištenje skenera ranjivosti za korištene biblioteke Provjera ovisnosti u GitlabCI

Četvrta snimka zaslona je detalji o commons-fileupload-1.3.2.jar. Vidimo da su CVE razine 7.5 i 9.8.

Korištenje skenera ranjivosti za korištene biblioteke Provjera ovisnosti u GitlabCI

Ako želite koristiti 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 međuverzije: nema artefakata, ne vidim html izvješće. 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 Provjera ovisnosti u GitlabCI

Reguliranje razine CVE ranjivosti

Najvažniji redak 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 koje trebate odgovoriti.

Preuzimanje NIST Vulnerability Database (NVD) s Interneta

Jeste li primijetili da NIST neprestano preuzima NIST baze podataka ranjivosti (NVD) s Interneta:

Korištenje skenera ranjivosti za korištene biblioteke Provjera ovisnosti u GitlabCI

Za preuzimanje možete koristiti uslužni program nist_data_mirror_golang

Instalirajmo ga i pokrenimo.

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 učitava NIST JSON CVE na /var/www/repos/nist-data-mirror/ prilikom pokretanja i ažurira podatke svaka 24 sata.

Da biste preuzeli CVE JSON NIST, trebate konfigurirati nginx web poslužitelj (na primjer, na vašem gitlab-runner-u).

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 pravili dugačak red gdje se pokreće mvn, parametre ćemo premjestiti u zasebnu varijablu DEPENDENCY_OPTS.

Konačna minimalna konfiguracija .gitlab-ci.yml izgledat će 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