Skip to content

challenge แบบ instrumentation ​

challenge แบบ instrumentation คือชั้นการยืนยันที่สองของ Cap ซึ่งทำงานเงียบ ๆ ควบคู่ไปกับระบบ proof-of-work หลัก และมีมาให้ใน Cap Standalone

มันจะสร้างโปรแกรม JavaScript ที่ไม่ซ้ำกันในทุกคำขอ แล้วรันภายในเบราว์เซอร์ของผู้เข้าชม ผลลัพธ์จะถูกตรวจสอบฝั่งเซิร์ฟเวอร์ ทำให้ Cap ยืนยันได้ว่ามีสภาพแวดล้อมเบราว์เซอร์จริงอยู่ ก่อนจะยอมรับ token

หลักการทำงาน ​

เมื่อมีการออก challenge เซิร์ฟเวอร์จะสร้างบันเดิล JavaScript ที่สมบูรณ์ในตัวเอง ซึ่งรันการตรวจสอบ browser API สองสามอย่าง และประเมินสายการคำนวณหลัก โดยตัวแปรจำนวนเต็มหลายตัวจะถูกกำหนดค่าเริ่มต้นด้วย seed แบบสุ่ม แล้วถูกแปลงค่าผ่านการดำเนินการที่สุ่มขึ้น ทั้ง AND/OR/XOR/NAND ระดับบิต ลูกเล่นกับ prototype chain และเลขคณิตที่อิงกับ DOM ซึ่งจะเพิ่มต้นไม้ของอิลิเมนต์ลงในหน้า ไล่ย้อนขึ้นไปพร้อมสะสมค่า แล้วจึงลบทิ้ง

เซิร์ฟเวอร์ติดตามผลลัพธ์ที่คาดหวังของทุกการดำเนินการไปพร้อมกัน จึงรู้ว่าค่าสุดท้ายทั้งสี่ต้องเป็นเท่าใด

การตรวจสอบทั้งหมดนี้รันอยู่ใน iframe ซึ่งจะ postMessage คำตอบกลับไปยังหน้าหลัก

ทำไมต้องใช้การดำเนินการกับ DOM ​

เลขคณิตล้วน ๆ สามารถทำซ้ำได้ในสภาพแวดล้อมที่ไม่ใช่เบราว์เซอร์ เพียงแค่รัน JavaScript นั้น แต่การดำเนินการกับ DOM ทำแบบนั้นไม่ได้ หรืออย่างน้อยก็ไม่ถูก การสร้างต้นไม้ของอิลิเมนต์จริง อ่านค่าผ่าน layout engine ของเบราว์เซอร์ แล้วรื้อทิ้ง เป็นการใช้งานส่วนของเบราว์เซอร์ที่ runtime นอกเบราว์เซอร์มักทำเป็นแค่ stub ทำไม่ถูกต้อง หรือข้ามไปเลยเพื่อความเร็ว สิ่งนี้ทำให้ challenge ถูกเล่นซ้ำนอก rendering engine จริงได้ยากขึ้นมาก

challenge แบบ instrumentation มักผสมสิ่งเหล่านี้เข้ากับรายการตรวจสอบที่กำหนดไว้ล่วงหน้าด้วย

การตรวจจับเบราว์เซอร์อัตโนมัติ ​

challenge แบบ instrumentation ยังเลือกให้พยายามสกัดกั้น webdriver อัตโนมัติได้ด้วย แม้เราจะตรวจสอบเรื่องนี้เป็นจำนวนมาก แต่ก็ไม่ใช่วิธีที่กันได้ร้อยเปอร์เซ็นต์ แม้แต่ CAPTCHA เชิงพาณิชย์แบบปิดซอร์สอย่าง Turnstile ก็ยังถูกผู้โจมตีเลี่ยงได้ด้วยเบราว์เซอร์ stealth ที่ถูกแก้ไข

ความสัมพันธ์กับ proof-of-work ​

challenge แบบ instrumentation กับ proof-of-work เสริมกัน ไม่ได้ซ้ำซ้อนกัน proof-of-work พิสูจน์ ความพยายาม: ไคลเอนต์ต้องเผารอบการทำงานของ CPU เพื่อหาแฮช ส่วน instrumentation พิสูจน์ สภาพแวดล้อม: การคำนวณเกิดขึ้นในเบราว์เซอร์ ไม่ใช่ในสคริปต์ เมื่อรวมกันแล้วมันดันต้นทุนของการใช้งานในทางที่ผิดขึ้นในสองแกนที่เป็นอิสระต่อกัน แต่ละอย่างเดี่ยว ๆ ไม่พอรับมือผู้โจมตีที่มุ่งมั่น ทว่าการเอาชนะทั้งสองพร้อมกันนั้นยากกว่ามาก

instrumentation ไม่ใช่ของที่กันได้ร้อยเปอร์เซ็นต์ แม้ challenge ลักษณะนี้จะถูกใช้ในสเกลมหาศาลโดยแพลตฟอร์มอย่าง YouTube และ Twitter ผมก็ไม่แนะนำให้ใช้มันแทน proof-of-work เพราะหากไม่มี PoW และผู้โจมตีใช้เบราว์เซอร์จริง พวกเขาจะไล่แก้ challenge เหล่านี้ได้ด้วยต้นทุนต่ำ

เผยแพร่ภายใต้สัญญาอนุญาต Apache 2.0