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.pid

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.pid

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.pid

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.

Der Screenshot oben 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.

Update: Verbesserungen bei der Erkennung und beim Hunting


Ausführung verdächtiger Shell-Befehle über Java

Sie können anhand der Liste beobachteter öffentlich bekannter bösartiger Java-Klassen, die über den Log4j-Exploit bereitgestellt werden, nach verdächtigen Shell-Skripten und Ingress-Tool-Transfer-Befehlen suchen:

process where event.type == "start" and
  process.parent.name : "java*" and

  /* Ingress tools transfer via common shell command interpreters */

  /* linux or macos */
  (
   (process.name : ("sh", "bash", "python*") and 
    process.command_line : ("*curl*|*sh*", "*wget*|*bash", "*curl*|*bash*", "*curl*|*bash*", "*http*|*sh*", "*python*http*")) or

  /* windows */
  (process.name : ("powershell.exe", "pwsh.exe", "cmd.exe") and
   process.command_line : ("*.downloadstring*", "*.downloadfile*", "*.downloaddata*", "*BitsTransfer*", "* -enc*", "* IEX*", "*wp-content*", "*wp-admin*", "*wp-includes*", "*$*$*$*$*$*", "*^*^*^*^*^*^*^*^*^*", "*.replace*", "*start-process*", "*http*", "*cmd*powershell*")))

Ausführung nicht vertrauenswürdiger Dateien über JAVA

Stellt fest, wenn ein JAVA-Interpreter eine ausführbare Datei (PE/ELF) erstellt und die Datei anschließend ausgeführt wird.

Erkennungsregel bei der Nutzung von Endpoint-Daten

sequence by host.id with maxspan=5m
 [ file where event.type != "deletion" and 
  process.name : ("java", "java.exe", "javaw.exe") and 

  (file.extension : ("exe", "com", "pif", "scr") or
      /* Match Windows PE files by header data (MZ) */
  file.Ext.header_bytes : ("4d5a*", "7f454c46*")) and 

  not file.path :  ("?:\\Program Files\\*", 
                    "?:\\Program Files (x86)\\*") ] by file.path
 [ process where event.type == "start" and 
  not process.code_signature.trusted == true ] by process.executable
Erkennungsregel bei der Nutzung von Endgame-gestreamten Ereignissen
sequence by agent.id with maxspan=5m
  [ file where event.type != "deletion"
    process.name : ("java", "java.exe", "javaw.exe")] by file_path
  [ process where event.type == "start" and 
  not process.code_signature.trusted == true] by process_path

Potenzielle Coinminer-Aktivität

Prozess mit Befehlszeile, die häufig von Kryptowährungsschürfern („Coinminer“) verwendet wird (die meisten beobachteten Kampagnen, die den Log4j-Exploit nutzen, sind Coinminer):

process where event.type == "start" and 
 process.command_line : 
       ("* pool.*", "*-u*--coin*", "*.xmr.*", "*.xmr1.*", 
        "*stratum*", "*elitter.net*", "*cryptonight*", 
        "*-a scrypt*", "*stratum1*", "*-userpass*", "*-max-cpu-usage*", 
	  "*qhor.net*", "*-wallet*pool*", "*--donate-level*", "*supportxmr.com*")

Community-Beiträge zur Erkennung der Schwachstelle

Mitglieder der Community, in der die weitverbreitete Ausnutzung der Schwachstelle rege diskutiert wird, haben eine Reihe von ersten Erkennungsmethoden vorgeschlagen, mit denen Analysten feststellen können, ob die Schwachstelle in den von ihnen genutzten Systemen bereits ausgenutzt wurde oder aktiv ausgenutzt wird:

  • Das GreyNoise-Team hat eine Reihe von Payloads bereitgestellt. Dazu gehören auch Payloads, die sowohl verschlüsselte als auch entschlüsselte Varianten enthalten, die Analysten für die Untersuchung der in ihren Systemen gespeicherten Logs heranziehen können. Dies wird durch eine Liste erster getaggter IPs ergänzt, die versuchen, die Schwachstelle auszunutzen.


  • Rob Fuller (Mubix) stellt hier eine Liste bekannter Datei-Hashes für verwundbare Versionen des Frameworks bereit.

Zusätzliche Strategien zur Risikoeindämmung

Neben den vom Apache-Team veröffentlichten Empfehlungen bezüglich der Aktualisierung von Deployments mit den neuesten, gepatchten Versionen des Log4j‑2-Frameworks gibt es eine Vielzahl von Empfehlungen, die dazu beitragen sollen, die Ausnutzung der Schwachstelle zu verhindern:

  • Fastly empfiehlt zu prüfen, ob Ihre Version von Log4j die Ausführung der JVM mit JAVA_OPTS=‑Dlog4j2.formatMsgNoLookups=true unterstützt und damit in der Lage ist, die Remote-Server-gerichtete Lookup-Funktionalität zu deaktivieren. Diese müsste für die Versionen 2.10.0 bis 2.15.0 gelten.

  • Zur Vermeidung einer seitwärts gerichteten Bewegung von einem verwundbaren Host aus oder einer Ausnutzung über ein Netzwerk wird empfohlen, die Konnektivität zwischen potenziell verwundbaren Systemen zu externen Ressourcen auf vertrauenswürdige Anwendungen und/oder Dienste zu begrenzen.

Ein großes Dankeschön von Elastic Security

Wir möchten allen Security-Teams in der ganzen Welt für die unermüdliche Arbeit heute und über das Wochenende danken, vor allem jenen, die in diesem Post aufgeführt sind. Offenheit und Zusammenarbeit in der Security-Community ist im Angesicht einer so ernsten und tiefgreifenden Schwachstelle von überragender Bedeutung, denn nur so können alle Nutzer geschützt werden. Seien Sie versichert, dass wir jederzeit an Ihrer Seite stehen.

Bestehende Elastic Security-Nutzer können innerhalb des Produkts auf diese Funktionen zugreifen. Wenn Sie ein neuer Nutzer von Elastic Security sind, empfehlen wir unsere Quick Start-Anleitungen (kurze Schulungsvideos für einen schnellen Einstieg) oder unsere kostenlosen Grundlagenschulungen. Oder probieren Sie einfach Elastic Cloud 14 Tage lang kostenlos aus. Wer das Ganze lieber selbst verwalten möchte, kann den Elastic Stack herunterladen.

Referenzmaterial

https://www.lunasec.io/docs/blog/log4j-zero-day/

https://www.tenable.com/blog/cve-2021-44228-proof-of-concept-for-critical-apache-log4j-remote-code-execution-vulnerability

https://www.crowdstrike.com/blog/log4j2-vulnerability-analysis-and-mitigation-recommendations/

https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/

https://www.greynoise.io/viz/query/?gnql=CVE-2021-44228

https://logging.apache.org/log4j/2.x/security.html#

https://github.com/christophetd/log4shell-vulnerable-app