Có thể ace trong cộng đồng đều đã biết hoặc có nghe tới browser fingerprint, tuy nhiên hẳn là mọi người đều mông lung như mình trước kia không rõ nó là cái gì, vì sao các website sử dụng chúng làm "dấu vân tay". Ở series này mình sẽ tìm cách dễ hiểu nhất để giải thích về các browser fingerprint mà mình đã tìm hiểu trong quá trình phát triển GenBrowser tới TitanBrowser.
1. WebGL là gì?
WebGL (Web Graphics Library) là thư viện đồ hoạ cho web sử dụng trên trình duyệt, nó được sử dụng để render đồ hoạ 2D và 3D. Trình duyệt sử dụng WebGL API để gửi thông tin cần xử lý tới GPU, sau đó GPU sẽ trả về dữ liệu hiển thị cho trình duyệt. Ngày nay WebGL cũng là một thư viện được sử dụng để render đồ hoạ của web game thay thế cho Flash Player.
2. WebGL Fingerprint
WebGL Fingerprint là kết quả một hàm băm (ảnh được băm thành một chuỗi tương tự như tính md5 một file) khi vẽ một mẫu (một ảnh) cho trước (mẫu này có sự phân biệt lớn, tức là hình ảnh xuất ra rất khác nhau giữa các GPU khác nhau). Tới đây có thể đặt câu hỏi tại sao cùng một mẫu mà hình ảnh xuất ra lại rất khác nhau khi chạy trên GPU khác nhau? Mình sẽ lấy ví dụ vẽ hình tam giác màu gradient bằng WebGL (đây cũng là một mẫu có sự phân biệt lớn mà các hệ thống tính fingerprint thường sử dụng).
Để vẽ được hình bên trên bằng WebGL API thì nôm na trình duyệt chỉ cần truyền thông tin cho GPU 3 đỉnh x,y,z và màu tại 3 đỉnh, sau đó GPU sẽ xử lý để nội suy ra màu của phần bên trong tam giác. Quá trình nội suy này ở các GPU khác nhau có thể cho ra màu khác nhau ở cùng một toạ độ (pixel) nằm trong hình tam giác, do đó khi tính hash của ảnh hình tam giác sẽ cho ra 1 hash khác nhau.
3. So sánh hình ảnh WebGL của TitanBrowser và một antidetect browser khác.
Các antidetect browser sẽ thay đổi màu của hình tam giác này để tạo ra một hash khác với trình duyệt mặc định. Hình dưới đây là ví dụ hình ảnh WebGL của TitanBrowser và một antidetect browser khác.
WebGL Image Hash:
Có thể thấy Titan Browser của Genlogin có dải màu nhìn bằng mắt thường tương tự như trình duyệt bình thường, nhưng WebGL Hash vẫn khác nhau. Antidetect khác thì có thể thấy màu rất khác trình duyệt bình thường ở một số phần của hình nên hash cũng khác nhau.
Ngoài ra WebGL Fingeprint còn sử dụng một số thông số của card đồ hoạ như "Unmasked Renderer" và "Unmasked Vendor", "Max Vertex Attributes",... Tuy nhiên không nhiều hệ thống sử dụng toàn bộ thông số này để tính WebGL Hash.
1. WebGL là gì?
WebGL (Web Graphics Library) là thư viện đồ hoạ cho web sử dụng trên trình duyệt, nó được sử dụng để render đồ hoạ 2D và 3D. Trình duyệt sử dụng WebGL API để gửi thông tin cần xử lý tới GPU, sau đó GPU sẽ trả về dữ liệu hiển thị cho trình duyệt. Ngày nay WebGL cũng là một thư viện được sử dụng để render đồ hoạ của web game thay thế cho Flash Player.
2. WebGL Fingerprint
WebGL Fingerprint là kết quả một hàm băm (ảnh được băm thành một chuỗi tương tự như tính md5 một file) khi vẽ một mẫu (một ảnh) cho trước (mẫu này có sự phân biệt lớn, tức là hình ảnh xuất ra rất khác nhau giữa các GPU khác nhau). Tới đây có thể đặt câu hỏi tại sao cùng một mẫu mà hình ảnh xuất ra lại rất khác nhau khi chạy trên GPU khác nhau? Mình sẽ lấy ví dụ vẽ hình tam giác màu gradient bằng WebGL (đây cũng là một mẫu có sự phân biệt lớn mà các hệ thống tính fingerprint thường sử dụng).
Để vẽ được hình bên trên bằng WebGL API thì nôm na trình duyệt chỉ cần truyền thông tin cho GPU 3 đỉnh x,y,z và màu tại 3 đỉnh, sau đó GPU sẽ xử lý để nội suy ra màu của phần bên trong tam giác. Quá trình nội suy này ở các GPU khác nhau có thể cho ra màu khác nhau ở cùng một toạ độ (pixel) nằm trong hình tam giác, do đó khi tính hash của ảnh hình tam giác sẽ cho ra 1 hash khác nhau.
3. So sánh hình ảnh WebGL của TitanBrowser và một antidetect browser khác.
Các antidetect browser sẽ thay đổi màu của hình tam giác này để tạo ra một hash khác với trình duyệt mặc định. Hình dưới đây là ví dụ hình ảnh WebGL của TitanBrowser và một antidetect browser khác.
WebGL Image Hash:
- Giá trị thật: a01bb7f64daa2dc6a58c97ef1832ba55
- Gologin: 3d244521a8a594353ab7eafe1cd410a5
- Titanbrowser: 063b3e4c20b95fb50ee63e9202cda657
Có thể thấy Titan Browser của Genlogin có dải màu nhìn bằng mắt thường tương tự như trình duyệt bình thường, nhưng WebGL Hash vẫn khác nhau. Antidetect khác thì có thể thấy màu rất khác trình duyệt bình thường ở một số phần của hình nên hash cũng khác nhau.
Ngoài ra WebGL Fingeprint còn sử dụng một số thông số của card đồ hoạ như "Unmasked Renderer" và "Unmasked Vendor", "Max Vertex Attributes",... Tuy nhiên không nhiều hệ thống sử dụng toàn bộ thông số này để tính WebGL Hash.