Uzante la vundeblecon skanilo por uzitaj bibliotekoj Dependeco-Kontrolo en GitlabCI

Grava parto de vundebleco-administrado estas ĝisfunde kompreni kaj sekurigi la provizoĉenon de la softvarkomponentoj kiuj konsistigas modernajn sistemojn. Agile kaj DevOps-teamoj multe uzas malfermfontajn bibliotekojn kaj kadrojn por redukti disvolvan tempon kaj koston. Sed ĉi tiu medalo ankaŭ havas malavantaĝon: la ŝancon heredi la erarojn kaj vundeblecojn de aliaj homoj.

Evidente, la teamo devas esti certa scii kiuj malfermfontaj komponantoj estas inkluzivitaj en ĝiaj aplikoj, certigi ke konataj fidindaj versioj estas elŝutitaj de konataj fidindaj fontoj, kaj elŝuti ĝisdatigitajn versiojn de komponentoj post lastatempe malkovritaj vundeblecoj estas flikitaj.

En ĉi tiu afiŝo, ni rigardos uzi OWASP Dependecan Kontrolon por ĉesigi konstruon se ĝi detektas gravajn problemojn kun via kodo.

En la libro "Disvolva Sekureco en Agile Projects" ĝi estas priskribita jene. OWASP Dependency Check estas senpaga skanilo, kiu katalogas ĉiujn malfermfontajn komponantojn uzatajn en aplikaĵo kaj montras la vundeblecojn, kiujn ili enhavas. Estas versioj por Java, .NET, Ruby (gemspec), PHP (komponisto), Node.js kaj Python, kaj ankaŭ por iuj projektoj C/C++. Dependeca Kontrolo integriĝas kun komunaj konstruaj iloj, inkluzive de Ant, Maven kaj Gradle, kaj daŭraj integrigaj serviloj kiel Jenkins.

Dependeca Kontrolo raportas ĉiujn komponentojn kun konataj vundeblecoj de la Nacia Vulnerability Database (NVD) de NIST kaj estas ĝisdatigita kun datumoj de NVD-novaĵfluoj.

Feliĉe, ĉio ĉi povas esti farita aŭtomate uzante ilojn kiel la projekto OWASP Dependency Check aŭ komercajn programojn kiel Nigra Anaso, JFrog Xray, Snyk, Nexus Vivciklo Sonatipo aŭ SourceClear.

Ĉi tiuj iloj povas esti inkluditaj en konstruoduktoj por aŭtomate inventari malfermfontajn dependecojn, identigi malmodernajn versiojn de bibliotekoj kaj bibliotekoj enhavantaj konatajn vundeblecojn, kaj ĉesigi konstruaĵojn se gravaj problemoj estas detektitaj.

Kontrolo pri Dependeco de OWASP

Por testi kaj pruvi kiel funkcias Dependeca Kontrolo, ni uzas ĉi tiun deponejon dependeco-kontrolo-ekzemplo.

Por vidi la HTML-raporton, vi devas agordi la retservilon nginx sur via gitlab-runner.

Ekzemplo de minimuma nginx-agordo:

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

Ĉe la fino de la asembleo vi povas vidi ĉi tiun bildon:

Uzante la vundeblecon skanilo por uzitaj bibliotekoj Dependeco-Kontrolo en GitlabCI

Sekvu la ligilon kaj vidu la raporton pri Dependeco-Kontrolo.

La unua ekrankopio estas la supra parto de la raporto kun resumo.

Uzante la vundeblecon skanilo por uzitaj bibliotekoj Dependeco-Kontrolo en GitlabCI

Dua ekrankopio detaloj CVE-2017-5638. Ĉi tie ni vidas la CVE-nivelon kaj ligilojn al ekspluatoj.

Uzante la vundeblecon skanilo por uzitaj bibliotekoj Dependeco-Kontrolo en GitlabCI

La tria ekrankopio estas detaloj de log4j-api-2.7.jar. Ni vidas, ke CVE-niveloj estas 7.5 kaj 9.8.

Uzante la vundeblecon skanilo por uzitaj bibliotekoj Dependeco-Kontrolo en GitlabCI

La kvara ekrankopio estas la detaloj de commons-fileupload-1.3.2.jar. Ni vidas, ke CVE-niveloj estas 7.5 kaj 9.8.

Uzante la vundeblecon skanilo por uzitaj bibliotekoj Dependeco-Kontrolo en GitlabCI

Se vi volas uzi gitlab-paĝojn, tiam ĝi ne funkcios - falinta tasko ne kreos artefakton.

Ekzemplo ĉi tie https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Konstrua eligo: neniuj artefaktoj, mi ne vidas la html-raporton. Vi devus provi Artefakto: ĉiam

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

Uzante la vundeblecon skanilo por uzitaj bibliotekoj Dependeco-Kontrolo en GitlabCI

Reguligante la nivelon de CVE-vundeblecoj

La plej grava linio en la gitlab-ci.yaml dosiero:

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

Per la parametro failBuildOnCVSS vi povas ĝustigi la nivelon de CVE-vundeblecoj, al kiuj vi devas respondi.

Elŝutante la NIST-Vulnerability Database (NVD) de la Interreto

Ĉu vi rimarkis, ke NIST konstante elŝutas la datumbazojn pri vundeblecoj de NIST (NVD) de la Interreto:

Uzante la vundeblecon skanilo por uzitaj bibliotekoj Dependeco-Kontrolo en GitlabCI

Por elŝuti, vi povas uzi la ilon nist_data_mirror_golang

Ni instalu kaj lanĉu ĝin.

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 alŝutas la NIST JSON CVE al /var/www/repos/nist-data-mirror/ dum ekfunkciigo kaj ĝisdatigas la datumojn ĉiujn 24 horojn.

Por elŝuti CVE JSON NIST, vi devas agordi la retservilon nginx (ekzemple, ĉe via gitlab-runner).

Ekzemplo de minimuma nginx-agordo:

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

}

Por ne fari longan linion kie mvn estas lanĉita, ni movos la parametrojn en apartan variablon DEPENDENCY_OPTS.

La fina minimuma agordo .gitlab-ci.yml aspektos jene:

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-babilado pri DevOps kaj Sekureco
Telegram-kanalo DevSecOps / SSDLC - Sekura evoluo

fonto: www.habr.com

Aldoni komenton