Skip to content

Websecurity - Angriffe über Logikfehler

Webanwendungen lassen sich nicht nur über die klassischen Schwachstellen wie SQL Injection, Directory Traversal oder File Inclusion angreifen, sondern auch über Logikfehler.

Logikfehler sind interessant

Einige Angriffe auf Logikfehler haben haben Sumit Siddharth und Richard Dean auf der Black Hat Abu Dhabi 2012 vorgestellt. Weitere Untersuchungen gab es zum Beispiel von David Byrne und Charles Henderson, die ihre Ergebnisse auf der OWASP AppSec DC 2012 präsentiert haben (Präsentation als PDF), und Marcus Pinto, der seine Ergebnisse auf der OWASP AppSec Ireland 2012 vorgetragen hat.

Was sind Logikfehler?

Beim Auftreten eines Logikfehlers verhält sich die Anwendung in einem bestimmten Status anders, als eigentlich erwartet wird. Evtl. kann der Arbeitsfluss manipuliert und zum Beispiel ein eigentlich notwendiger Schritt übersprungen werden. Solche Schwachstellen entstehen meist, weil bei der Entwicklung mögliche externe Einflüsse (und insbesondere keine absichtlichen, bösartigen Manipulationen) auf den Ausführungspfad nicht oder nicht ausreichend berücksichtigt wurden.

Ein klassisches Beispiel ist ein Bestellvorgang, bei dem der Preis der Ware manipuliert werden kann. Es ist normal, dass der Server den Preis an den Client sendet, er muss dem Kunden ja angezeigt werden. Wird er bei der Bestellung aber als versteckter Parameter zurück an den Server übertragen, ist das verdächtig. Wieso sollte der Client dem Server den Preis mitteilen, den der doch kennt? Manchmal wird dann ein geänderter Preis vom Server übernommen. Wenn die Waren dann ohne weitere Prüfung ausgeliefert werden, kann das für den Shopbetreiber teuer werden.

Da für die Erkennung von Logikfehlern das Verständnis der Anwendung nötig ist, lassen sie sich mit automatisierten Tools im Allgemeinen nicht erkennen. Kein noch so aufwendig programmiertes Tool kann erkennen, ob ein Schritt in einem Arbeitsablauf übersprungen werden kann/darf oder nicht. Logikfehler können daher nur durch manuelle Tests gefunden werden. Und da dabei alle Schritte zumindest aller potentiell gefährlichen Arbeitsabläufe meist mehrmals durchlaufen werden müssen, ist das aufwendig und fehleranfällig.

Beispiele für Angriffe

Sumit Siddharth und Richard Dean haben einige Beispiele vorgeführt:

Beispiel 1: Onlinebanking mit Authentifizierung in 2 Schritten

Im ersten Authentifizierungsschritt werden Benutzer-ID und Passwort abgefragt, im zweiten Schritt drei Zeichen aus einer längeren "memorable information", also einer leicht zu merkenden Information. Im Beispiel werden das 1., 3. und 4. Zeichen verwendet, wobei es sich anscheinend immer um Ziffern handelt, wie die Fortsetzung des Beispiels verrät.

Es wird niemals die gesamte "memorable information" abgefragt, so dass die nicht in fremde Hände fallen kann. Theoretisch, denn wie die Vergangenheit gezeigt hat, gibt es Leute, die mal eben 20 TANs ihrer iTAN-Liste auf einer Phishing-Seite eingeben, und die würden sicher auch die komplette "memorable information" irgendwo eingeben, wenn sie dazu aufgefordert werden. Aber das ist in diesem Fall nicht von Belang.

Schlägt die Überprüfung der im zweiten Schritt abgefragten Information fehl, wird die Eingabe in einer Fehlermeldung ausgegeben, damit der Benutzer sie korrigieren kann. Der Fehler dabei: Beim erneuten Versuch werden genau die gleichen Indizes wie beim ersten Mal abgefragt. Jetzt kommt es darauf an, ob der Server den Zugriff nach einer bestimmten Anzahl Fehlversuchen zum Schutz vor Brute-Force-Angriffen sperrt. Ist das der Fall, hat der Angreifer nur einige wenige Versuche, den korrekten Wert zu erraten. Gibt es keinen Brute-Force-Schutz, ist er nach spätestens 1000 Versuchen eingeloggt, da ja nur die Zahlen von 000 bis 999 durchprobiert werden müssen.

Gibt es einen Brute-Force-Schutz, kommen mögliche weitere Logikfehler zum Zuge: Was passiert, wenn die Indizes nicht geprüft und die vom Benutzer gelieferten Werte übernommen werden? Welcher Wert gehört zu nicht existierenden Indizes, zum Beispiel 7, 8 und 9 für eine 6-stellige PIN als "memorable information"?

Im Beispiel kann sich der Benutzer einloggen, indem er die Parameternamen von pinchar_1, pinchar_3 und pinchar_4 auf pinchar_7, pinchar_8 und pinchar_9 ändert und keinen Wert übergibt. Anscheinend vergleicht der Server die Werte an den Stellen 7, 8 und 9 der "memorable information" mit der Eingabe. Die Zeichen sind nicht vorhanden, die Eingabe ebenfalls nicht, und nach der Logik

"Nichts = Nichts" ist TRUE

ist die "PIN-Prüfung" erfolgreich.

Sumit Siddharth und Richard Dean haben die sehr einfache Schutzmaßnahme gegen diese Art von Schwachstellen so formuliert:

"It's a server side piece of knowledge, keep it server side"

Auf deutsch könnte man es als "Serverseitige Informationen müssen auf dem Server bleiben" formulieren. Im Beispiel sind die Indizes dem Server bekannt, es besteht keine Notwendigkeit, sie auch im Parameternamen aufzunehmen. Die Parameter könnten problemlos pinchar_1, pinchar_2 und pinchar_3 für das 1., 2. und 3. eingegebene Zeichen heißen, die Zuordnung zu den Indizes kann auf dem Server erfolgen. Denn dem ist ja bekannt, welcher Index für welchen Parameter bei der Abfrage der "PIN" verwendet wurde.

In der nächsten Folge geht es weiter um Logikfehler in Webanwendungen.

Carsten Eilers


Übersicht über alle Artikel zum Thema

Neue Angriffe auf Webanwendungen über Clickjacking und Cookies
Websecurity - XSS-Angriffe über XML
Websecurity - Angriffe über Logikfehler
Websecurity - Angriffe über Logikfehler, Teil 2
Websecurity - Logikfehler in der Authentifizierung
Websecurity - Logikfehler in der Authentifizierung und auf der Flucht
Websecurity - Logikfehler finden
Websecurity - Logikfehler vermeiden

Trackbacks

Dipl.-Inform. Carsten Eilers am : Drucksache: Entwickler Magazin 2.2014 - Die OWASP Top 10, Teil 1

Vorschau anzeigen
Im Entwickler Magazin 2.2014 ist der erste Teil eines zweiteiligen Artikels über die OWASP Top 10, die zehn gefährlichsten Schwachstellen in Webanwendungen, erschienen. Die Reihenfolge der Schwachstellen ergibt sich aus vier Faktoren

entwickler.de am : PingBack

Die Anzeige des Inhaltes dieses Trackbacks ist leider nicht möglich.

Dipl.-Inform. Carsten Eilers am : Die IoT Top 10, #2: Unsichere Authentifizierung/Autorisierung, Teil 18

Vorschau anzeigen
Weiter geht es mit der Beschreibung der gefährlichsten Schwachstellen in den Geräten des IoT gemäß den Top IoT Vulnerabilities von OWASP. Zur Zeit sind wir beim Punkt 2: "Insufficient Authentication/Authorization". Die ve