
Ein intelligenter Log4Shell/Log4j/CVE-2021-44228-Scanner
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:
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.
Log4Shell Sentinel ist ein dateibasierter Scanner. Er durchsucht ein Zielsystem nach Java-basierten Anwendungen, indem er nach Artefakten der folgenden Dateiformate sucht:
| Dateityp | Details |
|---|---|
| Einfaches jar | Dies ist der Fall, wenn die log4j-core-Datei nicht eingebettet ist. |
| Fat / Uber jar | Ein 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. |
| WAR | Eine 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. |
| EAR | Ein 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:
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.
Einzelheiten zur Metadaten-Anreicherung, die von Log4Shell Sentinel hinzugefügt wird, finden Sie in meinem Blog-Beitrag.
Der einfachste Weg ist, die vorkompilierte Binärdatei herunterzuladen.
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/usernetUm 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:
$ CGO_ENABLED=0 go build -ldflags="-s -w"
$ ldd log4shell_sentinel
not a dynamic executable
$ ./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:
$ ./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:
Es funktioniert auch ohne root-Rechte, liefert aber möglicherweise nicht die besten Ergebnisse.
Ein beispielhafter Fund sieht so aus: