Hầu hết người dùng tin rằng miễn không cấp quyền cho website, trình duyệt sẽ bảo vệ an toàn. Không cho camera, không cho micro, không cho vị trí — thì không gì có thể theo dõi mình. Nhóm nghiên cứu từ Graz University of Technology (Áo) và Liebherr-Transportation Systems vừa chứng minh điều đó sai.
Họ phát triển một kỹ thuật mang tên FROST (Fingerprinting Remotely using OPFS-based SSD Timing) — một cuộc tấn công side-channel cho phép website bất kỳ theo dõi hoạt động SSD trên máy bạn, từ đó suy ra bạn đang mở trang web nào, chạy ứng dụng nào, tất cả chỉ bằng JavaScript thuần, không cần xin quyền, không cần bạn click gì cả.
Bài viết này mình sẽ phân tích chi tiết cách FROST hoạt động, tại sao nó lại khả thi, và điều gì bạn có thể làm để bảo vệ mình.
FROST Attack Là Gì
FROST là một cuộc tấn công side-channel chạy hoàn toàn trong trình duyệt. Thay vì trực tiếp đọc dữ liệu của bạn (điều mà trình duyệt ngăn chặn), FROST đo lường những thay đổi vi mô trong tốc độ đọc/ghi SSD để suy diễn hoạt động trên hệ thống.
Khái niệm side-channel attack không mới. Trong an ninh mạng, side-channel là nhóm kỹ thuật thu thập thông tin qua các “kênh phụ” — không phải trực tiếp từ dữ liệu, mà qua các dấu vết gián tiếp như thời gian thực thi, trạng thái cache, bức xạ điện từ, hoặc độ trễ I/O. FROST khai thác chính kênh cuối cùng: độ trễ I/O của ổ cứng SSD.
Điều khiến FROST đáng chú ý là nó không yêu cầu truy cập vật lý vào máy, không cần cài phần mềm, không cần tiện ích trình duyệt, không cần bất kỳ tương tác nào từ người dùng. Chỉ cần bạn mở một trang web chứa mã độc và giữ tab đó mở — thế là đủ.
Origin Private File System (OPFS) — Vũ Khí Của Cuộc Tấn Công
Trọng tâm kỹ thuật của FROST nằm ở API Origin Private File System (OPFS), một tính năng được hỗ trợ trên Chrome, Firefox, và Safari. OPFS cung cấp cho mỗi website một không gian lưu trữ file riêng biệt, cách ly với các site khác và với hệ thống file của hệ điều hành.
OPFS được thiết kế để phục vụ các ứng dụng web phức tạp — IDE online, trình chỉnh sửa ảnh, office suite — những ứng dụng cần thao tác file hiệu năng cao. Vì vậy, OPFS cho phép JavaScript thực hiện đọc/ghi file với tốc độ gần nhưnative, thông qua Web Workers và navigator.storage.getDirectory().
Điểm mấu chốt: OPFS không yêu cầu người dùng cấp quyền. Website có thể tự do tạo file, ghi dữ liệu, đọc lại — tất cả diễn ra hoàn toàn âm thầm, không có prompt nào hiện lên.
FROST tận dụng đúng đặc điểm này. Mã độc tạo một file rất lớn trong OPFS (thường trên 1 GB), sau đó liên tục đọc ngẫu nhiên các đoạn dữ liệu trong file đó và đo thời gian mỗi lần đọc mất bao lâu.
Nguyên Lý Kỹ Thuật: Đo Lường SSD Contention
Khi bạn mở thêm tab mới, truy cập trang web khác, hoặc khởi chạy một ứng dụng desktop — tất cả những hoạt động đó đều tạo ra lượng truy cập I/O nhất định đến ổ SSD. SSD lúc này phải phục vụ nhiều tiến trình cùng lúc, dẫn đến hiện tượng contention (cạnh tranh tài nguyên).
Contion này gây ra sự thay đổi đo được trong độ trễ đọc. Khi SSD bận phục vụ yêu cầu từ tab YouTube bạn vừa mở, thời gian đọc file OPFS của mã FROST sẽ tăng lên vài miligiây. Khi SSD rảnh hơn, thời gian đọc giảm xuống. Bằng cách liên tục ghi lại các giá trị này, FROST xây dựng được một “chữ ký thời gian” (timing signature) phản ánh chính xác hoạt động I/O trên hệ thống.
Vượt Qua OS Cache
Một thách thức kỹ thuật lớn là cơ chế caching của hệ điều hành. Khi bạn đọc một file nhiều lần, OS thường cache dữ liệu vào RAM, khiến các lần đọc sau không còn chạm đến SSD vật lý. Nếu dữ liệu bị cache, FROST sẽ không đo được contention.
Nhóm nghiên cứu giải quyết bằng cách tạo file OPFS lớn hơn dung lượng RAM của hệ thống. Khi file vượt quá kích thước RAM, OS không thể cache toàn bộ, buộc các lần đọc phải đi thẳng xuống SSD. Đây là mẹo đơn giản nhưng hiệu quả — nó đảm bảo mọi phép đo đều phản ánh hoạt động thực của ổ cứng.
Khôi Phục High-Resolution Timer
Để đo chính xác độ trễ ở cấp miligiây, FROST cần bộ định thời độ phân giải cao. Trình duyệt hiện đại đã giảm độ phân giải của performance.now() xuống mức 5-100 microgiây để chống lại các cuộc tấn công thời gian như Spectre. Tuy nhiên, FROST có thể khôi phục lại độ phân giải đầy đủ bằng cách bật cross-origin isolation — thiết lập các header Cross-Origin-Opener-Policy và Cross-Origin-Embedder-Policy trên trang web độc hại. Khi cross-origin isolation được bật, trình duyệt tự động cấp lại quyền truy cập timer độ phân giải cao.
Đây là một lỗ hổng trong chính cơ chế bảo vệ: tính năng được thiết kế để tăng cường bảo mật lại bị lợi dụng để tinh chỉnh cuộc tấn công.
Phân Biệt SSD Activity Khỏi RAM/Cache
Một câu hỏi hợp lý: làm sao FROST biết rằng độ trễ đo được đến từ SSD thay vì cache hoặc RAM? Câu trả lời nằm ở sự phân bố độ trễ.
Khi dữ liệu nằm trong RAM hoặc OS cache, thời gian đọc rất ổn định, thường dưới 0.1ms với phương sai cực nhỏ. Nhưng khi dữ liệu phải đọc từ SSD vật lý, thời gian đọc dao động mạnh hơn nhiều — từ 0.1ms đến vài miligiây — và nhạy cảm với tải I/O đồng thời từ các tiến trình khác.
Bằng cách tạo file lớn hơn RAM, FROST đảm bảo phần lớn các lần đọc đều chạm SSD. Sự biến thiên trong thời gian đọc lúc này phản ánh trực tiếp contention trên SSD, không phải noise từ cache. Mã FROST cũng thực hiện đọc ngẫu nhiên (random access) thay vì đọc tuần tự, khiến cơ chế prefetch của OS cache trở nên kém hiệu quả.
Ngoài ra, FROST sử dụng kỹ thuật thống kê để lọc noise: thực hiện nhiều lần đo trong khoảng thời gian ngắn, tính median thay vì mean, và loại bỏ các outlier không đặc trưng. Kết quả là tín hiệu SSD khá sạch, đủ để phân loại chính xác.
Không Cần Permission, Không Cần User Interaction
Đây là điểm đáng lo ngại nhất của FROST. Hãy xem toàn bộ chuỗi tấn công yêu cầu gì:
- Bước 1: Bạn truy cập vào một website chứa mã FROST. Có thể là trang web độc hại hoặc trang hợp lệ bị chèn mã (ví dụ qua quảng cáo malvertising).
- Bước 2: Trang web tự động tạo file trong OPFS — không cần hỏi bạn, không cần bạn click “Allow” hay bất cứ điều gì.
- Bước 3: Web Worker chạy ngầm liên tục đọc file và đo thời gian. Bạn không thấy gì khác thường, tab hoạt động bình thường.
- Bước 4: Dữ liệu timing được gửi về server, nơi mô hình học máy phân tích và xác định bạn đang làm gì.
Toàn bộ quá trình diễn ra âm thầm. Không có notification, không có warning, không có biểu tượng khóa bị gạch chéo. Trình duyệt coi OPFS là tính năng hợp lệ, và đọc/ghi file trong OPFS là thao tác bình thường.
Cross-Browser Tracking Fingerprint
FROST không bị giới hạn trong một trình duyệt. Vì nó đo contention ở cấp SSD vật lý — dưới cả hệ điều hành — nên một tab Chrome chạy mã FROST có thể đo được hoạt động I/O từ tab Safari, từ ứng dụng desktop trên macOS, hoặc từ bất kỳ tiến trình nào đang dùng chung ổ SSD.
Kết quả thực nghiệm cho thấy sự khác biệt hiệu năng khi attacker và victim chạy trên hai trình duyệt khác nhau là rất nhỏ, gần như không ảnh hưởng đến độ chính xác. Điều này có nghĩa FROST phá vỡ ranh giới sandbox giữa các trình duyệt — một điều mà các nhà thiết kế trình duyệt không lường tới.
Nhóm nghiên cứu đã kiểm tra FROST trên MacBook M2 với macOS và trên Linux. Trên macOS, họ đạt kết quả phân loại ấn tượng. Trên Linux, họ xác nhận cơ chế đo latency hoạt động và kỳ vọng kết quả phân loại tương tự. Windows chưa được kiểm tra.
Kết Quả Thực Nghiệm: Độ Chính Xác Đáng Ngại
Nhóm nghiên cứu đánh giá FROST trên hai mặt: covert channel (kênh truyền bí mật) và fingerprinting (nhận dạng hoạt động).
Covert Channel
Họ xây dựng kênh truyền bí mật từ một ứng dụng native đến website độc hại, sử dụng SSD contention làm cơ chế tín hiệu. Kết quả: đạt tốc độ 661.63 bit/s trên Linux và 891.77 bit/s trên macOS. Tốc độ khiêm tốn so với mạng thông thường, nhưng dư sức rò rỉ metadata và thông tin hoạt động người dùng.
Website Fingerprinting
Thu thập dữ liệu từ 50 website phổ biến nhất, huấn luyện Convolutional Neural Network (CNN) để phân loại. Kết quả:
- Closed-world (chỉ xét 50 website đã biết): F1 score đạt 88.95%
- Open-world (có thêm website chưa thấy): F1 score đạt 86.95%
Điều này có nghĩa là phần lớn các website tạo ra “chữ ký I/O” riêng biệt trên SSD, đủ để mô hình phân biệt với độ tin cậy cao.
Application Fingerprinting
Thử nghiệm với 10 ứng dụng macOS (Safari, Maps, Music, TV, Calculator, App Store, Contacts, System Settings…), mô hình đạt F1 score 95.83%. Khởi chạy ứng dụng tạo ra burst I/O đặc trưng trên SSD, khiến việc nhận dạng dễ hơn cả website fingerprinting.
So Sánh Với Các Side-Channel Attack Khác
FROST không phải side-channel attack đầu tiên targeting trình duyệt, nhưng nó có những đặc điểm khác biệt đáng chú ý:
FROST vs. Spectre/Meltdown
Spectre và Meltdown khai thác cơ chế speculative execution của CPU để đọc dữ liệu từ các vùng memory bị bảo vệ. Chúng yêu cầu hiểu biết sâu về vi kiến trúc CPU và thường bị hạn chế bởi các bản vá microcode. FROST hoàn toàn không liên quan đến CPU — nó khai thác I/O latency của SSD, một vector hoàn toàn khác và chưa được patch.
FROST vs. Browser Fingerprinting Truyền Thống
Browser fingerprinting truyền thống thu thập thông tin như user-agent, kích thước màn hình, font đã cài, WebGL renderer để tạo “dấu vân tay” duy nhất cho trình duyệt. FROST khác ở chỗ nó không chỉ nhận dạng trình duyệt — nó nhận dạng hoạt động hiện tại của người dùng. Browser fingerprinting cho biết “bạn là ai”, FROST cho biết “bạn đang làm gì”.
FROST vs. Network-Based Website Fingerprinting
Các kỹ thuật website fingerprinting qua mạng (như Tor traffic analysis) phân tích gói tin mạng để suy đoán trang web người dùng truy cập. FROST hoàn toàn bypass lớp bảo vệ này vì nó không dựa vào mạng. Ngay cả khi bạn dùng VPN hay Tor, FROST vẫn hoạt động vì nó đo SSD contention cục bộ.
FROST vs. Rowhammer
Rowhammer gây ra bit flip trong RAM bằng cách truy cập liên tục vào các hàng memory kề nhau. Nó cần khả năng truy cập memory vật lý với tần suất rất cao. FROST đơn giản hơn nhiều — chỉ cần File API thông thường và đo thời gian, không cần thao tác memory cấp thấp.
Tác Động Đến Quyền Riêng Tư
FROST mở ra một hướng theo dõi mới mà các cơ chế bảo vệ hiện tại chưa lường đến. Hãy xem xét một số kịch bản thực tế:
Theo dõi hành vi duyệt web: Website A biết bạn đang mở website B, C, D trong các tab khác. Thông tin này có thể dùng để xây dựng hồ sơ sở thích chi tiết hơn bất kỳ cookie nào.
Do thám cạnh tranh: Website thương mại có thể biết bạn đang mở trang đối thủ để so sánh giá, từ đó điều chỉnh chiến lược theo thời gian thực.
De-anonymization: Ngay cả khi bạn dùng chế độ ẩn danh hoặc xóa cookie, FROST vẫn có thể tạo fingerprint dựa trên hoạt động SSD. Chế độ ẩn danh không chia sẻ OPFS với phiên bình thường, nhưng nếu bạn mở tab bình thường song song, nó vẫn có thể bị theo dõi.
Enterprise surveillance: Công cụ giám sát nội bộ có thể triển khai FROST để theo dõi hoạt động của nhân viên mà không cần cài agent trên máy.
Đáng chú ý, ba nhà cung cấp trình duyệt lớn đều đã được thông báo. Chromium cho rằng fingerprinting không phải lỗ hổng bảo mật. Apple xếp vào “out of scope” nhưng có thể xem xét biện pháp giảm thiểu trong tương lai. Mozilla ghi nhận nhưng chưa triển khai biện pháp bảo vệ nào. Thái độ thụ động này có nghĩa FROST sẽ tiếp tục khả thi trong thời gian tới.
Cách Phòng Tránh Cho Người Dùng
Vì FROST chưa được browser vendor patch, người dùng cần tự bảo vệ mình. Dưới đây là các biện pháp từ đơn giản đến nâng cao:
Đóng Tab Không Cần Thiết
Biện pháp đơn giản nhất: nếu bạn không còn dùng tab nào, hãy đóng nó. FROST cần tab độc hại mở liên tục để đo timing. Đóng tab = chấm dứt cuộc tấn công. Điều này cũng giảm contention SSD tổng thể, làm cho fingerprinting kém chính xác hơn.
Theo Dõi OPFS Storage
Trên Chrome, truy cập chrome://settings/content/all để xem trang web nào đang lưu trữ dữ liệu. Nếu thấy một trang không quen thuộc chiếm hơn 1 GB storage, đó là dấu hiệu đáng ngờ. Bạn có thể xóa dữ liệu của trang đó ngay lập tức.
Trên Firefox, kiểm tra qua aboutreferences#privacy trong phần “Quản lý dữ liệu”.
Dùng Trình Duyệt Riêng Cho Việc Nhạy Cảm
Nếu bạn cần duyệt web nhạy cảm (ngân hàng, y tế, nghiên cứu cạnh tranh), hãy dùng một profile trình duyệt riêng hoặc thậm chí một trình duyệt khác hoàn toàn. FROST chỉ đo được contention khi nó chạy trên cùng ổ SSD với hoạt động cần theo dõi.
Giới Hạn OPFS Qua Extension
Một số extension bảo mật cho phép bạn chặn hoặc giới hạn quyền truy cập OPFS. Mặc dù chưa có extension nào chuyên biệt chống FROST, các công cụ như uBlock Origin hoặc NoScript có thể chặn JavaScript trên các trang không đáng tin cậy, ngăn FROST chạy từ đầu.
Vệ Sinh Storage Định Kỳ
Xóa định kỳ site data trong cài đặt trình duyệt sẽ loại bỏ file OPFS lớn mà mã FROST tạo ra. Nếu tấn công không có file lớn hơn RAM, nó không thể bypass OS cache, khiến timing measurement trở nên không đáng tin cậy.
Giới Hạn Của FROST
Dù ấn tượng, FROST có những hạn chế nhất định:
- Dung lượng file lớn: Cần tạo file OPFS trên 1 GB để bypass OS cache. Điều này có thể khiến người dùng tinh ý nhận ra qua dung lượng ổ cứng giảm bất thường.
- Cùng ổ SSD: FROST chỉ hoạt động nếu file OPFS và ứng dụng/target nằm trên cùng ổ SSD vật lý. Nếu ứng dụng chạy từ ổ khác, FROST “mù”.
- Chưa kiểm tra trên Windows: Kết quả hiện tại chỉ trên macOS và Linux. Hành vi SSD caching trên Windows có thể khác biệt.
- Cần tab mở liên tục: Nếu người dùng đóng tab, cuộc tấn công dừng. Điều này giới hạn khả năng thu thập dữ liệu dài hạn.
- Nhạy cảm với loại SSD: SSD NVMe, SATA, và eMMC có đặc tính latency khác nhau. Mô hình cần được huấn luyện riêng cho từng loại.
Kết Luận
FROST là minh chứng rõ ràng rằng bề mặt tấn công của trình duyệt vẫn còn rộng hơn chúng ta tưởng. Khi trình duyệt tiến hóa thành nền tảng ứng dụng đầy đủ chức năng với API như OPFS, những vector tấn công mới xuất hiện mà không ai lường trước.
Điều đáng lo nhất không phải bản thân FROST — mà là thái độ của các browser vendor. Khi Chromium tuyên bố fingerprinting “không phải lỗi bảo mật”, Apple xếp vào “out of scope”, và Mozilla chưa hành động, thông điệp gửi đến người dùng là: bạn tự lo lấy.
Trong lúc chờ đợi các nhà phát triển trình duyệt nhận thức đúng mức về rủi ro này, biện pháp thực tế nhất là đóng tab khi không dùng, kiểm tra storage định kỳ, và dùng các công cụ chặn JavaScript trên trang không quen thuộc. FROST không phải mối đe dọa khẩn cấp, nhưng nó vạch ra một hướng tấn công mà càng ngày càng nhiều dữ liệu ứng dụng web có thể bị khai thác.
Nhóm nghiên cứu sẽ trình bày chi tiết kỹ thuật tại hội nghị DIMVA vào tháng 7/2026. Paper đầy đủ được công bố trên trang của tác giả chính Hannes Weissteiner.
Bài viết liên quan: