A sebezőségek kezelésének fontos része, hogy jól megértsük és biztosítsuk a szoftverkomponensek ellátási láncának biztonságát, amelyekből a modern rendszerek felépülnek. Az agilis módszertanokat és DevOps-ot alkalmazó csapatok széles körben használnak nyílt forráskódú könyvtárakat és keretrendszereket, hogy csökkentsék a fejlesztési időt és költségeket. De ennek a megoldásnak is van árnyoldala: lehetőségünk van örökölni mások hibáit és sebezőségeit.
Nyilvánvaló, hogy a csapatnak minden esetben tudnia kell, mely nyílt forráskódú komponensek találhatók az alkalmazásaiban, figyelemmel kell kísérnie, hogy megbízható verziók kerüljenek letöltésre megbízható forrásokból, és frissítenie kell a komponensek verzióit az újonnan felfedezett sebezőségek javítása után.
Ebben a bejegyzésben az OWASP Dependency Check használatát vizsgáljuk meg a kódjában található súlyos problémák észlelése esetén történő építési folyamat megszakítására.
A "Biztonság a fejlesztésben agilis projektekben" című könyvben így van leírva. Az OWASP Dependency Check egy ingyenes szkenner, amely katalogizálja az alkalmazásban használt nyílt forráskódú komponenseket, és megmutatja bennük található sebezőségeket. Léteznek verziói Java, .NET, Ruby (gemspec), PHP (composer), Node.js és Python számára, valamint néhány C/C++ projekthez. A Dependency Check integrálható a közismert build eszközökkel, mint például Ant, Maven és Gradle, valamint folyamatos integrációra alkalmas szerverekkel, mint a Jenkins.
A Dependency Check minden, ismert sebezőséggel rendelkező komponenst jelent a Nemzeti Sebezhetőségi Nyilvántartás (NVD) NIST adatbázisából, és az NVD hírcsatornáiból származó adatok alapján frissül.
Szerencsére mindezt automatikusan is megtehetjük olyan eszközök segítségével, mint az OWASP Dependency Check projekt vagy kereskedelmi programok, mint a , , , a Sonatype cégtől vagy a .
Ezeket az eszközöket bele lehet építeni az építési folyamatokba, hogy automatikusan készítsenek listát a nyílt forráskódú függőségekről, az elavult könyvtárakról és azokat a könyvtárakat, amelyek ismert sebezőségeket tartalmaznak, valamint megszakítsák az építést súlyos problémák észlelése esetén.
OWASP Dependency Check
A Dependency Check tesztelésére és bemutatására ezt a repót használjuk .
HTML jelentés megtekintéséhez konfigurálni kell a Nginx web szervert a gitlab-runner-en.
Egy minimális Nginx példa konfiguráció:
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 {
}
}A build végén így nézhet ki a helyzet:

Kattintsunk a linkre, és láthatjuk a Dependency Check jelentést.
Az első képernyőfelvétel — a jelentés felső része rövid tartalommal.

A második képernyőfelvétel a CVE-2017-5638 részletei. Itt láthatjuk a CVE szintet és a kihasználások linkjeit.

A harmadik képernyőfelvétel — a log4j-api-2.7.jar részletei. Látjuk, hogy a CVE szintek 7.5 és 9.8.

A negyedik képernyőfelvétel — a commons-fileupload-1.3.2.jar részletei. Látjuk, hogy a CVE szintek 7.5 és 9.8.

Ha GitLab Pages-t szeretnél használni, nem fog menni — a meghiúsult feladat nem hoz létre artefaktumot.
Példa itt .
A build kimenete: nincsenek artefaktumok, nem látom a HTML jelentést. Próbáld ki az Artifact: always-t.

A CVE sebezhetőségek szintjének szabályozása
A legfontosabb sor a gitlab-ci.yaml fájlban:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7A failBuildOnCVSS paraméterrel szabályozhatja a CVE sebezhetőségek szintjét, amelyre reagálni kell.
Az NIST sebezhetőségi adatbázis (NVD) letöltése az internetről
Észrevetted, hogy folyamatosan tölti le az NIST sebezhetőségi adatbázisokat (NVD) az internetről:

A letöltéshez használhatod az eszközt
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-mirrorA Nist-data-mirror a CVE JSON NIST-et a /var/www/repos/nist-data-mirror/ könyvtárba tölti le indításkor, és 24 óránként frissíti az adatokat.
A CVE JSON NIST letöltéséhez konfigurálni kell a Nginx web szervert (például a gitlab-runner-en).
Egy minimális Nginx példa konfiguráció:
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 {
}
}Annak érdekében, hogy ne kelljen hosszú sort létrehozni a mvn indításához, kiemeljük a paramétereket egy külön DEPENDENCY_OPTS változóba.
A végső minimális .gitlab-ci.yml konfiguráció így alakul:
változók:
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: habr.com
