A sebezőségek vizsgálójának használata a GitlabCI által használt Dependency-Check könyvtárakban

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 Black Duck, JFrog Xray, Snyk, Nexus Lifecycle a Sonatype cégtől vagy a SourceClear.

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 dependency-check-example.

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:

A sebezőségek vizsgálójának használata a GitlabCI által használt Dependency-Check könyvtárakban

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 sebezőségek vizsgálójának használata a GitlabCI által használt Dependency-Check könyvtárakban

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 sebezőségek vizsgálójának használata a GitlabCI által használt Dependency-Check könyvtárakban

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 sebezőségek vizsgálójának használata a GitlabCI által használt Dependency-Check könyvtárakban

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.

A sebezőségek vizsgálójának használata a GitlabCI által használt Dependency-Check könyvtárakban

Ha GitLab Pages-t szeretnél használni, nem fog menni — a meghiúsult feladat nem hoz létre artefaktumot.

Példa itt https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

A build kimenete: nincsenek artefaktumok, nem látom a HTML jelentést. Próbáld ki az Artifact: always-t.

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

A sebezőségek vizsgálójának használata a GitlabCI által használt Dependency-Check könyvtárakban

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=7

A 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 sebezőségek vizsgálójának használata a GitlabCI által használt Dependency-Check könyvtárakban

A letöltéshez használhatod az eszközt 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 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

Telegram csevegés a DevOps és biztonság témakörében
Telegram csatorna DevSecOps / SSDLC - Biztonságos fejlesztés

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster