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
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
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:
Seuraa linkkiä ja katso riippuvuustarkistusraportti.
Ensimmäinen kuvakaappaus on raportin yläosa, jossa on yhteenveto.
Toisen kuvakaappauksen tiedot CVE-2017-5638. Täällä näemme CVE-tason ja linkit hyväksikäyttöihin.
Kolmas kuvakaappaus on tiedot log4j-api-2.7.jar. Näemme, että CVE-tasot ovat 7.5 ja 9.8.
Neljäs kuvakaappaus on tiedostoon commons-fileupload-1.3.2.jar tiedot. Näemme, että CVE-tasot ovat 7.5 ja 9.8.
Jos haluat käyttää gitlab-sivuja, se ei toimi - kaatunut tehtävä ei luo artefaktia.
Esimerkki tästä
Rakennustulos: ei artefakteja, en näe html-raporttia. Sinun pitäisi kokeilla Artifact: aina
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ä:
Lataamiseen voit käyttää apuohjelmaa
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
Lähde: will.com