Google reCAPTCHA v2 ทำงานอย่างไรเบื้องหลัง?


303

โพสต์นี้อ้างถึง Google ReCaptcha v2 (ไม่ใช่รุ่นล่าสุด)

เมื่อเร็ว ๆ นี้ Google ได้แนะนำระบบการตรวจสอบ "captcha" ที่เรียบง่าย ( วิดีโอ ) ที่ช่วยให้ผู้ใช้ผ่าน "captcha" เพียงแค่คลิกที่นี่

แต่มันจะแยกความแตกต่างของบอทจากคนเพียงแค่คลิกได้อย่างไร?

ตามคำตอบนี้ (สมมติว่ามีการใช้งานที่คล้ายกัน) ในตอนแรก "recaptcha" จะสร้างคีย์ที่ซ่อนอยู่และแนบกับองค์ประกอบอินพุตที่ซ่อนอยู่และยังทำให้กล่องกาเครื่องหมาย (ไม่ได้เป็นกล่องกาเครื่องหมายจริงinputแต่อย่างเดียวdiv) ด้วยคีย์เดียวกัน เมื่อคลิกจะส่งคำขอแบบอะซิงโครนัส (XHR) ไปยังเซิร์ฟเวอร์แบ็กเอนด์ของ Google เพื่อทำเครื่องหมายว่าเป็นรหัสยืนยันที่ถูกต้อง (เช่นรหัสที่ต้องได้รับการตรวจสอบความถูกต้องเมื่อส่งแบบฟอร์ม)

แต่ทำไมบอตไม่สามารถทำการคลิกอัตโนมัติ (อย่างน้อยก็บอทที่ใช้เบราว์เซอร์)

มันจะทำงานยังไง?


1
อาจคล้ายกับวิธีที่พวกเขาส่ง captchas ง่าย ๆ ให้กับมนุษย์และ captchas อย่างหนักไปยังบอท
mukunda

1
วิธีที่ฉันเข้าใจคือ - ยังมี captcha แต่ถ้าคุณทำคำขอที่น่าสงสัย - คุณจะไม่ต้องแก้ไข
Kelm

@Louie "ขโมย" คืออะไร? มีคนถามคำถามเดียวกันและเชื่อมโยงโพสต์เดียวกัน (และเฉพาะ) - แต่มันใช้คำพูดแตกต่างกันเล็กน้อยและไม่มีคำตอบใดที่เหมือนกัน มีอะไรเพิ่มเติมคำถาม Quora ดั้งเดิมถูกโพสต์เมื่อวันที่ 3 ธันวาคมหนึ่งวันก่อนคำถามนี้ ดูเหมือนว่าจะมีปัญหาอะไร
wchargin

10
@CiroSantilli 六四事件法轮功ห่าอะไร? ลิงก์หายไป
TechLife

14
@TechLife จริง! ดูเหมือนว่าจะย้ายไปที่github.com/neuroradiology/InsideReCaptchaหรือไม่ เตือนให้ตัวเอง: ส้อมทุกสิ่ง
Ciro Santilli 法轮功冠状病六四事件法轮功

คำตอบ:


200

นี่คือการเก็งกำไร แต่อ้างอิงจาก Google ถึง "เครื่องมือวิเคราะห์ความเสี่ยง" ที่ใช้ ( http://googleonlinesecurity.blogspot.com/2014/12/are-you-robot-introducing-no-captcha.html ) ที่ใช้

ฉันคิดว่ามันจะดูว่าคุณประพฤติตนอย่างไรก่อนที่จะคลิกเคอร์เซอร์ของคุณเคลื่อนที่ไปทางเช็ค (เส้นทางอินทรีย์ / การเร่งความเร็ว) ซึ่งเป็นส่วนหนึ่งของช่องทำเครื่องหมายที่ถูกคลิก (สถานที่สุ่มหรือตายกลางทุกครั้ง) เบราว์เซอร์ ลายนิ้วมือคุกกี้ & เนื้อหาของ Google คลิกประวัติตำแหน่งที่เชื่อมโยงกับลายนิ้วมือหรือบัญชีของคุณหากตรวจพบได้

มันค่อนข้างยากที่จะปลอมพฤติกรรม "อินทรีย์" ในลักษณะที่จะหลอกเครื่องมือตรวจจับรูปแบบการเรียนรู้อย่างต่อเนื่อง ในกรณีที่ไม่แน่ใจมันยังคงพร้อมท์ให้คุณจับคู่สตริง CAPTCHA จริง


73
ดูเหมือนจะถูกต้องและควรอธิบายว่าทำไมฉันต้องพิมพ์สตริงบน PSVita ด้วยแท่งไม้เสมอ มันไม่ขยับเหมือนเมาส์ธรรมดา
Domino

3
ฉันสงสัยว่า Google จะตอบสนองต่อพฤติกรรมออร์แกนิกที่บันทึกไว้จำนวนมากเพียงพอได้อย่างไร
Markus Malkusch

16
การเคลื่อนไหวของเมาส์ไม่ได้มีส่วนช่วยในเรื่องนี้ วางเคอร์เซอร์ขวาตรงจุดที่ช่องทำเครื่องหมายจะปรากฏขึ้น นำทางไปยังไซต์โดยไม่เลื่อนเคอร์เซอร์ของคุณ คลิกช่องทำเครื่องหมายและมันจะผ่าน
ดีเร็ก朕會功夫

3
@ ดีเร็กฉันไม่คิดว่าเป็นข้อพิสูจน์อะไร คุกกี้ IP และปัจจัยอื่น ๆ อาจช่วยให้คุณผ่านก่อนที่จะถอยกลับไปที่การเคลื่อนไหวของเมาส์ ฉันไม่รู้สึกอยากทดสอบ แต่ถ้าคุณต้องเปิดคอมพิวเตอร์เครื่องใหม่จาก IP สดและไม่ใช้เมาส์เลยฉันยินดีที่จะเดิมพันว่ามันจะล้มเหลว
Caimen

13
โปรดทราบว่าคุณยังสามารถแท็บไปยังมันและกด space
JSideris

74

กระดาษใหม่ได้รับการปล่อยตัวด้วยการทดสอบหลายครั้งกับ reCAPTCHA:

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

ไฮไลท์บางส่วน:

  • ด้วยการทำให้คุกกี้ใช้งานได้นานถึง +9 วัน (โดยการเรียกดูไซต์ด้วยทรัพยากรของ Google) คุณสามารถส่ง reCAPTCHA โดยคลิกที่ช่องทำเครื่องหมายเท่านั้น
  • ไม่มีข้อ จำกัด ตามคำขอต่อ IP
  • ตัวแทนผู้ใช้ของเบราว์เซอร์จะต้องเป็นของจริงและ Google จะทำการทดสอบกับสภาพแวดล้อมของคุณเพื่อให้แน่ใจว่าตรงกับตัวแทนผู้ใช้
  • Google ทดสอบว่าเบราว์เซอร์สามารถแสดง Canvas หรือไม่
  • ความละเอียดหน้าจอและเหตุการณ์เมาส์จะไม่ส่งผลกระทบต่อผลลัพธ์

Google ได้แก้ไขช่องโหว่คุกกี้แล้วและอาจ จำกัด พฤติกรรมบางอย่างตาม IP

การค้นพบที่น่าสนใจอีกอย่างหนึ่งคือ Google เรียกใช้ VM ใน JavaScript ซึ่งทำให้รหัส reCAPTCHA และพฤติกรรมซ้ำซ้อน VM นี้เรียกว่า botguard และใช้เพื่อปกป้องบริการอื่น ๆ นอกเหนือจาก reCAPTCHA:

https://github.com/neuroradiology/InsideReCaptcha

อัพเดท 2017

รายงานล่าสุด (จากสิงหาคม) เผยแพร่เมื่อวันที่ WOOT 2017 บรรลุความแม่นยำ 85% ในการแก้ปัญหาเสียง noCAPTCHA reCAPTCHA:

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

อัพเดท 2018

Google กำลังแนะนำ reCAPTCHA v3 ซึ่งดูเหมือนว่าเป็น "เครื่องมือทำนายคะแนนมนุษย์" ที่มีการสอบเทียบต่อเว็บไซต์ สามารถติดตั้งลงในหน้าต่างๆของเว็บไซต์ (ทำงานเหมือนสคริปต์ Google Analytics) เพื่อช่วย reCAPTCHA และเจ้าของเว็บไซต์ให้เข้าใจพฤติกรรมของคนเทียบกับบอตก่อนที่จะเติม reCAPTCHA

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


4
mouse events don't affect the resultsนั่นเป็นเรื่องที่น่าสนใจเนื่องจากฉัน (และฉันเชื่อว่าคนอื่น ๆ ) คิดว่านั่นเป็นสิ่งสำคัญที่ส่งผลต่อผลลัพธ์ ฉันคิดว่าบนมือถือแทนที่จะเป็นช่องทำเครื่องหมายผู้ใช้ถูกขอให้เลือกภาพทั้งหมดที่เหมือนกันแทนเพราะไม่มีการเคลื่อนไหวของเมาส์บนหน้าจอสัมผัส อย่างไรก็ตามเมื่อดูที่โพสต์บล็อกเกริ่นนำอีกครั้งปรากฏว่าอาจไม่เป็นเช่นนั้น บางทีการเลือกภาพคือแทนที่จะพิมพ์ข้อความที่บิดเบี้ยวไม่ใช่แทนที่จะเลือกกล่อง คุณ (หรือใครก็ตาม) รู้หรือไม่ว่า reCAPTCHA จะอนุญาตให้ทำเครื่องหมายในกล่องบนมือถือได้หรือไม่?
Nateowami

เหตุการณ์เมาส์มีผลต่อผลลัพธ์ หากคุณกดTabและEnterเพื่อเลือกช่องทำเครื่องหมายภาพจะแสดงภาพแคปช่าให้คุณเลือกตามเกณฑ์
mbomb007

1
@ mbomb007 เหตุการณ์เมาส์อาจส่งผลต่อผลลัพธ์ แต่การกดTabและEnterจะไม่แสดงภาพแคปต์ชาตลอดเวลา เวลาส่วนใหญ่ที่กดTabและEnterเป็นที่ยอมรับ
Manish Ojha

24

บอทของฉันทำงานได้ดีกับ ReCaptcha

นี่คือทางออกของฉัน

ให้ Bot ของคุณทำตามขั้นตอนนี้:

ก่อนอื่นให้เขียนฟังก์ชั่น Human Mouse Move เพื่อย้ายเมาส์ของคุณเหมือน B-Spline (ถามรหัสแหล่งที่มา) นี่คือจุดที่สำคัญที่สุด

ใช้เพื่อผลลัพธ์ที่ดีกว่าเช่น VPN เช่นhttps://www.purevpn.com

สำหรับ Recpatcha ทุกคนให้ทำตามขั้นตอนเหล่านี้:

  1. หากคุณใช้ VPN ให้เปลี่ยน IP ก่อน

  2. ล้างคุกกี้เบราว์เซอร์ทั้งหมด

  3. ล้างแคชเบราว์เซอร์ทั้งหมด

  4. ตั้งค่าหนึ่งใน Useragents เหล่านี้โดยการสุ่ม:

    Mozilla / 5.0 (ใช้งานได้; MSIE 9.0; Windows NT 6.1; ตรีศูล / 5.0)

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

5 เลื่อนเม้าส์ของคุณด้วย Human Mouse ย้าย Funktion จาก RandomPoint ไปยัง I I ไม่ใช่ภาพหุ่นยนต์ทุกครั้งที่มีการสุ่ม 10 เท่าที่แตกต่างกัน

  1. จากนั้นคลิกเลยโดยมีการหน่วงเวลาแบบสุ่มระหว่าง

    WM_LBUTTONDOWN

    และ

    WM_LBUTTONUP

  2. จับภาพหน้าจอจาก Image Captcha

  3. ส่งภาพหน้าจอไปที่

    http://www.deathbycaptcha.com

    หรือ

    https://2captcha.com

และปล่อยให้พวกเขาแก้ปัญหา

  1. หลังจากได้รับ cooridinates คลิกจากตัวแก้แคปต์ชาใช้ Human Mouse ของคุณย้าย Funktion เพื่อย้ายและคลิกรูปภาพ Recaptcha

  2. ใช้ฟังก์ชั่น Human Mouse Move ของคุณเพื่อย้ายและคลิกที่ปุ่มยืนยันอีกครั้ง

ใน 75% การทดลองทั้งหมดที่ Recaptcha จะแก้ไขได้

Chears Google

ทอม


2
ทำไมคุณถึงต้องการ "ฟังก์ชั่น Human Mouse Move" ดูเหมือนไม่จำเป็นสำหรับการบรรลุเป้าหมายของคุณ
barbolo

9
ฟังก์ชั่น 'Human Mouse Move' เป็นจุดที่สำคัญที่สุด Google ตรวจจับภายใน captcha Mousespeed, MouseWay, MouseButton ขึ้นและลงกิจกรรม, Clickpositions, Mouse EntryPoint เข้าสู่ captcha, ... และส่งข้อมูลนี้ผ่าน Javascript ไปยังฐานข้อมูลของ Google กับ Human Mousemove Trackings ของมนุษย์หลายล้านตัว หลังจากตีความข้อมูลทั้งหมดที่ถูกบันทึกไว้ Captcha จะทำเครื่องหมาย als แก้ไขเฉพาะในกรณีที่อัลกอริทึม google บอกว่ามันเป็นมนุษย์
Ingo

3
@ barbolo: โปรดตรวจสอบบล็อก Google อย่างเป็นทางการนี้security.googleblog.com/2014/12/… -> Google กล่าวว่า "เพื่อตอบโต้เมื่อปีที่แล้วเราได้พัฒนาแบ็กเอนด์การวิเคราะห์ความเสี่ยงขั้นสูงสำหรับ reCAPTCHA ที่พิจารณาการมีส่วนร่วมของผู้ใช้ทั้งหมดกับ CAPTCHA - ก่อนระหว่างและหลัง - เพื่อพิจารณาว่าผู้ใช้นั้นเป็นมนุษย์หรือไม่ "
Ingo

6
ขั้นตอนที่ 8 ใช้ API ภายนอกที่มนุษย์แก้แคปต์ชาให้คุณ บอทไม่ได้แก้อะไรเลย
Andrea Lazzarotto

14
มันเป็นเพียงฉันหรือมันเป็นทั้งรบกวนและน่าสนใจให้กับคนอื่น ๆ ที่นักเขียนบอทกำลังใช้ Stack Overflow เพื่อช่วยแก้ปัญหา (และการอภิปราย!) reCAPTCHAs?
Ogre Psalm33

3

ฉันขอเสนอการเดาของฉันได้ไหมเนื่องจากนี่ไม่ใช่เทคโนโลยีแบบเปิด

Google กล่าวว่ามันเกี่ยวกับการรวบรวมข้อมูลจากก่อนระหว่างและหลังเพื่อแยกมนุษย์ออกจากหุ่นยนต์ แต่ฉันสนใจมากขึ้นเกี่ยวกับการคลิกครั้งสุดท้ายในช่องทำเครื่องหมาย

สมมติว่าข้อมูล POST (แก้ไข CAPTCHA) มีเขตข้อมูลที่เรียกว่าลายนิ้วมือซึ่งเป็นสตริงที่คำนวณจากพฤติกรรมของผู้ใช้ ฉันคิดว่าอาจมีฟิลด์เกี่ยวกับที่ตั้งกล่องกาเครื่องหมาย ฉันเดาว่ากล่องกาเครื่องหมายนี้อยู่ในระบบพิกัดที่สร้างขึ้นโดย Google back-end และเข้ารหัสโดยพับลิกคีย์ของไซต์ของฉัน ดังนั้นหุ่นยนต์อาจ "เดา / คำนวณ" สถานที่ตั้งเกี่ยวกับกล่องนี้ แต่เมื่อเจ้าของไซต์ทำการสอบถาม GET ด้วยรหัสส่วนตัวเพื่อยืนยันตัวตนของผู้ใช้ Google จะถอดรหัสระบบพิกัดและบอกว่าผู้ใช้คลิกที่ถูกต้องหรือไม่ ดังนั้นการคลิกขวาเพียงครั้งเดียวที่เป็นไปได้ (ด้วยการชดเชยบางอย่างมันเป็นกล่องสี่เหลี่ยม) ในระบบพิกัดสุ่มนี้ที่เป็นเจ้าของโดย Google และเจ้าของเว็บไซต์เท่านั้น


หากเบราว์เซอร์ดีพอที่จะแสดงกล่องและตรวจจับคลิกจริง ๆ แล้วทำไมหุ่นยนต์แฮ็คที่ไม่สามารถทำแบบเดียวกันได้ อย่างไรก็ตามฉันสามารถตั้งตำแหน่งของช่องทำเครื่องหมายให้อยู่ในตำแหน่งที่แม่นยำมาก (เป็นทศนิยม) ดังนั้นหากตรวจพบการคลิกด้วยทศนิยมเดียวกันนั่นหมายความว่าเป็นหุ่นยนต์ที่ไม่ได้เพิ่มทศนิยมแบบสุ่มไปยังตำแหน่งคลิก แต่นั่นก็ไม่ได้ป้องกันได้
Domino

Google ควรใช้อัลกอริทึม 'การเรียนรู้' เพื่อว่าหากลูกค้าบางคนที่มีลักษณะเดียวกันดูเหมือนจะใช้เส้นทางทั่วไปและเวลาทั่วไปในการไปถึงและเกิดขึ้น 100,000 ครั้งต่อวันพวกเขาอาจไม่ถูกกฎหมาย
ไซเรน

1
มันค่อนข้างง่ายที่จะจำลองการคลิกในพื้นที่สี่เหลี่ยม ไม่สำคัญว่า Google เข้ารหัสข้อมูลอย่างไรก่อนส่ง
Eugene C

0

โปรดจำไว้ว่า Google ยังใช้ reCaptcha ร่วมกับ

Canvas fingerprinting 

การจดจำผู้ใช้ / เบราว์เซอร์โดยไม่ใช้คุกกี้โดยไม่ซ้ำ!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.