- การตรวจสอบอุปกรณ์ “Verify you're human” ของ Cloudflare Turnstile วนซ้ำไม่สิ้นสุดบนเบราว์เซอร์ที่ใช้ WebKitGTK มาประมาณหนึ่งสัปดาห์แล้ว
- สาเหตุโดยตรงที่ทำให้เข้าเว็บไซต์หลายแห่งไม่ได้ ดูเหมือนจะเป็นพฤติกรรมที่ Cloudflare พยายามดึงลายนิ้วมืออุปกรณ์ผ่าน WebGL
- คำอธิบายของ Turnstile ระบุว่าใช้ การเก็บลายนิ้วมือเบราว์เซอร์ เพื่อตรวจสอบว่าเป็นมนุษย์หรือไม่ และเครื่องมือสำหรับบล็อกหรือสุ่มข้อมูลอาจทำให้ดูเหมือนบอต
- WebKit บล็อกความสามารถลักษณะนี้มาหลายปีแล้ว และดูเหมือนจะไม่ใช่ตัวเลือกความเป็นส่วนตัวที่ผู้ใช้ปิดได้ง่าย
- คาดว่า Safari อาจได้รับการยกเว้น ขณะที่ เบราว์เซอร์ WebKitGTK ทั้งหมด ถูกบล็อก และผู้ใช้ Firefox ที่เปิดการป้องกันความเป็นส่วนตัวก็อาจได้รับผลกระทบด้วย
การตรวจสอบ Turnstile ที่วนซ้ำบน WebKitGTK
- การตรวจสอบอุปกรณ์ “Verify you're human” ของ Cloudflare Turnstile วนซ้ำไม่สิ้นสุดบน เบราว์เซอร์ที่ใช้ WebKitGTK มาประมาณหนึ่งสัปดาห์แล้ว และทำให้ไม่สามารถเข้าเว็บไซต์หลายแห่งได้
- สาเหตุของการบล็อกการเข้าถึง ดูเหมือนจะเป็นพฤติกรรมที่ Cloudflare พยายามดึงลายนิ้วมืออุปกรณ์ผ่าน WebGL
- ข้อความแนะนำของ Turnstile ระบุว่าใช้การเก็บลายนิ้วมือเบราว์เซอร์เพื่อตรวจสอบว่าเป็นมนุษย์หรือไม่
- เครื่องมือความเป็นส่วนตัวที่บล็อกหรือสุ่มข้อมูลลายนิ้วมือ อาจทำให้เบราว์เซอร์ดูเหมือนบอตที่พยายามซ่อนตัวตน
- WebKit บล็อกความสามารถลักษณะนี้มาหลายปีแล้ว และดูเหมือนจะไม่ใช่ฟีเจอร์ความเป็นส่วนตัวที่ปิดใช้งานได้ง่าย
- ขณะที่คาดว่า Cloudflare อาจยกเว้นให้ Safari แต่เบราว์เซอร์ WebKitGTK ทั้งหมดกลับอยู่ในสภาพถูกบล็อก
พฤติกรรมการป้องกันที่เกี่ยวข้องของ Firefox
- การป้องกันการเก็บลายนิ้วมือ WebGL ของ Mozilla Firefox มีประเด็น Bugzilla#1916271: Gecko reveals sanitized GPU Characteristics; webkit and blink return hardcoded strings for all users
privacy.resistfingerprintingจะไม่ถูกเปิดใช้งานแม้เลือก “Strict” หรือ “Enhanced Privacy Protection” ในการตั้งค่า- ผู้ใช้ Firefox ที่เน้นความเป็นส่วนตัวและเปิด
privacy.resistfingerprintingเอง อาจมีโอกาสไม่ผ่านการตรวจสอบอุปกรณ์ของ Cloudflare ในอนาคต
2 ความคิดเห็น
ความคิดเห็นจาก Lobste.rs
ดูเหมือนบทความจะเอาหลายประเด็นเกี่ยวกับ Firefox มาปนกัน จากมุมของคนที่เคยอยู่ในทีมที่ทำงานนี้โดยตรง การป้องกัน fingerprinting ของ Firefox ทำงานหลายแบบ
อย่างแรก Firefox จำกัดข้อมูลในสตริง vendor/renderer ของ WebGL รวมถึงสตริงที่เรียกว่า “unmasked” ด้วย โค้ดตัวอย่างที่ตรวจสอบได้โดยตรง Fatih โพสต์ไว้ใน comment 14 คำกล่าวอ้างว่ามันทำอะไรพังนั้นผิดทั้งหมด
อย่างที่สอง Firefox สุ่มผลลัพธ์ของ canvas output ด้วย ถ้าลองเรียก
toDataURL()กับ canvas เดิม จะเห็นว่าค่าที่คืนกลับมาต่างกันเล็กน้อยในแต่ละเซสชัน เช่น ทดสอบได้ระหว่างโหมดท่องเว็บแบบส่วนตัว/โหมดปกติ หรือใน container tabs คนละตัวอย่างที่สาม ฟีเจอร์ข้างต้นและ ฟีเจอร์ป้องกัน fingerprinting รุ่นใหม่ ถูกออกแบบจากการวิเคราะห์เชิงประจักษ์ เพื่อให้ทำงานได้มีประสิทธิภาพโดยไม่ทำเว็บพัง ส่วนใหญ่เปิดใช้เป็นค่าเริ่มต้นอยู่แล้ว และถ้าต้องการมากกว่านั้นก็เปลี่ยน “Enhanced Tracking Protection” เป็น strict ในการตั้งค่าได้
อย่างที่สี่ โหมด
resistFingerprintingไม่มีอยู่ในหน้าการตั้งค่าและเข้าถึงได้ผ่านabout:configเท่านั้น เพราะ รู้กันอยู่ว่ามันอาจทำเว็บพังได้ ยังคงเก็บไว้เพื่อ Tor Browser ซึ่งเป็น Firefox fork แต่ส่วนตัวคิดว่าการป้องกันฝั่ง Enhanced Tracking Protection ดีกว่ามากไม่ได้จะปกป้องการทำ fingerprinting แต่เพราะเป็นส่วนหนึ่งของงานตอนนี้เลยสนใจ เครื่องมือบล็อกบอต
เป้าหมายของ Cloudflare กับ Turnstile น่าจะเป็นการทำวิดเจ็ตป้องกันบอตที่ไม่ต้องให้มนุษย์มาแก้แคปช่า น่าจะใช้ fingerprinting เพื่อสังเกตพฤติกรรมข้ามหลายเว็บไซต์แล้วปล่อยให้ผู้ใช้ส่วนใหญ่ผ่านไป อยากรู้ว่าเข้าใจถูกไหม
ถ้าไม่มี fingerprinting จะยังทำวิดเจ็ตที่ไม่ต้องแก้แคปช่าได้ไหม? หรือจริง ๆ มันเป็นไปได้หรือเปล่า? เคยได้ยินเหมือนกันว่าการ bypass Turnstile ไม่ได้ยากขนาดนั้น :tm:. วิดเจ็ตบล็อกบอตทั้งหมดสุดท้ายแล้วก็เป็น security through obscurity กันหมดหรือเปล่า?
การไล่ดูว่ามันไปมาหลายเว็บไซต์หรือไม่นั้นไม่ค่อยสำคัญนัก ประเด็นหลักคือจับให้ได้ว่าเข้ามาที่เว็บไซต์เดิมหลายครั้งหรือไม่
ถ้าจะทำวิดเจ็ตแบบไม่ต้องแคปช่าโดยไม่ใช้ fingerprinting ก็ ใช้ hardware attestation ได้เหมือนกัน แต่ ทุกคนเกลียดมัน Apple มี hardware attestation ให้ และเพราะ Cloudflare ใช้มันบน Safari ทำให้ Safari ยังผ่านได้แม้จะมีการสุ่ม canvas ไม่ใช่ว่า Cloudflare ตั้งข้อยกเว้นให้ Safari อย่างที่บล็อกโพสต์นี้บอก
จะบังคับให้ทำ proof of work ก็ได้ แต่ต้องยอมรับการกีดกันผู้ใช้เว็บจำนวนมากที่มีแค่โทรศัพท์ Android ราคาถูก และยังต้องเป็นกรณีที่มูลค่าของพฤติกรรมบอตแต่ละครั้งต่ำจนผู้ควบคุมบอตไม่คุ้มจะจ่ายต้นทุน proof of work เงื่อนไขแบบนี้บางครั้งก็พอได้ แต่ไม่เหมาะกับเว็บอย่างร้านค้าออนไลน์หรือธนาคาร
นอกนั้นก็ไม่มีทางออกดี ๆ เท่าไร ฉันไม่ค่อยรู้เรื่อง Turnstile แต่ผลิตภัณฑ์ของบริษัทที่ฉันเคยอยู่ค่อนข้างยากจะ bypass ในสเกลใหญ่ อย่างไรก็ตาม ถ้าไม่ใช่สเกลใหญ่ เราก็ไม่ได้ตั้งใจทำให้ยากมาก และถ้า Cloudflare จะเลือกแบบเดียวกันก็คงไม่น่าแปลกใจ
เป้าหมายของวิดเจ็ตบล็อกบอตทั้งหมดไม่ใช่ทำให้บอตเป็นไปไม่ได้ แต่คือทำให้การโจมตีเว็บไซต์ด้วยบอต ไม่คุ้มในเชิงเศรษฐกิจ เพราะงั้นเกมมันต่างจากงานไซเบอร์ซีเคียวริตีแบบอื่น และความคลุมเครือก็ใช้ได้ผลพอสมควร เป้าหมายคือทำให้อีกฝ่ายต้องแบกต้นทุนเพิ่มต่อไปเรื่อย ๆ เมื่อเวลาผ่านไป
canvas/webglสำหรับเว็บสแครปเปอร์นั้นในทางปฏิบัติเป็น ปัญหาที่แก้ได้แล้ว ถึงขั้นเป็นคำถามสัมภาษณ์งานสายเว็บสแครปปิงด้วยวิธีแก้ที่พบบ่อยคือดึงคำสั่งวาดภาพออกมา จะใช้เบราว์เซอร์ดัดแปลงที่ dump คำสั่งได้ หรือแกะการ obfuscate ของสคริปต์เพื่อเอามาก็ได้
จากนั้นก็นำสคริปต์ canvas/webgl ที่ดึงมาได้ไปวางบนเว็บไซต์ของตัวเอง เพื่อสร้าง fingerprint สำหรับเอาไปใช้ซ้ำกับบอตจากผู้เยี่ยมชม
วิธีนี้ค่อนข้างทนทาน เพราะสคริปต์ fingerprinting แบบนี้แทบไม่เปลี่ยนเลย เนื่องจากถ้าเปลี่ยน ฐานข้อมูลจับคู่ canvas → GPU/vendor/browser/OS จะใช้ไม่ได้ทันที
สรุปคือมันเป็นอีกกรณีหนึ่งที่ทำให้ผู้ใช้ทั่วไปลำบากขึ้นเท่านั้น ขณะที่เว็บสแครปเปอร์ตัวจริงจังรู้ กลยุทธ์ bypass หลายแบบกันอยู่แล้ว
ความเห็นจาก Hacker News
เป็นที่รู้กันว่า Cloudflare ใช้ การเก็บลายนิ้วมือเบราว์เซอร์ เพื่อตรวจจับสแครปเปอร์ ตัวอย่างเช่น เทียบลายนิ้วมือ JA3 กับ user agent เพื่อบล็อกพวกอย่าง cURL แต่อนุญาต OkHttp (ไคลเอนต์ Android) แม้ว่าจะปลอมแปลงได้ง่ายด้วยแพ็กเกจอย่าง CycleTLS [1]
ไม่อยากออกมาปกป้องมันนัก เพราะมันเอา “การป้องกันบอต” ไปขวางอินเทอร์เน็ตส่วนใหญ่มหาศาล แต่ถ้าไม่ใช้ proof-of-work (PoW) การเก็บลายนิ้วมือก็อาจเป็นวิธีที่ใช้ได้จริง และผลก็คือความเป็นส่วนตัวของทุกคนที่เกี่ยวข้องพังยับทั้งหมด
Cromite ซึ่งเป็นฟอร์กของ Chromium สำหรับ Android ที่เน้นความเป็นส่วนตัว มีปัญหากับ Cloudflare Turnstile มาโดยตลอด [2] เพราะ Cloudflare เก็บลายนิ้วมือหลายรูปแบบเพื่อให้ผ่านแชลเลนจ์
ถ้าจะหาทางแก้ ต้องเข้าร่วมโปรแกรม Cloudflare Browser Developer ซึ่งต้องเซ็น NDA และดูสมเหตุสมผลแล้วที่ผู้ดูแลโครงการปฏิเสธ
ถ้าอยากเห็นว่า Cloudflare ขุดลึกเรื่องลายนิ้วมือเบราว์เซอร์แค่ไหน ให้ดูใน issue [2] ว่าต้องปิดแฟลกอะไรบ้างเพื่อให้ผ่านแชลเลนจ์ อย่างน้อย Cloudflare ก็น่าจะยืดหยุ่นพอที่จะ เปลี่ยนไปใช้ proof-of-work แทนการบล็อกคนไม่ให้ส่งฟอร์มหรือเข้าเว็บไซต์ไปเลย
[1]: https://github.com/Danny-Dasilva/CycleTLS
[2]: https://github.com/uazo/cromite/issues/2365
การให้ชื่อเสียงกับ IP บ้านพักอาศัยและช่วง IP เชิงพาณิชย์อาจเป็นอีกวิธีหนึ่งที่จะให้ผลตามต้องการ มันจะทำให้ผู้ให้บริการระวังการใช้งาน IP ในทางที่ผิดมากขึ้นมาก แต่ถ้าเป็นแบบนั้น ธุรกิจ DDoS ของทั้งฝั่งโจมตีและป้องกันก็อาจพังไปพร้อมกัน
น่าขันที่มีหลายบริษัทลงทุนทั้งสร้างบอตของตัวเอง และลงทุนกับวิธีบล็อกบอตของบริษัทอื่นในเวลาเดียวกัน
ให้โหลด 5W เป็นเวลา 2 วินาทีก็เท่ากับ 0.002Wh และเพราะสมาร์ตโฟนก็ต้องผ่านได้ จึงไม่สามารถบังคับ proof-of-work ที่กินเวลาหลายสิบวินาทีได้ ต่อให้ตรวจวันละ 8 พันล้านครั้งตลอด 1 ปีก็ยังแค่ 8GWh
มีเหตุผลที่
privacy.resistfingerprintingไม่เปิดแม้จะเลือก “Strict” “Enhanced Privacy Protection” ฉันเคยเปิดใช้อยู่พักใหญ่ แต่เว็บไซต์พังแปลก ๆ จนต้องปิดตลอดและต้องเพิ่มทางอ้อมเลี่ยงด้วยการจัดการเขตเวลา ของบางเว็บไซต์เพี้ยนจนเกือบพลาดนัดไปหลายครั้ง ถ้าจะบอกผู้ใช้ว่า Firefox ไม่ได้พัง ก็คงต้องมีแบนเนอร์ถาวรประมาณว่า “ถ้าเว็บไซต์พังหรือมีอาการเพี้ยนแปลก ๆ หรือเวลาในคอมพิวเตอร์ผิด หรือฟอนต์ดูแปลก หรือวิดีโอบางครั้งไม่เล่น ให้กดที่นี่เพื่อปิดการป้องกันลายนิ้วมือ”
ที่น่าสนใจคือ Turnstile พังเมื่อใช้
resistfingerprintingแต่ใช้ได้กับfingerprintingProtectionดูเหมือนอย่างหลังจะคำนึงถึงสถานการณ์ห่วย ๆ แบบนี้ไว้ในโหมด Strict เราคาดได้ระดับหนึ่งว่าเว็บอาจพัง แต่ไม่ได้คาดว่าจะยังเปิดช่องทางติดตามไว้กว้างขนาดนั้น มันให้ความรู้สึกเหมือนหลอกลวง
ฉันดูแลเบราว์เซอร์ส่วนน้อยตัวหนึ่งอยู่[0] และตั้งแต่ไม่กี่สัปดาห์ก่อน ผู้ใช้หลายคนก็เจอปัญหานี้[1] ตอนนี้ยังไม่คิดว่าเป็นบั๊กของเบราว์เซอร์ แต่แน่นอนว่าอาจมีบั๊กที่เกี่ยวข้องอยู่ และอยากให้มีคนช่วยดูมากขึ้น จึงต้องการไอเดียและความช่วยเหลือในการปรับปรุงหรือบรรเทาสถานการณ์
[0]: https://konform-browser.codeberg.page/
[1]: ไม่รู้ว่าเป็นคนส่วนใหญ่หรือทั้งหมด ตอนนี้อาศัยรายงานจากผู้ใช้และการทดสอบของตัวเองเพราะไม่มี telemetry
“ถ้าคุณโดนจับได้ว่าปลอมตัว แปลว่าคุณปลอมตัวยังไม่แนบเนียนพอ”
สงครามกับบอต อันโง่เขลานี้กำลังพาอินเทอร์เน็ตสู่ความเสื่อม และสุดท้ายจะทำให้มันกลายเป็นสวนปิดอีกแห่งที่อนุญาตเฉพาะเอเจนต์ที่ “ได้รับการรับรอง” และเป็นศัตรูกับผู้ใช้ อย่าไปหลงเชื่อคำพูดไร้สาระเรื่อง “AI scraper” มันเป็นแค่เครื่องมือสร้างความยินยอมเท่านั้น
Google กับ Cloudflare ตกลงอะไรกันหรือเปล่าว่าจะทำให้ เบราว์เซอร์ที่ไม่ใช่ Chrome ใช้งานยากขึ้น? แรงกดดันให้ใช้ Chrome มีแต่เพิ่มขึ้น และสิ่งที่ทำได้ในการกรองโฆษณาบน Chrome ก็ลดลงเรื่อย ๆ
ถ้าคุณซ่อนอะไรบางอย่าง คุณก็จะถูกจัดเข้ากลุ่ม “เอเจนต์ที่มีเหตุผลจะต้องซ่อน” โดยอัตโนมัติ
พูดให้ชัด นี่แหละคือปัญหาหลัก เมื่ออินเทอร์เน็ตจำนวนมากขนาดนั้นวิ่งผ่าน Cloudflare ก็ควรมี สัญญาณทางเลือก ที่เพียงพอในการแสดงว่าคุณไม่ใช่ผู้ประสงค์ร้าย มากกว่าจะยึดติดกับสัญญาณใดสัญญาณหนึ่ง
อย่างไรก็ตาม เพราะแทบไม่มีผู้ใช้ในระบบที่ใช้การตั้งค่าเดียวกัน อาจต้องใช้เวลาอีกนานมากกว่าจะได้วิธีแก้จริง
พวกเขาพูดว่า “ดูเหมือนคุณพยายามซ่อนตัวตน” แต่แต่แรกพวกเขาก็ไม่มีสิทธิ์จะเรียกร้องสิ่งนั้นอยู่แล้ว
ฉันไม่เคยรู้จัก
privacy.resistfingerprintingมาก่อน จากนี้ไปฉันคงปล่อยให้ Cloudflare Turnstile ล้มเหลวทั้งหมดการตั้งค่า
privacy.resistfingerprintingมีไว้สำหรับ Tor Browserมันก็เปิดเป็นค่าเริ่มต้นเช่นกันใน Konform Browser และ Mullvad Browser ซึ่งนำแพตช์ด้านความเป็นส่วนตัวและความปลอดภัยของ Tor Browser มาใช้จำนวนมาก
ฉันชอบคำกล่าวในแวดวงอาชญากรรมที่ว่า ถ้าประชากร X% กำลังละเมิดกฎหมายข้อหนึ่งอยู่ กฎหมายข้อนั้นก็ควรถูกยกเลิก ยาเสพติดเพื่อสันทนาการเป็นตัวอย่างที่ชัดเจน
ถ้า การเรนเดอร์ canvas แบบสุ่ม ถูกจัดการว่าเป็นพฤติกรรมบอต แต่ตอนนี้ทุกคนที่ใช้ Firefox ก็ทำกันหมดแล้ว บางที Cloudflare ก็ควร “ทำให้ถูกกฎหมาย” ไปเลยหรือเปล่า