Përdorimi i skanerit të dobësive në bibliotekat që përdoren Dependency-Check në GitlabCI

Një pjesë e rëndësishme e menaxhimit të dobësive është të kuptosh mirë dhe të sigurosh sigurinë e zinxhirit të furnizimit të komponenteve software nga të cilat ndërtohen sistemet moderne. Ekipet që praktikojnë metoda të shpejta dhe DevOps përdorin gjerësisht biblioteka dhe kuadrove me kod të hapur për të shkurtuar kohën dhe kostot e zhvillimit. Por kjo medalje ka edhe anën e saj negative: mundësinë për të trashëguar gabimet dhe dobësitë e tjerëve.

Sigurisht, ekipi duhet të dijë patjetër se cilat komponente me kod të hapur janë të përfshira në aplikacionet e tij, të kujdeset që versionet e besueshme të shkarkohen nga burime të besueshme dhe të ngarkojë versionet e përditësuara të komponenteve pas zgjidhjes së dobësive të reja të zbuluara.

Në këtë postim do të shqyrtojmë përdorimin e OWASP Dependency Check për të ndërprerë ndërtimin në rast se zbulohen probleme serioze me kodin tuaj.

Në librin "Siguria e zhvillimit në projektet Agile" përshkruhet kështu. OWASP Dependency Check është një skaner falas që katalogon të gjithë komponentët e përdorur në aplikacion me kod të hapur dhe tregon vulnerabilitetet që ekzistojnë në to. Ka versione për Java, .NET, Ruby (gemspec), PHP (composer), Node.js dhe Python, si dhe për disa projekte në C/C++. Dependency Check integrohet me mjete të njohura ndërtimi, duke përfshirë Ant, Maven dhe Gradle dhe serverë të integrimit të vazhdueshëm si Jenkins.

Dependency Check raporton për të gjithë komponentët me vulnerabilitete të njohura nga Bazat Kombëtare të të Dhënave të Vulnerabiliteteve (NVD) NIST dhe përditësohet mbi bazën e të dhënave nga kanalet e lajmeve të NVD.

Me fat, të gjitha këto mund të bëhen automatikisht me ndihmën e mjeteve si projekti OWASP Dependency Check, ose programeve tregtare si Black Duck, JFrog Xray, Snyk, Nexus Lifecycle kompanisë Sonatype ose SourceClear.

Këto mjete mund të përshtaten në kanalet e ndërtimit për të krijuar automatikisht një inventar të varësive me kod të hapur, për të identifikuar versione të skaduara të bibliotekave dhe bibliotekat që përmbajnë vulnerabilitete të njohura, dhe për të ndërprerë ndërtimin në rast se përfshihen probleme serioze.

OWASP Dependency Check

Për testim dhe demonstruar funksionimin e Dependency Check, përdorim këtë repository dependency-check-example.

Për të parë raportin HTML, duhet të konfiguroni një server web nginx në gitlab-runner tuaj.

Shembulli i konfigurimit minimal të 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 {
    }
}

Në fund të ndërtimit, mund të shihni këtë pamje:

Përdorimi i skanerit të dobësive në bibliotekat që përdoren Dependency-Check në GitlabCI

Shkoni në lidhje dhe shihni raportin Dependency Check.

Screenshoti i parĂ« — pjesa e sipĂ«rme e raportit me pĂ«rmbajtje tĂ« shkurtĂ«r.

Përdorimi i skanerit të dobësive në bibliotekat që përdoren Dependency-Check në GitlabCI

Screenshoti i dytë detajet e CVE-2017-5638. Këtu shohim nivelin e CVE dhe lidhjet për eksploitat.

Përdorimi i skanerit të dobësive në bibliotekat që përdoren Dependency-Check në GitlabCI

Screenshoti i tretĂ« — detajet e log4j-api-2.7.jar. Shohim qĂ« nivelet e CVE janĂ« 7.5 dhe 9.8.

Përdorimi i skanerit të dobësive në bibliotekat që përdoren Dependency-Check në GitlabCI

Screenshoti i katĂ«rt — detajet e commons-fileupload-1.3.2.jar. Shohim qĂ« nivelet e CVE janĂ« 7.5 dhe 9.8.

Përdorimi i skanerit të dobësive në bibliotekat që përdoren Dependency-Check në GitlabCI

NĂ«se dĂ«shironi tĂ« pĂ«rdorni gitlab pages, nuk Ă«shtĂ« e mundur — njĂ« detyrĂ« e dĂ«shtuar nuk do tĂ« krijojĂ« artefakt.

Shembulli këtu https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Dalja e ndërtimit: nuk ka artefakte, nuk shoh raportin html. Duhet të provoj Artifact: always

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

Përdorimi i skanerit të dobësive në bibliotekat që përdoren Dependency-Check në GitlabCI

Rregullimi i nivelit CVE të vulnerabiliteteve

Rreshti më i rëndësishëm në skedarin gitlab-ci.yaml:

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

Me parametërn failBuildOnCVSS mund të rregulloni nivelin e CVE vulnerabilities që duhet të përgjigjeni.

Shkarkimi i bazës së të dhënave të dobësive (NVD) NIST nga interneti

Keni vënë re se vazhdimisht shkarkoni bazat e të dhënave të dobësive (NVD) NIST nga interneti:

Përdorimi i skanerit të dobësive në bibliotekat që përdoren Dependency-Check në GitlabCI

Për shkarkimin mund të përdorni utilitarin nist_data_mirror_golang

Le të instalojmë dhe ta nisim atë.

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 shkarkon CVE JSON NIST në /var/www/repos/nist-data-mirror/ gjatë nisjes dhe përditëson të dhënat çdo 24 orë.

Për të shkarkuar CVE JSON NIST është e nevojshme të konfigurohet web-serveri nginx (për shembull, në gitlab-runner tuaj).

Shembulli i konfigurimit minimal të 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 {
    }

}

Në mënyrë që të mos krijoni një varg të gjatë ku nisni mvn, do ta nxjerrim parametrit në një variabël të veçantë DEPENDENCY_OPTS.

Konfigurimi minimal përfundimtar i .gitlab-ci.yml do të duket si më poshtë:

variablat:
  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

verifikimi:
  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 Raporti i varësisë kontrollit.html *************************"
    - echo "http://$HOSTNAME:9999$PATH_WITHOUT_HOME/target/dependency-check-report.html"
    - set -e
    - exit ${EXIT_CODE}
  tags:
    - shell

Telegram chat për DevOps dhe Sigurinë
Telegram kanal DevSecOps / SSDLC - Zhvillimi i Sigurt

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster