Sonntag, 12. Februar 2012 |
Angriffe auf die Architektur der Webanwendung werden bei deren Untersuchung auf Schwachstellen oft übersehen, obwohl sie eine nicht zu unterschätzende Gefahr darstellen.
Bei Anwendungen, die aus mehreren Schichten bestehen, können Schwachstellen in einer bzw. Angriffe auf eine Schicht sehr schnell zur Kompromittierung des Gesamtsystems führen. In Umgebungen, in denen verschiedene Anwendung die gleiche Infrastruktur nutzen, können Schwachstellen in bzw. Angriffe auf eine der Anwendungen entweder zur Kompromittierung der Infrastruktur und/oder aller anderen Anwendungen führen. In dieser und den nächsten Folgen werden einige Architekturen und mögliche Angriffe darauf beschrieben.
Viele Webanwendungen bestehen aus mehreren Schichten: Benutzerinterface, Anwendungslogik und Datenspeicherung sind auf verschiedene Schichten verteilt, die unterschiedliche Technologien nutzen und auf verschiedene physikalische Rechner aufgeteilt sein können. Bei einem 3-Schichten-Modell (engl. 3-tier architecture) wären das z.B.
Bei komplexen Anwendungen können noch deutlich mehr Schichten zusammen kommen. Zum Beispiel könnte eine Java-basierte Anwendung aus den folgenden Schichten und Technologien aufgebaut sein:
Ein Angreifer, der z.B. den Datenbank-Server unter seine Kontrolle bringt, kann über die Manipulation der gespeicherten Daten auch auf alle darüber liegenden Schichten Einfluss nehmen. Ein Angreifer, der z.B. die Autorisierung oder Authentifizierung manipulieren kann, kann danach Zugriff auf die darunter liegenden Schichten nehmen, usw. usf.
Schwachstellen in der Implementierung der verschiedenen Schichten können zu Schwachstellen in der Gesamtanwendung führen. Es gibt drei typische Angriffe auf unzureichend entworfene und/oder implementierte Schichtenarchitekturen:
Meist vertrauen die verschiedenen Schichten der Anwendung darauf, das sich die anderen Schichten in einer bestimmten Weise verhalten. Solange alles normal funktioniert, ist das i.A. auch so. In unnormalen Situationen und insbesondere bei einem Angriff muss das aber nicht so sein.
In den meisten Webanwendungen ist allein die Anwendungsschicht für die Kontrolle der Benutzerzugriffe und damit die Autorisierung und Authentifizierung sowie Session-Verwaltung zuständig. Sie allein entscheidet, ob eine Anweisung ausgeführt wird oder nicht. Soll eine Anweisung ausgeführt werden, gibt sie die entsprechenden Befehle an die anderen Schichten. Diese verlassen sich darauf, dass die Anwendungsschicht die Autorisierung und Authentifizierung korrekt durchführt, und führen ihre Befehle ohne weitere Prüfungen aus.
Vertrauensbeziehungen und deren Ausnutzung kommen auch bei anderen, vorher beschriebenen Angriffen zum Tragen. Z.B. ist die Ausnutzung einer SQL-Injection-Schwachstelle zum Auslesen des gesamten Datenbankinhalts nur möglich, weil die Datenschicht in Form der Datenbank davon ausgeht, das die Anwendungsschicht die Anweisung geprüft hat und nur zulässige Zugriffe auf die Daten durchführt. Auch das Einschleusen von Shell-Befehlen in Systemaufrufe ist nur möglich, weil das Betriebssystem davon ausgeht, dass von der Anwendungsschicht nur zulässige Befehle mit zulässigen Parametern aufgerufen werden.
Ein weiteres Problem im Zusammenhang mit Vertrauensbeziehungen entsteht bei der Auswertung von Logfiles: Da die Verwaltung der Benutzeraktionen alleinige Aufgabe der Anwendungsschicht ist, werden die Benutzeraktionen auch nur dort protokolliert. Aktionen auf den anderen Schichten werden der Anwendungsschicht als Verursacher zugeordnet. Um z.B. den Verursacher eines SQL-Injection-Angriffs zu ermitteln, reicht es nicht aus, die Logfiles des Datenbankservers zu analysieren. Vielmehr müssen auch die Logfiles der anderen beteiligten Schichten analysiert und miteinander verknüpft werden, um den Benutzer zu ermitteln, von dem die entsprechende Eingabe stammt.
In der nächsten Folge werden die weiteren Angriffe auf eine Schichtenarchitektur beschrieben.
Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!