Kasutatud teekide haavatavuse skanneri kasutamine Dependency-Check GitlabCI-s

Haavatavuse haldamise oluline osa on kaasaegseid süsteeme moodustavate tarkvarakomponentide tarneahela põhjalik mõistmine ja kindlustamine. Agile ja DevOpsi meeskonnad kasutavad arendusaja ja -kulude vähendamiseks ulatuslikult avatud lähtekoodiga teeke ja raamistikke. Kuid sellel medalil on ka varjukülg: võimalus pärida teiste inimeste vigu ja haavatavust.

Ilmselgelt peaks meeskond teadma, millised avatud lähtekoodiga komponendid on tema rakendustesse kaasatud, tagama teadaolevate usaldusväärsete versioonide allalaadimise teadaolevatest usaldusväärsetest allikatest ja laadima alla komponentide värskendatud versioonid pärast äsja avastatud haavatavuste parandamist.

Selles postituses vaatleme OWASP-i sõltuvuskontrolli kasutamist ehitamise katkestamiseks, kui see tuvastab teie koodiga tõsiseid probleeme.

Raamatus “Arendusturvalisus agiilsetes projektides” on seda kirjeldatud järgmiselt. OWASP Dependency Check on tasuta skanner, mis kataloogib kõik rakenduses kasutatavad avatud lähtekoodiga komponendid ja näitab nendes sisalduvaid haavatavusi. Olemas on versioonid Java, .NET, Ruby (gemspec), PHP (helilooja), Node.js ja Python jaoks, aga ka mõne C/C++ projekti jaoks. Sõltuvuskontroll integreerub tavaliste ehitustööriistadega, sealhulgas Ant, Maven ja Gradle, ning pideva integratsiooni serveritega, nagu Jenkins.

Sõltuvuskontroll teatab kõigist teadaolevate haavatavustega komponentidest NISTi riikliku haavatavuse andmebaasi (NVD) põhjal ja seda värskendatakse NVD uudistevoogude andmetega.

Õnneks saab seda kõike teha automaatselt, kasutades selliseid tööriistu nagu OWASP Dependency Check projekt või kommertsprogramme nagu Must part, JFrog röntgen, Snyk, Nexuse elutsükkel Sonatüüp või SourceClear.

Neid tööriistu saab lisada ehituskonveieritesse, et automaatselt inventeerida avatud lähtekoodiga sõltuvusi, tuvastada teekide aegunud versioone ja teadaolevaid turvaauke sisaldavaid teeke ning katkestada järgud, kui tuvastatakse tõsised probleemid.

OWASP-i sõltuvuskontroll

Sõltuvuskontrolli toimimise testimiseks ja demonstreerimiseks kasutame seda hoidlat sõltuvuse kontrollimise näide.

HTML-aruande vaatamiseks peate oma gitlab-runneris konfigureerima nginxi veebiserveri.

Näide minimaalsest nginxi konfiguratsioonist:

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 {
    }
}

Kokkupaneku lõpus näete seda pilti:

Kasutatud teekide haavatavuse skanneri kasutamine Dependency-Check GitlabCI-s

Järgige linki ja vaadake sõltuvuskontrolli aruannet.

Esimene ekraanipilt on aruande ülemine osa koos kokkuvõttega.

Kasutatud teekide haavatavuse skanneri kasutamine Dependency-Check GitlabCI-s

Teise ekraanipildi üksikasjad CVE-2017-5638. Siin näeme CVE taset ja linke ärakasutamiseks.

Kasutatud teekide haavatavuse skanneri kasutamine Dependency-Check GitlabCI-s

Kolmas ekraanipilt on faili log4j-api-2.7.jar üksikasjad. Näeme, et CVE tasemed on 7.5 ja 9.8.

Kasutatud teekide haavatavuse skanneri kasutamine Dependency-Check GitlabCI-s

Neljas ekraanipilt on faili commons-fileupload-1.3.2.jar üksikasjad. Näeme, et CVE tasemed on 7.5 ja 9.8.

Kasutatud teekide haavatavuse skanneri kasutamine Dependency-Check GitlabCI-s

Kui soovite kasutada Gitlabi lehti, siis see ei tööta - kukkunud ülesanne ei loo artefakti.

Näide siin https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Ehitamise väljund: artefakte pole, ma ei näe html-aruannet. Peaksite proovima Artifact: alati

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

Kasutatud teekide haavatavuse skanneri kasutamine Dependency-Check GitlabCI-s

CVE haavatavuste taseme reguleerimine

Gitlab-ci.yaml faili kõige olulisem rida:

mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7

Parameetri failBuildOnCVSS abil saate reguleerida CVE haavatavuste taset, millele peate reageerima.

NIST haavatavuse andmebaasi (NVD) allalaadimine Internetist

Kas olete märganud, et NIST laadib pidevalt Internetist alla NIST haavatavuse andmebaase (NVD):

Kasutatud teekide haavatavuse skanneri kasutamine Dependency-Check GitlabCI-s

Allalaadimiseks võite kasutada utiliiti nist_data_mirror_golang

Installime ja käivitame selle.

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 laadib käivitamisel NIST JSON CVE üles aadressile /var/www/repos/nist-data-mirror/ ja värskendab andmeid iga 24 tunni järel.

CVE JSON NIST allalaadimiseks peate konfigureerima nginxi veebiserveri (näiteks oma gitlab-runneris).

Näide minimaalsest nginxi konfiguratsioonist:

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 {
    }

}

Et mitte teha pikka rida, kus mvn käivitatakse, tõstame parameetrid eraldi muutujasse DEPENDENCY_OPTS.

Viimane minimaalne konfiguratsioon .gitlab-ci.yml näeb välja selline:

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

Telegrami vestlus DevOpsi ja turvalisuse kohta
Telegrammi kanal DevSecOps / SSDLC – turvaline arendus

Allikas: www.habr.com

Lisa kommentaar