Top 5 Stupid Captcha Implementations

Top 5 Stupid Captcha Implementations

Marc Ruef
von Marc Ruef
Lesezeit: 4 Minuten

Der grundlegende Nutzen eines Computers ist, dass repetitive Augaben automatisiert sowie grosse Datenmengen verarbeitet werden können. Gewiefte Angreifer nutzen die Möglichkeit der Automatismen, um ihre dubiosen Aktivitäten durchzusetzen.

Um zum Beispiel zu verhindern, dass fortwährend in Foren mittels Bots Werbung für Viagra und Pornoseiten gemacht werden, werden sogenannte CAPTCHA (Completely Automated Public Turing Test to tell Computers and Humans Apart) eingesetzt. Bei diesen muss der Benutzer vor dem Absenden des Formulars eine Tätigkeit durchführen, die sich nur schwer automatisieren lässt. Gängige CAPTCHA-Implementierungen erfordern, dass man den auf einem zufällig generierten Bild dargestellten Code eingibt.

Intelligent umgesetzte CAPTCHAs sind durchaus schwierig zu umgehen. Wird ein hohes Mass an Dynamik sowie komplexe Mechanismen eingesetzt, ist eine automatisierte Verarbeitung im Rahmen eines Angriffs mit sehr viel Aufwand verbunden. Dennoch sehen wir bei Web Application Penetration Tests immerwieder Implementierungen, bei denen die Entwickler offensichtlich das Konzept von CAPTCHA missverstanden haben. Die fünf lustigsten Fehler wollen wir hier zusammenfassen:

Bild erlaubt einfache OCR-Verarbeitung

Traditionelle CAPTCHA generieren ein Bild, in dem eine zufällige Zeichenkombination enthalten ist. Um eine Weiterverarbeitung durch OCR (Optical Character Recognition) zu erschweren, werden dabei unterschiedliche Schriftarten sowie zufällige Störmuster verwendet. Wird auf solche verzichtet, kann das Bild sehr einfach eingelesen und ausgewertet werden. Eine automatisierte Weiterverarbeitung ist damit sehr einfach durchsetzbar.

Statischer Zufallcode

Um einem Angreifer einen automatisierten Angriff auf das CAPTCHA zu erschweren, sollte dies bei jeder Eingabe – auch bei einer Falscheingabe – neu geladen werden. So mancher Programmierer verzichtet darauf und generiert erst bei erfolgreicher Verarbeitung der CAPTCHA-Eingabe einen neuen Zufallscode. Dies erlaubt das Umsetzen einer linearen Bruteforce-Attacke, die gerade bei kurzen CAPTCHA-Werten (4-stellig) relativ schnell zum Erfolg führen können.

Zufallscode in Dateiname

Wird ein Zufallscode generiert, sollte sich dieser nur mit erheblichem Aufwand (z.B. OCR) auslesen lassen. So mancher Programmierer macht es sich jedoch sehr einfach und legt die generierten Bilder auf dem Webserver ab (z.B. zwecks Caching). Dabei wird der eigentlich geschützte Inhalt (NX7GQ) als Dateiname (captcha_nx7gq.jpg) verwendet. Durch das simple Einlesen des Dateinamens kann auf die komplexe Weiterverarbeitung des Bildinhalts verzichtet werden.

Zufallscode ist nicht zufällig

Ein CAPTCHA entspricht weitestgehend einem Challenge-Response-Verfahren. Dies bedeutet aber auch, dass die ausgegebene Challange vermerkt bzw. die erwartete Response vorhersehbar sein muss. Auf dem Server müssen entsprechende Mechanismen implementiert sein, um dieses Tracking durchführen zu können. Manche Programmierer machen es sich besonders einfach, indem sie den Zufallscode nicht stetig wirklich zufällig ausgeben lassen, sondern mit vorhersehbaren Werten arbeiten. Zum Beispiel mit einem Funktionsaufruf von $captcha=md5($_SERVER['REMOTE_ADDR'].time());, der sich durch eine Kryptoanalyse mit endlichem Aufwand ermitteln und damit vorausberechnen lässt.

Javascript-Validierung aktiviert Send-Button

Es ist die Aufgabe eines CAPTCHA, dass die Datenannahme bzw. -weiterverarbeitung erst dann stattfindet, wenn der Zufallscode richtig zurückgegeben wurde. Manche Programmierer lagern diesen Mechanismus mittels Javascript zum Client aus und vollziehen da die Validierung der Eingabe. Indem der Send-Button des Formulars deaktiviert und erst nach der CAPTCHA-Überprüfung wieder aktiviert wird, will ein Absenden ohne richtige Eingabe verhindert werden. Durch das Manipulieren des Javascript-Codes bzw. dem Absetzen von direkten HTTP-Anfragen lassen sich solche Einschränkungen einfach umgehen.

Über den Autor

Marc Ruef

Marc Ruef ist seit Ende der 1990er Jahre im Cybersecurity-Bereich aktiv. Er hat vor allem im deutschsprachigen Raum aufgrund der Vielzahl durch ihn veröffentlichten Fachpublikationen und Bücher – dazu gehört besonders Die Kunst des Penetration Testing – Bekanntheit erlangt. Er ist Dozent an verschiedenen Hochschulen, darunter ETH, HWZ, HSLU und IKF. (ORCID 0000-0002-1328-6357)

Links

Haben Sie Interesse an einem Penetration Test?

Unsere Spezialisten kontaktieren Sie gern!

×
Cyber Threat Intelligence

Cyber Threat Intelligence

Marc Ruef

3D Printing

3D Printing

Marc Ruef

Contact Tracing App DP3T

Contact Tracing App DP3T

Marc Ruef

Sie wollen mehr?

Weitere Artikel im Archiv

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

Sie wollen mehr?

Weitere Artikel im Archiv