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

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

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

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

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

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

Բարեբախտաբար, այս ամենը կարող է արվել ավտոմատ կերպով՝ օգտագործելով OWASP Dependency Check նախագծի կամ առևտրային ծրագրերի նման գործիքներ։ Black Duck, JFrog X-Ray, Սնիկ, Nexus-ի կյանքի ցիկլը Sonatype ընկերություններ կամ 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 details-ն է։ Մենք տեսնում ենք, որ 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 խոցելիության տվյալների բազաները (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 CVE JSON ֆայլը /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

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster