Keypoints
So gehen Sie mit Web-Shells um
- Shells sind bösartige Skripte für den Fernzugriff per Kommandozeile
- Angreifer interagieren über den Browser mit ihren Web-Shells
- Die Web-Shell muss in Sachen Grösse und Technologie auf den Zielhost passen
- Um den Zugriff von Drittpersonen zu vermeiden, sollten Web-Shells über eine Authentifizierung verfügen
Schon als kleiner Junge war ich fasziniert von Muscheln jeglicher Art. Ich konnte Stunden damit verbringen, am Strand nach der schönsten Muschel zu suchen. Dass mich dies auch später als Erwachsener wieder packt, auch wenn in einer etwas anderen Art, hätte ich nicht gedacht. Aber nun sitze ich hier und halte Ausschau nach der passenden Shell für mein aktuelles Ziel.
Eine Command-Shell ist ein bösartiges Skript, welches einem Angreifer ein Fernzugriff in Form einer Kommandozeile auf das Zielsystem ermöglicht. Eine Shell ist aber nicht für den ersten Angriffsschritt geeignet, sondern kommt erst zum Einsatz, wenn eine Webanwendung/ein Server bereits kompromittiert wurde. Nachdem der Angreifer also Zugriff auf die Webanwendung/den Server hat, sei dies unter anderem durch eine SQL Injection, eine Remote File Inclusion, eine Social Engineering Attacke oder andere Angriffstechniken, lädt er eine passende Shell hoch, um sich langfristigen Zugang zu ermöglichen.
Eine Web-Shell ist eine spezielle Art einer Shell, welche den Browser verwendet, um mit der Shell interagieren zu können. Solange eine Web-Shell unerkannt auf dem Server bleibt, kann sich der Angreifer immer wieder auf das System verbinden. Neben den Web-Shells, gibt es noch weitere Arten von Shells.
Überblick Web-Shells
- Bind-Shell: Hierbei läuft der Listener auf dem Zielhost, und der Angreifer verbindet sich auf diesen, um eine Remote-Shell zu starten. Bei einer Bind-Shell bestehen folgende Probleme: Jeder kann sich darauf verbinden, und die Möglichkeit einer Firewall vor dem Zielhost besteht, welche eine Verbindung nicht zulässt.
- Reverse-Shell: Bei der Reverse-Shell läuft der Listener auf dem Computer des Angreifers und der Zielhost verbindet sich zum Angreifer zurück. Dabei werden die genannten Probleme bei der Bind-Shell behoben. Andererseits muss der Zielhost über eine IP-Adresse des Angreifers verfügen, da sonst keine Verbindung aufgebaut werden kann.
- Double Reverse-Shell: Hierbei handelt es sich um eine Reverse-Shell, welche hingegen den Standard Input und Output Kanal trennt. Es werden also zwei Verbindungen auf den gleichen Port beim Angreifer erstellt.
- Encrypted-Shell: Im Gegensatz zu den anderen vorgestellten Shells ist die Encrypted-Shell die einzige, bei welcher die Kommunikation verborgen bleibt und somit nicht nachvollzogen werden kann, was der Angreifer plant. Das Verschlüsseln funktioniert bei einer Bind- oder Reverse-Shell durch das Verwenden von SSL/TLS.
- Meterpreter: Meterpreter ist eine speziell für das Metasploit Framework entwickelter Payload, welcher viele nützliche Funktionen mit sich bringt, wie das Migrieren zu einem anderen Prozess des Zielsystems. Meterpreter legt viel Wert darauf, nicht erkannt zu werden. Darum wird ausser dem Stager, nichts auf die Festplatte geschrieben, die Shell lebt nur im Arbeitsspeicher. Zusätzlich werden bereits vorhandene Prozesse kompromittiert, anstatt neue zu erstellen, was oft das Auslösen von Alarmen verhindern kann.
Eine Web-Shell ist wie auch eine Bind-Shell für Drittpersonen zugänglich, es sei denn sie wird durch eine Authentifizierung in Form eines Passworts, einem speziellem HTTP-Header oder weiteren Parametern davor geschützt.
Wie findet man eine passende Web-Shell?
Technologisch muss die Web-Shell auf den gewünschten Host passen. Die Art des Webservers und die dazu passenden Technologien müssen in der Reconaissance-Phase ermittelt werden. Sehr beliebt und dementsprechend häufig werden in PHP geschriebene Web-Shells eingesetzt, da PHP selbst weit verbreitet ist und weil die gängigen Content Management Systeme ebenfalls in PHP geschrieben sind.
Weitere Limitierungen bestehen in der Grösse der Shell, da es teilweise nicht möglich ist, eine Web-Shell mit vollumfänglicher Funktionalität hochzuladen. Dann sollte man eher auf eine minimale Shell zurückgreifen und in einem nächsten Schritt eine umfangreichere Shell nachladen.
Einige Beispiele
Erfahrungen sammeln
Um erste praktische Erfahrungen mit Shells zu sammeln, empfehlen wir das Metasploit Framework. Rapid7 bietet dafür auch eine passende Umgebung an, mit der man seine Fähigkeiten diesbezüglich verbessern kann: Die Metasploitable VM ist als Download verfügbar.
Andere aktuelle Pentesting Frameworks
Das Metasploit Framework gibt es bereits seit einigen Jahren, dementsprechend haben auch die Hersteller von Antivirensoftware reagiert. Sie erkennen Angriffe mit Metasploit sehr oft. Hier einige andere aktuelle Frameworks, die zu kennen es sich lohnt:
- Cobalt Strike ist ein sehr aktuelles Pentesting Framework. Es beinhaltet einen Agent, Beacon genannt, welcher auf den Zielhost geschleust wird. Der Agent verfügt über eine Vielzahl von Funktionen wie das Ausführen von Kommandos, Dateitransfer, Mimikatz sowie Port Scans um einige davon zu nennen. Anders als Metasploit wird Cobalt Strike kaum von modernen Antiviren-Systemen erkannt. Dies hat zwei Hauptgründe: Obfuskation von Shellcode und die Verwendung von der domain-speziefischen Sprache Malleable C2, damit kann die Kommunikation mit dem Beacon unentdeckt stattfinden. Es gibt diverse Malleable C2 Profile, die gängigen Diensten wie Gmail, Bing oder Amazon ähneln.
- Empire war 2019 mit 22% noch das zweitmeist verwendete Penetrationtesting Tool hinter Metasploit mit 73% gemäss Sophos. Empire ist die Zusammenlegung von PowerShell Empire und Python EmPyre. Dadurch gibt es neben PowerShell auch Python 3 Agents. Empire verwendet verschlüsselte Kommunikation, hat einfach zu deployende Module und in der neusten Version (3.4) auch Support für Malleable C2.
- TrevorC2 ist ein Command and Control Framework, welches die Kommunikation zwischen Zielhost und C2 Server über eine vorab geklonte Webseite mit Hilfe eines vorab konfigurierbaren Parameters steuert und somit sehr schwer zu erkennen ist.
- Koadic bezeichnet sich selbst als C3, was für COM Command & Control steht. Bei Koadic handelt es sich um ein Windows Post-Exploitation Rootkit, welches die meisten Operationen über Windows Script Host (JScript/VBScript) ausführt. Dies bringt einige Vorteile: Eine breite Unterstützung von der Standartinstallation von Windows 2000 bis zum aktuellen Windows 10. Zusätzlich muss PowerShell auf dem Zielhost nicht installiert sein.
- Merlin ist ein Cross-Plattform Post-Exploitation HTTP/2 C2 Server und Agent geschrieben in Golang. Merlin ist seit 2017 in Entwicklung und befindet sich aktuell im Beta Status. Das Alleinstandsmerkmal von Merlin ist der Support für HTTP/2, denn durch die Kombination von Verschlüsselung und fehlendem HTTP/2 Protokoll Support in Inspektionstools von WAF, IDS und IPS Produkten konnte es lange Zeit einfach an deren Schutzmassnahmen vorbei gelangen.
Fazit
Eine Web-Shell ist ein sehr nützliches Tool in der Post Exploitation Phase, um dauerhaften Zugriff auf einen Host zu bewahren, ohne jedes Mal wieder einen Exploit anwenden zu müssen. Um den Zugriff durch Drittpersonen vorzubeugen, empfiehlt es sich eine der beschriebenen Authentifizierungs-methoden zu verwenden.
Über den Autor
Ralph Meier hat eine Lehre als Applikationsentwickler, Fokus Webentwicklung mit Java, bei einer Schweizer Grossbank absolviert und danach einen Bachelor of Science ZFH in Informatik an der ZHAW School of Engineering abgeschlossen. Er fokussiert sich auf die sicherheitstechnische Untersuchung von Webapplikationen. (ORCID 0000-0002-3997-8482)
Links