Эмзэг байдлын менежментийн чухал хэсэг нь орчин үеийн системийг бүрдүүлдэг програм хангамжийн бүрэлдэхүүн хэсгүүдийн нийлүүлэлтийн сүлжээг сайтар ойлгож, хамгаалах явдал юм. Agile болон DevOps багууд хөгжүүлэлтийн цаг, зардлыг бууруулахын тулд нээлттэй эхийн номын сан, хүрээг өргөнөөр ашигладаг. Гэхдээ энэ медаль нь бас сул талтай: бусад хүмүүсийн алдаа, эмзэг байдлыг өвлөн авах боломж.
Мэдээжийн хэрэг, баг нь ямар нээлттэй эхийн бүрэлдэхүүн хэсгүүдийг өөрийн програмуудад багтаасан болохыг мэдэж байх ёстой, мэдэгдэж буй найдвартай эх сурвалжаас мэдэгдэж байгаа найдвартай хувилбаруудыг татаж авах, шинээр илрүүлсэн сул талуудыг зассаны дараа бүрэлдэхүүн хэсгүүдийн шинэчилсэн хувилбарыг татаж авах хэрэгтэй.
Энэ нийтлэлд бид OWASP Dependency Check-ийг ашиглан таны кодтой холбоотой ноцтой асуудал илэрвэл бүтээцийг цуцлах талаар авч үзэх болно.
“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 төсөл эсвэл арилжааны программ гэх мэт хэрэгслүүдийг ашиглан автоматаар хийх боломжтой.
Нээлттэй эхийн хамаарлыг автоматаар тоолох, мэдэгдэж буй сул талуудыг агуулсан номын сан, номын сангийн хуучирсан хувилбаруудыг тодорхойлох, ноцтой асуудал илэрсэн тохиолдолд угсралтыг зогсоох зорилгоор эдгээр хэрэгслүүдийг бүтээх шугамд оруулах боломжтой.
OWASP хараат байдлын шалгалт
Dependency Check хэрхэн ажилладагийг туршиж, харуулахын тулд бид энэ агуулахыг ашигладаг
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 {
}
}
Чуулганы төгсгөлд та дараах зургийг харж болно.
Холбоосыг дагаж Dependency Check тайланг үзнэ үү.
Эхний дэлгэцийн агшин нь хураангуй бүхий тайлангийн дээд хэсэг юм.
Хоёр дахь дэлгэцийн агшингийн дэлгэрэнгүй 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
Эх сурвалж: www.habr.com