Webshells entdecken oder verhindern - 7 Tipps

Webserver sind eines der Hauptziele bösartiger Angriffe. Weil stark ausgesetzt, sind sie oft der Schwachpunkt der IT Infrastruktur. Schwachstellen entstehen wenn Webanwendungscode aufgeschaltet und dann vergessen oder nicht mehr betreut wird. Welche Ziele verfolgen Angreifer und wie schützt man sich am besten vor solchen Angriffen?
Webanwendungen sind vielfach in Skriptsprachen wie PHP, Python, Perl, Ruby, usw. entwickelt. Diese Sprachen sind mächtig genug, dass eine Sicherheitslücke innerhalb der Webapplikation zur Ausführung von beliebigem Code genutzt werden kann. Ist eine solche Lücke identifiziert, versucht der Angreifer den Server unter seine Kontrolle zu bringen indem er eine Webshell über die Sicherheitslücke auf dem Webserver installiert. Eine Webshell ist eine virtuelle Shell bzw. Kommandozeile und erlaubt typischerweise das Ausführen von Systembefehlen, Dateizugriff im Kontext der Webanwendung: Alles was der Webserver darf, darf die Webshell auch – der Kreativität der Angreifer sind keine Grenzen gesetzt, weshalb eine sehr strikte Rechtevergabe wichtig ist. Doch mehr dazu später.
Der Code der Webshell kann entweder in einer eigenen oder einer bereits existierenden Code Datei versteckt werden. Die Benutzer der Webseite sehen die Webshell bzw. merken deren Auswirkungen in der Regel nicht. Oberstes Ziel der Angreifer ist so versteckt wie möglich zu agieren. Webshells zu identifizieren ist daher oft schwierig. Trotzdem gibt es einige gute Ansatzpunkte:
Konsequentes Patchen aller Komponenten (Webserver, Applikationsserver, PHP) schliesst offene, bekannte Lücken
Code Reviews sorgen vor. Für den Umgang mit Kreditkartendaten sind Reviews von den Kreditkartenausstellern sogar Pflicht und vorgeschrieben.
IDS (Intrusion Detection System) kennen existierende Sicherheitslücken und warnen, falls diese für Angriffe verwendet werden. Die Detektion basiert auf der Mustererkennung dieser Aufrufe.
WAF (Web Applikation Firewalls) verhindern das Einschleusen von Schadcode indem sie den HTTP-Aufruf analysieren und nur zulassen, wenn dieser dem Protokoll Standard entspricht.
Detaillierte Rechtevergabe auf Webservern:
Trennen von Schreiben und Lesen von Dateien
Trennen von Author und Publisher
Durch den Einsatz von Revisionssoftware (SVN, CVS etc.) lassen sich veränderte Dateien identifizieren.
Früher waren Webshells einfache HTML Formulare. Ein Befehl wurde von einem Formular an den Webserver übermittelt und ausgeführt. Die Antwort kam postwendend als HTML Seite zurück. Inzwischen sind Webshells modulare Kits und bestehen aus einem encodierten Teil auf dem Server und einer Steuereinheit auf einem PC des Angreifers. Um die Steuerung zu verschleiern sind die Steuerbefehle encodiert bzw. verschlüsselt. Die Kits gehen so weit, dass nach jedem ausgeführten Befehl der Schadcode neu encodiert und neu hochgeladen wird. Durch diese stetige, virusartige Veränderung von Code und Aufruf versuchen die Webshell Entwickler die Musteridentifizierung durch IDS und WAF zu umgehen.
Hier kommt Index of Coincidence Software ins Spiel: I.C. ist eine Technik aus der Krypto- & Sprachanalyse. Sie berechnet die Wahrscheinlichkeiten von Buchstabenkombinationen in einer Textprobe im Vergleich zu einer gleichmässigen Verteilung. Diese Verteilung ist für lesbare Texte wie Programmiercode in Scriptsprachen konsistent bzw. charakteristisch. Die Verteilung des encodierten Webshell Codes weicht hingegen stark von dieser ab und kann so identifiziert werden.
Webshells sind eine ernst zu nehmende Bedrohung. Sie sind leicht zu verschleiern und daher leicht zu übersehen. Die Methoden sie zu entdecken wachsen mit den Methoden der Angreifer mit. Fortsetzung folgt.
Weiterführende Links:
Video mit einem Angriff mit den Webshell Kit Weeverly