Erkennen der Ausnutzung von CVE-2021-44228 (Log4j2) mit Elastic Security

blog-security-detection-720x420.png

WICHTIGER HINWEIS:

  • Mehr darüber, wie Elastic das interne Risiko dieser Schwachstelle in seinen Produkten bewertet, erfahren Sie hier.
  • Dieser Blogpost wurde nach seiner Erstveröffentlichung um Informationen über weitere Verbesserungen bei der Erkennung und beim Hunting ergänzt (Datum der Aktualisierung: 14. Dezember 2021).

Überblick

Dieser Blogpost gibt einen Überblick über CVE-2021-44228 und zeigt, wie Elastic Security-Nutzer erkennen können, ob die Schwachstelle in ihrer Umgebung aktiv ausgenutzt wird.

Wenn Neues bekannt wird, wird der Post aktualisiert. Diese Version spiegelt den Wissensstand von Dienstag, dem 14. Dezember 2021, wider. Die neuesten Informationen von Apache sind auf der Apache-Seite zur Log4j-Schwachstelle zu finden.

Überblick über CVE-2021-44228 (Log4Shell)

Log4j 2 ist ein Open-Source-Logging-Framework, das in vielen Java-basierten Anwendungen auf Endnutzersystemen und Servern zum Einsatz kommt. Ende November 2021 hat Chen Zhaojun von Alibaba eine Remote-Code-Execution-Sicherheitslücke gefunden, die unter der CVE-ID CVE-2021-44228 am 10. Dezember 2021 öffentlich gemacht wurde. Die Schwachstelle ergibt sich durch einen Fehler bei der Deserialisierung von Nutzereingaben, die an das Framework weitergegeben werden. Sie erlaubt die Ausführung von Remote-Code und kann es einem Angreifer ermöglichen, sicherheitsrelevante Daten, z. B. Umgebungsvariablen, abzuschöpfen oder auf dem Zielsystem Schadsoftware auszuführen.

Die Schwachstelle betrifft alle Log4j‑2-Versionen von Version 2.0-beta9 bis Version 2.14.1. Erste Methoden zur Lösung des Problems führten zu einer Reihe von Release Candidates, wobei die aktuelle Empfehlung lautet, das Framework auf die Log4j‑2-Version 2.15.0-rc2 zu aktualisieren.

Angesichts dessen, dass die Schwachstelle so einfach ausgenutzt werden kann und dies auch bereits verbreitet geschieht, ist es immens wichtig, dass in allen Umgebungen, in denen identifizierte Software im Einsatz ist, die angreifbare Log4j‑2-Versionen nutzt, entsprechende Gegenmaßnahmen eingeleitet werden.

Erkennen der Ausnutzung von Log4Shell in Elastic Security

Elastic Security-Nutzer können die folgende Erkennungsregel nutzen, die mit Ereigniskorrelation arbeitet, um festzustellen, ob die Log4j‑2-Schwachstelle in ihrer Umgebung aktiv ausgenutzt wird. Es kann sein, dass Sie diese Erkennungsregel an das Format Ihrer hostbasierten Ereignisdaten anpassen müssen, damit sie für Ihre Datenfelder passt.

Erkennungsregel bei der Nutzung von Endpoint-Daten

sequence by host.id with maxspan=1m
 [network where event.action == "connection_attempted" and 
  process.name : "java" and
  /* 
     outbound connection attempt to 
     LDAP, RMI or DNS standard ports 
     by JAVA process 
   */ 
  destination.port in (1389, 389, 1099, 53, 5353)] by process.pid
 [process where event.type == "start" and 

  /* Suspicious JAVA child process */
  process.parent.name : "java" and
   process.name : ("sh", 
                   "bash", 
                   "dash", 
                   "ksh", 
                   "tcsh", 
                   "zsh", 
                   "curl",
                   "perl*",
                   "python*",
                   "ruby*",
                   "php*", 
                   "wget")] by process.parent.pidWeitere Informationen

Erkennungsregel bei der Nutzung von Auditbeat-Daten

sequence by agent.id with maxspan=1m
 [network where event.action == "connected-to" and 
  process.name : "java" and
  /* 
     outbound connection attempt to 
     LDAP, RMI or DNS standard ports 
     by JAVA process 
   */ 
  destination.port in (1389, 389, 1099, 53, 5353)] by process.pid
 [process where event.type == "start" and 

  /* Suspicious JAVA child process */
  process.parent.name : "java" and
   process.name : ("sh", 
                   "bash", 
                   "dash", 
                   "ksh", 
                   "tcsh", 
                   "zsh", 
                   "curl",
                   "perl*",
                   "python*",
                   "ruby*",
                   "php*", 
                   "wget")] by process.parent.pidWeitere Informationen

Erkennungsregel bei der Nutzung von Endgame-gestreamten Ereignissen

sequence by agent.id with maxspan=1m
 [network where event.category == "network" and 
  process.name : "java" and
  /* 
     outbound connection attempt to 
     LDAP, RMI or DNS standard ports 
     by JAVA process 
   */ 
  destination.port in (1389, 389, 1099, 53, 5353)] by process.pid
 [process where event.type == "start" and 

  /* Suspicious JAVA child process */
  process.parent.name : "java" and
   process.name : ("sh", 
                   "bash", 
                   "dash", 
                   "ksh", 
                   "tcsh", 
                   "zsh", 
                   "curl",
                   "perl*",
                   "python*",
                   "ruby*",
                   "php*", 
                   "wget")] by process.parent.pidWeitere Informationen

Diese Erkennungsregel sucht nach einer Sequenz eines ausgehenden Versuchs, eine Verbindung mit Standardports für LDAP, RMI und DNS herzustellen, die häufig über die seit Neuestem beobachteten JAVA/JNDI-Einschleusungsangriffe missbraucht werden, gefolgt von einem untergeordneten Prozess derselben Java-Prozessinstanz.

Im folgenden Beispiel wird demonstriert, wie diese Regel die Ausnutzung der Log4j‑2-Schwachstelle erkennt:

Dieser Screenshot zeigt, wie ein Angreifer die Schwachstelle mit einer Base-64-verschlüsselten Payload ausnutzt

Der Screenshot oben zeigt, wie ein Angreifer die Schwachstelle mit einer Base‑64-verschlüsselten Payload ausnutzt und dabei eine verwundbare Beispielanwendung ins Visier nimmt, die von Christophe Tafani-Dereeper erstellt wurde.

Dieser Screenshot zeigt die Erkennung der aktiven Ausnutzung von CVE-2021-44228 in Elastic Security mit Angaben zum Alert und einer Zeitleistenansicht der Ausnutzung.

Dieser Screenshot zeigt die Erkennung der aktiven Ausnutzung von CVE-2021-44228 in Elastic Security mit Angaben zum Alert und einer Zeitleistenansicht der Ausnutzung.

Dieser Screenshot zeigt die Ergebnisse der Untersuchung des Erkennungs-Alerts, aus denen hervorgeht, dass Java ein Shell-Skript ausgeführt hat, mit dem ein Bash-Skript heruntergeladen und ausgeführt wird.
  • We're hiring

    Work for a global, distributed team where finding someone like you is just a Zoom meeting away. Flexible work with impact? Development opportunities from the start?