Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
log4shell_sentinel — Un scanner intelligent Log4Shell/Log4j/CVE-2021-44228 | Kitploit
Outils/GitHubGitHub/ossie-git/log4shell_sentinel
Scanners de VulnérabilitésSécurité des ConteneursAnalyse des VulnérabilitésAnalyse ForensiqueRéponse aux IncidentsAnalyse de Journaux
GitHubossie-git/log4shell_sentinel

log4shell_sentinel

Un scanner intelligent Log4Shell/Log4j/CVE-2021-44228

Voir le dépôt
141il y a 4 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Log4Shell Sentinel - Un scanner intelligent pour CVE-2021-44228

Introduction

Bien que d'excellents outils aient été publiés pour aider les organisations à analyser leurs environnements à la recherche d'applications vulnérables à la faille critique Log4J / CVE-2021-44228, j'ai constaté que :

  • aucun des outils que j'ai rencontrés n'avait été conçu pour permettre aux analystes de suivre une découverte donnée tout au long du processus de remédiation. Log4Shell Sentinel génère ses découvertes au format CSV en s'attendant à ce que l'analyste découpe et analyse ensuite les découvertes dans Excel, ajoute certaines découvertes à une liste d'ignorés et relance l'analyse, compare les analyses, ajoute des données aux résultats d'analyse, etc.
  • les scanners basés sur les fichiers laissent beaucoup de travail aux analystes, en particulier dans les environnements conteneurisés

C'est ainsi qu'est né Log4Shell Sentinel. Log4Shell Sentinel est un scanner basé sur les fichiers doté de fonctionnalités uniques. Il n'a pas vocation à remplacer tous les autres outils disponibles mais peut les compléter.

Fonctionnalités

Log4Shell Sentinel est un scanner basé sur les fichiers. Il recherche les applications basées sur Java en analysant un système cible à la recherche d'artefacts des formats de fichiers suivants :

Type de fichierDétails
Jar simpleC'est le cas où le fichier log4j-core n'est pas intégré.
Fat / Uber jarUn uber jar est un jar qui contient à la fois vos classes / packages et toutes les dépendances de votre application (bibliothèques, ressources et fichiers de métadonnées) dans un seul fichier jar. C'est l'option de déploiement la plus couramment utilisée.
WARUn fichier war (Web Application Archive) est un fichier qui contient votre code JSP, HTML et JavaScript en plus de vos bibliothèques et autres ressources. Ce format est moins couramment utilisé.
EARUn ear (Enterprise Application Archive) est un autre format qui était plus couramment utilisé avec Jakarta EE pour les déploiements.

et recherche les instances de jars log4j-core vulnérables. Ensuite, il :

  • calcule une empreinte MD5 de l'artefact. Cela permet à un analyste d'identifier la même application exécutée sur différentes machines / conteneurs et de la traiter comme une seule découverte

  • pour les fichiers identifiés comme appartenant à un conteneur, tels que : /var/lib/docker/overlay2/192768f471818601094bf4edd96d14bfc0e2b178a04a2efd00b2231ad4e46b33/merged/app/spring-boot-application.jar, il fait le gros du travail en mappant le fichier vers l'image correspondante. Par exemple, il traduirait le chemin ci-dessus en l'image suivante : ghcr.io/christophetd/log4shell-vulnerable-app:latest. Étant donné que les différents runtimes de conteneurs stockent ce mappage de différentes manières, cela peut éviter des heures de frustration à un analyste. Cela permet également à un analyste de traiter un certain nombre de conteneurs exécutant une seule application comme une seule découverte

  • il supprime les correspondances inutiles, telles que les correspondances relatives à des conteneurs actuellement non exécutés, y compris les images en cache. Cela permet à un analyste de se concentrer sur l'essentiel et lui évite encore des heures de travail inutile

  • il permet à un analyste d'ignorer des correspondances en fonction de :

    • l'empreinte MD5
    • le chemin du fichier
    • l'image du conteneur

    Cela permet à l'analyste de supprimer les applications dont il sait qu'elles ne sont pas vulnérables ou qui correspondent à des applications basées sur une interface en ligne de commande (CLI) ne présentant pas de menace. Par exemple, si une instance de Logstash est détectée, un analyste peut choisir de l'ignorer s'il n'exécute pas l'outil ou s'il l'exécute simplement occasionnellement en ligne de commande.

  • il est optimisé pour fonctionner avec vos outils de gestion de configuration tels qu'Ansible, vous donnant la possibilité d'analyser rapidement votre environnement en quelques minutes

Enrichissement des métadonnées

Pour plus de détails sur l'enrichissement des métadonnées ajouté par Log4Shell Sentinel, consultez mon article de blog post.

Installation

Le moyen le plus simple est de télécharger le binaire pré-compilé.

Compilation à partir des sources

Là encore, c'est simple. Cependant, vous voudrez probablement compiler une version statique pour contourner les éventuelles variations liées à GLIBC dans votre environnement. L'outil utilise les modules suivants qui utilisent CGO par défaut :

  • os/user
  • net

Pour compiler une version statique qui utilise les versions Go de ces bibliothèques, clonez simplement le dépôt puis exécutez :

root@kitploit:~
$ CGO_ENABLED=0 go build -ldflags="-s -w"
$ ldd log4shell_sentinel
        not a dynamic executable

Utilisation

root@kitploit:~
$ ./log4shell_sentinel -h
NAME:
   Log4Shell Sentinel - by Osama Elnaggar

USAGE:
   log4shell_sentinel [global options] command [command options] [arguments...]

VERSION:
   v1.0.0

COMMANDS:
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --path value, -p value       Path to search (default: ".")
   --no-banner, --nb            Suppress banner (default: false)
   --no-messages, --nm          Suppress messages except for CSV output (default: false)
   --no-header, --nh            Suppress header in CSV output (default: false)
   --imd5 value, --im value     Ignore MD5 hashes. Refer to the GitHub page for expected format
   --ipath value, --ip value    Ignore file path matches. Refer to the GitHub page for expected format
   --icimage value, --ic value  Ignore container image matches. Refer to the GitHub page for expected format
   --print-headers, --ph        Print CSV Headers only (default: false)
   --help, -h                   show help (default: false)
   --version, -v                print the version (default: false)

Par défaut, une analyse se contente d'analyser le répertoire courant. Par exemple :

root@kitploit:~
$ ./log4shell_sentinel

░█░░░█▀█░█▀▀░█░█░█▀▀░█░█░█▀▀░█░░░█░░░░░█▀▀░█▀▀░█▀█░▀█▀░▀█▀░█▀█░█▀▀░█░░
░█░░░█░█░█░█░░▀█░▀▀█░█▀█░█▀▀░█░░░█░░░░░▀▀█░█▀▀░█░█░░█░░░█░░█░█░█▀▀░█░░
░▀▀▀░▀▀▀░▀▀▀░░░▀░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀▀▀░░░▀▀▀░▀▀▀░▀░▀░░▀░░▀▀▀░▀░▀░▀▀▀░▀▀▀

- A CVE-2021-44228/CVE-2021-45046/CVE-2021-45105 Scanner
- v1.0.0
- by Osama Elnaggar

[*] WARNING: Running as non-root user.
             Non-readable files / dirs will be skipped
             Container mapping will fail

[*] Starting shallow scan ............ [DONE]
[*] Starting deep scan ............... [DONE]
[*] Calculating MD5 hashes ........... [DONE]
[*] Performing container image lookups [DONE]
[*] Processing ignore list(s) ........ [DONE]
[*] Generating output ................ [DONE]

IP,Hostname,AppName,Team,Ignore (Y/N),Comments,MD5Hash,Timestamp,Container,ContainerImage,FullPath,Version
192.168.121.121,server3,,,,,4e615cd580758b70c49ade1f79103328,2021-12-21T07:38:09Z,true,ghcr.io/christophetd/log4shell-vulnerable-app:latest,/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,log4j-core-2.14.1.jar

Vous obtiendrez immédiatement un AVERTISSEMENT si vous l'exécutez en tant qu'utilisateur non-root, car il nécessite les permissions root :

  • si vous prévoyez d'analyser l'intégralité de votre système de fichiers (recommandé)
  • si vous prévoyez d'enrichir les résultats en effectuant des recherches conteneur -> image (l'accès au démon Docker, aux fichiers de configuration, etc. est requis)

Il fonctionnera toujours sans privilèges root mais pourrait ne pas vous donner les meilleurs résultats.

Comprendre les découvertes

Un exemple de découverte ressemble à ceci :

root@kitploit:~
IP,Hostname,AppName,Team,Ignore (Y/N),Comments,MD5Hash,Timestamp,Container,ContainerImage,FullPath,Version
192.168.121.121,server3,,,,,4e615cd580758b70c49ade1f79103328,2021-12-21T07:38:09Z,true,ghcr.io/christophetd/log4shell-vulnerable-app:latest,/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,log4j-core-2.14.1.jar

Certains champs sont volontairement laissés vides pour que l'analyste les remplisse dans Excel, etc. Une brève description de chaque champ est présentée ci-dessous :

Options

L'outil est fourni avec les options suivantes :

Prise en charge du mappage conteneur -> image

L'une des fonctionnalités uniques de Log4Shell Sentinel, que l'on ne trouve dans aucun autre outil, est la capacité à traduire les jars trouvés lors des analyses du système de fichiers, tels que :

/var/lib/docker/overlay2/192768f471818601094bf4edd96d14bfc0e2b178a04a2efd00b2231ad4e46b33/merged/app/spring-boot-application.jar

vers l'image de conteneur correspondante (le chemin ci-dessus se traduit par exemple par ghcr.io/christophetd/log4shell-vulnerable-app:latest). Étant donné que les différents runtimes de conteneurs stockent ce mappage de différentes manières, cela peut éviter des heures de frustration à un analyste. Cela permet également à un analyste de traiter un certain nombre de conteneurs exécutant une seule application comme une seule découverte. La solution prend actuellement en charge les recherches suivantes :

  • Docker (avec le pilote de stockage overlay2)
  • Docker (avec le pilote de stockage aufs)
  • CRI-O
  • containerd

Listes d'ignorés

Le nombre d'applications identifiées peut au départ sembler écrasant, ou vous pouvez vouloir vous concentrer d'abord sur un sous-ensemble donné d'applications identifiées, comme celles exposées aux utilisateurs externes. Vous pouvez également vouloir vous concentrer sur un périmètre de conformité donné. Pour prendre en charge cela, l'application permet de spécifier une liste. Log4Shell prend actuellement en charge 3 listes d'ignorés :

  • liste d'ignorés basée sur l'empreinte MD5
  • liste d'ignorés basée sur l'image du conteneur
  • liste d'ignorés basée sur le chemin

Au lieu de simples listes, il attend un fichier CSV en entrée. Cela encourage l'analyste à documenter la raison pour laquelle il ignore une découverte donnée, à mesure qu'il traite les découvertes et identifie les applications non vulnérables à l'aide d'une analyse manuelle ou automatisée du code source, d'outils DAST, etc.

Liste d'ignorés basée sur l'empreinte MD5

La liste est un simple fichier CSV au format suivant :

root@kitploit:~
MD5Sum,AppName,Reason

Les colonnes AppName et Reason peuvent être vides mais sont là pour vous permettre de garder une trace de la raison pour laquelle vous incluez ou excluez des applications spécifiques.

REMARQUE Comme cette fonctionnalité utilise l'empreinte MD5 calculée pour l'application, elle ne fonctionnera que pour les applications qui sont des fat / uber jars, des EAR ou des WAR.

Par exemple, si nous avions la découverte suivante :

root@kitploit:~
IP,Hostname,AppName,Team,Ignore (Y/N),Comments,MD5Hash,Timestamp,Container,ContainerImage,FullPath,Version
192.168.121.121,server3,,,,,4e615cd580758b70c49ade1f79103328,2021-12-21T07:38:09Z,true,ghcr.io/christophetd/log4shell-vulnerable-app:latest,/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,log4j-core-2.14.1.jar

et que nous déterminions que l'application n'est pas vulnérable, nous pouvons simplement enregistrer ce qui suit dans hashes.csv :

root@kitploit:~
4e615cd580758b70c49ade1f79103328,Demo App,Not vulnerable

puis la relancer :

root@kitploit:~
# ./log4shell_sentinel --im hashes.csv --path /

la découverte ci-dessus serait supprimée.

Liste d'ignorés pour les mappages conteneurs -> images

La liste est un simple fichier CSV au format suivant :

root@kitploit:~
Container Image,AppName,Reason

En poursuivant avec l'exemple précédent, nous pouvons lui demander d'ignorer toute découverte dont l'image du conteneur est : ghcr.io/christophetd/log4shell-vulnerable-app:latest en créant un fichier images.csv comme celui-ci :

root@kitploit:~
ghcr.io/christophetd/log4shell-vulnerable-app:latest,,

puis en l'exécutant ainsi :

root@kitploit:~
# ./log4shell_sentinel --ic images.csv -p /

Là encore, notre découverte précédente serait supprimée.

Liste d'ignorés basée sur les chemins

Là encore, il s'agit d'un simple fichier CSV au format suivant :

root@kitploit:~
Path,AppName,Reason

En utilisant l'exemple ci-dessus, si nous créons le fichier paths.csv suivant :

root@kitploit:~
/run/containerd/io.containerd.runtime.v2.task/k8s.io/dc2c9c214809f506283c917244cd126a9b056ac7274322d12b59c9196d95dd9b/rootfs/app/spring-boot-application.jar,Demo App,Not vulnerable

la découverte précédente serait supprimée.

AVERTISSEMENT Dans la mesure du possible, il est préférable d'utiliser une empreinte MD5 ou le nom de l'image du conteneur pour la suppression, car le chemin peut ne pas être unique.

Analyse à grande échelle de votre environnement

Bien qu'il soit parfaitement acceptable d'exécuter Log4Shell Sentinel sur un seul serveur, il révèle tout son potentiel lorsqu'il est combiné avec votre outil de gestion de configuration préféré (Ansible, Chef, Puppet, Salt, AWS SSM, etc.) ou même avec de simples outils SSH parallèles tels que parellel-ssh.

Cela vous apporte de nombreux avantages, notamment :

  • détecter les instances en double de vos applications et conteneurs et traiter ces découvertes comme une seule découverte lors de la phase d'analyse
  • analyser l'intégralité de votre environnement en quelques minutes

Pour un exemple complet de cette mise en œuvre, consultez mon article de blog post.

Flux de travail

Reportez-vous à la section Analyse à grande échelle de votre environnement.

FAQ

  • Je ne vois pas toutes les applications vulnérables. Pourquoi ?
    • La raison principale est probablement liée soit au fait de ne pas l'exécuter en tant qu'utilisateur root (il nécessite l'accès à l'emplacement où vos applications peuvent être installées), soit au fait de ne pas avoir spécifié le bon path. Il est recommandé de l'exécuter en tant qu'utilisateur root et de définir --path /.
  • Quelles sont les limitations ? Certaines limitations incluent :
    • L'outil ne peut pas affirmer de manière définitive si une application donnée est vulnérable ou non. Au lieu de cela, il détectera si une application contient une version de la bibliothèque qui est vulnérable
    • Si l'application détectée ne s'exécute pas dans un conteneur, l'outil ne peut pas détecter si une application donnée est en cours d'exécution ou non. Ainsi, même un outil en ligne de commande qui utilise la version vulnérable sera détecté
    • L'outil nécessite un accès SSH et ne détectera donc pas les problèmes sur les systèmes où il ne peut pas s'exécuter
  • Le mappage conteneur -> image ne fonctionne pas. Pourquoi ?
    • Depuis la v1.0.0, l'outil prend actuellement en charge le mappage pour les éléments suivants :

      • Docker (avec le pilote de stockage Overlay2)
      • Docker (avec le pilote de stockage aufs)
      • CRI-O
      • containerd

      Si vous utilisez autre chose, le mappage ne fonctionnera pas. Si vous utilisez l'un des éléments ci-dessus, il se peut que vous n'exécutiez pas l'outil en tant qu'utilisateur root ou que le socket / les fichiers utilisés se trouvent dans un emplacement non standard.

  • Quelles vulnérabilités détecte-t-il ?
    • Bien qu'il vise principalement à détecter les versions de log4j susceptibles d'être affectées par CVE-2021-45105, il signale également les versions vulnérables à CVE-2021-45046 et CVE-2021-44228.

Auteur

Développé par : Osama Elnaggar

  • Site web : https://osamaelnaggar.com
  • Twitter : https://twitter.com/securityfu
  • LinkedIn : https://www.linkedin.com/in/osama-elnaggar-08230957
Télécharger l’outil
ChampExempleDescription
IP192.168.121.121Si l'instance possède plusieurs adresses IP, l'adresse IP principale est ajoutée
Hostnameserver3Nom d'hôte
AppNameCe champ est laissé à l'utilisateur pour être complété après l'analyse
TeamCe champ est laissé à l'utilisateur pour être complété après l'analyse
Ignore (Y/N)Ce champ est laissé à l'utilisateur pour être complété après l'analyse
CommentCe champ est laissé à l'utilisateur pour être complété après l'analyse
MD5Hash4e615cd580758b70c49ade1f79103328Une empreinte unique de notre application
Timestamp2021-12-21T07:38:09ZUn horodatage indiquant quand l'analyse a été effectuée. Utile si vous souhaitez regrouper plusieurs analyses du même hôte
Containertruetrue = il s'agit d'un conteneur
ContainerImageghcr.io/christophetd/log4shell-vulnerable-app:latestSi un conteneur a été détecté, il s'agit de l'image correspondante
FullPath/run/containerd/io.containerd.
runtime.v2.task/k8s.io/.../spring-boot-application.jar
Le chemin complet de la découverte. Dans cet exemple, le fichier JAR vulnérable fait partie d'un fat / uber jar
Versionlog4j-core-2.14.1.jarLa version de log4j-core détectée
OptionDétails
--path value, -p valueSpécifie les chemins à analyser. Par défaut, il analyse le répertoire courant. IMPORTANT Il est recommandé de définir cette valeur sur / pour couvrir l'intégralité de votre système de fichiers
--no-banner, --nbSupprime la bannière
--no-messages, --nmSupprime les messages, tels que les messages liés à la progression
--no-header, --nhSupprime l'en-tête de la sortie CSV. Recommandé lors d'une exécution sur plusieurs serveurs
--imd5 value, --im valueIgnore les empreintes MD5. Plus de détails dans la section Listes d'ignorés
--ipath value, --ip valueIgnore les correspondances de chemins de fichiers. Plus de détails dans la section Listes d'ignorés
--icimage value, --ic valueIgnore les correspondances d'images de conteneurs. Plus de détails dans la section Listes d'ignorés
--print-headers, --phAffiche uniquement les en-têtes CSV. Lorsque vous exécutez Log4Shell Sentinel sur plusieurs serveurs et regroupez les résultats, vous désactivez généralement la sortie des en-têtes. Cette commande génère uniquement l'en-tête afin que vous puissiez l'ajouter à votre feuille Excel
  • L'outil fonctionne-t-il sous Windows ?
    • Bien que je ne l'aie pas testé, il devrait fonctionner. Cependant, des fonctionnalités telles que le mappage fichier conteneur -> image sont spécifiques à Linux.
  • Y a-t-il des dépendances externes ?
    • Non. Le binaire est compilé statiquement.