A sebezhetőség-kezelés fontos része a modern rendszereket alkotó szoftverkomponensek ellátási láncának alapos megértése és biztosítása. Az Agilis és a DevOps csapatok széles körben használják a nyílt forráskódú könyvtárakat és keretrendszereket a fejlesztési idő és költség csökkentése érdekében. De ennek az éremnek van egy árnyoldala is: lehetősége mások hibáinak és sebezhetőségeinek örökölésére.
Nyilvánvaló, hogy a csapatnak tudnia kell, mely nyílt forráskódú összetevőket tartalmazza alkalmazásai, gondoskodnia kell arról, hogy az ismert megbízható verziókat letöltsék ismert megbízható forrásokból, és az újonnan felfedezett sebezhetőségek javítása után le kell töltenie az összetevők frissített verzióit.
Ebben a bejegyzésben megvizsgáljuk, hogy az OWASP Dependency Check segítségével megszakíthat egy összeállítást, ha súlyos problémákat észlel a kóddal.
A „Fejlesztési biztonság agilis projektekben” című könyv a következőképpen írja le. Az OWASP Dependency Check egy ingyenes szkenner, amely katalógusba veszi az alkalmazásokban használt összes nyílt forráskódú összetevőt, és megmutatja a bennük található sebezhetőségeket. Léteznek Java, .NET, Ruby (gemspec), PHP (composer), Node.js és Python verziók, valamint néhány C/C++ projekthez. A Dependency Check integrálható a gyakori összeállítási eszközökkel, köztük az Ant, a Maven és a Gradle, valamint a folyamatos integrációs szerverekkel, mint például a Jenkins.
A függőségi ellenőrzés minden ismert sérülékenységgel rendelkező összetevőt jelent a NIST National Vulnerability Database (NVD) adatbázisából, és frissül az NVD hírfolyamaiból származó adatokkal.
Szerencsére mindez automatikusan megtehető olyan eszközök segítségével, mint az OWASP Dependency Check projekt vagy olyan kereskedelmi programok, mint
Ezek az eszközök beépíthetők az összeállítási folyamatokba, hogy automatikusan leltározzák a nyílt forráskódú függőségeket, azonosítsák a könyvtárak elavult verzióit és az ismert sebezhetőségeket tartalmazó könyvtárakat, és megszakítsák a buildeket, ha komoly problémákat észlelnek.
OWASP függőségi ellenőrzés
A Dependency Check működésének tesztelésére és bemutatására ezt a tárolót használjuk
A HTML-jelentés megtekintéséhez konfigurálnia kell az nginx webszervert a gitlab-runneren.
Példa egy minimális nginx konfigurációra:
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 {
}
}
Az összeállítás végén ezt a képet láthatja:
Kövesse a linket, és tekintse meg a Dependency Check jelentést.
Az első képernyőkép a jelentés felső része egy összefoglalóval.
A második képernyőkép részletei CVE-2017-5638. Itt láthatjuk a CVE szintet és a kizsákmányolásokhoz mutató hivatkozásokat.
A harmadik képernyőkép a log4j-api-2.7.jar részleteit tartalmazza. Látjuk, hogy a CVE szintje 7.5 és 9.8.
A negyedik képernyőkép a commons-fileupload-1.3.2.jar részletei. Látjuk, hogy a CVE szintje 7.5 és 9.8.
Ha gitlab oldalakat szeretne használni, akkor ez nem fog működni - egy elesett feladat nem hoz létre műterméket.
Példa itt
Build output: nincsenek műtermékek, nem látom a html jelentést. Ki kell próbálnia az Artifact: mindig
A CVE sebezhetőségi szintjének szabályozása
A gitlab-ci.yaml fájl legfontosabb sora:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7
A failBuildOnCVSS paraméterrel beállíthatja a CVE biztonsági rések szintjét, amelyekre reagálni kell.
A NIST Vulnerability Database (NVD) letöltése az internetről
Észrevette, hogy a NIST folyamatosan letölti a NIST sebezhetőségi adatbázisait (NVD) az internetről:
A letöltéshez használhatja a segédprogramot
Telepítsük és indítsuk el.
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
A Nist-data-mirror indításkor feltölti a NIST JSON CVE-t a /var/www/repos/nist-data-mirror/ címre, és 24 óránként frissíti az adatokat.
A CVE JSON NIST letöltéséhez konfigurálnia kell az nginx webszervert (például a gitlab-runneren).
Példa egy minimális nginx konfigurációra:
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 {
}
}
Hogy ne legyen hosszú sor, ahol az mvn elindul, a paramétereket áthelyezzük egy külön DEPENDENCY_OPTS változóba.
A végső minimális konfiguráció .gitlab-ci.yml így fog kinézni:
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
Forrás: will.com