Utilizzo dello scanner delle vulnerabilità nelle librerie utilizzate Dependency-Check in GitlabCI

Una parte importante della gestione delle vulnerabilità è comprendere bene e garantire la sicurezza della catena di fornitura dei componenti software da cui sono costruiti i moderni sistemi. I team che praticano metodologie agili e DevOps utilizzano ampiamente librerie e framework open source per ridurre i tempi e i costi di sviluppo. Ma questa medaglia ha anche un rovescio: la possibilità di ereditare errori e vulnerabilità altrui.

È evidente che il team deve assolutamente sapere quali componenti open source sono inclusi nelle sue applicazioni, assicurarsi che le versioni ritenute sicure vengano scaricate da fonti verificate e caricare le versioni aggiornate dei componenti dopo aver corretto le vulnerabilità appena scoperte.

In questo post esamineremo l'uso di OWASP Dependency Check per interrompere la compilazione in caso di problemi seri con il tuo codice.

Nel libro "Sicurezza nello sviluppo di progetti Agile" viene descritto così. OWASP Dependency Check è un scanner gratuito che catalogizza tutti i componenti open source utilizzati nell'applicazione e mostra le vulnerabilità presenti. Sono disponibili versioni per Java, .NET, Ruby (gemspec), PHP (composer), Node.js e Python, oltre ad alcune per progetti in C/C++. Dependency Check si integra con strumenti di build comuni, tra cui Ant, Maven e Gradle e server di integrazione continua come Jenkins.

Dependency Check segnala tutti i componenti con vulnerabilità note dalla National Vulnerability Database (NVD) NIST e viene aggiornato sulla base dei dati provenienti dai canali di notizie NVD.

Fortunatamente, tutto ciò può essere fatto automaticamente con strumenti come il progetto OWASP Dependency Check o software commerciali come Black Duck, JFrog Xray, Snyk, Nexus Lifecycle dell'azienda Sonatype o SourceClear.

Questi strumenti possono essere integrati nei pipeline di build per comporre automaticamente un inventario delle dipendenze open source, identificare versioni obsolete di librerie e librerie contenenti vulnerabilità note, e interrompere la build in caso di problemi seri.

OWASP Dependency Check

Per testare e dimostrare il funzionamento di Dependency Check utilizziamo questo repository dependency-check-example.

Per visualizzare il report HTML è necessario configurare un server web nginx sul tuo gitlab-runner.

Ecco un esempio di configurazione minima di 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 {
    }
}

Alla fine della compilazione puoi vedere un'immagine come questa:

Utilizzo dello scanner delle vulnerabilità nelle librerie utilizzate Dependency-Check in GitlabCI

Andiamo al link e vediamo il rapporto Dependency Check.

Il primo screenshot mostra la parte superiore del rapporto con un riepilogo.

Utilizzo dello scanner delle vulnerabilità nelle librerie utilizzate Dependency-Check in GitlabCI

Il secondo screenshot mostra i dettagli di CVE-2017-5638. Qui vediamo il livello CVE e i link agli exploit.

Utilizzo dello scanner delle vulnerabilità nelle librerie utilizzate Dependency-Check in GitlabCI

Il terzo screenshot mostra i dettagli di log4j-api-2.7.jar. Vediamo che i livelli CVE sono 7.5 e 9.8.

Utilizzo dello scanner delle vulnerabilità nelle librerie utilizzate Dependency-Check in GitlabCI

Il quarto screenshot mostra i dettagli di commons-fileupload-1.3.2.jar. Vediamo che i livelli CVE sono 7.5 e 9.8.

Utilizzo dello scanner delle vulnerabilità nelle librerie utilizzate Dependency-Check in GitlabCI

Se vuoi utilizzare gitlab pages, non sarà possibile: un'attività fallita non creerà un artefatto.

Esempio qui https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Output della compilazione: nessun artefatto, non vedo un rapporto html. Bisogna provare Artifact: always

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

Utilizzo dello scanner delle vulnerabilità nelle librerie utilizzate Dependency-Check in GitlabCI

Regolazione del livello CVE delle vulnerabilità

La stringa più importante nel file gitlab-ci.yaml:

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

Con il parametro failBuildOnCVSS puoi regolare il livello CVE delle vulnerabilità a cui rispondere.

Scaricamento dal web del database delle vulnerabilità (NVD) NIST

Hai notato che scarica costantemente i database delle vulnerabilità (NVD) NIST dal web:

Utilizzo dello scanner delle vulnerabilità nelle librerie utilizzate Dependency-Check in GitlabCI

Per il download puoi utilizzare l'utility nist_data_mirror_golang

Installiamola e avviamola.

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 scarica CVE JSON NIST in /var/www/repos/nist-data-mirror/ all'avvio e aggiorna i dati ogni 24 ore.

Per scaricare CVE JSON NIST devi configurare un server web nginx (ad esempio sul tuo gitlab-runner).

Ecco un esempio di configurazione minima di 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 {
    }

}

Per non creare una lunga stringa dove viene eseguito mvn, sposteremo i parametri in una variabile separata DEPENDENCY_OPTS.

La configurazione minima finale di .gitlab-ci.yml sarà così:

variabili:
  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:
  percorsi:
    - .m2/repository

verifica:
  fase: 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}
  etichette:
    - shell

Telegram chat su DevOps e Sicurezza
Telegram canale DevSecOps / SSDLC - Sviluppo Sicuro

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster