Specific Criticism of CVSS4
Marc Ruef
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:
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.
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.
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.
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.
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.
Our experts will get in contact with you!
Marc Ruef
Marc Ruef
Marc Ruef
Marc Ruef
Our experts will get in contact with you!