Käytettyjen kirjastojen haavoittuvuusskannerin käyttö Dependency-Checkin GitlabCI:ssä

Tärkeä osa haavoittuvuuden hallintaa on nykyaikaisten järjestelmien muodostavien ohjelmistokomponenttien toimitusketjun perusteellinen ymmärtäminen ja turvaaminen. Ketterät ja DevOps-tiimit käyttävät laajasti avoimen lähdekoodin kirjastoja ja kehyksiä vähentääkseen kehitysaikaa ja -kustannuksia. Mutta tällä mitalilla on myös varjopuolensa: mahdollisuus periä muiden ihmisten virheet ja haavoittuvuudet.

Ilmeisesti tiimin tulee tietää, mitkä avoimen lähdekoodin komponentit sisältyvät sen sovelluksiin, varmistaa, että tunnetut luotettavat versiot ladataan tunnetuista luotettavista lähteistä ja ladata komponenttien päivitetyt versiot, kun äskettäin löydetyt haavoittuvuudet on korjattu.

Tässä viestissä tarkastellaan OWASP-riippuvuustarkistuksen käyttöä koonnoksen keskeyttämiseen, jos se havaitsee vakavia ongelmia koodissasi.

Kirjassa "Kehitysturva ketterissä projekteissa" se kuvataan seuraavasti. OWASP Dependency Check on ilmainen skanneri, joka luetteloi kaikki sovelluksessa käytetyt avoimen lähdekoodin komponentit ja näyttää niiden sisältämät haavoittuvuudet. On olemassa versioita Javalle, .NET:lle, Rubylle (gemspec), PHP:lle (säveltäjälle), Node.js:lle ja Pythonille sekä joillekin C/C++-projekteille. Dependency Check integroituu yleisiin rakennustyökaluihin, kuten Ant, Maven ja Gradle, sekä jatkuvan integroinnin palvelimiin, kuten Jenkins.

Riippuvuustarkistus raportoi kaikki komponentit, joissa on tunnettuja haavoittuvuuksia NIST:n National Vulnerability Database (NVD) -tietokannasta, ja se päivitetään NVD-uutissyötteiden tiedoilla.

Onneksi kaikki tämä voidaan tehdä automaattisesti käyttämällä työkaluja, kuten OWASP Dependency Check -projekti tai kaupallisia ohjelmia, kuten Musta ankka, JFrog Xray, snyk, Nexuksen elinkaari Sonatype tai Source Clear.

Nämä työkalut voidaan sisällyttää koontiputkiin avoimen lähdekoodin riippuvuuksien automaattiseen inventointiin, kirjastojen vanhentuneiden versioiden ja tunnettuja haavoittuvuuksia sisältävien kirjastojen tunnistamiseen ja koontiversioiden keskeyttämiseen, jos vakavia ongelmia havaitaan.

OWASP-riippuvuustarkistus

Käytämme tätä arkistoa testataksemme ja demonstroidaksemme, kuinka riippuvuustarkistus toimii riippuvuus-tarkistus-esimerkki.

Jotta voit tarkastella HTML-raporttia, sinun on määritettävä nginx-verkkopalvelin gitlab-runnerissasi.

Esimerkki minimaalisesta nginx-kokoonpanosta:

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

Kokoonpanon lopussa näet tämän kuvan:

Käytettyjen kirjastojen haavoittuvuusskannerin käyttö Dependency-Checkin GitlabCI:ssä

Seuraa linkkiä ja katso riippuvuustarkistusraportti.

Ensimmäinen kuvakaappaus on raportin yläosa, jossa on yhteenveto.

Käytettyjen kirjastojen haavoittuvuusskannerin käyttö Dependency-Checkin GitlabCI:ssä

Toisen kuvakaappauksen tiedot CVE-2017-5638. Täällä näemme CVE-tason ja linkit hyväksikäyttöihin.

Käytettyjen kirjastojen haavoittuvuusskannerin käyttö Dependency-Checkin GitlabCI:ssä

Kolmas kuvakaappaus on tiedot log4j-api-2.7.jar. Näemme, että CVE-tasot ovat 7.5 ja 9.8.

Käytettyjen kirjastojen haavoittuvuusskannerin käyttö Dependency-Checkin GitlabCI:ssä

Neljäs kuvakaappaus on tiedostoon commons-fileupload-1.3.2.jar tiedot. Näemme, että CVE-tasot ovat 7.5 ja 9.8.

Käytettyjen kirjastojen haavoittuvuusskannerin käyttö Dependency-Checkin GitlabCI:ssä

Jos haluat käyttää gitlab-sivuja, se ei toimi - kaatunut tehtävä ei luo artefaktia.

Esimerkki tästä https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Rakennustulos: ei artefakteja, en näe html-raporttia. Sinun pitäisi kokeilla Artifact: aina

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

Käytettyjen kirjastojen haavoittuvuusskannerin käyttö Dependency-Checkin GitlabCI:ssä

CVE-haavoittuvuuksien tason säätely

Gitlab-ci.yaml-tiedoston tärkein rivi:

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

FailBuildOnCVSS-parametrilla voit säätää CVE-haavoittuvuuksien tasoa, joihin sinun on reagoitava.

NIST Vulnerability Database (NVD) -tietokannan lataaminen Internetistä

Oletko huomannut, että NIST lataa jatkuvasti NIST-haavoittuvuustietokantoja (NVD) Internetistä:

Käytettyjen kirjastojen haavoittuvuusskannerin käyttö Dependency-Checkin GitlabCI:ssä

Lataamiseen voit käyttää apuohjelmaa nist_data_mirror_golang

Asennamme ja käynnistämme sen.

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 lataa NIST JSON CVE:n osoitteeseen /var/www/repos/nist-data-mirror/ käynnistyksen yhteydessä ja päivittää tiedot 24 tunnin välein.

Jotta voit ladata CVE JSON NIST:n, sinun on määritettävä nginx-verkkopalvelin (esimerkiksi gitlab-runnerissasi).

Esimerkki minimaalisesta nginx-kokoonpanosta:

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

}

Jotta ei tehdä pitkää riviä mvn:n käynnistettäessä, siirrämme parametrit erilliseen muuttujaan DEPENDENCY_OPTS.

Lopullinen minimikonfiguraatio .gitlab-ci.yml näyttää tältä:

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-keskustelu DevOpsista ja turvallisuudesta
Telegram-kanava DevSecOps / SSDLC - Turvallinen kehitys

Lähde: will.com

Lisää kommentti