Die gebruik van die kwesbaarheidskandeerder vir gebruikte biblioteke Afhanklikheid-tjek in GitlabCI

’n Belangrike deel van kwesbaarheidsbestuur is om die voorsieningsketting van die sagtewarekomponente waaruit moderne stelsels bestaan, deeglik te verstaan ​​en te beveilig. Agile en DevOps-spanne maak uitgebreide gebruik van oopbronbiblioteke en -raamwerke om ontwikkelingstyd en -koste te verminder. Maar hierdie medalje het ook 'n nadeel: die geleentheid om ander mense se foute en kwesbaarhede te erf.

Uiteraard moet die span seker wees om te weet watter oopbronkomponente by sy toepassings ingesluit is, seker te maak dat bekende betroubare weergawes van bekende betroubare bronne afgelaai word, en opgedateerde weergawes van komponente af te laai nadat nuut ontdekte kwesbaarhede reggemaak is.

In hierdie pos sal ons kyk na die gebruik van OWASP Afhanklikheidkontrole om 'n bou te staak as dit ernstige probleme met jou kode opspoor.

In die boek β€œOntwikkelingssekuriteit in Agile Projects” word dit soos volg beskryf. OWASP Dependency Check is 'n gratis skandeerder wat alle oopbronkomponente wat in 'n toepassing gebruik word, katalogiseer en die kwesbaarhede wat dit bevat, wys. Daar is weergawes vir Java, .NET, Ruby (gemspec), PHP (komponis), Node.js en Python, asook vir sommige C/C++-projekte. Dependency Check integreer met algemene bounutsgoed, insluitend Ant, Maven en Gradle, en deurlopende integrasiebedieners soos Jenkins.

Dependency Check rapporteer alle komponente met bekende kwesbaarhede van NIST se National Vulnerability Database (NVD) en word opgedateer met data van NVD-nuusstrome.

Gelukkig kan dit alles outomaties gedoen word met behulp van gereedskap soos die OWASP Dependency Check-projek of kommersiΓ«le programme soos Swart eend, JFrog Xray, Snyk, Nexus Lewensiklus Sonatipe of Bron Duidelik.

Hierdie nutsmiddels kan ingesluit word by die bou van pyplyne om oopbronafhanklikhede outomaties inventaris te maak, verouderde weergawes van biblioteke en biblioteke te identifiseer wat bekende kwesbaarhede bevat, en bouwerk te staak indien ernstige probleme bespeur word.

OWASP-afhanklikheidkontrole

Om te toets en te demonstreer hoe afhanklikheidkontrole werk, gebruik ons ​​hierdie bewaarplek afhanklikheid-kontrole-voorbeeld.

Om die HTML-verslag te sien, moet jy die nginx-webbediener op jou gitlab-runner instel.

Voorbeeld van 'n minimale nginx-konfigurasie:

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

Aan die einde van die samestelling kan jy hierdie prentjie sien:

Die gebruik van die kwesbaarheidskandeerder vir gebruikte biblioteke Afhanklikheid-tjek in GitlabCI

Volg die skakel en sien die Afhanklikheidskontrole-verslag.

Die eerste skermskoot is die boonste deel van die verslag met 'n opsomming.

Die gebruik van die kwesbaarheidskandeerder vir gebruikte biblioteke Afhanklikheid-tjek in GitlabCI

Tweede skermkiekiebesonderhede CVE-2017-5638. Hier sien ons die CVE-vlak en skakels na uitbuitings.

Die gebruik van die kwesbaarheidskandeerder vir gebruikte biblioteke Afhanklikheid-tjek in GitlabCI

Die derde skermkiekie is besonderhede van log4j-api-2.7.jar. Ons sien dat CVE-vlakke 7.5 en 9.8 is.

Die gebruik van die kwesbaarheidskandeerder vir gebruikte biblioteke Afhanklikheid-tjek in GitlabCI

Die vierde skermkiekie is die besonderhede van commons-fileupload-1.3.2.jar. Ons sien dat CVE-vlakke 7.5 en 9.8 is.

Die gebruik van die kwesbaarheidskandeerder vir gebruikte biblioteke Afhanklikheid-tjek in GitlabCI

As jy gitlab-bladsye wil gebruik, sal dit nie werk nie - 'n gevalle taak sal nie 'n artefak skep nie.

Voorbeeld hier https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Bou uitset: geen artefakte nie, ek sien nie die html-verslag nie. Jy moet Artifact probeer: altyd

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

Die gebruik van die kwesbaarheidskandeerder vir gebruikte biblioteke Afhanklikheid-tjek in GitlabCI

Regulering van die vlak van CVE-kwesbaarhede

Die belangrikste reΓ«l in die gitlab-ci.yaml lΓͺer:

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

Met die failBuildOnCVSS-parameter kan jy die vlak van CVE-kwesbaarhede aanpas waarop jy moet reageer.

Laai die NIST Vulnerability Database (NVD) van die internet af

Het jy opgemerk dat NIST voortdurend die NIST-kwesbaarheidsdatabasisse (NVD) van die internet aflaai:

Die gebruik van die kwesbaarheidskandeerder vir gebruikte biblioteke Afhanklikheid-tjek in GitlabCI

Om af te laai, kan jy die nut gebruik nist_data_mirror_golang

Kom ons installeer en begin dit.

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 laai die NIST JSON CVE op na /var/www/repos/nist-data-mirror/ by opstart en werk die data elke 24 uur op.

Om CVE JSON NIST af te laai, moet jy die nginx-webbediener opstel (byvoorbeeld op jou gitlab-runner).

Voorbeeld van 'n minimale nginx-konfigurasie:

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

}

Om nie 'n lang lyn te maak waar mvn geloods word nie, sal ons die parameters na 'n aparte veranderlike DEPENDENCY_OPTS skuif.

Die finale minimale konfigurasie .gitlab-ci.yml sal soos volg lyk:

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-klets oor DevOps en sekuriteit
Telegram-kanaal DevSecOps / SSDLC - Veilige ontwikkeling

Bron: will.com

Voeg 'n opmerking