A sebezhetőség-ellenőrző használata használt könyvtárakhoz Dependency-Check a GitlabCI-ben

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 Fekete kacsa, JFrog Xray, Snyk, Nexus életciklusa Sonatype ill SourceClear.

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 függőségi ellenőrzési példa.

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:

A sebezhetőség-ellenőrző használata használt könyvtárakhoz Dependency-Check a GitlabCI-ben

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 sebezhetőség-ellenőrző használata használt könyvtárakhoz Dependency-Check a GitlabCI-ben

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 sebezhetőség-ellenőrző használata használt könyvtárakhoz Dependency-Check a GitlabCI-ben

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 sebezhetőség-ellenőrző használata használt könyvtárakhoz Dependency-Check a GitlabCI-ben

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.

A sebezhetőség-ellenőrző használata használt könyvtárakhoz Dependency-Check a GitlabCI-ben

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 https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Build output: nincsenek műtermékek, nem látom a html jelentést. Ki kell próbálnia az Artifact: mindig

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

A sebezhetőség-ellenőrző használata használt könyvtárakhoz Dependency-Check a GitlabCI-ben

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 sebezhetőség-ellenőrző használata használt könyvtárakhoz Dependency-Check a GitlabCI-ben

A letöltéshez használhatja a segédprogramot nist_data_mirror_golang

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

Telegram-csevegés a DevOpsról és a biztonságról
Telegram csatorna DevSecOps / SSDLC - Biztonságos fejlesztés

Forrás: will.com

Hozzászólás