Օգտագործված գրադարանների համար խոցելիության սկաների օգտագործումը Dependency-Check in GitlabCI

Խոցելիության կառավարման կարևոր մասն է կազմում ժամանակակից համակարգերը կազմող ծրագրային բաղադրիչների մատակարարման շղթայի մանրակրկիտ ըմբռնումն ու անվտանգությունը: Agile և DevOps թիմերը լայնորեն օգտագործում են բաց կոդով գրադարաններ և շրջանակներ՝ նվազեցնելու զարգացման ժամանակը և ծախսերը: Բայց այս մեդալն ունի նաև բացասական կողմ՝ այլ մարդկանց սխալներն ու խոցելիությունները ժառանգելու հնարավորություն:

Ակնհայտ է, որ թիմը պետք է վստահ լինի, որ իմանա, թե որ բաց կոդով բաղադրիչներն են ներառված իր հավելվածներում, համոզվի, որ հայտնի հուսալի տարբերակները ներբեռնվեն հայտնի հուսալի աղբյուրներից և ներբեռնի բաղադրիչների թարմացված տարբերակները նոր հայտնաբերված խոցելի թերությունները վերացնելուց հետո:

Այս գրառման մեջ մենք կքննարկենք OWASP-ի կախվածության ստուգման օգտագործումը՝ կառուցումը դադարեցնելու համար, եթե այն հայտնաբերի ձեր կոդի հետ կապված լուրջ խնդիրներ:

«Զարգացման անվտանգությունը արագաշարժ նախագծերում» գրքում նկարագրված է հետևյալ կերպ. OWASP Dependency Check-ը անվճար սկաներ է, որը կատալոգավորում է հավելվածում օգտագործվող բոլոր բաց կոդով բաղադրիչները և ցույց է տալիս դրանցում պարունակվող խոցելիությունները: Կան Java, .NET, Ruby (gemspec), PHP (composer), Node.js և Python, ինչպես նաև որոշ C/C++ նախագծերի տարբերակներ։ Կախվածության ստուգումը ինտեգրվում է ընդհանուր կառուցման գործիքներին, ներառյալ Ant-ը, Maven-ը և Gradle-ը և շարունակական ինտեգրման սերվերները, ինչպիսիք են Jenkins-ը:

Կախվածության ստուգումը հայտնում է NIST-ի խոցելիության ազգային տվյալների բազայից (NVD) հայտնի խոցելիություններ ունեցող բոլոր բաղադրիչները և թարմացվում է NVD նորությունների հոսքերի տվյալների հետ:

Բարեբախտաբար, այս ամենը կարող է կատարվել ավտոմատ կերպով՝ օգտագործելով այնպիսի գործիքներ, ինչպիսիք են OWASP կախվածության ստուգման նախագիծը կամ առևտրային ծրագրերը, ինչպիսիք են. Սեւ բադ, JFrog Xray, Սնիկ, Nexus-ի կյանքի ցիկլը Սոնատիպ կամ SourceClear.

Այս գործիքները կարող են ներառվել կառուցման խողովակաշարերում՝ ավտոմատ կերպով գույքագրելու բաց կոդով կախվածությունները, բացահայտելու գրադարանների և գրադարանների հնացած տարբերակները, որոնք պարունակում են հայտնի խոցելիություն, և դադարեցնելու կառուցումները, եթե հայտնաբերվեն լուրջ խնդիրներ:

OWASP կախվածության ստուգում

Փորձարկելու և ցուցադրելու համար, թե ինչպես է աշխատում կախվածության ստուգումը, մենք օգտագործում ենք այս պահոցը կախվածություն-ստուգում-օրինակ.

HTML զեկույցը դիտելու համար դուք պետք է կարգավորեք nginx վեբ սերվերը ձեր gitlab-runner-ում:

Նվազագույն 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 {
    }
}

Ժողովի վերջում կարող եք տեսնել այս նկարը.

Օգտագործված գրադարանների համար խոցելիության սկաների օգտագործումը Dependency-Check in GitlabCI

Հետևեք հղմանը և տեսեք կախվածության ստուգման հաշվետվությունը:

Առաջին սքրինշոթը հաշվետվության վերին հատվածն է՝ ամփոփումով:

Օգտագործված գրադարանների համար խոցելիության սկաների օգտագործումը Dependency-Check in GitlabCI

Երկրորդ սքրինշոթի մանրամասները CVE-2017-5638: Այստեղ մենք տեսնում ենք CVE մակարդակը և հղումները դեպի շահագործում:

Օգտագործված գրադարանների համար խոցելիության սկաների օգտագործումը Dependency-Check in GitlabCI

Երրորդ սքրինշոթը log4j-api-2.7.jar-ի մանրամասներն են: Մենք տեսնում ենք, որ CVE մակարդակները 7.5 և 9.8 են:

Օգտագործված գրադարանների համար խոցելիության սկաների օգտագործումը Dependency-Check in GitlabCI

Չորրորդ սքրինշոթը Commons-fileupload-1.3.2.jar-ի մանրամասներն են: Մենք տեսնում ենք, որ CVE մակարդակները 7.5 և 9.8 են:

Օգտագործված գրադարանների համար խոցելիության սկաների օգտագործումը Dependency-Check in GitlabCI

Եթե ​​ցանկանում եք օգտագործել 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

Օգտագործված գրադարանների համար խոցելիության սկաների օգտագործումը Dependency-Check in GitlabCI

CVE խոցելիության մակարդակի կարգավորում

gitlab-ci.yaml ֆայլի ամենակարևոր տողը.

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

FailBuildOnCVSS պարամետրով դուք կարող եք կարգավորել CVE խոցելիության մակարդակը, որին դուք պետք է արձագանքեք:

NIST խոցելիության տվյալների բազայի (NVD) ներբեռնում ինտերնետից

Նկատե՞լ եք, որ NIST-ը մշտապես ներբեռնում է NIST խոցելիության տվյալների բազաները (NVD) ինտերնետից.

Օգտագործված գրադարանների համար խոցելիության սկաների օգտագործումը Dependency-Check in GitlabCI

Ներբեռնելու համար կարող եք օգտվել կոմունալից 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

Telegram զրույց DevOps-ի և անվտանգության մասին
Telegram ալիք DevSecOps / SSDLC - Անվտանգ զարգացում

Source: www.habr.com

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