319 Stimmen

Wie funktioniert Google reCAPTCHA v2 hinter den Kulissen?

Dieser Beitrag bezieht sich auf Google ReCaptcha v2 (nicht die neueste Version)

Vor kurzem hat Google ein vereinfachtes "Captcha"-Verifizierungssystem (Video) eingeführt, das es Benutzern ermöglicht, das "Captcha" nur durch Klicken darauf zu bestehen.

Aber wie kann es durch einen Klick einen Bot von einer Person unterscheiden?

Laut dieser Antwort, (unter der Annahme einer ähnlichen Implementierung) generiert "recaptcha" zuerst einen versteckten Schlüssel und hängt ihn an ein verstecktes Eingabeelement an und rendert auch ein Kontrollkästchen (kein tatsächliches Kontrollkästchen input aber ein div) mit demselben Schlüssel, das beim Klicken eine asynchrone Anfrage (XHR) an die Google-Backend-Server sendet, um es als gültigen Verifizierungsschlüssel zu markieren (d. h. ein Schlüssel, der validiert werden muss, wenn das Formular abgesendet wird).

Aber warum können Bots diesen Klick nicht automatisieren (zumindest browserbasierte Bots)?

Wie könnte das funktionieren?

210voto

AgmLauncher Punkte 6744

Dies ist eine Spekulation, aber basierend auf Googles Verweis auf den von ihnen verwendeten "Risikoanalyse-Motor" (http://googleonlinesecurity.blogspot.com/2014/12/are-you-robot-introducing-no-captcha.html)

Ich würde annehmen, dass es sich darauf konzentriert, wie Sie sich vor dem Klicken verhalten haben, wie sich Ihr Cursor auf dem Weg zum Klick bewegt hat (organischer Pfad/Beschleunigung), an welcher Stelle des Kontrollkästchens geklickt wurde (zufällige Stellen oder immer genau in der Mitte), Browser-Fingerabdruck, Google-Cookies & Inhalte, Klick-Verlauf in Verbindung mit Ihrem Fingerabdruck oder Konto, falls eines erkannt wird, usw.

Es ist ziemlich schwierig, "organisches" Verhalten so zu fälschen, dass es einen kontinuierlich lernenden Mustererkennungsmotor täuschen könnte. In Fällen, in denen es sich nicht sicher ist, fordert es Sie dennoch auf, eine tatsächliche CAPTCHA-Zeichenfolge abzugleichen.

79voto

barbolo Punkte 3647

Ein neues Paper wurde mit mehreren Tests gegen reCAPTCHA veröffentlicht:

https://www.blackhat.com/docs/asia-16/materials/asia-16-Sivakorn-Im-Not-a-Human-Breaking-the-Google-reCAPTCHA-wp.pdf

Einige Highlights:

  • Wenn ein Cookie für mehr als 9 Tage aktiv bleibt (durch Surfen auf Websites mit Google-Ressourcen), können Sie reCAPTCHA bestehen, indem Sie nur das Kontrollkästchen anklicken;
  • Es gibt keine Einschränkungen basierend auf Anfragen pro IP;
  • Der Browser-Benutzeragent muss echt sein, und Google führt Tests gegen Ihre Umgebung durch, um sicherzustellen, dass sie mit dem Benutzeragenten übereinstimmt;
  • Google testet, ob der Browser eine Canvas rendern kann;
  • Bildschirmauflösung und Mausereignisse beeinflussen die Ergebnisse nicht;

Google hat die Cookie-Schwachstelle bereits behoben und beschränkt wahrscheinlich einige Verhaltensweisen basierend auf IPs.

Noch eine interessante Entdeckung ist, dass Google eine VM in JavaScript ausführt, die einen Großteil des reCAPTCHA-Codes und -Verhaltens verschleiert. Diese VM wird als botguard bezeichnet und dient zum Schutz anderer Dienste neben reCAPTCHA:

https://github.com/neuroradiology/InsideReCaptcha

UPDATE 2017

Ein kürzlich veröffentlichtes Papier (aus dem August) wurde auf WOOT 2017 veröffentlicht und erreichte eine Genauigkeit von 85% bei der Lösung von noCAPTCHA reCAPTCHA-Audio-Herausforderungen:

http://uncaptcha.cs.umd.edu/papers/uncaptcha_woot17.pdf

UPDATE 2018

Google führt reCAPTCHA v3 ein, das wie eine "Engine zur Vorhersage der menschlichen Punktzahl" aussieht, die pro Website kalibriert ist. Es kann in verschiedene Seiten einer Website installiert werden (ähnlich einem Google Analytics-Skript), um reCAPTCHA und dem Website-Besitzer zu helfen, das Verhalten von Menschen vs. Bots zu verstehen, bevor ein reCAPTCHA ausgefüllt wird.

https://www.google.com/recaptcha/intro/v3beta.html

28voto

Ingo Punkte 5017

Meine Bots laufen gut gegen ReCaptcha.

Hier meine Lösung.

Lassen Sie Ihren Bot diese Schritte ausführen:

Schreiben Sie zuerst eine Menschliche Maus-Bewegungsfunktion, um Ihre Maus wie einen B-Spline zu bewegen (fragen Sie mich nach dem Quellcode). Dies ist der wichtigste Punkt.

Verwenden Sie auch für bessere Ergebnisse ein VPN wie https://www.purevpn.com

Führen Sie für jedes Recaptcha diese Schritte aus:

  1. Wenn Sie ein VPN verwenden, wechseln Sie zuerst die IP

  2. Löschen Sie alle Browser-Cookies

  3. Löschen Sie alle Browser-Caches

  4. Wählen Sie eines dieser Useragents zufällig aus:

    a. Mozilla/5.0 (kompatibel; MSIE 9.0; Windows NT 6.1; Trident/5.0)

    b. Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0

5 Bewegen Sie Ihre Maus mit der Menschliche Maus-Bewegungsfunktion von einem Zufallspunkt in das "Ich bin kein Roboter"-Bild jedes Mal mit einem anderen 10x10 Zufallsbereich

  1. Klicken Sie dann mit zufälliger Verzögerung zwischen

    WM_LBUTTONDOWN

    und

    WM_LBUTTONUP

  2. Nehmen Sie einen Screenshot vom Bild-Captcha

  3. Senden Sie den Screenshot an

    http://www.deathbycaptcha.com

    oder

    https://2captcha.com

und lassen Sie sie lösen.

  1. Nach Erhalt der Klick-Koordinaten vom Captcha-Solver verwenden Sie Ihre Menschliche Maus-Bewegungsfunktion, um auf Recaptcha-Bilder zu klicken und zu klicken

  2. Verwenden Sie Ihre Menschliche Maus-Bewegungfunktion, um auf die Recaptcha-Überprüfungsschaltfläche zu klicken und zu bewegen

In 75% aller Versuche wird Recaptcha gelöst

Cheers Google

Tom

3voto

hakunami Punkte 2243

Darf ich meinen Tipp vorstellen, da es sich nicht um eine offene Technologie handelt.

Google sagt, es gehe darum, Informationen von vor, während und nach dem Vorgang zu kombinieren, um Menschen von Robotern zu unterscheiden. Aber mich interessiert mehr dieser letzte Klick auf das Kontrollkästchen.

Sagen wir, die POST-Daten (gelöstes CAPTCHA) enthalten ein Feld namens "Fingerprint", eine Zeichenfolge, die aus dem Benutzerverhalten berechnet wird. Ich denke, es könnte ein Feld über den Standort dieses Kontrollkästchens geben. Ich vermute, dass dieses Kontrollkästchen sich in einem Koordinatensystem befindet, das von Googles Backend zufällig generiert und mit dem öffentlichen Schlüssel meiner Website verschlüsselt wurde. So kann ein Roboter möglicherweise einen Standort dieses Kästchens "erraten/berechnen", aber wenn der Website-Besitzer die GET-Abfrage mit dem privaten Schlüssel macht, um die Benutzeridentität zu überprüfen, wird Google das Koordinatensystem entschlüsseln und sagen, ob der Benutzer am richtigen Ort geklickt hat. Also gibt es nur einen möglichen richtigen Klick (mit einigen Abweichungen, es handelt sich um ein quadratisches Kästchen) in diesem zufälligen Koordinatensystem, das nur Google und den Website-Besitzern gehört.

1voto

Ingo Punkte 5017

Bitte beachten Sie, dass Google auch reCaptcha zusammen mit

Canvas-Fingerprinting 

verwendet, um Benutzer/Browser eindeutig zu erkennen, ohne Cookies zu verwenden!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X