Tóm tắt nhanh
- CPU thực thi suy đoán để xử lý trước nhánh lệnh có khả năng được dùng, thay vì ngồi chờ mọi điều kiện được giải quyết.
- Nếu đoán sai, kết quả kiến trúc bị hủy nhưng trạng thái vi kiến trúc như cache vẫn có thể lưu dấu vết.
- Spectre khai thác kênh phụ đó để suy ra dữ liệu mà chương trình bình thường không được phép đọc.
- Tắt biện pháp giảm thiểu có thể giúp một số CPU cũ nhanh hơn trong một số tác vụ, nhưng không phải lựa chọn an toàn mặc định.
CPU hiện đại thường bắt đầu xử lý một nhánh lệnh trước khi biết chắc chương trình có cần nhánh đó hay không. Cách làm này giảm thời gian chờ, nhưng Spectre cho thấy việc hủy một phán đoán sai không đồng nghĩa mọi dấu vết của nó biến mất.
Thực thi suy đoán khác với chạy lệnh ngoài thứ tự

CPU dùng dự đoán nhánh để đoán chương trình sẽ đi theo hướng nào, rồi thực thi trước các lệnh ở hướng đó. Nếu đoán đúng, kết quả được giữ lại; nếu sai, CPU bỏ kết quả và quay về đường đi đúng. Cơ chế này giúp tận dụng thời gian trong lúc chờ dữ liệu hoặc điều kiện của nhánh được xác định.
Khái niệm chạy lệnh ngoài thứ tự có lịch sử lâu hơn, nhưng không đồng nghĩa với thực thi suy đoán. CDC 6600 năm 1964 có thể chạy một lệnh độc lập trước khi lệnh khác hoàn tất; CPU khi đó vẫn biết lệnh được đưa lên trước là cần thiết. Intel Pentium Pro năm 1995 là bộ xử lý x86 đầu tiên triển khai đầy đủ thực thi suy đoán theo cách được dùng trong các CPU hiện đại.
Khác biệt này quan trọng vì Spectre không khai thác đơn thuần việc đổi thứ tự lệnh. Nó tác động đến cách bộ xử lý dự đoán nhánh và xử lý dữ liệu trong lúc chờ xác nhận điều kiện.
Lệnh bị hủy vẫn có thể để lại dấu vết trong cache
Khi CPU phát hiện dự đoán sai, nó không ghi kết quả sai đó thành trạng thái kiến trúc mà chương trình có thể đọc trực tiếp. Tuy nhiên, quá trình thực thi tạm thời có thể làm thay đổi trạng thái vi kiến trúc, gồm cache, bộ đệm và bộ dự đoán nhánh. Intel mô tả chính chênh lệch này là cơ sở cho các phương thức tấn công kênh phụ liên quan đến thực thi suy đoán.
Spectre lợi dụng việc một chương trình có thể khiến bộ dự đoán chọn nhánh sai trong lúc xử lý dữ liệu nhạy cảm. Dù CPU sau đó hủy thao tác suy đoán, một phần dữ liệu đã được truy cập có thể ảnh hưởng đến cache. Kẻ tấn công đo thời gian truy cập những vùng nhớ khác nhau để suy ra thông tin từng phần; đây là đọc lén qua dấu vết thời gian, không phải ghi đè hay sửa dữ liệu trong bộ nhớ.
Tài liệu Linux mô tả các biến thể Spectre nhắm vào dự đoán nhánh có điều kiện và nhánh gián tiếp. Rủi ro phụ thuộc vào mã có thể bị khai thác, dữ liệu mà tiến trình tiếp cận và những lớp bảo vệ đang bật; vì vậy không thể từ tên lỗ hổng suy ra rằng mọi máy đều đang bị tấn công.
Biện pháp giảm thiểu có thể đổi lấy một phần hiệu năng

Các lớp bảo vệ được bổ sung ở phần cứng, microcode, hệ điều hành và trình duyệt để hạn chế những đường khai thác khác nhau. Linux có thể dùng retpoline hoặc Enhanced IBRS cho một số tình huống Spectre biến thể 2; tài liệu kernel ghi nhận Enhanced IBRS hiệu quả hơn retpoline trên CPU x86 có hỗ trợ phần cứng này.
Chi phí hiệu năng không giống nhau giữa các máy và tác vụ. XDA dẫn thử nghiệm của Microsoft cho biết ảnh hưởng có thể đáng kể trên Intel Haswell thế hệ thứ tư và CPU cũ hơn, trong khi tác vụ ít qua lại giữa ứng dụng với kernel thường chịu ảnh hưởng ít hơn. Đây là kết quả gắn với cấu hình và khối lượng công việc cụ thể, không phải cam kết rằng tắt bảo vệ sẽ làm mọi máy nhanh lên.
Vì thế, các tiện ích hoặc thay đổi hệ thống cho phép tắt một số biện pháp giảm thiểu không nên được xem như tối ưu miễn phí. Một máy cũ có thể nhận được lợi ích ở một tác vụ nhất định, nhưng cũng mất lớp bảo vệ trước mã độc hoặc phần mềm không đáng tin cậy. Tài liệu Linux nêu rõ việc tắt Spectre biến thể 2 có thể khiến hệ thống cho phép rò rỉ dữ liệu.
Giữ hệ điều hành và microcode cập nhật là lựa chọn hợp lý hơn
Với máy dùng cho công việc hằng ngày, lựa chọn an toàn hơn là giữ các bản cập nhật hệ điều hành, trình duyệt và firmware từ nhà sản xuất, thay vì tắt giảm thiểu chỉ để theo đuổi mức tăng hiệu năng chưa chắc xuất hiện. Hệ thống Linux còn cung cấp trạng thái giảm thiểu qua các tệp trong /sys/devices/system/cpu/vulnerabilities/, giúp quản trị viên xem máy đang được bảo vệ theo cách nào.
Spectre được phát hiện vào tháng 6/2017 và công bố rộng rãi vào tháng 1/2018 sau khi các hãng chip được cảnh báo. Những biện pháp giảm thiểu đã hạn chế các cách khai thác ban đầu, nhưng bản chất dự đoán nhánh vẫn tồn tại trong thiết kế CPU hiệu năng cao. Điều đó khiến cập nhật bảo mật và cấu hình phù hợp đáng tin cậy hơn việc tắt bảo vệ trên diện rộng.
Nguồn tham khảo: Intel; Linux Kernel Documentation; XDA Developers







