Gamit ang vulnerability scanner para sa mga ginamit na library Dependency-Check sa GitlabCI

Ang isang mahalagang bahagi ng pamamahala ng kahinaan ay ang pag-unawa at pag-secure sa supply chain ng mga bahagi ng software kung saan binuo ang mga modernong sistema. Ang mga pangkat na nagsasanay ng maliksi at mga pamamaraan ng DevOps ay malawakang gumagamit ng mga open-source na library at frameworks upang bawasan ang oras at gastos sa pag-develop. Gayunpaman, ito ay may kasamang downside: ang panganib ng pagmamana ng mga bug at kahinaan ng ibang tao.

Maliwanag, dapat malaman ng team kung aling mga open source na bahagi ang kasama sa mga application nito, tiyaking mada-download ang mga kilalang-gandang bersyon mula sa mga kilalang-mahusay na mapagkukunan, at mag-download ng mga na-update na bersyon ng mga bahagi pagkatapos ma-patch ang mga bagong natuklasang kahinaan.

Sa post na ito, titingnan natin ang paggamit ng OWASP Dependency Check upang i-abort ang isang build kung may nakita itong mga seryosong isyu sa iyong code.

Ang aklat na "Development Security in Agile Projects" ay naglalarawan nito sa ganitong paraan. Ang OWASP Dependency Check ay isang libreng scanner na nag-catalog ng lahat ng open-source na bahagi na ginagamit sa isang application at kinikilala ang anumang mga kahinaan na maaaring taglay nito. Available ang mga bersyon para sa Java, .NET, Ruby (gemspec), PHP (composer), Node.js, at Python, pati na rin para sa ilang C/C++ na proyekto. Sumasama ang Dependency Check sa mga sikat na tool sa build, kabilang ang Ant, Maven, at Gradle, at mga server ng tuluy-tuloy na integration tulad ng Jenkins.

Ang Dependency Check ay nag-uulat ng lahat ng mga bahagi na may kilalang mga kahinaan mula sa NIST's National Vulnerability Database (NVD) at ina-update batay sa data mula sa NVD news feed.

Sa kabutihang-palad, lahat ng ito ay maaaring awtomatikong gawin gamit ang mga tool tulad ng proyekto ng OWASP Dependency Check o mga komersyal na programa tulad ng Itim na Itik, JFrog Xray, Snyk, Ikot ng Buhay ng Nexus Sonatype kumpanya o SourceClear.

Maaaring isama ang mga tool na ito sa pagbuo ng mga pipeline upang awtomatikong mag-imbentaryo ng mga open source na dependency, tukuyin ang mga lumang bersyon ng library at library na naglalaman ng mga kilalang kahinaan, at i-abort ang build kung may matukoy na mga seryosong isyu.

OWASP Dependency Check

Upang subukan at ipakita ang pagpapatakbo ng Dependency Check, ginagamit namin ang repositoryong ito. dependency-check-example.

Upang tingnan ang ulat ng HTML, kailangan mong i-configure ang nginx web server sa iyong gitlab-runner.

Halimbawa ng isang minimal na pagsasaayos nginx:

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

Sa dulo ng build maaari mong makita ang isang larawan tulad nito:

Gamit ang vulnerability scanner para sa mga ginamit na library Dependency-Check sa GitlabCI

Sundin ang link at tingnan ang ulat ng Dependency Check.

Ang unang screenshot ay ang tuktok ng ulat na may buod.

Gamit ang vulnerability scanner para sa mga ginamit na library Dependency-Check sa GitlabCI

Ang pangalawang screenshot ay mga detalye ng CVE-2017-5638. Dito makikita natin ang antas ng CVE at mga link sa mga pagsasamantala.

Gamit ang vulnerability scanner para sa mga ginamit na library Dependency-Check sa GitlabCI

Ang ikatlong screenshot ay nagpapakita ng mga detalye ng log4j-api-2.7.jar. Nakikita namin ang mga antas ng CVE na 7.5 at 9.8.

Gamit ang vulnerability scanner para sa mga ginamit na library Dependency-Check sa GitlabCI

Ang ikaapat na screenshot ay nagpapakita ng mga detalye ng commons-fileupload-1.3.2.jar. Nakikita namin ang mga antas ng CVE na 7.5 at 9.8.

Gamit ang vulnerability scanner para sa mga ginamit na library Dependency-Check sa GitlabCI

Kung gusto mong gumamit ng Mga Pahina ng GitLab, hindi mo ito magagawa—hindi gagawa ng artifact ang isang nabigong gawain.

Halimbawa dito https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Bumuo ng output: walang artifact, wala akong nakikitang HTML na ulat. Dapat kong subukan ang Artifact: palagi.

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

Gamit ang vulnerability scanner para sa mga ginamit na library Dependency-Check sa GitlabCI

Kinokontrol ang antas ng mga kahinaan sa CVE

Ang pinakamahalagang linya sa gitlab-ci.yaml file:

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

Binibigyang-daan ka ng parameter na failBuildOnCVSS na kontrolin ang antas ng mga kahinaan ng CVE kung saan mo gustong tumugon.

Pag-download ng NIST Vulnerability Database (NVD) mula sa Internet

Napansin mo ba na ang NIST ay patuloy na nagda-download ng mga vulnerability database (NVDs) mula sa Internet?

Gamit ang vulnerability scanner para sa mga ginamit na library Dependency-Check sa GitlabCI

Maaari mong gamitin ang utility para mag-download nist_data_mirror_golang

I-install at patakbuhin natin ito.

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

Ina-upload ng Nist-data-mirror ang NIST CVE JSON sa /var/www/repos/nist-data-mirror/ sa startup at ina-update ang data tuwing 24 na oras.

Upang i-download ang CVE JSON NIST, kailangan mong i-configure ang nginx web server (halimbawa, sa iyong gitlab-runner).

Halimbawa ng isang minimal na pagsasaayos nginx:

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

}

Upang maiwasan ang paggawa ng mahabang linya kung saan inilunsad ang mvn, ililipat namin ang mga parameter sa isang hiwalay na variable na DEPENDENCY_OPTS.

Ang huling minimal na .gitlab-ci.yml na configuration ay magiging ganito:

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 chat tungkol sa DevOps at Security
DevSecOps / SSDLC Telegram Channel - Secure Development

Pinagmulan: www.habr.com

Bumili ng maaasahang pagho-host para sa mga site na may proteksyon ng DDoS, mga server ng VPS VDS 🔥 Bumili ng maaasahang website hosting na may proteksyon ng DDoS, VPS VDS servers | ProHoster