- Xác minh thiết bị “Verify you're human” của Cloudflare Turnstile đã lặp vô hạn trên các trình duyệt dựa trên WebKitGTK từ khoảng một tuần trước
- Nguyên nhân trực tiếp khiến nhiều website bị chặn truy cập dường như là hành vi Cloudflare cố lấy dấu vân tay thiết bị thông qua WebGL
- Thông báo của Turnstile cho biết họ dùng thu thập dấu vân tay trình duyệt để xác minh người dùng là con người, và các công cụ chặn hoặc ngẫu nhiên hóa có thể khiến trình duyệt trông giống bot
- WebKit đã chặn loại chức năng này suốt nhiều năm, và dường như đây không phải là một tùy chọn quyền riêng tư mà người dùng có thể dễ dàng tắt
- Trong khi Safari được cho là có ngoại lệ, toàn bộ các trình duyệt WebKitGTK đều bị chặn, và người dùng bật bảo vệ quyền riêng tư trên Firefox cũng có thể bị ảnh hưởng
Turnstile xác minh lặp lại trên WebKitGTK
- Xác minh thiết bị “Verify you're human” của Cloudflare Turnstile đã lặp vô hạn trên các trình duyệt dựa trên WebKitGTK từ khoảng một tuần trước, khiến việc truy cập nhiều website bị chặn
- Nguyên nhân của việc chặn truy cập dường như là hành vi Cloudflare cố lấy dấu vân tay thiết bị thông qua WebGL
- Dòng thông báo của Turnstile cho biết họ dùng thu thập dấu vân tay trình duyệt để xác minh người dùng là con người
- Các công cụ quyền riêng tư chặn hoặc ngẫu nhiên hóa việc lấy dấu vân tay có thể khiến trình duyệt trông như bot đang cố che giấu danh tính
- WebKit đã chặn loại chức năng này suốt nhiều năm, và dường như đây không phải là một tính năng quyền riêng tư có thể dễ dàng vô hiệu hóa
- Trong khi Cloudflare được cho là đã tạo ngoại lệ cho Safari, toàn bộ các trình duyệt WebKitGTK lại rơi vào trạng thái bị chặn
Cơ chế bảo vệ liên quan trên Firefox
- Cơ chế bảo vệ chống lấy dấu vân tay WebGL của Mozilla Firefox có vấn đề Bugzilla#1916271: Gecko reveals sanitized GPU Characteristics; webkit and blink return hardcoded strings for all users
privacy.resistfingerprintingkhông được kích hoạt ngay cả khi chọn “Strict” và “Enhanced Privacy Protection” trong phần cài đặt- Người dùng Firefox ưu tiên quyền riêng tư tự bật
privacy.resistfingerprintingcó thể sẽ không vượt qua được bước xác minh thiết bị của Cloudflare trong tương lai
2 bình luận
Ý kiến trên Lobste.rs
Có vẻ bài viết đã trộn lẫn nhiều thứ liên quan đến Firefox. Với tư cách là người từng ở trong nhóm trực tiếp làm việc này, tôi có thể nói rằng cơ chế phòng vệ trước fingerprinting của Firefox hoạt động theo nhiều cách
Thứ nhất, Firefox hạn chế thông tin trong chuỗi WebGL vendor/renderer, bao gồm cả chuỗi gọi là “unmasked”. Mã ví dụ có thể tự kiểm tra đã được Fatih đăng ở comment 14. Nói rằng họ đã làm hỏng gì đó là hoàn toàn sai
Thứ hai, Firefox cũng ngẫu nhiên hóa đầu ra canvas. Nếu gọi
toDataURL()trên cùng một canvas, giá trị trả về sẽ hơi khác nhau giữa các phiên. Ví dụ có thể thử trong chế độ riêng tư/chế độ thường hoặc giữa các container tabs khác nhauThứ ba, các tính năng trên cùng với các cơ chế chống fingerprinting gần đây khác được xây dựng dựa trên phân tích thực nghiệm để vừa hoạt động hiệu quả vừa không làm hỏng web. Phần lớn được bật mặc định; nếu muốn mạnh hơn thì có thể chuyển “Enhanced Tracking Protection” sang strict trong phần cài đặt
Thứ tư, chế độ
resistFingerprintingkhông có trong phần cài đặt mà chỉ truy cập được quaabout:config, vì nó được biết là có thể làm hỏng web. Nó vẫn được giữ lại cho Tor Browser, một nhánh của Firefox, nhưng cá nhân tôi thấy các biện pháp bảo vệ trong Enhanced Tracking Protection tốt hơn nhiềuKhông phải tôi đang bênh vực fingerprinting, nhưng vì đây là một phần công việc hiện tại nên tôi quan tâm đến các công cụ chặn bot
Có vẻ mục tiêu của Cloudflare với Turnstile là tạo ra một widget chống bot mà con người không cần giải captcha. Có lẽ họ làm điều đó bằng cách quan sát hành vi trên nhiều site thông qua fingerprinting rồi cho đa số người dùng đi qua; tôi muốn biết hiểu như vậy có đúng không
Liệu có thể tạo một widget không cần giải captcha mà không dùng fingerprinting không? Ngay từ đầu điều đó có khả thi không? Tôi cũng đã nghe nói việc vượt Turnstile không quá khó :tm:. Có phải mọi widget chặn bot cuối cùng đều chỉ là bảo mật dựa trên sự mơ hồ?
Việc người đó đi qua nhiều site không quá quan trọng; mấu chốt là phát hiện họ truy cập lặp lại vào cùng một site
Nếu muốn tạo widget không cần captcha mà không dùng fingerprinting thì attestation phần cứng cũng có thể hoạt động. Nhưng ai cũng ghét nó. Apple có cung cấp attestation phần cứng, và vì Cloudflare dùng nó trên Safari nên Safari vẫn có thể vượt qua dù có ngẫu nhiên hóa canvas. Không phải như bài blog kia nói, rằng Cloudflare dành ngoại lệ cho Safari
Bạn cũng có thể yêu cầu proof of work, nhưng chỉ khi chấp nhận loại bỏ nhiều người dùng web chỉ có điện thoại Android giá rẻ, và khi giá trị của từng hành vi bot đủ thấp để người vận hành bot không có động lực thực hiện proof of work. Những điều kiện này đôi khi đúng, nhưng không phù hợp với các nơi như trang mua sắm hay ngân hàng
Ngoài ra thì không có giải pháp tốt nào. Tôi không rõ lắm về Turnstile, nhưng sản phẩm của công ty tôi từng làm việc ở đó chắc chắn rất khó bị vượt qua ở quy mô lớn. Tuy nhiên khi không ở quy mô lớn thì chúng tôi cũng không cố tình làm cho việc vượt qua trở nên khó, và tôi sẽ không ngạc nhiên nếu Cloudflare cũng đã chọn như vậy
Mục tiêu của mọi widget chặn bot không phải là khiến bot trở nên bất khả thi, mà là khiến việc dùng bot tấn công website trở nên bất khả thi về mặt kinh tế. Vì vậy đây là một trò chơi khác với an ninh mạng kiểu khác, và sự mơ hồ hoạt động khá hiệu quả. Mục tiêu là theo thời gian buộc đối phương phải tiếp tục tốn thêm chi phí
canvas/webglthực tế là bài toán đã được giải đối với dân web scraper. Nó thậm chí còn xuất hiện như câu hỏi phỏng vấn cho các vị trí liên quan đến web scrapingCách giải phổ biến là trích xuất các lệnh vẽ. Có thể dùng trình duyệt đã chỉnh sửa để dump các lệnh, hoặc lấy chúng bằng cách deobfuscate script
Sau đó chỉ cần đưa script canvas/webgl đã trích xuất lên site của mình để tạo fingerprint có thể tái sử dụng cho bot từ khách truy cập
Cách này khá vững chắc. Các script fingerprinting kiểu này hầu như không thay đổi, vì nếu thay đổi thì cơ sở dữ liệu ánh xạ canvas → GPU/vendor/browser/OS sẽ bị vô hiệu hóa
Tóm lại đây lại là một ví dụ khác cho thấy người dùng bình thường chỉ bị làm phiền thêm, còn các web scraper nghiêm túc thì đã biết nhiều chiến lược vượt qua rồi
Ý kiến trên Hacker News
Cloudflare được biết là dùng lấy dấu vân tay trình duyệt để phát hiện scraper. Ví dụ, họ đối chiếu dấu vân tay JA3 với user agent để chặn những thứ như cURL và cho phép OkHttp (client Android), nhưng có thể dễ dàng ngụy trang bằng các gói như CycleTLS [1]
Tôi không muốn bênh vực việc chặn một phần lớn Internet dưới danh nghĩa “chống bot”, nhưng nếu không dùng bằng chứng công việc (PoW) thì lấy dấu vân tay có thể là một cách thực tế, và hệ quả là quyền riêng tư của tất cả những người liên quan bị phá hủy hoàn toàn
Cromite, một bản fork Chromium cho Android chú trọng quyền riêng tư, liên tục gặp vấn đề với Cloudflare Turnstile [2], vì Cloudflare lấy dấu vân tay theo nhiều cách để cho qua thử thách
Muốn giải quyết thì phải tham gia chương trình Cloudflare Browser Developer, nhưng cần ký NDA, và việc người quản lý dự án từ chối có vẻ là hoàn toàn chính đáng
Nếu muốn thấy Cloudflare đào sâu việc lấy dấu vân tay trình duyệt đến mức nào, hãy xem trong issue [2] cần tắt những flag nào để vượt qua thử thách. Ít nhất tôi nghĩ Cloudflare có thể linh hoạt đến mức thay thế bằng bằng chứng công việc thay vì просто chặn người dùng khỏi việc gửi biểu mẫu hay truy cập website
[1]: https://github.com/Danny-Dasilva/CycleTLS
[2]: https://github.com/uazo/cromite/issues/2365
Gán uy tín cho IP dân dụng và dải IP thương mại cũng có thể là một cách khác để đạt kết quả mong muốn. Điều đó sẽ khiến các nhà cung cấp cẩn trọng hơn nhiều với việc lạm dụng IP, nhưng khi ấy các hoạt động DDoS của cả bên tấn công lẫn phòng thủ có thể cùng sụp đổ
Trớ trêu thay, có khá nhiều công ty vừa xây bot của mình vừa đầu tư vào cách chặn bot của công ty khác
Tải 5W trong 2 giây là 0.002Wh, và vì điện thoại thông minh cũng phải vượt qua được nên không thể bắt làm PoW kéo dài hàng chục giây. Kể cả kiểm tra 8 tỷ lần mỗi ngày trong 1 năm thì cũng chỉ là 8GWh
Có lý do khiến
privacy.resistfingerprintingkhông được bật ngay cả khi chọn “Strict” “Enhanced Privacy Protection”. Tôi đã bật nó và dùng lâu rồi, nhưng website bị vỡ kỳ quặc nên cứ phải tắt đi và thêm ngoại lệXử lý múi giờ của một số trang bị lỗi làm tôi suýt lỡ hẹn vài lần. Nếu muốn báo cho người dùng biết không phải Firefox bị hỏng, có lẽ phải có một banner thường trực kiểu như “nếu website bị vỡ, xuất hiện glitch lạ, giờ máy tính bị sai, font kỳ quặc, hoặc video đôi lúc không phát, hãy bấm vào đây để tắt bảo vệ dấu vân tay”
Điều thú vị là Turnstile bị lỗi với
resistfingerprintingnhưng lại hoạt động vớifingerprintingProtection. Có vẻ cái sau đã tính đến kiểu tình huống rác rưởi nàyỞ thiết lập Strict, tôi phần nào kỳ vọng website có thể bị vỡ, nhưng không kỳ vọng các đường theo dõi vẫn còn mở toang. Cảm giác khá lừa dối
Tôi đang duy trì một trình duyệt thiểu số[0], và từ vài tuần trước nhiều người dùng đã gặp vấn đề này[1]. Hiện tôi không nghĩ đây là lỗi trình duyệt, nhưng dĩ nhiên vẫn có thể có bug liên quan; sẽ tốt hơn nếu có thêm nhiều người xem xét, nên tôi cần ý tưởng và hỗ trợ để cải thiện hoặc giảm nhẹ tình hình
[0]: https://konform-browser.codeberg.page/
[1]: Tôi không rõ là đa số hay tất cả. Tôi đang dựa vào báo cáo người dùng và tự kiểm thử vì không có telemetry
“Nếu bị phát hiện là đang ngụy trang thì có nghĩa là bạn ngụy trang chưa đủ gắt.”
Cuộc chiến chống bot ngu ngốc này đang dẫn đến sự suy tàn của Internet, và cuối cùng sẽ biến nó thành thêm một khu vườn đóng kín khác, nơi chỉ các tác nhân thù địch với người dùng nhưng “được phê duyệt” mới được phép. Đừng mắc bẫy mấy lời nhảm về “AI scraper”. Đó chỉ là công cụ để nhào nặn sự đồng thuận
Google và Cloudflare có thỏa thuận gì đó để khiến trình duyệt không phải Chrome khó dùng hơn không? Áp lực phải dùng Chrome ngày càng tăng, còn khả năng chặn quảng cáo trên Chrome thì ngày càng giảm
Nếu bạn cố che giấu điều gì đó thì tự động sẽ bị xếp vào nhóm “tác nhân có lý do để che giấu”
Nói cho rõ thì đó chính là vấn đề cốt lõi. Khi quá nhiều phần của Internet đi qua Cloudflare, cần phải có đủ tín hiệu thay thế để chứng minh bạn không phải tác nhân xấu, mạnh hơn là chỉ dựa vào một tín hiệu cụ thể nào đó
Tuy vậy, vì số người dùng cùng kiểu cấu hình này trong tập người dùng gần như không đáng kể, có thể sẽ mất rất lâu mới có giải pháp thực sự
Họ nói “có vẻ bạn đang cố che giấu danh tính”, nhưng ngay từ đầu họ đã không có quyền đòi hỏi điều đó
Tôi không biết về
privacy.resistfingerprinting, nhưng từ giờ tôi định cứ để tất cả Cloudflare Turnstile đều thất bạiThiết lập
privacy.resistfingerprintinglà dành cho Tor BrowserNó cũng được bật mặc định trên Konform Browser và Mullvad Browser, vốn mang sang rất nhiều bản vá về quyền riêng tư và bảo mật của Tor Browser
Tôi thích câu châm ngôn trong lĩnh vực tội phạm rằng nếu X% dân số đang vi phạm một luật nào đó thì luật đó nên bị bãi bỏ. Ma túy giải trí là ví dụ rõ ràng
Nếu việc xử lý canvas ngẫu nhiên bị coi là hành vi bot, mà giờ tất cả người dùng Firefox đều làm vậy, thì có lẽ Cloudflare cũng nên просто “hợp pháp hóa” nó chăng