DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»Comment vérifier les images Docker pour les vulnérabilités
    Uncategorized

    Comment vérifier les images Docker pour les vulnérabilités

    janvier 24, 2023
    Comment vérifier les images Docker pour les vulnérabilités
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Il est très important de vérifier régulièrement les vulnérabilités de votre pipeline. L’une des étapes à exécuter consiste à effectuer une analyse de vulnérabilité de vos images Docker. Dans ce blog, vous apprendrez comment effectuer l’analyse des vulnérabilités, comment corriger les vulnérabilités et comment l’ajouter à votre pipeline Jenkins. Apprécier!

    1. Introduction

    Dans un précédent blog d’il y a quelques années, il a été décrit comment vous pouvez analyser vos images Docker à la recherche de vulnérabilités. Un blog de suivi a montré comment ajouter l’analyse à un pipeline Jenkins. Cependant, Anchore Engine, qui était utilisé dans les blogs précédents, n’est plus pris en charge. Une solution alternative est disponible avec le grype qui est également fourni par Anchore. Dans ce blog, vous examinerez de plus près grype, comment cela fonctionne, comment vous pouvez résoudre les problèmes et comment vous pouvez l’ajouter à votre pipeline Jenkins.

    Mais avant tout, pourquoi vérifier les vulnérabilités ? Vous devez rester à jour avec les derniers correctifs de sécurité de nos jours. De nombreuses vulnérabilités de sécurité sont accessibles au public et peuvent donc être exploitées assez facilement. Il est donc indispensable de corriger au plus vite les failles de sécurité afin de minimiser votre surface d’attaque. Mais comment suivre cela? Vous vous concentrez principalement sur l’entreprise et vous ne souhaitez pas travailler à plein temps pour corriger les failles de sécurité. C’est pourquoi il est important de scanner automatiquement votre application et vos images Docker. Grype peut vous aider à numériser vos images Docker. Grype vérifiera les vulnérabilités du système d’exploitation, mais également les packages spécifiques au langage, tels que les fichiers jar Java, pour détecter les vulnérabilités et les signalera. De cette façon, vous disposez d’un excellent outil qui automatisera les contrôles de sécurité pour vous. Notez que grype ne se limite pas à la numérisation d’images Docker. Il peut également analyser des fichiers et des répertoires et peut donc être utilisé pour analyser vos sources.

    Dans ce blog, vous allez créer une image Docker vulnérable contenant une application Spring Boot. Vous installerez et utiliserez grype afin de scanner l’image et de corriger les vulnérabilités. À la fin, vous apprendrez comment ajouter l’analyse à votre pipeline Jenkins.

    Les sources utilisées dans ce blog se trouvent sur GitHub.

    2. Prérequis

    Les prérequis nécessaires pour ce blog sont :

    • Connaissance de base de Linux ;
    • Connaissance de base de Docker ;
    • Connaissance de base de Java et Spring Boot.

    3. Application vulnérable

    Accédez à Spring Initializr et choisissez une version Maven, Java 17, Spring Boot 2.7.6 et la dépendance Spring Web. Ce ne sera pas une application très vulnérable car Spring garantit déjà que vous utilisez la dernière version de Spring Boot. Par conséquent, changez la version de Spring Boot en 2.7.0. L’application Spring Boot peut être construite avec la commande suivante, qui créera le fichier jar pour vous :

    Vous allez scanner une image Docker, donc un Dockerfile doit être créé. Vous utiliserez un Dockerfile très basique qui contient juste les instructions minimales nécessaires pour créer l’image. Si vous souhaitez créer des images Docker prêtes pour la production, lisez les publications Docker Best Practices et Spring Boot Docker Best Practices.

    FROM eclipse-temurin:17.0.1_12-jre-alpine
    WORKDIR /opt/app
    ARG JAR_FILE
    COPY target/${JAR_FILE} app.jar
    ENTRYPOINT ["java", "-jar", "app.jar"]

    Au moment de la rédaction, la dernière éclipse-témurine l’image de base pour Java 17 est la version 17.0.5_8. Encore une fois, utilisez-en un plus ancien afin de le rendre vulnérable.

    Pour construire l’image Docker, un fork du dockerfile-maven-plugin de Spotify sera utilisé. L’extrait suivant est donc ajouté au pom dossier.

    <plugin>
      <groupId>com.xenoamess.docker</groupId>
      <artifactId>dockerfile-maven-plugin</artifactId>
      <version>1.4.25</version>
      <configuration>
        <repository>mydeveloperplanet/mygrypeplanet</repository>
        <tag>${project.version}</tag>
        <buildArgs>
          <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
      </configuration>
    </plugin>

    L’avantage d’utiliser ce plugin est que vous pouvez facilement réutiliser la configuration. La création de l’image Docker peut être effectuée par une seule commande Maven.

    La création de l’image Docker peut être effectuée en appelant la commande suivante :

    Vous êtes maintenant prêt à commencer avec grype.

    4. Mise en place

    L’installation de grype peut se faire en exécutant le script suivant :

    $ curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin

    Vérifiez l’installation en exécutant la commande suivante :

    $ grype version
    Application:          grype
    Version:              0.54.0
    Syft Version:         v0.63.0
    BuildDate:            2022-12-13T15:02:51Z
    GitCommit:            93499eec7e3ce2704755e9f51457181b06b519c5
    GitDescription:       v0.54.0
    Platform:             linux/amd64
    GoVersion:            go1.18.8
    Compiler:             gc
    Supported DB Schema:  5

    5. Numériser l’image

    La numérisation de l’image Docker se fait en appelant grype suivie par docker:indiquant que vous souhaitez numériser une image depuis le démon Docker, l’image et la balise :

    $ grype docker:mydeveloperplanet/mygrypeplanet:0.0.1-SNAPSHOT
    Application:          grype
    Version:              0.54.0
    Syft Version:         v0.63.0
     Vulnerability DB        [updated]
     Loaded image            
     Parsed image            
     Cataloged packages      [50 packages]
     Scanned image           [42 vulnerabilities]
    NAME              INSTALLED  FIXED-IN   TYPE          VULNERABILITY        SEVERITY 
    busybox           1.34.1-r3  1.34.1-r5  apk           CVE-2022-28391       High      
    jackson-databind  2.13.3                java-archive  CVE-2022-42003       High      
    jackson-databind  2.13.3                java-archive  CVE-2022-42004       High      
    jackson-databind  2.13.3     2.13.4     java-archive  GHSA-rgv9-q543-rqg4  High      
    jackson-databind  2.13.3     2.13.4.1   java-archive  GHSA-jjjh-jjxp-wpff  High      
    java              17.0.1+12             binary        CVE-2022-21248       Low       
    java              17.0.1+12             binary        CVE-2022-21277       Medium    
    java              17.0.1+12             binary        CVE-2022-21282       Medium    
    java              17.0.1+12             binary        CVE-2022-21283       Medium    
    java              17.0.1+12             binary        CVE-2022-21291       Medium    
    java              17.0.1+12             binary        CVE-2022-21293       Medium    
    java              17.0.1+12             binary        CVE-2022-21294       Medium    
    java              17.0.1+12             binary        CVE-2022-21296       Medium    
    java              17.0.1+12             binary        CVE-2022-21299       Medium    
    java              17.0.1+12             binary        CVE-2022-21305       Medium    
    java              17.0.1+12             binary        CVE-2022-21340       Medium    
    java              17.0.1+12             binary        CVE-2022-21341       Medium    
    java              17.0.1+12             binary        CVE-2022-21360       Medium    
    java              17.0.1+12             binary        CVE-2022-21365       Medium    
    java              17.0.1+12             binary        CVE-2022-21366       Medium    
    libcrypto1.1      1.1.1l-r7             apk           CVE-2021-4160        Medium    
    libcrypto1.1      1.1.1l-r7  1.1.1n-r0  apk           CVE-2022-0778        High      
    libcrypto1.1      1.1.1l-r7  1.1.1q-r0  apk           CVE-2022-2097        Medium    
    libretls          3.3.4-r2   3.3.4-r3   apk           CVE-2022-0778        High      
    libssl1.1         1.1.1l-r7             apk           CVE-2021-4160        Medium    
    libssl1.1         1.1.1l-r7  1.1.1n-r0  apk           CVE-2022-0778        High      
    libssl1.1         1.1.1l-r7  1.1.1q-r0  apk           CVE-2022-2097        Medium    
    snakeyaml         1.30                  java-archive  GHSA-mjmj-j48q-9wg2  High      
    snakeyaml         1.30       1.31       java-archive  GHSA-3mc7-4q67-w48m  High      
    snakeyaml         1.30       1.31       java-archive  GHSA-98wm-3w3q-mw94  Medium    
    snakeyaml         1.30       1.31       java-archive  GHSA-c4r9-r8fh-9vj2  Medium    
    snakeyaml         1.30       1.31       java-archive  GHSA-hhhw-99gj-p3c3  Medium    
    snakeyaml         1.30       1.32       java-archive  GHSA-9w3m-gqgf-c4p9  Medium    
    snakeyaml         1.30       1.32       java-archive  GHSA-w37g-rhq8-7m4j  Medium    
    spring-core       5.3.20                java-archive  CVE-2016-1000027     Critical  
    ssl_client        1.34.1-r3  1.34.1-r5  apk           CVE-2022-28391       High      
    zlib              1.2.11-r3  1.2.12-r0  apk           CVE-2018-25032       High      
    zlib              1.2.11-r3  1.2.12-r2  apk           CVE-2022-37434       Critical 

    Que vous dit cette sortie ?

    • NOM: Le nom du paquet vulnérable ;
    • INSTALLÉE: quelle version est installée ;
    • FIXE: Dans quelle version la vulnérabilité est corrigée ;
    • TAPER: Le type de la dépendance, par exemple binaire pour le JDK, etc ;
    • VULNÉRABILITÉ; L’identifiant de la vulnérabilité. Avec cet identifiant, vous pouvez obtenir plus d’informations sur la vulnérabilité dans la base de données CVE ;
    • GRAVITÉ: Parle de lui-même et peut être négligeable, faible, moyen, élevé, critique.

    En examinant de plus près la sortie, vous remarquerez que toutes les vulnérabilités n’ont pas de correctif confirmé. Alors que faire dans ce cas ? Grype fournit une option pour afficher uniquement les vulnérabilités avec un correctif confirmé. Ajout de la --only-fixed le drapeau fera l’affaire.

    $ grype docker:mydeveloperplanet/mygrypeplanet:0.0.1-SNAPSHOT --only-fixed
     Vulnerability DB        [no update available]
     Loaded image            
     Parsed image            
     Cataloged packages      [50 packages]
     Scanned image           [42 vulnerabilities]
     
    NAME              INSTALLED  FIXED-IN   TYPE          VULNERABILITY        SEVERITY 
    busybox           1.34.1-r3  1.34.1-r5  apk           CVE-2022-28391       High      
    jackson-databind  2.13.3     2.13.4     java-archive  GHSA-rgv9-q543-rqg4  High      
    jackson-databind  2.13.3     2.13.4.1  ...
    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.