Përdorimi i skanerëve të dobësive në bibliotekat në përdorim 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 të softuerit, nga të cilat ndërtohen sistemet moderne. Ekipet që praktikojnë metodologji të fleksibël dhe DevOps përdorin gjerësisht biblioteka dhe framework-e me kod burim të hapur për të reduktuar kohën dhe koston e zhvillimit. Por kjo medalje ka edhe anën e saj të kundërt: mundësia për të trashëguar gabimet dhe dobësitë e tjetrit.

Sigurisht, ekipi duhet të dijë përbërësit me kod burim të hapur që janë të përfshirë në aplikacionet e tij, të sigurohet që versione të besueshme të shkarkohen nga burime të besueshme dhe të ngarkojë versionet e përditësuara të komponenteve pasi të zbulohen dobësi të reja.

Në këtë postim do të diskutojmë përdorimin e OWASP Dependency Check për ndërprerjen e ndërtimit në rast se zbulohen probleme të rënda me kodin tuaj.

Në librin "Siguria e zhvillimit në projektet Agile" përshkruhet si më poshtë. OWASP Dependency Check është një skaner falas që katalogizon të gjitha komponentët e përdorur në aplikacion me kod burim të hapur dhe tregon dobësitë e pranishme në to. Ekzistojnë 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 për ndërtim, përfshirë Ant, Maven dhe Gradle dhe serverat e integrimit të vazhdueshëm si Jenkins.

Dependency Check njofton të gjitha komponentët me dobësi të njohura nga Baza Kombëtare e të Dhënave mbi Dobësitë (NVD) NIST dhe përditësohet në bazë të të dhënave nga kanalet e lajmeve të NVD.

Fatmirësisht, gjithë kjo mund të bëhet automatikisht me mjete të tilla si projekti OWASP Dependency Check, ose programe komerciale si Black Duck, JFrog Xray, Snyk, Nexus Lifecycle kompania Sonatype ose SourceClear.

Këto mjete mund të përfshihen në kanalet e ndërtimit për të krijuar automatikisht një inventar të varësive me kod burim të hapur, për të zbuluar versione të vjetra të bibliotekave dhe biblioteka që përmbajnë dobësi të njohura dhe për të ndërprerë ndërtimin në rast se zbulohen probleme të rënda.

OWASP Dependency Check

Për testimin dhe demonstrohen e funksionimit të Dependency Check, ne do të përdorim këtë repository dependency-check-example.

Për të parë raportin HTML, duhet të konfiguroni serverin 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 një pamje të tillë:

Përdorimi i skanerëve të dobësive në bibliotekat në përdorim Dependency-Check në GitlabCI

Shkoni në link dhe shihni raportin e Kontrollit të Varësive.

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

Përdorimi i skanerëve të dobësive në bibliotekat në përdorim Dependency-Check në GitlabCI

Screenshot-i i dytë detajet e CVE-2017-5638. Këtu shohim nivelin e CVE dhe lidhjet për exploitët.

Përdorimi i skanerëve të dobësive në bibliotekat në përdorim Dependency-Check në GitlabCI

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

Përdorimi i skanerëve të dobësive në bibliotekat në përdorim Dependency-Check në GitlabCI

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

Përdorimi i skanerëve të dobësive në bibliotekat në përdorim Dependency-Check në GitlabCI

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

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

Rezultati i ndërtimit: nuk ka artefakt, nuk shoh raportin html. Duhet të provojmë Artifact: always

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

Përdorimi i skanerëve të dobësive në bibliotekat në përdorim Dependency-Check në GitlabCI

Rregullimi i nivelit të CVE të dobësive

Vija më e rëndësishme në skedarin gitlab-ci.yaml:

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

Me parametrin failBuildOnCVSS mund të rregulloni nivelin e CVE të dobësive mbi të cilat duhet të reagoni.

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

Keni vënë re se vazhdimisht shkarkon baza të të dhënave të dobësive (NVD) NIST nga interneti:

Përdorimi i skanerëve të dobësive në bibliotekat në përdorim Dependency-Check në GitlabCI

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

Do ta instalojmë dhe e fillojmë 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/ kur fillohet dhe përditëson të dhënat çdo 24 orë.

Për të shkarkuar CVE JSON NIST, duhet të konfiguroni serverin web 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 {
    }

}

PĂ«r tĂ« mos bĂ«rĂ« njĂ« varg tĂ« gjatĂ« ku fillohet mvn, do t’i nxjerrim parametrat nĂ« njĂ« variabĂ«l tĂ« veçantĂ« DEPENDENCY_OPTS.

Konfigursi përfundimtar minimal .gitlab-ci.yml do të duket kështu:

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

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

Chat Telegram për DevOps dhe Siguri
Kanal Telegram DevSecOps / SSDLC - Zhvillimi të Sigurt

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster