- Một script tự động vượt qua quy trình xác minh độ tuổi dưới dạng người trưởng thành trên nhiều nền tảng
- Khi dán và chạy mã trong console của Discord, nó sẽ tự động gửi yêu cầu API
/age-verification/verify và chuyển đến trang hoàn tất xác minh
- Trên các nền tảng khác như Twitch, Kick, Snapchat, cũng có thể xác minh theo cùng cách bằng cách nhập URL mã QR
- Công cụ này lợi dụng cấu trúc xử lý dữ liệu khuôn mặt của hệ thống k-id để tạo ra metadata hợp lệ mà không cần khuôn mặt thật
- Công cụ được tạo ra để đối phó với xu hướng mở rộng xác minh độ tuổi toàn cầu bằng cách sao chép mã hóa AES-GCM và cấu trúc dữ liệu dự đoán để vượt qua bước kiểm tra
Quy trình xác minh trên Discord
- Cách làm là dán và chạy một script cụ thể trong developer console (F12) của ứng dụng web Discord
- Script sẽ trích xuất webpack module cache của Discord, tìm API client nội bộ và gửi yêu cầu đến endpoint
/age-verification/verify
- URL
verification_webview_url nhận được từ kết quả yêu cầu sẽ được chuyển hướng đến age-verifier.kibty.town
- Người dùng chỉ cần giải captcha rồi chờ đến khi trang hiển thị “success” là hoàn tất xác minh
- Qua quy trình này, tài khoản Discord sẽ được hiển thị ở trạng thái đã xác minh người trưởng thành
Cách xác minh trên các nền tảng khác (Twitch, Kick, Snapchat...)
- Trên trang xác minh độ tuổi của từng nền tảng, chọn tùy chọn ‘selfie’ rồi sao chép URL của mã QR đang hiển thị
- Dán URL đó vào ô nhập trên
age-verifier.kibty.town rồi nhấn nút ‘verify’
- Sau đó quy trình xác minh sẽ tự động diễn ra và hiển thị thông báo thành công
Nguyên lý hoạt động
- Hệ thống xác minh độ tuổi k-id mà Discord sử dụng không gửi video khuôn mặt lên máy chủ, mà chỉ gửi metadata liên quan đến khuôn mặt và chi tiết quá trình xử lý
- Nhờ cấu trúc này, nếu thao túng và gửi metadata trông hợp lệ, vẫn có thể vượt qua xác minh mà không cần khuôn mặt thật
- Trước đây, sau khi k-id verifier của amplitudes được công khai, đối tác faceassure đã siết chặt việc kiểm tra, nhưng công cụ lần này tiếp tục vượt qua bằng một phương thức mới
Các bước kỹ thuật chi tiết
- Bước 1: Sao chép tham số mã hóa
- Khi so với yêu cầu hợp lệ, có thể thấy thiếu các giá trị
encrypted_payload, auth_tag, timestamp, iv
- Với mã hóa AES-GCM, khóa được tạo bằng cách dẫn xuất
nonce + timestamp + transaction_id qua HKDF(SHA-256)
- Tái tạo cùng cấu trúc đó để sinh ra các tham số còn thiếu
- Bước 2: Thao túng dữ liệu dự đoán
- Ngay cả khi sao chép hoàn hảo phần mã hóa vẫn thất bại, từ đó xác nhận rằng việc kiểm tra phụ thuộc vào ‘prediction arrays’ (outputs, primaryOutputs, raws)
- Dựa trên dữ liệu
raws, dùng z-score để loại bỏ ngoại lệ rồi tạo outputs và primaryOutputs
- Ngoài ra còn có các điều kiện sau được kiểm tra
- Giá trị
xScaledShiftAmt, yScaledShiftAmt chỉ có thể thuộc một trong hai trường hợp
- Tên media (camera) phải khớp với danh sách thiết bị thực tế
- Thời điểm hoàn tất trạng thái phải khớp với timeline
- Mã nguồn mở triển khai toàn bộ quy trình này đã được công bố và bất kỳ ai cũng có thể kiểm tra
Công bố và bối cảnh thực hiện
- Tác giả gửi lời cảm ơn tới xyzeva, Dziurwa và amplitudes, người từng thực hiện các công việc liên quan trước đó
- Bài viết cho biết Discord dự kiến triển khai toàn diện xác minh độ tuổi toàn cầu vào tháng 3, nên tác giả đã khám phá một phương pháp mới để vượt qua bước kiểm tra tương ứng
1 bình luận
Ý kiến trên Hacker News
Cách chắc ăn thật sự là tạo đầu vào video nhân tạo thay vì dùng webcam thật
Tôi nghĩ không nền tảng nào có thể chặn được chuyện này
Kể cả nếu nền tảng yêu cầu đầu vào camera khó giả mạo như trên điện thoại, chỉ cần đặt camera trước một màn hình độ phân giải cao là xong
Trò mèo vờn chuột này sẽ không kéo dài lâu
Xác minh tuổi bằng video selfie không hoàn hảo thực ra lại có lợi cho tất cả
Người có đầu óc bình thường không phải tải bằng lái hay hộ chiếu lên, còn nền tảng thì dễ giữ chân người dùng hơn
Các trang web khiêu dâm có thể tạo tài khoản người dùng để tăng theo dõi và doanh thu quảng cáo
Chính trị gia có thể tuyên bố rằng họ đã “triển khai chính sách giới hạn độ tuổi”, còn phụ huynh thì yên tâm rằng con mình không xem nội dung khiêu dâm
Rốt cuộc đây là một cấu trúc đôi bên cùng có lợi
Có vẻ các phương thức xác minh như thế này cuối cùng cũng sẽ đi theo hướng đó
Có lẽ một trong những lý do Google thúc đẩy ứng dụng chỉ dành cho Play Store cũng là để tạo ra chuỗi phần mềm có thể xác minh kiểu này
Cuối cùng đây chỉ là vấn đề gạt một công tắc
Kết hợp với lập bản đồ 3D thì mánh chiếu một màn hình đơn giản sẽ không còn hiệu quả
Vấn đề là các dịch vụ xác minh tuổi như Discord không thật sự nghiêm túc trong việc thử làm điều đó
Tôi đơn giản là sẽ không chơi trò đó nữa và ngừng dùng nền tảng
Cách này có ba vấn đề
Đây là một ví dụ tuyệt vời về reverse engineering, cho thấy việc xác minh mà không xâm phạm quyền riêng tư khó đến mức nào
Vì mã đã được công khai nên vấn đề chạy mã tùy ý (#3) không áp dụng ở đây
Nếu doanh nghiệp phản ứng bằng cách dùng phương pháp xâm nhập hơn (#2), người dùng luôn có thể chuyển sang nền tảng khác
Tôi thấy đây là một ý tưởng khá thông minh
Có vẻ Discord đã nới lỏng xác minh tuổi chỉ đủ để có thể nói với cơ quan quản lý rằng họ đang “làm gì đó để bảo vệ trẻ em”
Nhưng nếu chính phủ giám sát nghiêm túc thì cách tiếp cận này sẽ không tồn tại lâu
Một số quốc gia đã yêu cầu xác thực sinh trắc học mạnh hơn, và một số dịch vụ đang chuyển sang xác minh dựa trên ứng dụng di động
Những mẹo dựa trên JavaScript đơn giản sẽ ngày càng bớt hiệu quả
Tôi khuyên nên bọc đoạn mã thực thi trong một IIFE
Trên Safari của macOS, top-level await không được hỗ trợ nên nó không chạy
Xem thêm tại caniuse.com/wf-top-level-await
Nó đã tụt hậu khoảng 5 năm rồi
Tôi thử thì bị chuyển hướng tới https://age-verifier.kibty.town/webview?url=null
và hiện thông báo
{"error":"error parsing webview url"}Có vẻ tài khoản Discord của tôi đang nằm trong thử nghiệm A/B nên dùng nhà cung cấp xác minh khác là Persona
Tìm kiếm sẽ thấy thêm nhiều thông tin
Nó thật sự hoạt động
Tôi nhận được thông báo từ Discord rằng mình đã được “phân loại vào nhóm người lớn”
(thuyết minh) Và ngay khoảnh khắc đó, tôi nhận ra tài khoản của mình đã bị hack ;)
Hy vọng tài khoản 11 năm tuổi của tôi sẽ không gặp vấn đề gì, nhưng nếu họ đòi khuôn mặt hay ID thì tôi sẽ xóa tài khoản luôn
Tôi không hiểu vì sao thế hệ trẻ lại bám chặt vào những dịch vụ thù địch với họ như vậy
Có phải sự tiện lợi của việc ở lại nền tảng mình ghét lớn hơn công sức tìm giải pháp thay thế không?
Nhiều người trẻ ngày nay thậm chí còn xa lạ với terminal hay khái niệm đường dẫn tệp
Họ có thể tìm kiếm, nhưng tự thiết lập một giải pháp thay thế lại là chuyện khác
Quan trọng hơn, họ còn thiếu nhận thức rằng giải pháp thay thế có thể tồn tại
Những nền tảng mở như Matrix vẫn còn thiếu tính năng, và Discord hiện là lựa chọn ít tệ nhất
Bạn bè tôi ở đó nên tôi cũng ở đó
Mỗi lần chuyển nền tảng là thành viên giảm và cộng đồng tan rã
“Chút ít công sức” trên thực tế lại là giết chết cả cộng đồng
Dù dùng nền tảng khác thì cuối cùng cũng chỉ còn một mình
Gần như không thể khiến mọi người chuyển đi cùng lúc
Tôi đã qua captcha trên Discord, nhưng
lại hiện lỗi
{"error":"failed to execute k-id privately action (status=404)"}Tôi rõ ràng là người trưởng thành, nên quy trình này thật vô lý
Có bị chặn tôi cũng không quan tâm
Tóm tắt tin liên quan
Trò mèo vờn chuột của xác minh tuổi kỹ thuật số tạo ra gánh nặng quản lý khổng lồ
Nếu có thể bị vượt qua dễ dàng như vậy thì các nền tảng chỉ đang tích vào ô kiểm tuân thủ quy định,
còn nền tảng niềm tin thực tế thì cực kỳ mong manh
Nhưng doanh nghiệp không thích vì họ không thể thu được dữ liệu người dùng trưởng thành đã được xác minh
Xem thêm tại blog Age Assurance Europe của Google
Mục tiêu của những hệ thống như vậy không phải là chặn tuyệt đối, mà là thêm ma sát để công chúng không thể dễ dàng vượt qua