Các nhà nghiên cứu từ Viện Công nghệ Massachusetts (MIT) đã xác định kỹ thuật tấn công TONTOU (Time-of-Neutralization to Time-of-Use), cung cấp một cách thức mới để khai thác các lỗ hổng kiến trúc vi mô trong lớp Spectre v2. Lỗ hổng này cho phép xác định nội dung bộ nhớ kernel khi thực thi mã khai thác trong không gian người dùng. Mã để ngăn chặn việc khai thác lỗ hổng đã được tích hợp vào kernel. Linux Ngày 5 tháng 8 và được bao gồm trong các bản phát hành 7.1.7, 6.18.43, 6.12.102, 6.6.149, 6.1.181, 5.15.214 và 5.10.263.
Các nhà nghiên cứu đã chứng minh tính khả thi của một cuộc tấn công người dùng cục bộ, không có đặc quyền, để xác định mã băm mật khẩu của người dùng root được lưu trữ trong tệp /etc/shadow và được tải vào bộ nhớ trong quá trình xác thực hệ thống. Các nhà nghiên cứu đã thành công trong việc rò rỉ dữ liệu từ bộ nhớ kernel với thông lượng 5.47 byte mỗi giây và độ chính xác 91.97%. Trong 10 lần chạy thử nghiệm khai thác, kéo dài trung bình 18 phút, họ đã phát hiện thành công sự hiện diện của tệp /etc/shadow trong bộ nhớ và trích xuất nội dung của nó trong một nửa số trường hợp.
Lỗ hổng này đã được chứng minh trên các hệ thống sử dụng bộ xử lý AMD và có thể được sử dụng trên các CPU AMD thuộc dòng Zen 1-4. Cuộc tấn công cũng khả thi trên các hệ thống Intel, nhưng việc khai thác phức tạp hơn. Để bảo vệ chống lại lỗi tràn ngăn xếp trả về và chặn lỗ hổng SRSO (Speculative Return Stack Overflow), bộ xử lý AMD sử dụng cơ chế bảo vệ Safe-RET, cơ chế này xóa bộ đệm dự đoán nhánh sau mỗi lần sử dụng và thu hẹp cửa sổ tấn công xuống còn hai lệnh được thực thi trong vòng vài chục nano giây.
Để vượt qua lớp bảo vệ này và mở rộng phạm vi tấn công, một kỹ thuật làm chậm CPU đã được triển khai, cho phép thay thế ngắt vào đúng thời điểm để chuyển hướng luồng thực thi trong nhân hệ điều hành và sử dụng trình xử lý ngắt để làm hỏng các mục trong bộ đệm dự đoán nhánh. Để khai thác lỗ hổng SRSO, kẻ tấn công có thể tạo ra các điều kiện trong đó đơn vị dự đoán nhánh thực thi một cách suy đoán một số lượng lớn các lệnh gọi CALL được dự đoán sai, đủ để làm tràn ngăn xếp địa chỉ trả về và ghi đè lên các điểm trả về được dự đoán chính xác nằm ở đầu ngăn xếp. Kết quả là, các phần tử ngăn xếp ban đầu có thể bị ghi đè bằng các giá trị do kẻ tấn công lựa chọn, dẫn đến việc sử dụng các giá trị đã được thay thế này trong quá trình thực thi suy đoán lệnh RET trong ngữ cảnh của một tiến trình khác.
Bộ xử lý sẽ xác định rằng dự đoán nhánh không chính xác và sẽ hoàn tác thao tác, nhưng dữ liệu được xử lý trong quá trình thực thi suy đoán sẽ vẫn còn trong bộ nhớ cache và các bộ đệm kiến trúc vi mô. Nếu khối lệnh được thực thi sai truy cập vào bộ nhớ, việc thực thi suy đoán của nó cũng sẽ dẫn đến việc dữ liệu được đọc từ bộ nhớ vẫn còn trong bộ nhớ cache dùng chung. Để truy xuất thông tin từ bộ nhớ cache, người ta có thể sử dụng phương pháp xác định nội dung bộ nhớ cache dựa trên phân tích sự thay đổi thời gian truy cập đối với dữ liệu được lưu trong bộ nhớ cache và dữ liệu không được lưu trong bộ nhớ cache.
Nguồn: opennet.ru
