Với việc phát hành Chrome 76, Google đã sửa một lỗ hổng cho phép các trang web phát hiện xem khách truy cập có đang sử dụng chế độ Ẩn danh hay không. Thật không may, khi sửa lỗi đã dẫn đến hai phương pháp khác vẫn có thể được sử dụng để phát hiện khi khách truy cập đang duyệt web riêng tư.
Một số trang web đã dùng cách phát hiện chế độ Ẩn danh để ngăn người dùng bỏ qua các khoản thanh toán hoặc để cung cấp cho người dùng duyệt web riêng tư một trải nghiệm duyệt web khác.
Điều này đã được thực hiện bằng cách kiểm tra tính khả dụng của API FileSystem của Chrome. Tính năng này sẽ bị vô hiệu hóa ở chế độ Ẩn danh. Bằng cách sử dụng phương pháp sau:
  • Nếu trình duyệt truy cập được API FileSystem: không ẩn danh
  • Nếu trình duyệt không truy cập được API FileSystem: ẩn danh
Tuy nhiên vì muốn bảo vệ quyền riêng tư của người dùng, Google đã đã vá lỗ hổng bằng cách cung cấp API ở cả hai chế độ duyệt. Nhưng thay vì sử dụng bộ lưu trữ đĩa cho API FileSystem khi ở chế độ Ẩn danh, Google lại đang sử dụng hệ thống tệp bộ nhớ tạm thời (memory filesystem) bị xóa khi đóng phiên.
Việc sử dụng memory filesystem tạo ra hai lỗ hổng mới có thể được sử dụng để phát hiện chế độ Ẩn danh. 
Gần đây, nhà nghiên cứu bảo mật Vikas Mishra đã phát hiện ra rằng chúng ta có thể suy ra trạng thái ẩn danh dựa trên lượng không gian mà API tạo sẵn.
Sau đây, mì trình bày một bằng chứng về khái niệm kỹ thuật mà các trang web có thể sử dụng để phát hiện người dùng ẩn danh bằng cách đo tốc độ ghi vào API.

phương pháp

Việc thiết lập tương đối đơn giản: điểm chuẩn hệ thống tập tin bằng cách liên tục ghi các chuỗi lớn vào nó và đo thời gian cần thiết. Vì bộ nhớ nhanh hơn đĩa, nên chúng tôi có thể cho biết tốc độ của khách truy cập trang web có ẩn danh hay không.

Các kết quả


Biểu đồ đường hiển thị thời gian ghi bình thường so với ẩn danh

Biểu đồ thời gian kể một câu chuyện tương tự. Tốc độ ghi ẩn danh cụm chặt chẽ sang trái, trong khi ghi ở chế độ bình thường khác nhau rất nhiều. Bằng cách tính toán các số liệu thống kê cơ bản như độ lệch trung bình và độ lệch chuẩn, có thể xác định được một cách chắc chắn hợp lý cho dù khách truy cập có ở ẩn danh hay không. Từ các phép đo của tôi, thời gian điểm chuẩn trung bình trong ẩn danh là khoảng 792 ms, so với 2281 ms ở chế độ bình thường - dài hơn 2,8 lần . Và độ lệch chuẩn là 67 ms trong ẩn danh, so với 1183 ms ở chế độ bình thường - trải rộng hơn 17,7 lần.

Biểu đồ phân phối thời gian viết bình thường và ẩn danh

Dữ liệu đầy đủ có sẵn ở đây .

Hạn chế
Cuộc tấn công thời gian này phụ thuộc vào việc thực hiện nhiều phép đo để có được số liệu thống kê chính xác về thao tác nhanh như sao chép một vài kilobyte dữ liệu, nghĩa là phải mất vài phút hoặc hàng chục giây để có đủ dữ liệu - chậm hơn nhiều so với các kỹ thuật hiện có, tất cả đều hoạt động gần như ngay lập tức.
Ngoài ra, hiệu quả của cuộc tấn công khác nhau giữa các cấu hình phần cứng. Tất cả máy tính và điện thoại thông minh đều có CPU, bộ nhớ và tốc độ ổ đĩa khác nhau, tất cả đều ảnh hưởng đến thời gian. Các quy trình nền chạy trên thiết bị cũng có thể gây nhiễu - sao chép hoặc tải xuống tệp, phát video trong tab khác hoặc khởi chạy ứng dụng, tất cả sẽ dẫn đến kết quả theo cách này hay cách khác.
Hạn chế cuối cùng là cuộc tấn công không thực sự phát hiện chế độ ẩn danh - nó phát hiện lưu trữ sao lưu của tệp tin API, hóa ra đó là một proxy tốt để phát hiện chế độ ẩn danh. Nó có thể tạo ra dương tính giả cho các tình huống trong đó đĩa  bộ nhớ, như USB trực tiếp hoặc cấu hình Chrome được lưu trữ trên một bộ nhớ không xác địnhNgười ta có thể lập luận rằng các cấu hình như vậy là cố gắng phá vỡ theo dõi, làm cho chúng tương đương ẩn danh.
Điểm mấu chốt là kỹ thuật này chậm hơn và kém tin cậy hơn, nhưng khó vá hơn các phương thức hiện có vì nó tấn công quyết định kỹ thuật cơ bản để lưu trữ dữ liệu trong bộ nhớ thay vì trên đĩa.

Giảm nhẹ

Cách duy nhất để ngăn chặn cuộc tấn công này là cho cả chế độ ẩn danh và chế độ bình thường sử dụng cùng một phương tiện lưu trữ, để API chạy ở cùng một tốc độ bất kể.
Các nhà phát triển Chrome đã thấy điều này sắp tới: trong một tài liệu thiết kế từ tháng 3 năm 2018 , họ đã xác định nguy cơ tấn công về thời gian và hạn ngạch và phác thảo một triển khai thay thế có thể ngăn chặn cả cuộc tấn công của tôi và Mishra:
Chúng tôi chỉ có thể giữ siêu dữ liệu trong bộ nhớ và mã hóa các tệp trên đĩa. Điều này sẽ giải quyết rủi ro của các trang web sử dụng thời gian để phân biệt giữa bộ nhớ trong và bộ nhớ được hỗ trợ đĩa, cũng như loại bỏ sự khác biệt trong các loại hạn ngạch và hệ thống tệp có sẵn (tạm thời so với liên tục).

Tuy nhiên, một giải pháp như vậy đi kèm với sự đánh đổi của chính nó. Mặc dù nó chống lại các cuộc tấn công của chúng tôi, nó vẫn để lại siêu dữ liệu: ngay cả khi dữ liệu không thể được giải mã, sự tồn tại của nó cung cấp bằng chứng về việc sử dụng ẩn danh và rò rỉ khi người dùng sử dụng chế độ ẩn danh cuối cùng và kích thước gần đúng của dữ liệu họ ghi vào đĩa.
Nếu tôi xem xét mô hình mối đe dọa của chế độ ẩn danh, mục đích chính của nó là cung cấp quyền riêng tư từ những người dùng khác trên cùng thiết bị, chứ không phải quyền riêng tư từ các trang web bạn truy cập. Sự đánh đổi không đáng, và trên thực tế là một giải pháp yếu hơn cho vấn đề mà chế độ ẩn danh nhằm giải quyết .


Chế độ ẩn danh Trang tab mới

Kết luận: Với Chrome 76:
  • 120 MB trở xuống, thì trình duyệt ở chế độ ẩn danh
  • Từ 120 MB trở lên trình duyệt ở chế độ bình thường

Phát hiện chế độ ẩn danh thông qua thời gian truy cập


Và đây chính là CODE HTML phát hiện chế độ ẢN DANH đã qua chỉnh sửa và VIỆT HÓA:
Copy và dán vào NOTEPAD lưu lại với đuôi html:

<html>
<head>
</head>
<body>
<script async>
async function start() {
if ('storage' in navigator && 'estimate' in navigator.storage) {
const {usage, quota} = await navigator.storage.estimate();
    console.log(`Using ${usage} out of ${quota} bytes.`);

if(quota < 120000000){
        alert('Chrome An Danh')
        console.log('Chrome An Danh')
    } else {
        alert('Chrome Thuong')
        console.log('Chrome Thuong')
    }
} else {
        alert('Phat hien that bai')
console.log('Phat hien that bai')
}
}
start();
</script>
</body>
</html>


Lưu ý: Code chỉ có hiệu lực với trình duyệt Chrome
Tải Code tại đây