Erabilitako liburutegietarako ahultasun eskanerra Dependency-Check GitlabCI-n

Ahultasunen kudeaketaren zati garrantzitsu bat sistema modernoak osatzen dituzten software osagaien hornikuntza-katea ondo ulertzea eta ziurtatzea da. Agile eta DevOps taldeek kode irekiko liburutegiak eta esparruak erabiltzen dituzte garapen denbora eta kostua murrizteko. Baina domina honek alde txarra ere badu: besteen akatsak eta ahultasunak heredatzeko aukera.

Jakina, taldeak bere aplikazioetan kode irekiko osagaiak zeintzuk diren jakitea ziurtatu behar du, bermatu behar du ezagutzen diren bertsio fidagarriak iturri fidagarri ezagunetatik deskargatzen direla eta aurkitu berri diren ahuleziak adabaki ondoren osagaien bertsio eguneratuak deskargatu behar direla.

Argitalpen honetan, OWASP Dependency Check erabiltzea aztertuko dugu eraikuntza bat bertan behera uzteko, zure kodearekin arazo larriak hautematen baditu.

β€œProiektu arinetan garapenaren segurtasuna” liburuan honela deskribatzen da. OWASP Dependency Check doako eskaner bat da, aplikazio batean erabiltzen diren kode irekiko osagai guztiak katalogatzen dituena eta haiek dituzten ahultasunak erakusten dituena. Java, .NET, Ruby (gemspec), PHP (composer), Node.js eta Python bertsioak daude, baita C/C++ proiektu batzuetarako ere. Dependency Check ohiko eraikuntza-tresnekin integratzen da, Ant, Maven eta Gradle barne, eta Jenkins bezalako etengabeko integrazio zerbitzariekin.

Dependency Check NISTen National Vulnerability Database (NVD) ahultasun ezagunak dituzten osagai guztien berri ematen du eta NVD albiste-jarioetako datuekin eguneratzen da.

Zorionez, hori guztia automatikoki egin daiteke OWASP Dependency Check proiektua bezalako tresnak edo bezalako programa komertzialak erabiliz. Ahate Beltza, JFrog Xray, Snyk, Nexus Bizi-zikloa Sonatipoa edo Iturria Garbitu.

Tresna hauek kode irekiko mendekotasunak automatikoki inbentariatzeko, ahultasun ezagunak dituzten liburutegi eta liburutegien bertsio zaharkituak identifikatzeko eta eraikuntzak abortatzeko, arazo larriak hautematen badira, tresna hauek sar daitezke.

OWASP mendekotasun egiaztapena

Dependency Check nola funtzionatzen duen probatzeko eta erakusteko, biltegi hau erabiltzen dugu mendekotasun-egiaztapen-adibidea.

HTML txostena ikusteko, nginx web zerbitzaria konfiguratu behar duzu zure gitlab-runner-en.

Gutxieneko nginx konfigurazioaren adibidea:

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

Muntaiaren amaieran argazki hau ikus dezakezue:

Erabilitako liburutegietarako ahultasun eskanerra Dependency-Check GitlabCI-n

Jarraitu esteka eta ikusi Dependentzia Egiaztapenaren txostena.

Lehenengo pantaila-argazkia txostenaren goiko zatia da, laburpen batekin.

Erabilitako liburutegietarako ahultasun eskanerra Dependency-Check GitlabCI-n

Bigarren pantaila-argazkiaren xehetasunak CVE-2017-5638. Hemen CVE maila eta esplotazioetarako estekak ikusten ditugu.

Erabilitako liburutegietarako ahultasun eskanerra Dependency-Check GitlabCI-n

Hirugarren pantaila-argazkia log4j-api-2.7.jar-ren xehetasunak dira. CVE mailak 7.5 eta 9.8 direla ikusten dugu.

Erabilitako liburutegietarako ahultasun eskanerra Dependency-Check GitlabCI-n

Laugarren pantaila-argazkia commons-fileupload-1.3.2.jar-en xehetasunak dira. CVE mailak 7.5 eta 9.8 direla ikusten dugu.

Erabilitako liburutegietarako ahultasun eskanerra Dependency-Check GitlabCI-n

Gitlab orriak erabili nahi badituzu, orduan ez du funtzionatuko - eroritako zeregin batek ez du artefaktu bat sortuko.

Adibidea hemen https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Eraiki irteera: artefakturik ez, ez dut html txostena ikusten. Artifact: beti probatu beharko zenuke

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

Erabilitako liburutegietarako ahultasun eskanerra Dependency-Check GitlabCI-n

CVE ahultasunen maila erregulatzea

Gitlab-ci.yaml fitxategiko lerro garrantzitsuena:

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

failBuildOnCVSS parametroarekin erantzun behar diozun CVE ahultasunen maila doi dezakezu.

NIST Vulnerability Database (NVD) Internetetik deskargatzea

Konturatu al zara NISTek etengabe deskargatzen dituela NIST ahultasun datu-baseak (NVD) Internetetik:

Erabilitako liburutegietarako ahultasun eskanerra Dependency-Check GitlabCI-n

Deskargatzeko, utilitatea erabil dezakezu nist_data_mirror_golang

Instalatu eta abiarazi dezagun.

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-ek NIST JSON CVE kargatzen du /var/www/repos/nist-data-mirror/ abiaraztean eta datuak 24 orduz behin eguneratzen ditu.

CVE JSON NIST deskargatzeko, nginx web zerbitzaria konfiguratu behar duzu (adibidez, zure gitlab-runner-en).

Gutxieneko nginx konfigurazioaren adibidea:

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 abiarazten den lerro luzerik ez egiteko, parametroak DEPENDENCY_OPTS aldagai bereizi batera eramango ditugu.

Azken konfigurazio minimoa .gitlab-ci.yml itxura hau izango du:

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 txata DevOps eta segurtasunari buruz
Telegram kanala DevSecOps / SSDLC - Garapen segurua

Iturria: www.habr.com

Gehitu iruzkin berria