Bereits 10853 Beiträge!


CAPTCHA nur für Menschen

Beitrag von Strippenzieher, am 29.07.2013
Durchschnittliches Voting: 7.204


Moin,

Für alle, die nicht wissen, was CAPTCHA ist:

CAPTCHA ist ein Akronym für Completely Automated Public Turing test to tell Computers and Humans Apart. Das bedeutet wörtlich: „Vollautomatischer öffentlicher Turing-Test zur Unterscheidung von Computern und Menschen“. (WIKIPEDIA)
Es wird meistens dafür zum Login ein Bild mit einem Text und Bildfragmente angezeigt. Das Bild ist für Menschen lesbar, für Computer aber nicht. Den Bild Inhalt muss man zum Benutzername und zum Passwort eingeben.

Wir können über eine Webseite auf unsere Firmenmails zugreifen. Durch Phishing wurden dieses Jahr 2 Accounts gestohlen und darüber massenhaft SPAM versendet. Dies wurde zwar immer schnell bemerkt, aber die Skripte, die diese Mails gesendet haben, sind doch recht flott und so gingen einige 10k Mails raus. Bruteforce war noch nie ein Problem.

Um die Sicherheit zu erhöhen wurde nun ein CAPTCHA in Form eines Bildes eingebaut. Ich war neugierig, wie das CAPTCHA umgesetzt wurde und haben mal im Browser in den Quelltext geguckt und was ich dort fand sorgte bei mir für einiges Erstaunen.

Die Loginseite läd eine JavaScript Datei nach. Diese generiert lokal eine Zufallszahl (von 1 bis 191) und läd ein Bild nach. Der Pfad zu den Bildern ist statisch und unterscheidet sich nur durch die IDs. Somit gibt es 191 feste CAPTCHA-Bilder, kein Skript was die Bilder dynamisch generiert.

Nach der Eingabe von dem CAPTCHA, Username und Passwort und dem drücken vom "Login" Button wird lokal durch das JavaScript überprüft, ob das CAPTCHA gültig ist. Dafür nimmt JavaScript die Eingabe, macht eine MD5summe draus und die passenden Gegenstücke stehen in einem Array in genau diesem JavaScript.

Wenn die Eingabe nicht gültig ist, dann gibt es ein JavaScript "alert" mit der Meldung, dass das CAPTCHA ungültig ist und der Login wird nicht ausgeführt. Wenn es richtig war, dann wird der Login ganz normal ausgeführt.

Ich habe es kurz per curl ausprobiert. Der Server interessiert sich nicht dafür, ob die Loginseite vorher aufgerufen wurde. Ich kann mir einfach mit "username" und "password" als "POST" einloggen und bekomme eine gültige SessionID.

Für leute, die in Webseitenprogrammierung nicht so Fitt sind: Die CAPTCHA-Überprüfung geschied nur im Browser und wird vom Webserver nicht überprüft. Damit funktioniert das CAPTCHA nur, wenn man ein Browser nutzt. Wenn man sich per Script einlogt, dann interessiert das alles einfach nicht. Der Server nicht überprüft, ob wirklich eine CAPTCHA-Aufgabe gelöst wurde, sondern will nur Benutzername und Passwort.

Morgen guck ich mal, wer auf die Idee gekommen ist ein CAPTCHA einzubauen, was nur dann was bringt, wenn ein Mensch ein Browser nutzt. Gegen bruteforce hilft das definitiv nicht und auch nicht gegen gephishte Logindatenmisbrauch.

Dann mal ein schönen Start in die Arbeitswoche.

Gruß

Strippenzieher


ACHTUNG Archivsystem!

Es sind keine neuen Einträge, Bewertungen oder Kommentare mehr möglich.