Utilisation de Vulnerability Scanner dans les bibliothèques de vérification des dépendances utilisées dans GitlabCI

Une partie importante de la gestion des vulnérabilités consiste à comprendre et à garantir la sécurité de la chaîne d'approvisionnement des composants logiciels qui composent les systèmes modernes. Les équipes agiles et DevOps utilisent largement les bibliothèques et les frameworks open source pour réduire le temps et les coûts de développement. Mais cette médaille a un inconvénient: la capacité d'hériter des erreurs et des vulnérabilités des autres.


De toute évidence, l'équipe doit savoir quels composants open source sont inclus dans ses applications, s'assurer que les versions fiables connues sont téléchargées à partir de sources fiables connues et télécharger les versions mises à jour des composants après avoir corrigé les vulnérabilités nouvellement découvertes.


Dans cet article, nous verrons comment utiliser OWASP Dependency Check pour interrompre une génération si elle rencontre de graves problèmes avec votre code.


Le livre "Development Security in Agile Projects" est décrit comme suit. OWASP Dependency Check est un scanner gratuit qui répertorie tous les composants open source utilisés dans l'application et montre les vulnérabilités qui y sont présentes. Il existe des versions pour Java, .NET, Ruby (gemspec), PHP (composer), Node.js et Python, ainsi que pour certains projets C / C ++. Dependency Check s'intègre aux outils de build courants, notamment Ant, Maven et Gradle, et aux serveurs d'intégration continue comme Jenkins.


Dependency Check signale tous les composants présentant des vulnérabilités connues de la base de données NIST National Vulnerability Database (NVD) et est mis à jour sur la base des données des canaux de nouvelles NVD.


Heureusement, tout cela peut être fait automatiquement en utilisant des outils tels que le projet OWASP Dependency Check ou des programmes commerciaux tels que Black Duck , JFrog Xray , Snyk , Neatus Lifecycle by Sonatype ou SourceClear .


Ces outils peuvent être inclus dans les pipelines d'assemblage pour compiler automatiquement une liste de dépendances open source, identifier les versions obsolètes des bibliothèques et des bibliothèques qui contiennent des vulnérabilités connues et interrompre la génération en cas de problèmes graves.


Vérification des dépendances OWASP


Pour tester et démontrer le fonctionnement de la vérification des dépendances, nous utilisons ce référentiel d' exemples de vérification des dépendances .


Pour afficher le rapport HTML, vous devez configurer le serveur Web nginx sur votre gitlab-runner.


Exemple de configuration minimale de 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 { } } 

À la fin de l'assemblage, vous pouvez voir cette image:



Nous suivons le lien et nous voyons le rapport Dependency Check.


La première capture d'écran est le haut du rapport avec un résumé.



Détails de la deuxième capture d'écran CVE-2017-5638. Ici, nous voyons le niveau CVE et les liens vers les exploits.



La troisième capture d'écran est les détails de log4j-api-2.7.jar. Nous voyons que les niveaux de CVE 7.5 et 9.8.



Quatrième capture d'écran - détails de commons-fileupload-1.3.2.jar. Nous voyons que les niveaux de CVE 7.5 et 9.8.



Si vous souhaitez utiliser des pages gitlab, cela ne fonctionnera pas - une tâche abandonnée ne créera pas d'artefact.


Un exemple est ici https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages .


Conclusion de l'assemblage: il n'y a pas d'artefacts, je ne vois pas le rapport html. Nous devons essayer Artefact: toujours


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



Gestion des vulnérabilités CVE

La ligne la plus importante du fichier gitlab-ci.yaml:


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

Avec le paramètre failBuildOnCVSS, vous pouvez contrôler le niveau de vulnérabilités CVE auquel vous devez répondre.


Télécharger NIST Vulnerability Database (NVD) NIST

Vous avez remarqué que vous téléchargez constamment la base de données de vulnérabilités NIST (NVD) depuis Internet:



Vous pouvez utiliser l'utilitaire nist_data_mirror_golang pour le téléchargement


Installez-le et exécutez-le.


 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 télécharge CVE JSON NIST dans / var / www / repos / nist-data-mirror / au démarrage et met à jour les données toutes les 24 heures.


Pour télécharger CVE JSON NIST, vous devez configurer le serveur Web nginx (par exemple, sur votre gitlab-runner).


Exemple de configuration minimale de 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 { } } 

Afin de ne pas faire une longue ligne où mvn est démarré, nous émettrons les paramètres dans une variable distincte DEPENDENCY_OPTS.


La configuration minimale finale .gitlab-ci.yml se révélera comme ceci:


 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 

Discussion par télégramme sur DevOps et la sécurité
Canal télégramme DevSecOps / SSDLC - Développement sécurisé

Source: https://habr.com/ru/post/fr483716/


All Articles