Ашигласан сангуудын эмзэг байдлын сканнерыг ашиглах нь GitlabCI-ийн хараат байдлыг шалгах

Эмзэг байдлын менежментийн чухал хэсэг нь орчин үеийн системийг бүрдүүлдэг програм хангамжийн бүрэлдэхүүн хэсгүүдийн нийлүүлэлтийн сүлжээг сайтар ойлгож, хамгаалах явдал юм. 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 төсөл эсвэл арилжааны программ гэх мэт хэрэгслүүдийг ашиглан автоматаар хийх боломжтой. Хар нугас, JFrog рентген, Снык, Nexus амьдралын мөчлөг Сонатип эсвэл SourceClear.

Нээлттэй эхийн хамаарлыг автоматаар тоолох, мэдэгдэж буй сул талуудыг агуулсан номын сан, номын сангийн хуучирсан хувилбаруудыг тодорхойлох, ноцтой асуудал илэрсэн тохиолдолд угсралтыг зогсоох зорилгоор эдгээр хэрэгслүүдийг бүтээх шугамд оруулах боломжтой.

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

Чуулганы төгсгөлд та дараах зургийг харж болно.

Ашигласан сангуудын эмзэг байдлын сканнерыг ашиглах нь GitlabCI-ийн хараат байдлыг шалгах

Холбоосыг дагаж Dependency Check тайланг үзнэ үү.

Эхний дэлгэцийн агшин нь хураангуй бүхий тайлангийн дээд хэсэг юм.

Ашигласан сангуудын эмзэг байдлын сканнерыг ашиглах нь GitlabCI-ийн хараат байдлыг шалгах

Хоёр дахь дэлгэцийн агшингийн дэлгэрэнгүй CVE-2017-5638. Эндээс бид CVE түвшин болон ашиглалтын холбоосыг харж байна.

Ашигласан сангуудын эмзэг байдлын сканнерыг ашиглах нь GitlabCI-ийн хараат байдлыг шалгах

Гурав дахь дэлгэцийн агшин нь log4j-api-2.7.jar-ийн дэлгэрэнгүй мэдээлэл юм. Бид CVE түвшин 7.5 ба 9.8 байгааг харж байна.

Ашигласан сангуудын эмзэг байдлын сканнерыг ашиглах нь GitlabCI-ийн хараат байдлыг шалгах

Дөрөв дэх дэлгэцийн агшин нь commons-fileupload-1.3.2.jar-ын дэлгэрэнгүй мэдээлэл юм. Бид CVE түвшин 7.5 ба 9.8 байгааг харж байна.

Ашигласан сангуудын эмзэг байдлын сканнерыг ашиглах нь 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

Ашигласан сангуудын эмзэг байдлын сканнерыг ашиглах нь 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) интернетээс байнга татдаг болохыг та анзаарсан уу:

Ашигласан сангуудын эмзэг байдлын сканнерыг ашиглах нь GitlabCI-ийн хараат байдлыг шалгах

Татаж авахын тулд та хэрэгслийг ашиглаж болно nist_data_minror_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

сэтгэгдэл нэмэх