İstifadə olunmuş kitabxanalar üçün zəiflik skanerindən istifadə GitlabCI-də Dependency-Check

Zəifliyin idarə edilməsinin mühüm hissəsi müasir sistemləri təşkil edən proqram komponentlərinin təchizat zəncirini hərtərəfli başa düşmək və təhlükəsizliyini təmin etməkdir. Agile və DevOps komandaları inkişaf vaxtını və xərcləri azaltmaq üçün açıq mənbəli kitabxanalardan və çərçivələrdən geniş istifadə edirlər. Ancaq bu medalın bir mənfi tərəfi də var: başqalarının səhvlərini və zəifliklərini miras almaq imkanı.

Aydındır ki, komanda proqramlarına hansı açıq mənbə komponentlərinin daxil olduğunu bilməli, məlum etibarlı versiyaların məlum etibarlı mənbələrdən yüklənməsini təmin etməli və yeni aşkar edilmiş zəifliklər yamaqlandıqdan sonra komponentlərin yenilənmiş versiyalarını endirməlidir.

Bu yazıda kodunuzla bağlı ciddi problemlər aşkar edərsə, quruluşu dayandırmaq üçün OWASP Dependency Check-dən istifadə etməyə baxacağıq.

“Çevik Layihələrdə İnkişaf Təhlükəsizliyi” kitabında bu, aşağıdakı kimi təsvir edilmişdir. OWASP Dependency Check proqramda istifadə olunan bütün açıq mənbə komponentlərini kataloqlaşdıran və onlarda olan zəiflikləri göstərən pulsuz skanerdir. Java, .NET, Ruby (gemspec), PHP (bəstəkar), Node.js və Python, həmçinin bəzi C/C++ layihələri üçün versiyalar mövcuddur. Dependency Check Ant, Maven və Gradle daxil olmaqla ümumi qurma alətləri və Jenkins kimi davamlı inteqrasiya serverləri ilə inteqrasiya edir.

Dependency Check NIST-in Milli Zəiflik Məlumat Bazasından (NVD) məlum zəiflikləri olan bütün komponentləri bildirir və NVD xəbər lentlərindən alınan məlumatlar ilə yenilənir.

Xoşbəxtlikdən, bütün bunlar OWASP Dependency Check layihəsi və ya kommersiya proqramları kimi alətlərdən istifadə etməklə avtomatik olaraq edilə bilər. Qara ördək, JFrog Xray, Snyk, Nexus Lifecycle Sonatip və ya SourceClear.

Bu alətlər açıq mənbədən asılılıqları avtomatik inventarlaşdırmaq, məlum zəiflikləri ehtiva edən kitabxanaların və kitabxanaların köhnəlmiş versiyalarını müəyyən etmək və ciddi problemlər aşkar edildikdə tikinti işlərini dayandırmaq üçün tikinti kəmərlərinə daxil edilə bilər.

OWASP asılılığının yoxlanılması

Dependency Check-in necə işlədiyini sınamaq və nümayiş etdirmək üçün biz bu depodan istifadə edirik asılılığın yoxlanılması nümunəsi.

HTML hesabatına baxmaq üçün gitlab-runnerinizdə nginx veb serverini konfiqurasiya etməlisiniz.

Minimal nginx konfiqurasiyasına nümunə:

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

Montajın sonunda bu şəkli görə bilərsiniz:

İstifadə olunmuş kitabxanalar üçün zəiflik skanerindən istifadə GitlabCI-də Dependency-Check

Linki izləyin və Dependency Check hesabatına baxın.

İlk skrinşot xülasə ilə hesabatın yuxarı hissəsidir.

İstifadə olunmuş kitabxanalar üçün zəiflik skanerindən istifadə GitlabCI-də Dependency-Check

İkinci ekran görüntüsü təfərrüatları CVE-2017-5638. Burada biz CVE səviyyəsini və istismarlara keçidləri görürük.

İstifadə olunmuş kitabxanalar üçün zəiflik skanerindən istifadə GitlabCI-də Dependency-Check

Üçüncü ekran görüntüsü log4j-api-2.7.jar təfərrüatlarıdır. CVE səviyyələrinin 7.5 və 9.8 olduğunu görürük.

İstifadə olunmuş kitabxanalar üçün zəiflik skanerindən istifadə GitlabCI-də Dependency-Check

Dördüncü ekran görüntüsü commons-fileupload-1.3.2.jar-ın təfərrüatlarıdır. CVE səviyyələrinin 7.5 və 9.8 olduğunu görürük.

İstifadə olunmuş kitabxanalar üçün zəiflik skanerindən istifadə GitlabCI-də Dependency-Check

Əgər gitlab səhifələrindən istifadə etmək istəyirsinizsə, o zaman işləməyəcək - düşmüş tapşırıq artefakt yaratmayacaq.

Burada misal https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Çıxış qurun: artefakt yoxdur, html hesabatını görmürəm. Artifaktı sınamalısınız: həmişə

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

İstifadə olunmuş kitabxanalar üçün zəiflik skanerindən istifadə GitlabCI-də Dependency-Check

CVE zəifliklərinin səviyyəsinin tənzimlənməsi

gitlab-ci.yaml faylındakı ən vacib sətir:

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

failBuildOnCVSS parametri ilə siz cavab verməli olduğunuz CVE zəifliklərinin səviyyəsini tənzimləyə bilərsiniz.

NIST Zəiflik Məlumat Bazasının (NVD) İnternetdən endirilməsi

NIST-in daim İnternetdən NIST zəiflik verilənlər bazalarını (NVD) endirdiyini görmüsünüz:

İstifadə olunmuş kitabxanalar üçün zəiflik skanerindən istifadə GitlabCI-də Dependency-Check

Yükləmək üçün yardım proqramından istifadə edə bilərsiniz nist_data_mirror_golang

Quraşdıraq və işə salaq.

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 NIST JSON CVE-ni işə saldıqda /var/www/repos/nist-data-mirror/ ünvanına yükləyir və məlumatları hər 24 saatdan bir yeniləyir.

CVE JSON NIST-i yükləmək üçün nginx veb serverini konfiqurasiya etməlisiniz (məsələn, gitlab-runnerinizdə).

Minimal nginx konfiqurasiyasına nümunə:

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

}

Mvn-nin işə salındığı yerdə uzun bir xətt çəkməmək üçün parametrləri ayrıca DEPENDENCY_OPTS dəyişəninə köçürəcəyik.

Son minimal konfiqurasiya .gitlab-ci.yml belə görünəcək:

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

DevOps və Təhlükəsizlik haqqında Telegram söhbəti
Telegram kanalı DevSecOps / SSDLC - Təhlükəsiz inkişaf

Mənbə: www.habr.com

Добавить комментарий