Một chương trình Linux không có đặc quyền có thể căn thời gian một hardware interrupt để rơi vào khoảng trống giữa thời điểm bộ vi xử lý làm sạch bộ dự đoán nhánh (branch predictor) và thời điểm kernel sử dụng nó, từ đó "đầu độc" lại bộ dự đoán sau khi cơ chế phòng thủ đã thực thi.
Các nhà nghiên cứu từ MIT CSAIL, Daniël Trujillo và Mengjia Yan, đã đặt tên cho kỹ thuật này là INTERRUPT INJECTION. Trên một máy tính AMD Zen 2 chạy Linux 6.14 với tất cả các biện pháp giảm thiểu Spectre v2 mặc định được bật, bản exploit của họ đã rò rỉ bộ nhớ kernel tùy ý với tốc độ 5,47 byte mỗi giây và độ chính xác 91,97%. Tốc độ này đủ để định vị và đọc tệp /etc/shadow (nơi lưu trữ mã băm mật khẩu hệ thống) trong 5 trên 10 lần thử nghiệm.
Cuộc tấn công này không cần đặc quyền, chỉ cần thực thi mã cục bộ (local code execution), do đó rủi ro hiện hữu trên các hệ thống dùng chung chạy các bộ vi xử lý bị ảnh hưởng.
Cặp đôi này đã công bố lỗ hổng cho AMD và Intel vào ngày 5 tháng 2. AMD cho biết họ đang lên kế hoạch tung ra bản vá kernel; MIT cho biết một bản vá đã được phát hành và sẽ được cập nhật thông qua các bản cập nhật hệ điều hành thông thường.
Phản hồi từ AMD và Intel
AMD đã xuất bản một bản tin bảo mật vào ngày 6 tháng 8, AMD-SB-7061, với tiêu đề "Safe RET Interrupt Vulnerability", xác định các bộ vi xử lý từ Zen 1 đến Zen 4 bị ảnh hưởng. Tóm tắt cho biết kẻ tấn công chạy mã trên hệ thống bị ảnh hưởng "có thể tiêm một ngắt vào một thời điểm chính xác để làm gián đoạn Safe RET", điều này "có thể làm suy yếu biện pháp bảo vệ đó và có thể dẫn đến rò rỉ thông tin". AMD bổ sung rằng vấn đề này "có vẻ liên quan đến việc triển khai cơ chế giảm thiểu Safe RET trên Linux".
Bản tin ghi nhận công lao của Trujillo và cho biết hành vi này đã được chứng minh trên Zen 1 và Zen 2, trong khi Zen 3 và Zen 4 được dự đoán là bị ảnh hưởng nhưng chưa được trình diễn thực tế. Theo báo cáo nghiên cứu được chia sẻ với The Hacker News, Intel hiện không coi việc giảm thiểu lỗ hổng này là cần thiết.
Bản tin của AMD vẫn chưa giải tỏa hoàn toàn lo ngại cho các nhà quản trị. Do không có số phiên bản cụ thể, commit hay CVE để đối chiếu, quản trị viên vẫn chưa có cách đơn giản để kiểm tra xem một máy tính nhất định đã được cài bản vá mà MIT nói hay chưa.
Kernel báo cáo trạng thái SRSO tại /sys/devices/system/cpu/vulnerabilities/spec_rstack_overflow, nhưng tài liệu định nghĩa các giá trị của tệp đó không hề đề cập đến các ngắt (interrupts) khi The Hacker News kiểm tra vào ngày 6 tháng 8.
Cơ chế TONTOU: Thời điểm vô hiệu hóa so với thời điểm sử dụng
Mỗi biện pháp phòng vệ hiện nay đều làm sạch hoặc cô lập trạng thái bộ dự đoán nhánh để quá trình huấn luyện trước đó của kẻ tấn công không thể điều hướng một nhánh kernel. Intel thực hiện việc này khi vào kernel (kernel entry) với eIBRS, trong khi AMD thực hiện ngay trước mỗi lần kernel trả về (kernel return) với saferet.
Tất cả các biện pháp này đều giả định rằng không có mã độc hại nào chạy ở giữa quá trình đó. Trujillo và Yan gọi lớp lỗ hổng này là TONTOU (Time-of-Neutralization to Time-of-Use), dựa trên lỗi TOCTOU (Time-of-Check to Time-of-Use) quen thuộc trong phần mềm. Các ngắt (interrupts) đã phá vỡ giả định này vì chúng có thể kích hoạt ở hầu hết mọi nơi và Linux cho phép bất kỳ người dùng nào lên lịch chúng với độ chính xác đến từng nano giây.
Nếu việc xử lý ngắt có thể thực thi giữa lúc vô hiệu hóa và lúc sử dụng, thì đường dẫn trả về từ ngắt (interrupt-return path) sẽ trở thành một phần của hệ thống phòng thủ Spectre v2, ngay cả khi biện pháp giảm thiểu được thiết kế xoay quanh kernel entry hoặc return.
Trên Zen 2, cửa sổ thời gian này chỉ kéo dài hai lệnh (instruction), tương đương sáu byte. Các nhà nghiên cứu đã tăng khả năng thành công bằng cách đẩy các byte đó ra khỏi bộ nhớ đệm L1 và L2 bằng một luồng hyperthread đồng cấp để làm chậm chúng, đồng thời chọn syscall ghi (write syscall) để kiểm soát hai thanh ghi.
Các ngắt đã rơi vào cửa sổ này từ 5% đến 12% thời gian. Khi đã vào được bên trong, chính trình xử lý (handler) sẽ trở thành công cụ huấn luyện (training gadget), được trang bị Inception (CVE-2023-20569) để lấp đầy return stack buffer bằng một mục tiêu do kẻ tấn công chọn. Inception chính là lỗ hổng AMD năm 2023 mà cơ chế saferet được sinh ra để ngăn chặn.
Thử nghiệm thực tế và Đề xuất giải pháp
Dự đoán sai (Misprediction) đã xuất hiện trong mã kernel trên ba trong số bốn máy được thử nghiệm, với tỷ lệ thành công là 0,75% trên Zen 2, 0,22% trên Intel Arrow Lake và 0,037% trên Cascade Lake Refresh. Zen 4 không tạo ra dự đoán sai nào trong thử nghiệm đó và chưa có vụ rò rỉ đầu-cuối nào được trình diễn trên Intel.
Tuy nhiên, các nhà nghiên cứu không coi đó là một rào cản. Họ cho biết dự đoán sai là "điều kiện cần nhưng chưa đủ cho một cuộc tấn công Spectre", và vì các nghiên cứu trước đây đã chỉ ra rằng các gadget rò rỉ tồn tại trong kernel, họ tin rằng một cuộc tấn công toàn diện là khả thi trên cả Intel bằng cách kết hợp kỹ thuật Interrupt Injection này.
Giải pháp khắc phục được đề xuất là thực hiện neutralization lần thứ hai khi thoát khỏi một ngắt: lấp đầy return stack buffer trước lệnh iret, hoặc phát lệnh IBHF trên các dòng chip Intel mới hơn. Việc chặn các ngắt trong suốt chiều dài của cửa sổ thời gian sẽ gây ra chi phí hiệu năng mà nghiên cứu chưa định lượng được.
Nhóm nghiên cứu đã trình bày công trình này tại Black Hat USA và dự kiến sẽ tiếp tục tại USENIX Security ở Baltimore vào tuần tới.