Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
log4shell_sentinel — Ein intelligenter Log4Shell/Log4j/CVE-2021-44228-Scanner | Kitploit
Tools/GitHubGitHub/ossie-git/log4shell_sentinel
SchwachstellenscannerContainer-SicherheitSchwachstellenanalyseForensikIncident ResponseLog-Analyse
GitHubossie-git/log4shell_sentinel

log4shell_sentinel

Ein intelligenter Log4Shell/Log4j/CVE-2021-44228-Scanner

Repository anzeigen
14116vor 4 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Log4Shell Sentinel - Ein intelligenter Scanner für CVE-2021-44228

Einleitung

Obwohl es bereits einige hervorragende Tools gibt, die Unternehmen dabei helfen, ihre Umgebungen nach Anwendungen zu durchsuchen, die anfällig für die kritische Log4J / CVE-2021-44228-Sicherheitslücke sind, fand ich, dass:

  • keines der Tools, auf die ich gestoßen bin, für Analysten gedacht war, um einen bestimmten Fund während des gesamten Behebungsprozesses zu verfolgen. Log4Shell Sentinel gibt seine Ergebnisse im CSV-Format aus, in der Erwartung, dass ein Analyst die Ergebnisse dann in Excel aufbereitet, einige Funde zu einer Ignorierliste hinzufügt und den Scan erneut ausführt, Scans vergleicht, Daten zu Scan-Ergebnissen hinzufügt usw.
  • dateibasierte Scanner den Analysten viel Arbeit lassen, insbesondere in containerisierten Umgebungen

So wurde Log4Shell Sentinel geboren. Log4Shell Sentinel ist ein dateibasierter Scanner mit einigen einzigartigen Funktionen. Es soll nicht alle anderen verfügbaren Tools ersetzen, sondern kann sie ergänzen.

Funktionen

Log4Shell Sentinel ist ein dateibasierter Scanner. Er durchsucht ein Zielsystem nach Java-basierten Anwendungen, indem er nach Artefakten der folgenden Dateiformate sucht:

DateitypDetails
Einfaches jarDies ist der Fall, wenn die log4j-core-Datei nicht eingebettet ist.
Fat / Uber jarEin Uber jar ist ein Jar, das sowohl Ihre Klassen / Ihr Paket als auch alle Abhängigkeiten Ihrer Anwendung (Bibliotheken, Ressourcen und Metadatendateien) in einer einzigen Jar-Datei enthält. Dies ist die am häufigsten verwendete Bereitstellungsoption.
WAREine war (Web Application Archive) -Datei ist eine Datei, die Ihren JSP-, HTML- und JavaScript-Code zusätzlich zu Ihren Bibliotheken und anderen Ressourcen enthält. Dieses Format wird seltener verwendet.
EAREin ear (Enterprise Application Archive) ist ein weiteres Format, das früher häufiger bei Jakarta EE für Bereitstellungen verwendet wurde.

und sucht nach Instanzen von anfälligen log4j-core-Jars. Anschließend:

  • berechnet es einen MD5-Hash des Artefakts. Dies ermöglicht es einem Analysten, dieselbe Anwendung, die auf verschiedenen Rechnern/Containern läuft, zu identifizieren und als einen einzigen Fund zu behandeln

  • führt es für Dateien, die als zu einem Container gehörend erkannt wurden (z. B.: /var/lib/docker/overlay2/192768f471818601094bf4edd96d14bfc0e2b178a04a2efd00b2231ad4e46b33/merged/app/spring-boot-application.jar), die schwere Arbeit durch, die Datei dem entsprechenden Image zuzuordnen. Zum Beispiel würde es das obige in das folgende Image übersetzen: ghcr.io/christophetd/log4shell-vulnerable-app:latest. Da die verschiedenen Container-Laufzeiten diese Zuordnung auf unterschiedliche Weise speichern, kann dies einem Analysten stundenlange Frustration ersparen. Dies ermöglicht es einem Analysten auch, eine Reihe von Containern, die eine einzelne Anwendung ausführen, als einen einzigen Fund zu behandeln.

  • entfernt es nutzlose Treffer, wie z. B. Treffer, die Containern entsprechen, die derzeit nicht ausgeführt werden, einschließlich gecachter Images. Dies ermöglicht es einem Analysten, sich auf das Wesentliche zu konzentrieren, und erspart dem Analysten erneut stundenlange unnötige Arbeit

  • ermöglicht es einem Analysten, Treffer zu ignorieren, basierend auf:

    • MD5-Hash
    • Dateipfad
    • Container-Image

    Dies ermöglicht es dem Analysten, Anwendungen zu entfernen, von denen bekannt ist, dass sie nicht anfällig sind, oder die CLI-basierten Anwendungen entsprechen, die keine Bedrohung darstellen. Wenn beispielsweise eine Instanz von Logstash erkannt wird, kann ein Analyst sie ignorieren, wenn sie das Tool nicht ausführen oder es nur gelegentlich von der CLI aus ausführen.

  • ist es optimiert für die Zusammenarbeit mit Ihren Konfigurationsmanagement-Tools wie Ansible, sodass Sie Ihre Umgebung in Minuten schnell scannen können.

Metadaten-Anreicherung

Einzelheiten zur Metadaten-Anreicherung, die von Log4Shell Sentinel hinzugefügt wird, finden Sie in meinem Blog-Beitrag.

Installation

Der einfachste Weg ist, die vorkompilierte Binärdatei herunterzuladen.

Aus dem Quellcode erstellen

Auch dies ist unkompliziert. Sie werden jedoch wahrscheinlich eine statisch kompilierte Version erstellen möchten, um GLIBC-bedingte Variationen in Ihrer Umgebung zu umgehen. Das Tool verwendet die folgenden Module, die standardmäßig CGO verwenden:

  • os/user
  • net

Um eine statisch kompilierte Version zu erstellen, die die Go-Versionen dieser Bibliotheken verwendet, klonen Sie einfach das Repository und führen Sie dann Folgendes aus:

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

Verwendung

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)

Standardmäßig scannt ein Scan das aktuelle Verzeichnis. Zum Beispiel:

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

Sie erhalten sofort eine WARNUNG, wenn Sie es als Nicht-Root-Benutzer ausführen, da es root-Berechtigungen benötigt:

  • wenn Sie planen, Ihr gesamtes Dateisystem zu scannen (empfohlen)
  • wenn Sie planen, Container-zu-Image-Lookups durchzuführen (Zugriff auf den Docker-Daemon, Konfigurationsdateien usw. ist erforderlich)

Es funktioniert auch ohne root-Rechte, liefert aber möglicherweise nicht die besten Ergebnisse.

Funde verstehen

Ein beispielhafter Fund sieht so aus:

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

Einige Felder sind absichtlich leer gelassen und für den Analysten bestimmt, sie in Excel usw. auszufüllen. Eine kurze Beschreibung jedes Feldes finden Sie unten:

FeldBeispielBeschreibung
IP192.168.121.121Wenn die Instanz mehrere IPs hat, wird die primäre IP hinzugefügt
Hostnameserver3Hostname
AppNameDies bleibt dem Benutzer überlassen, nach Abschluss des Scans ausgefüllt zu werden
TeamDies bleibt dem Benutzer überlassen, nach Abschluss des Scans ausgefüllt zu werden
Ignore (Y/N)Dies bleibt dem Benutzer überlassen, nach Abschluss des Scans ausgefüllt zu werden
CommentDies bleibt dem Benutzer überlassen, nach Abschluss des Scans ausgefüllt zu werden
MD5Hash4e615cd580758b70c49ade1f79103328Ein eindeutiger Fingerabdruck unserer Anwendung
Timestamp2021-12-21T07:38:09ZEin Zeitstempel, wann der Scan durchgeführt wurde. Dies ist nützlich, wenn Sie mehrere Scans desselben Hosts zusammenführen möchten
ContainertrueTrue = dies ist ein Container
ContainerImageghcr.io/christophetd/log4shell-vulnerable-app:latestWenn ein Container erkannt wurde, ist dies das entsprechende Image
FullPath/run/containerd/io.containerd.
runtime.v2.task/k8s.io/.../spring-boot-application.jar
Der vollständige Pfad des Funds. In diesem Beispiel ist die anfällige JAR-Datei Teil eines Fat / Uber Jars
Versionlog4j-core-2.14.1.jarDie erkannte log4j-core-Version

Optionen

Das Tool bietet die folgenden Optionen:

OptionDetails
--path value, -p valueGibt an, welche Pfade durchsucht werden sollen. Standardmäßig wird das aktuelle Verzeichnis durchsucht. WICHTIG Es wird empfohlen, dies auf / zu setzen, um Ihr gesamtes Dateisystem abzudecken.
--no-banner, --nbUnterdrückt das Banner.
--no-messages, --nmUnterdrückt Meldungen wie Fortschrittsmeldungen.
--no-header, --nhUnterdrückt den Header der CSV-Ausgabe. Dies wird empfohlen, wenn Sie es auf mehreren Servern ausführen.
--imd5 value, --im valueIgnoriert MD5-Hashes. Mehr dazu im Abschnitt Ignorierlisten.
--ipath value, --ip valueIgnoriert Übereinstimmungen mit Dateipfaden. Mehr dazu im Abschnitt Ignorierlisten.
--icimage value, --ic valueIgnoriert Übereinstimmungen mit Container-Images. Mehr dazu im Abschnitt Ignorierlisten.
--print-headers, --phGibt nur CSV-Header aus. Wenn Sie Log4Shell Sentinel auf mehreren Servern ausführen und die Ergebnisse zusammenführen, würden Sie normalerweise die Header-Ausgabe deaktivieren. Dieser Befehl gibt nur den Header aus, damit Sie ihn zu Ihrem Excel-Blatt hinzufügen können.

Container-Zuordnung -> Image-Unterstützung

Eine der einzigartigen Funktionen von Log4Shell Sentinel, die in keinem anderen Tool zu finden ist, ist die Fähigkeit, Jars, die in Dateisystem-Scans gefunden wurden, wie z. B.:

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

dem entsprechenden Container-Image zuzuordnen (das obige übersetzt sich z. B. in ghcr.io/christophetd/log4shell-vulnerable-app:latest). Da die verschiedenen Container-Laufzeiten diese Zuordnung auf unterschiedliche Weise speichern, kann dies einem Analysten stundenlange Frustration ersparen. Dies ermöglicht es einem Analysten auch, eine Reihe von Containern, die eine einzelne Anwendung ausführen, als einen einzigen Fund zu behandeln. Die Lösung unterstützt derzeit die folgenden Lookups:

  • Docker (mit overlay2-Speichertreiber)
  • Docker (mit aufs-Speichertreiber)
  • CRI-O
  • containerd

Ignorierlisten

Die Anzahl der identifizierten Anwendungen kann zunächst überwältigend sein, oder Sie möchten sich auf eine bestimmte Teilmenge der identifizierten Anwendungen konzentrieren, z. B. auf solche, die zuerst externen Benutzern ausgesetzt sind. Oder Sie möchten sich auf einen bestimmten Compliance-Bereich konzentrieren. Um dies zu unterstützen, ermöglicht die Anwendung die Angabe einer Liste. Log4Shell unterstützt derzeit 3 Ignorierlisten:

  • MD5-Hash-Ignorierliste
  • Container-Image-Ignorierliste
  • Pfad-Ignorierliste

Anstelle einfacher Listen erwartet es eine CSV-Datei als Eingabe. Dies ermutigt den Analysten, zu dokumentieren, warum ein bestimmter Fund ignoriert wird. Während der Analyst die Funde verarbeitet und nicht anfällige Anwendungen manuell oder durch automatisierte Quellcode-Analyse oder DAST-Tools identifiziert.

MD5-Hash-Ignorierliste

Die Liste ist eine einfache CSV-Datei im folgenden Format:

root@kitploit:~
MD5Sum,AppName,Reason

Die Spalten AppName und Reason können leer sein, dienen aber dazu, den Überblick zu behalten, warum Sie bestimmte Anwendungen einschließen oder ausschließen.

HINWEIS Da diese Funktion den für die Anwendung berechneten MD5-Hash verwendet, funktioniert dies nur für Anwendungen, die Fat / Uber Jars, EARs oder WARs sind.

Wenn wir beispielsweise den folgenden Fund hätten:

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

und festgestellt haben, dass die Anwendung nicht anfällig ist, können wir einfach Folgendes in hashes.csv speichern:

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

und dann erneut ausführen:

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

Der obige Fund würde unterdrückt werden.

Container-Zuordnungen -> Images-Ignorierliste

Die Liste ist eine einfache CSV-Datei im folgenden Format:

root@kitploit:~
ContainerImage,AppName,Reason

Aufbauend auf dem vorherigen Beispiel können wir ihm mitteilen, dass er jeden Fund ignorieren soll, bei dem das Container-Image ghcr.io/christophetd/log4shell-vulnerable-app:latest ist, indem wir eine images.csv-Datei wie diese erstellen:

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

und dann ausführen mit:

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

Auch hier würde unser vorheriger Fund unterdrückt werden.

Pfad-Ignorierliste

Auch dies ist eine einfache CSV-Datei im folgenden Format:

root@kitploit:~
Path,AppName,Reason

Wenn wir das obige Beispiel verwenden und die folgende paths.csv-Datei erstellen:

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

würde der vorherige Fund unterdrückt werden.

WARNUNG Wenn möglich, ist es besser, einen MD5-Hash oder Container-Image-Namen zur Unterdrückung zu verwenden, da der Pfad möglicherweise nicht eindeutig ist.

Massen-Scan Ihrer Umgebung

Obwohl es völlig in Ordnung ist, Log4Shell Sentinel auf einem einzelnen Server auszuführen, glänzt es wirklich, wenn es mit Ihrem bevorzugten Konfigurationsmanagement-Tool (Ansible, Chef, Puppet, Salt, AWS SSM usw.) oder sogar einfachen parallelen SSH-Tools wie parellel-ssh kombiniert wird.

Dies bietet zahlreiche Vorteile, darunter:

  • Finden doppelter Instanzen Ihrer Anwendungen und Container und Behandeln dieser Funde als einen einzigen Fund in der Analysephase
  • Scannen Ihrer gesamten Umgebung in Minuten

Ein vollständiges Beispiel hierfür finden Sie in meinem Blog-Beitrag.

Workflow

Siehe Abschnitt Massen-Scan Ihrer Umgebung.

FAQ

  • Ich sehe nicht alle anfälligen Anwendungen. Warum?
    • Der Hauptgrund ist wahrscheinlich, dass Sie es entweder nicht als root-Benutzer ausführen (es benötigt Zugriff auf die Verzeichnisse, in denen Ihre Anwendungen installiert sein könnten) oder Sie nicht den richtigen path angegeben haben. Es wird empfohlen, es als root-Benutzer auszuführen und --path / zu setzen.
  • Welche Einschränkungen hat es? Einige Einschränkungen sind:
    • Das Tool kann nicht endgültig sagen, ob eine bestimmte Anwendung anfällig ist oder nicht. Stattdessen erkennt es, ob eine Anwendung eine Version der Bibliothek enthält, die anfällig ist.
    • Wenn die erkannte Anwendung nicht in einem Container läuft, kann das Tool nicht erkennen, ob eine bestimmte Anwendung läuft oder nicht. So wird selbst ein Befehlszeilentool, das die anfällige Version verwendet, erkannt.
    • Das Tool benötigt SSH-Zugriff und wird daher Probleme auf Systemen, auf denen es nicht ausgeführt werden kann, nicht erkennen.
  • Die Container-zu-Image-Zuordnung funktioniert nicht. Warum?
    • Ab v1.0.0 unterstützt das Tool derzeit die Zuordnung für Folgendes:

      • Docker (mit Overlay2-Speichertreiber)
      • Docker (mit aufs-Speichertreiber)
      • CRI-O
      • containerd

      Wenn Sie etwas anderes verwenden, funktioniert die Zuordnung nicht. Wenn Sie eines der oben genannten verwenden, kann es sein, dass Sie das Tool nicht als root-Benutzer ausführen oder dass der verwendete Socket / die verwendeten Dateien sich an einem nicht standardmäßigen Speicherort befinden.

  • Welche Sicherheitslücken erkennt es?
    • Obwohl es hauptsächlich darauf abzielt, Versionen von log4j zu erkennen, die möglicherweise anfällig für CVE-2021-45105 sind, kennzeichnet es auch Versionen, die anfällig für CVE-2021-45046 und CVE-2021-44228 sind.
  • Funktioniert das Tool unter Windows?
    • Obwohl ich es nicht getestet habe, sollte es funktionieren. Funktionen wie die Zuordnung von Container-Datei zu Image sind jedoch Linux-spezifisch.
  • Gibt es externe Abhängigkeiten?
    • Nein. Die Binärdatei ist statisch kompiliert.

Autor

Entwickelt von: Osama Elnaggar

  • Website: https://osamaelnaggar.com
  • Twitter: https://twitter.com/securityfu
  • LinkedIn: https://www.linkedin.com/in/osama-elnaggar-08230957
Tool herunterladen