Խոցելիության կառավարման կարևոր մասն է կազմում ժամանակակից համակարգերը կազմող ծրագրային բաղադրիչների մատակարարման շղթայի մանրակրկիտ ըմբռնումն ու անվտանգությունը: 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 կախվածության ստուգման նախագիծը կամ առևտրային ծրագրերը, ինչպիսիք են.
Այս գործիքները կարող են ներառվել կառուցման խողովակաշարերում՝ ավտոմատ կերպով գույքագրելու բաց կոդով կախվածությունները, բացահայտելու գրադարանների և գրադարանների հնացած տարբերակները, որոնք պարունակում են հայտնի խոցելիություն, և դադարեցնելու կառուցումները, եթե հայտնաբերվեն լուրջ խնդիրներ:
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 {
}
}
Ժողովի վերջում կարող եք տեսնել այս նկարը.
Հետևեք հղմանը և տեսեք կախվածության ստուգման հաշվետվությունը:
Առաջին սքրինշոթը հաշվետվության վերին հատվածն է՝ ամփոփումով:
Երկրորդ սքրինշոթի մանրամասները CVE-2017-5638: Այստեղ մենք տեսնում ենք CVE մակարդակը և հղումները դեպի շահագործում:
Երրորդ սքրինշոթը log4j-api-2.7.jar-ի մանրամասներն են: Մենք տեսնում ենք, որ CVE մակարդակները 7.5 և 9.8 են:
Չորրորդ սքրինշոթը Commons-fileupload-1.3.2.jar-ի մանրամասներն են: Մենք տեսնում ենք, որ CVE մակարդակները 7.5 և 9.8 են:
Եթե ցանկանում եք օգտագործել gitlab էջերը, ապա այն չի աշխատի. ընկած առաջադրանքը չի ստեղծի արտեֆակտ:
Օրինակ այստեղ
Կառուցման արդյունք. ոչ մի արտեֆակտ, ես չեմ տեսնում html զեկույցը: Դուք պետք է փորձեք Artifact: միշտ
CVE խոցելիության մակարդակի կարգավորում
gitlab-ci.yaml ֆայլի ամենակարևոր տողը.
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7
FailBuildOnCVSS պարամետրով դուք կարող եք կարգավորել CVE խոցելիության մակարդակը, որին դուք պետք է արձագանքեք:
NIST խոցելիության տվյալների բազայի (NVD) ներբեռնում ինտերնետից
Նկատե՞լ եք, որ NIST-ը մշտապես ներբեռնում է NIST խոցելիության տվյալների բազաները (NVD) ինտերնետից.
Ներբեռնելու համար կարող եք օգտվել կոմունալից
Եկեք տեղադրենք և գործարկենք այն:
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
Source: www.habr.com