Donnerstag, 8. Oktober 2009


Topthema

Donnerstag, 23. April 2009 | Topthema

About Security #201: Schwachstellen-Suche: Vertrauensbeziehungen ausnutzen

(Link zum Artikel: http://www.entwickler.de/entwicklerde/kolumnen/048506)

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.

Schichtenarchitekturen

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.

  • die Darstellungsschicht (Presentation Layer) mit dem Benutzerinterface,
  • die Anwendungsschicht (Application Layer) mit der Anwendungslogik und
  • die Datenschicht (Data Layer) mit der Datenspeicherung.

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:

  • Application Server Layer (z.B. Tomcat)
  • Presentation Layer (z.B. Webwork)
  • Autorisierungs- und Authentifizierungs-Schicht (z.B. JAAS)
  • Application Framework (z.B. Struts, Spring)
  • Business Logic Layer (z.B. Enterprise Java Beans)
  • Datenbank-Mapping (z.B. Hibernate)
  • JDBC-Aufrufe
  • Datenbank-Server

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.

Angriffe auf Schichtenarchitekturen

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:

  • Vertrauensbeziehungen können ausgenutzt werden, um von einer Schicht in eine andere einzudringen
  • Eine unzureichende Trennung von Schichten kann ausgenutzt werden, um über einen Fehler in der einen Schicht die Schutzmaßnahmen der anderen auszuhebeln oder zu unterlaufen
  • Nach der Kompromittierung einer Schicht sind Angriffe auf die anderen Schichten evtl. einfacher durchzuführen oder überhaupt erst möglich
Vertrauensbeziehungen ausnutzen
About Security: Alle Folgen

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!

Carsten Eilers

Kommentare

Folgende Links könnten Sie auch interessieren