Izmantoto bibliotēku ievainojamības skenera izmantošana Dependency-Check pakalpojumā GitlabCI

Svarīga ievainojamības pārvaldības daļa ir rūpīgi izprast un nodrošināt to programmatūras komponentu piegādes ķēdi, kas veido mūsdienu sistēmas. Agile un DevOps komandas plaši izmanto atvērtā pirmkoda bibliotēkas un ietvarus, lai samazinātu izstrādes laiku un izmaksas. Taču šai medaļai ir arī mīnuss: iespēja mantot citu cilvēku kļūdas un ievainojamības.

Acīmredzot komandai noteikti jāzina, kuri atvērtā pirmkoda komponenti ir iekļauti tās lietojumprogrammās, jānodrošina, lai zināmās uzticamās versijas tiktu lejupielādētas no zināmiem uzticamiem avotiem, un pēc jaunatklāto ievainojamību novēršanas jālejupielādē atjauninātas komponentu versijas.

Šajā ziņā mēs apskatīsim OWASP atkarības pārbaudes izmantošanu, lai pārtrauktu būvniecību, ja tā atklāj nopietnas problēmas ar jūsu kodu.

Grāmatā “Attīstības drošība veiklos projektos” tas aprakstīts šādi. OWASP atkarības pārbaude ir bezmaksas skeneris, kas kataloģizē visus lietojumprogrammā izmantotos atvērtā pirmkoda komponentus un parāda tajos esošās ievainojamības. Ir versijas Java, .NET, Ruby (gemspec), PHP (komponists), Node.js un Python, kā arī dažiem C/C++ projektiem. Atkarības pārbaude tiek integrēta ar plaši izplatītiem veidošanas rīkiem, tostarp Ant, Maven un Gradle, un nepārtrauktas integrācijas serveriem, piemēram, Jenkins.

Atkarības pārbaude ziņo par visiem komponentiem ar zināmām ievainojamībām no NIST Nacionālās ievainojamības datu bāzes (NVD) un tiek atjaunināta ar datiem no NVD ziņu plūsmām.

Par laimi, to visu var izdarīt automātiski, izmantojot tādus rīkus kā OWASP atkarības pārbaudes projekts vai tādas komerciālas programmas kā Melnā pīle, JFrog Xray, Snyk, Nexus dzīves cikls Sonatype vai SourceClear.

Šos rīkus var iekļaut būvēšanas cauruļvados, lai automātiski uzskaitītu atvērtā pirmkoda atkarības, identificētu novecojušas bibliotēku versijas un bibliotēku, kurās ir zināmas ievainojamības, un pārtrauktu būvējumus, ja tiek atklātas nopietnas problēmas.

OWASP atkarības pārbaude

Lai pārbaudītu un demonstrētu, kā darbojas atkarības pārbaude, mēs izmantojam šo repozitoriju atkarības pārbaudes piemērs.

Lai skatītu HTML pārskatu, gitlab-runner ir jākonfigurē nginx tīmekļa serveris.

Minimālās nginx konfigurācijas piemērs:

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

Montāžas beigās jūs varat redzēt šo attēlu:

Izmantoto bibliotēku ievainojamības skenera izmantošana Dependency-Check pakalpojumā GitlabCI

Sekojiet saitei un skatiet atkarības pārbaudes pārskatu.

Pirmais ekrānuzņēmums ir pārskata augšējā daļa ar kopsavilkumu.

Izmantoto bibliotēku ievainojamības skenera izmantošana Dependency-Check pakalpojumā GitlabCI

Otrā ekrānuzņēmuma informācija CVE-2017-5638. Šeit mēs redzam CVE līmeni un saites uz ļaunprātīgām darbībām.

Izmantoto bibliotēku ievainojamības skenera izmantošana Dependency-Check pakalpojumā GitlabCI

Trešais ekrānuzņēmums ir informācija par log4j-api-2.7.jar. Mēs redzam, ka CVE līmenis ir 7.5 un 9.8.

Izmantoto bibliotēku ievainojamības skenera izmantošana Dependency-Check pakalpojumā GitlabCI

Ceturtais ekrānuzņēmums ir informācija par Commons-fileupload-1.3.2.jar. Mēs redzam, ka CVE līmenis ir 7.5 un 9.8.

Izmantoto bibliotēku ievainojamības skenera izmantošana Dependency-Check pakalpojumā GitlabCI

Ja vēlaties izmantot gitlab lapas, tad tas nedarbosies - nokritis uzdevums neradīs artefaktu.

Piemērs šeit https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Būvējuma izvade: nav artefaktu, es neredzu html pārskatu. Jums vajadzētu izmēģināt Artifact: vienmēr

https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages/-/jobs/400004246

Izmantoto bibliotēku ievainojamības skenera izmantošana Dependency-Check pakalpojumā GitlabCI

CVE ievainojamību līmeņa regulēšana

Vissvarīgākā rinda failā gitlab-ci.yaml:

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

Izmantojot parametru failBuildOnCVSS, varat pielāgot CVE ievainojamību līmeni, uz kuru jums jāreaģē.

NIST ievainojamības datu bāzes (NVD) lejupielāde no interneta

Vai esat ievērojuši, ka NIST pastāvīgi lejupielādē NIST ievainojamības datu bāzes (NVD) no interneta:

Izmantoto bibliotēku ievainojamības skenera izmantošana Dependency-Check pakalpojumā GitlabCI

Lai lejupielādētu, varat izmantot utilītu nist_data_mirror_golang

Instalēsim un palaidīsim to.

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 startēšanas laikā augšupielādē NIST JSON CVE mapē /var/www/repos/nist-data-mirror/ un atjaunina datus ik pēc 24 stundām.

Lai lejupielādētu CVE JSON NIST, jums ir jākonfigurē nginx tīmekļa serveris (piemēram, gitlab-runner).

Minimālās nginx konfigurācijas piemērs:

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

}

Lai nebūtu gara rinda, kur tiek palaists mvn, mēs pārvietosim parametrus atsevišķā mainīgajā DEPENDENCY_OPTS.

Galīgā minimālā konfigurācija .gitlab-ci.yml izskatīsies šādi:

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

Telegrammas tērzēšana par DevOps un drošību
Telegrammas kanāls DevSecOps / SSDLC - droša attīstība

Avots: www.habr.com

Pievieno komentāru