Пайдаланылған кітапханалар үшін осалдық сканерін пайдалану GitlabCI жүйесіндегі Dependency-Check

Осалдықты басқарудың маңызды бөлігі заманауи жүйелерді құрайтын бағдарламалық қамтамасыз ету компоненттерінің жеткізілім тізбегін мұқият түсіну және қорғау болып табылады. Agile және DevOps командалары әзірлеу уақыты мен құнын азайту үшін ашық бастапқы кітапханалар мен фреймворктарды кеңінен пайдаланады. Бірақ бұл медальдың кемшілігі де бар: басқа адамдардың қателері мен осалдықтарын мұраға алу мүмкіндігі.

Әлбетте, команда оның қолданбаларына қандай ашық бастапқы құрамдастардың кіретінін білуі керек, белгілі сенімді нұсқалардың белгілі сенімді көздерден жүктелуін қамтамасыз ету және жаңадан ашылған осалдықтарды түзетуден кейін компоненттердің жаңартылған нұсқаларын жүктеп алу керек.

Бұл жазбада, егер ол сіздің кодыңызда елеулі ақауларды анықтаса, құрастыруды тоқтату үшін OWASP тәуелділікті тексеруді пайдалануды қарастырамыз.

«Agile жобаларындағы даму қауіпсіздігі» кітабында ол келесідей сипатталған. OWASP Dependency Check — қолданбада пайдаланылатын барлық ашық бастапқы компоненттерді каталогтайтын және олардағы осалдықтарды көрсететін тегін сканер. Java, .NET, Ruby (gemspec), PHP (композитор), Node.js және Python, сондай-ақ кейбір C/C++ жобалары үшін нұсқалары бар. Dependency Check жалпы құрастыру құралдарымен, соның ішінде Ant, Maven және Gradle және Дженкинс сияқты үздіксіз интеграция серверлерімен біріктірілген.

Dependency Check NIST ұлттық осалдық деректер базасынан (NVD) белгілі осалдықтары бар барлық құрамдастарды хабарлайды және NVD жаңалықтар арналарының деректерімен жаңартылады.

Бақытымызға орай, мұның барлығын OWASP Dependency Check жобасы немесе коммерциялық бағдарламалар сияқты құралдар арқылы автоматты түрде жасауға болады. Қара үйрек, JFrog рентгені, Снык, Nexus өмірлік циклі Сонатип немесе SourceClear.

Бұл құралдар ашық бастапқы тәуелділіктерді автоматты түрде түгендеу, белгілі осалдықтары бар кітапханалар мен кітапханалардың ескірген нұсқаларын анықтау және күрделі мәселелер анықталған жағдайда құрастыруды тоқтату үшін құрастыру құбырларына қосылуы мүмкін.

OWASP тәуелділігін тексеру

Тәуелділікті тексеру қалай жұмыс істейтінін тексеру және көрсету үшін біз осы репозиторийді пайдаланамыз тәуелділікті тексеру мысалы.

HTML есебін көру үшін gitlab-runner бағдарламасында nginx веб-серверін конфигурациялау қажет.

Ең аз 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 {
    }
}

Жиналыстың соңында сіз мына суретті көре аласыз:

Пайдаланылған кітапханалар үшін осалдық сканерін пайдалану GitlabCI жүйесіндегі Dependency-Check

Сілтемені орындаңыз және тәуелділікті тексеру есебін қараңыз.

Бірінші скриншот қорытындымен есептің жоғарғы бөлігі болып табылады.

Пайдаланылған кітапханалар үшін осалдық сканерін пайдалану GitlabCI жүйесіндегі Dependency-Check

Екінші скриншот мәліметтері CVE-2017-5638. Мұнда біз CVE деңгейін және эксплуатацияларға сілтемелерді көреміз.

Пайдаланылған кітапханалар үшін осалдық сканерін пайдалану GitlabCI жүйесіндегі Dependency-Check

Үшінші скриншот - log4j-api-2.7.jar мәліметтері. Біз CVE деңгейлері 7.5 және 9.8 екенін көреміз.

Пайдаланылған кітапханалар үшін осалдық сканерін пайдалану GitlabCI жүйесіндегі Dependency-Check

Төртінші скриншот - commons-fileupload-1.3.2.jar мәліметтері. Біз CVE деңгейлері 7.5 және 9.8 екенін көреміз.

Пайдаланылған кітапханалар үшін осалдық сканерін пайдалану GitlabCI жүйесіндегі Dependency-Check

Егер сіз gitlab беттерін пайдаланғыңыз келсе, онда ол жұмыс істемейді - құлаған тапсырма артефакт жасамайды.

Мысал мұнда https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Құрастыру нәтижесі: артефактілер жоқ, мен html есебін көрмеймін. Сіз Artifact: әрқашан қолданып көруіңіз керек

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

Пайдаланылған кітапханалар үшін осалдық сканерін пайдалану GitlabCI жүйесіндегі Dependency-Check

CVE осалдықтарының деңгейін реттеу

gitlab-ci.yaml файлындағы ең маңызды жол:

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

failBuildOnCVSS параметрімен жауап беру қажет CVE осалдықтарының деңгейін реттеуге болады.

Интернеттен NIST осалдық дерекқорын (NVD) жүктеп алу

NIST NIST осалдық дерекқорларын (NVD) интернеттен үнемі жүктеп алатынын байқадыңыз ба:

Пайдаланылған кітапханалар үшін осалдық сканерін пайдалану GitlabCI жүйесіндегі Dependency-Check

Жүктеп алу үшін қызметтік бағдарламаны пайдалануға болады nist_data_mirror_golang

Оны орнатып, іске қосайық.

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 файлын /var/www/repos/nist-data-mirror/ ішіне жүктеп салады және деректерді 24 сағат сайын жаңартады.

CVE JSON NIST жүктеп алу үшін nginx веб-серверін конфигурациялау қажет (мысалы, gitlab-runner).

Ең аз 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 {
    }

}

mvn іске қосылған жерде ұзақ жол жасамау үшін біз параметрлерді DEPENDENCY_OPTS жеке айнымалысына жылжытамыз.

Соңғы минималды конфигурация .gitlab-ci.yml келесідей болады:

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 және қауіпсіздік туралы Telegram чаты
Telegram арнасы DevSecOps / SSDLC - Қауіпсіз даму

Ақпарат көзі: www.habr.com

пікір қалдыру