WebGL (Web Graphics Library) — là công nghệ mạnh mẽ để render đồ họa 3D trong trình duyệt, sử dụng khả năng của bộ xử lý đồ họa (GPU). Không giống như Canvas, WebGL không chỉ cho phép làm việc với đồ họa 2D mà còn mở ra những chân trời mới cho các nhà phát triển web về vẽ và tính toán 3D trên GPU. Nhờ khả năng tạo ra các kết quả độc đáo, WebGL đã tìm thấy ứng dụng của mình trong các hệ thống chống gian lận, nơi mà các khả năng của nó giúp theo dõi và xác định thiết bị của người dùng thông qua dấu vân tay kỹ thuật số độc nhất. #### Lịch sử phát triển và mục đích của WebGL WebGL được phát triển như một phần bổ sung cho Canvas và lần đầu tiên được tổ chức Khronos Group giới thiệu vào năm 2011. Là tiêu chuẩn mở để render đồ họa trên các trang web, WebGL cho phép từ bỏ các plugin bên thứ ba như Flash hoặc Java, điều này đã tăng cường đáng kể hiệu suất và bảo mật cho các ứng dụng web. WebGL mở rộng khả năng của HTML5 và JavaScript bằng cách thêm hỗ trợ cho render 3D và cải thiện tương tác với GPU. Điều này làm cho nó trở nên hữu ích không chỉ cho trò chơi, hình ảnh hóa và nghiên cứu khoa học, mà còn cho các hệ thống chống gian lận, nơi mà WebGL có thể giúp duy nhất hóa thiết bị người dùng qua “dấu vân tay đồ họa”. #### Các khả năng công nghệ của WebGL WebGL cung cấp cho các nhà phát triển một loạt công cụ độc đáo để tạo ra đồ họa phức tạp: - Làm việc với đồ họa 3D. WebGL hỗ trợ vẽ các mô hình ba chiều phức tạp và kết cấu, sử dụng tăng tốc phần cứng. Điều này cho phép tạo ra các đối tượng hình ảnh thực tế với hiệu suất cao. - Truy cập vào shaders. WebGL sử dụng shaders (các chương trình thực hiện bởi GPU), cho phép chi tiết hóa việc hiển thị đối tượng, tạo ra các hiệu ứng kết cấu phức tạp và chất lượng đồ họa cao hơn. - Hoạt ảnh và tương tác. Khả năng của WebGL cho phép xây dựng các ứng dụng web động, hình ảnh hóa dữ liệu khoa học và tạo ra các mô hình phức tạp như thế giới ảo và các mô phỏng tương tác. Những đặc điểm này làm cho WebGL trở thành công cụ hữu ích trong nhiều lĩnh vực khác nhau, đồng thời là trợ thủ đắc lực trong các hệ thống chống gian lận để đảm bảo tính độc đáo và ngăn chặn gian lận. WebGL trong hệ thống chống gian lận: bảo vệ khỏi kẻ gian Các hệ thống chống gian lận hiện đại sử dụng dấu vân tay đồ họa WebGL để nhận dạng thiết bị. Không giống như Canvas, dấu vân tay WebGL không chỉ dựa trên việc render pixel mà còn phụ thuộc vào GPU và các tính năng được trình duyệt hỗ trợ. Điều này giúp các hệ thống chống gian lận tạo ra dấu vân tay độc nhất cho mỗi thiết bị và phát hiện hành vi đáng ngờ. WebGL giúp nhận dạng người dùng như thế nào? Khi render các đối tượng trên WebGL, các thiết bị khác nhau có thể tạo ra những khác biệt nhỏ trong hình ảnh do đặc điểm phần cứng của GPU, shaders và drivers. Những yếu tố ảnh hưởng đến kết quả render bao gồm: - Bộ xử lý đồ họa (GPU) — các mẫu GPU khác nhau xử lý các đối tượng và kết cấu 3D theo các cách khác nhau. - Shaders và các phần mở rộng được hỗ trợ — tập hợp shaders được hỗ trợ cũng như các thông số kỹ thuật và độ chính xác của chúng phụ thuộc vào thiết bị. Cài đặt trình duyệt và đặc điểm render Các hệ thống chống gian lận sử dụng những đặc điểm này để tạo ra dấu vân tay độc nhất, nhận ra sự khác biệt ở cấp độ đồ họa và các thuộc tính như kích thước kết cấu và giá trị tối đa của biến uniform. Tập hợp các tham số này cho phép tạo ra một dấu vân tay đồ họa, mà khi kết hợp với các dữ liệu khác, giúp nhận dạng người dùng. Các phương pháp giả mạo dấu vân tay WebGL Những kẻ gian sử dụng nhiều phương pháp khác nhau để giả mạo dấu vân tay WebGL nhằm qua mặt các hệ thống chống gian lận. Trong đó, có thể kể đến: - Giả lập shaders và kết cấu. Những kẻ gian có thể chỉnh sửa shaders và kết cấu với việc thêm nhiễu, giúp thay đổi dấu vân tay WebGL. - Chèn dấu vân tay đã lưu sẵn. Một số chương trình có khả năng thay thế dấu vân tay, cung cấp các kết quả được ghi lại trước đó từ các thiết bị khác, điều này gây khó khăn cho việc phát hiện. Những thông tin nào trang web có thể nhận được từ trình duyệt qua WebGL? Danh sách đầy đủ các thuộc tính và giá trị WebGL cho trình duyệt có thể xem trên trang kiểm tra https://test-webapi.tech/webglfull. Chúng tôi sẽ xem xét chi tiết các tham số quan trọng nhất cho hệ thống chống gian lận, nhưng trước tiên hãy kiểm tra cách hoạt động của việc thêm nhiễu trong WebGL. Chi tiết về cách tạo ra các giá trị khi lấy dấu vân tay đã được đề cập trong bài viết Công nghệ Canvas trong các hệ thống chống gian lận và phương pháp nhận dạng người dùng, hiện tại chúng ta sẽ thực hiện một bài kiểm tra nhỏ, xem xét dấu vân tay WebGL trên trình duyệt Chrome và trình duyệt chống nhận dạng không có nhiễu và có nhiễu, mở từng trang https://browserleaks.com/webgl. Trình duyệt Chrome: Chú ý các giá trị sau: WebGL Report Hash: af7f2acd5c7ab718eb78ab2d368860bd WebGL Image Hash: 31512603d8157a55323d306cc161fb49 Unmasked Vendor: Google Inc. (NVIDIA) Unmasked Renderer: ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x00002503) Direct3D11 vs_5_0 ps_5_0, D3D11) Trình duyệt chống nhận dạng không có nhiễu: Trình duyệt chống nhận dạng với việc sử dụng nhiễu: WebGL Report Hash: af7f2acd5c7ab718eb78ab2d368860bd WebGL Image Hash: 31512603d8157a55323d306cc161fb49 Unmasked Vendor: Google Inc. (NVIDIA) Unmasked Renderer: ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x00002503) Direct3D11 vs_5_0 ps_5_0, D3D11) WebGL Report Hash: 251d629a393c4f10bfffe3b506696fdd WebGL Image Hash: 61b18870e8f14f0058bc5533468c685c Unmasked Vendor: Google Inc. (NVIDIA) Unmasked Renderer: ANGLE (NVIDIA, NVIDIA GeForce GTX 1050 Ti (0x00001C8C) Direct3D11 vs_5_0 ps_5_0, D3D11) Theo kết quả thử nghiệm, chúng ta thấy rằng khi áp dụng nhiễu, các giá trị đã thay đổi, và chúng ta có thể kết luận rằng trình duyệt chống nhận dạng đã thành công trong việc thay đổi dấu vân tay WebGL. ##### Hệ thống chống gian lận xác định giả mạo dấu vân tay WebGL như thế nào? Các hệ thống chống gian lận sử dụng những phương pháp cho phép nhận diện dấu vân tay WebGL bị giả mạo: - Kiểm tra sai lệch. Hệ thống phân tích và so sánh dấu vân tay WebGL với các tham số của thiết bị như số lượng biến uniform tối đa và các phần mở rộng hỗ trợ. Nếu các giá trị không khớp với đặc điểm thực tế của thiết bị, điều này có thể chỉ ra dấu hiệu giả mạo. - Biến dạng render. Các hệ thống chống gian lận có thể tạo ra hình ảnh và kiểm tra cách các thiết bị render một số đối tượng cụ thể. Ví dụ, nếu render WebGL trên thiết bị không khớp với các tham số tiêu chuẩn, điều này có thể cho thấy có sự giả mạo. - Kiểm tra tính ổn định của các tham số. Trong hệ thống có thể có các bài kiểm tra nhằm kiểm tra tính ổn định của shaders và kết cấu, vì sự thay đổi của chúng có thể phát hiện GPU giả mạo. Những tham số quan trọng nhất đối với các hệ thống chống gian lận trong WebGL bao gồm: thông tin về thiết bị (unmaskedVendor, unmaskedRenderer, vendor, renderer, shadingLanguage, version, shadingLanguage2, version2), đặc điểm kỹ thuật (maxFragmentUniformVectors, maxTextureSize) và extensions. Các trình duyệt chống nhận dạng thành công thay thế thông tin về thiết bị, hãy xem cách các hệ thống chống gian lận có thể kiểm tra các tham số kỹ thuật: kiểm tra giá trị thực của maxFragmentUniformVectors bằng cách mở trong trình duyệt trang kiểm tra https://test-webapi.tech/webglmaxfr, kiểm tra số lượng vector uniform tối đa dưới tải. Trình duyệt Chrome trên máy tính: Giá trị thực tế khớp với các thuộc tính được trình duyệt khai báo. Vì các thiết bị desktop thường có giá trị maxFragmentUniformVectors là 1024, hãy mở cùng trang này trên điện thoại Android trong trình duyệt Chrome: Trong trình duyệt trên điện thoại, dữ liệu thu thập từ các thuộc tính trình duyệt cũng khớp với các đặc điểm thực của thiết bị. Bây giờ, chúng ta thử thay đổi giá trị trong trình duyệt chống nhận dạng để giống với giá trị của điện thoại và lặp lại bài kiểm tra. Mở trang kiểm tra của chúng ta: Trình duyệt chống nhận dạng với giá trị maxFragmentUniformVectors bị thay đổi đã không vượt qua kiểm tra, điều này là hợp lý bởi vì chúng ta đang chạy nó trên máy tính với giá trị maxFragmentUniformVectors là 1024. Thực hiện bài kiểm tra tương tự cho maxTextureSize, mở trang kiểm tra https://test-webapi.tech/webglmaxt trong trình duyệt, trang này kiểm tra kích thước tối đa của kết cấu trong ngữ cảnh WebGL. Trình duyệt Chrome trên máy tính: Giá trị thực tế khớp với các thuộc tính trình duyệt khai báo. Vì các thiết bị desktop thường có maxTextureSize là 16384, chúng ta mở cùng trang này trên điện thoại Android trong trình duyệt Chrome: Trong trình duyệt trên điện thoại, dữ liệu thu thập từ các thuộc tính trình duyệt cũng khớp với các đặc điểm thực của thiết bị. Bây giờ, chúng ta thử thay đổi giá trị trong trình duyệt chống nhận dạng để giống với giá trị của điện thoại và lặp lại kiểm tra. Kiểm tra giá trị trên trang browserleaks.com Mở trang kiểm tra của chúng ta Trình duyệt chống nhận dạng với maxTextureSize đã thay đổi không vượt qua kiểm tra; bài kiểm tra của chúng ta phát hiện rằng kích thước kết cấu hỗ trợ là 4097, điều này là hợp lý vì chúng ta đang chạy trên máy tính với maxTextureSize là 16384. ##### **Phần mở rộng WebGL** Xem xét cách các hệ thống chống gian lận có thể sử dụng thông tin về các phần mở rộng WebGL để nhận dạng người dùng. Danh sách các phần mở rộng khác nhau tùy theo loại thiết bị và nhà sản xuất. Để nhận diện người dùng, hệ thống chống gian lận có thể kiểm tra hỗ trợ cho từng phần mở rộng đã biết trong trình duyệt của người dùng. Hãy xem một ví dụ đơn giản về cách điều này có thể trông như thế nào: Trong ví dụ này, để đơn giản hóa, mỗi phần mở rộng WebGL có hai chữ số: chữ số đầu tiên cho biết phần mở rộng có được khai báo trong thuộc tính trình duyệt hay không, và chữ số thứ hai cho biết phần mở rộng có được hỗ trợ sau khi kiểm tra hay không. Kết quả của số lượng giá trị lớn như vậy có thể tạo ra một hash đủ độc nhất cho mỗi người dùng. #### **Kiểm tra hiệu suất WebGL** Trên trang kiểm tra, chúng ta sẽ tạo một chương trình để kiểm tra hiệu suất của thiết bị và tính thời gian thực hiện chương trình. Kết quả cho các thiết bị desktop: NVIDIA GeForce RTX 3060: 2023.6 ms AMD Radeon RX580: 1132.0 ms AMD Radeon™: 1611.2 ms Intel UHD 620: 2576.1 ms Vulkan 1.3.0: 1364.2 ms Kết quả cho các thiết bị di động: Mali-G77: 3369.3 ms Mali-G76: 5111.1 ms Adreno™ 642L: 4534.0 ms Adreno™ 642: 5763.3 ms Adreno™ 618: 9821.0 ms Dựa trên kết quả thử nghiệm, chúng ta thấy rằng các thiết bị di động thường mất nhiều thời gian hơn để thực hiện tác vụ render của WebGL. Tuy nhiên, sự khác biệt lớn về thời gian thực hiện chỉ xuất hiện trong các bài kiểm tra với tác vụ phức tạp, những tác vụ ít có khả năng áp dụng trong các hệ thống chống gian lận. Trong các bài kiểm tra đơn giản, rất khó để đưa ra kết luận về hiệu suất thiết bị chỉ dựa trên thời gian render của WebGL. ##### **WebGL trong các ví dụ thực tế: Amazon và Facebook** Chúng ta hãy xem trên các trang web như Amazon và Facebook, các trang này thu thập thông tin người dùng như thế nào thông qua WebGL. Mở trang chính của Amazon và sử dụng công cụ phát triển để tìm các hàm JavaScript có chứa các từ khóa “renderer”, “canvas”, “webgl”, “vendor” và xem xét dữ liệu mà trang web thu thập từ các hàm này. Kết quả cho thấy rằng trang Amazon trên trang chính thu thập thông tin về Vendor, Renderer, và Extensions. Lặp lại quy trình kiểm tra trên trang Facebook. Trên trang đăng nhập của Facebook, trang thu thập thông tin về Vendor và Renderer từ trình duyệt của người dùng. Chúng ta có thể kết luận rằng khi tạo tài khoản mới trên những trang này, sẽ tốt hơn nếu các thuộc tính WebGL khác biệt giữa các tài khoản và không thay đổi khi sử dụng lại hoặc đăng nhập vào cùng một tài khoản. ##### **Số khung hình mỗi giây (FPS)** Thông số này đo tần số mà hình ảnh được cập nhật. WebGL cho phép các nhà phát triển thu thập dữ liệu FPS trực tiếp trong trình duyệt, điều này thường được các hệ thống chống gian lận sử dụng. Đối với người dùng thông thường, giá trị FPS chủ yếu đạt 60 hoặc cao hơn. Tuy nhiên, các chương trình tự động thường giảm giá trị này xuống 30 để giảm tải phần cứng. Sự thay đổi này là dấu hiệu quan trọng trong các hệ thống chống gian lận về việc sử dụng các chương trình tự động trong trình duyệt. #### Kết luận Trong nhiều hệ thống chống gian lận trên các trang web phổ biến, công nghệ WebGL được sử dụng không chỉ để nhận dạng thiết bị của người dùng qua dấu vân tay đồ họa độc nhất mà còn cung cấp các công cụ giúp phát hiện và ngăn chặn hành vi gian lận. Áp dụng các phương pháp kiểm tra sự thay đổi, phân tích tính ổn định của tham số, và so sánh với các đặc điểm thực tế của thiết bị giúp tăng cường hiệu quả của các hệ thống chống gian lận. Việc thay đổi các giá trị và sử dụng nhiễu trong trình duyệt chống nhận dạng bằng WebGL không phải là phương pháp hoàn hảo để vượt qua sự bảo vệ của các trang web lớn. Trong phần kết của bài viết, chúng ta sẽ trình bày phương pháp xác định nhiễu trong WebGL: Việc thay đổi kết quả render trong WebGL thông qua việc thêm nhiễu dựa trên việc thay đổi giá trị màu của các pixel bán trong suốt. Phương pháp này hiện đang trong quá trình thử nghiệm và chưa bao phủ được tất cả các trường hợp giả mạo. Tiến hành thử nghiệm: Mở trang https://test-webapi.tech/webgltamper trong trình duyệt Chrome thông thường: Lặp lại trên trình duyệt chống nhận dạng mà không dùng nhiễu: Bây giờ, kiểm tra trên trình duyệt chống nhận dạng với việc thêm nhiễu WebGL: Hãy cùng tìm hiểu cách phương pháp này xác định việc thêm nhiễu. Đầu tiên, chúng ta nhận hex từ bộ đệm webgl và giải mã hex theo cách ngược với cách mã hóa, để nhận được giá trị màu cho từng pixel trong hình ảnh. Quy trình này hoàn toàn tương thích với các hệ thống chống gian lận. Bước tiếp theo, chúng ta so sánh màu của pixel tại phần chính của hình được render bằng WebGL (màu đỏ) và màu của pixel bán trong suốt nằm trên ranh giới nền trắng và hình tam giác. Trong trường hợp này, chúng ta so sánh giá trị màu đỏ R và độ trong suốt A, từ đó nhận ra sự chênh lệch giá trị phần trăm. Trên các thiết bị thông thường, sự chênh lệch giữa màu đỏ và độ trong suốt của hai pixel này sẽ bằng nhau (trong lý thuyết, màu của pixel sẽ thay đổi bằng đúng giá trị độ trong suốt của nó), nhưng khi có nhiễu được áp dụng bằng cách thay đổi màu của các pixel bán trong suốt, sự chênh lệch màu đỏ và độ trong suốt sẽ khác nhau. Trong ảnh chụp màn hình thử nghiệm, ta thấy rằng sự chênh lệch của màu đỏ không có nhiễu là R: 50.20% và độ trong suốt A: 50.20%, nhưng khi có nhiễu trong trình duyệt chống nhận dạng, giá trị là R: 48.63% và A: 50.59%. Trong bài viết này, chúng ta đã phân tích cách các hệ thống chống gian lận có thể sử dụng công nghệ WebGL để nhận dạng người dùng và phát hiện những người dùng cố tình giả mạo dấu vân tay. WebGL cung cấp nhiều thông tin để nhận diện người dùng, do đó, nó thường được sử dụng trong các hệ thống chống gian lận. Đồng thời, việc thay đổi thông tin về card đồ họa (unmaskedVendor, unmaskedRenderer, vendor, renderer, shadingLanguage, version, shadingLanguage2, version2) trong cùng dòng sản phẩm của nhà sản xuất card đồ họa giúp thay đổi dấu vân tay mà không gây nghi ngờ với hệ thống chống gian lận. Trong bài viết tiếp theo, chúng ta sẽ tiếp tục tìm hiểu các công nghệ trình duyệt được sử dụng trong hệ thống chống gian lận. _Bannykh M.V._