Gibt es eine Möglichkeit, den PowerShell-Sensor so einzustellen, dass er eventuell auftretende Installationen mit log4j erkennt, um der Sicherheitslücke log4Shell entgegenzuwirken? (CVE-2021-44228)


Lösung:

An diesem KB-Artikel sind zwei Skripte angehängt. Das Skript "CheckLog4Shell.ps1" kann dazu verwendet werden, über den Sensor vorhandene Programme mit log4j-Abhängigkeiten zu finden. Dieses Skript scannt das komplette System, daher kann es notwendig sein, das Sensorintervall groß zu wählen (je nach Anzahl und Auslastung der Festplatten vielleicht 4 Stunden). 

Voraussetzung für dieses Skript ist .NET 4.5, da darin Entpackroutinen enthalten sind, die erst mit .NET 4.5 integriert wurden. 


Dazu gehst du wie folgt vor: 

  1. Lade das Skript herunter und lege es im Verzeichnis "C:\Program Files (x86)\Server-Eye\service\X\Scripts" ab. (X jeweils höchste Nummer - oder 1 bei Neuinstallation)
  2. Da die Datei aus dem Internet heruntergeladen wurde ist sie möglicherweise durch Windows gesperrt. Diese Sperre kannst du im Eigenschaften-Dialog der Datei prüfen - setze hier bitte einen Haken bei "Zulassen"
  3. Lege den Sensor "Erweiterte PowerShell Skriptüberprüfung" an
  4. Wähle das zuvor in das Scripts-Verzeichnis verschobene PowerShell-Skript in der Einstellung "Skriptauswahl" aus. Du kannst soweit alle anderen Einstellung so belassen. Die Anzahl der gefundenen Vorkommen entspricht nach Ausführung des Skripts dem Rückgabewert. (Optimal also 0 als "Positiver Rückgabewert")

Das Skript ist auf die Auflistung von 25 Vorkommen begrenzt. Weitere Vorkommen werden in das Windows Eventlog in den Teil des Anwendungs-Logs unter die Quelle "ServerEye-Custom" mit der Event-ID 1001 als Information geschrieben. 

Zwei Screenshots des Sensors, ein Mal mit 2 Funden, ein Mal sauber

Anmerkung: Der Sensor "Erweiterte PowerShell Skript Überprüfung" wurde auf der Testmaschine in "CheckLog4Shell-Test" umbenannt


Benutzung über das Server-Eye PowerShell Online Repository

Das Skript "CheckLog4Shell.ps1" ist mit der Server-Eye-PowerShell-API geschrieben und kann somit auch mit dem Online-Repository verwendet werden, um es großflächig auszurollen. In diesen KB-Artikeln findest du hierzu mehr Informationen: 

PowerShell Online Repository Überprüfung

Online PowerShell Verzeichnis


Benutzung ohne Sensor:

Alternativ hast du die Möglichkeit, das Skript auch ohne den PowerShell-Sensor normal auf der Maschine auszuführen, hierzu verwende bitte das Skript "CheckLog4ShellShort.ps1" - hier sind die API-Schnittstellen zu Server-Eye nicht enthalten und lösen damit auch keine Fehler aus. Dieses Skript schreibt alle Ereignisse in die Konsole. Am Ende erscheint dann "Result: X found" mit X als gefundene log4j-Vorkommen. 


Zusätzliche Fragen

Was macht das Skript?

Das Skript durchsucht alle Laufwerke auf Dateien mit der Endung .jar. Diese werden anschließend geöffnet und es wird geprüft, ob es darin eine Datei "org/apache/log4j" oder "org/apache/logging/log4j" gibt. Es nimmt dabei in dieser Version keine Rücksicht auf Versionsnummern. Als sicher gilt derzeit Version 2.16 dieser Bibliothek, Version 2.15 hatte noch eine Schwachstelle (siehe https://nvd.nist.gov/vuln/detail/CVE-2021-45046 ). 


Gibt es seine Liste mit betroffener Software?

Eine stetig aktualisierte Liste findet sich hier: https://github.com/cisagov/log4j-affected-db


Wie kann ich die Schwachstelle schließen?

Update Java-Software, die auf dem System ist. Log4j ist als Protokollierungs-Bibliothek weit verbreitet und als aktuell sicher gilt die Version 2.17 dieser Bibliothek. Außerdem nutzt die Schwachstelle zum Laden von Malware das LDAP-Protokoll, daher wäre es sinnvoll, vorerst ausgehenden Traffic auf den LDAP-Ports 636 und 3269 in der Firewall zu sperren. Damit werden zwar nicht alle Möglichkeiten beseitigt aber die Möglichkeiten dazu werden etwas eingeschränkt und erfordern höhere Kenntnisse in der Ausnutzung der Schwachstelle. 

Anmerkung (27.12.2021): Bisher wurde auf Version 2.16 verwiesen - diese enthielt ihrerseits aber ebenfalls Schwachstellen. Daher wird nun auf die aktuelle Version 2.17 verwiesen.


Was ist Log4j?

Bei Log4J handelt es sich um eine frei benutzbare Bibliothek, die es ermöglicht, innerhalb eines Programms einfach Logausgaben zu erzeugen, die dann in Logdateien gespeichert werden. Hierbei handelt es sich nicht um ein eigenes Programm sondern um eine Bibliothek, die von vielen Java-Programmen im Hintergrund genutzt wird. 


Was ist mit log4net?

Log4net wird für .NET-Anwendungen verwendet und ist durch die aktuell bekannte Schwachstelle nicht betroffen. Diese betrifft lediglich Java-Anwendungen. 


Wie funktioniert der Hack?

Kurz gesagt wird eine Benutzereingabe in das Logging der Anwendung durchgeschleust. Der Schadcode startet dabei einen LDAP-Abruf auf einen entfernten Server, womit weiterer Schadcode geladen werden kann. Diese Möglichkeit ist mit Log4J Version 2.17 behoben. 


Skript-Changelog: 

16.12.2021 - 09:24: Skript "CheckLog4ShellShort.ps1" hat am Ende noch eine Pause erhalten.