Retbleed là một cuộc tấn công mới vào cơ chế thực thi suy đoán của CPU Intel và AMD

Một nhóm các nhà nghiên cứu từ ETH Zurich đã xác định được một cuộc tấn công mới vào cơ chế thực hiện suy đoán các chuyển đổi gián tiếp trong CPU, khiến nó có thể trích xuất thông tin từ bộ nhớ kernel hoặc tổ chức một cuộc tấn công vào hệ thống máy chủ từ máy ảo. Các lỗ hổng có tên mã Retbleed (CVE-2022-29900, CVE-2022-29901) và có bản chất gần giống với các cuộc tấn công Spectre-v2. Sự khác biệt nằm ở việc tổ chức thực thi mã tùy ý theo cách suy đoán khi xử lý lệnh “ret” (return), lệnh này tìm nạp địa chỉ để nhảy từ ngăn xếp, thay vì nhảy gián tiếp bằng lệnh “jmp”, tải địa chỉ từ bộ nhớ hoặc thanh ghi CPU.

Kẻ tấn công có thể tạo điều kiện cho việc dự đoán chuyển tiếp không chính xác và tổ chức chuyển đổi mang tính suy đoán, có mục tiêu sang một khối mã không được logic thực thi chương trình cung cấp. Cuối cùng, bộ xử lý sẽ xác định rằng dự đoán nhánh không hợp lý và sẽ khôi phục hoạt động về trạng thái ban đầu, nhưng dữ liệu được xử lý trong quá trình thực thi suy đoán sẽ kết thúc trong bộ nhớ đệm và bộ đệm vi kiến ​​trúc. Nếu một khối được thực thi sai truy cập vào bộ nhớ thì việc thực thi suy đoán của nó sẽ dẫn đến việc dữ liệu đọc từ bộ nhớ được gửi vào bộ đệm chung.

Để xác định dữ liệu còn lại trong bộ nhớ đệm sau các hoạt động suy đoán, kẻ tấn công có thể sử dụng các kỹ thuật kênh bên để xác định dữ liệu còn sót lại, chẳng hạn như phân tích các thay đổi về thời gian truy cập vào dữ liệu được lưu trong bộ nhớ đệm và không được lưu trong bộ nhớ đệm. Để trích xuất thông tin có mục đích từ các khu vực ở cấp đặc quyền khác (ví dụ: từ bộ nhớ kernel), "tiện ích" được sử dụng - chuỗi lệnh có trong kernel phù hợp để đọc dữ liệu suy đoán từ bộ nhớ tùy thuộc vào các điều kiện bên ngoài có thể bị ảnh hưởng bởi kẻ tấn công.

Để bảo vệ chống lại các cuộc tấn công lớp Spectre cổ điển sử dụng các lệnh nhảy có điều kiện và gián tiếp, hầu hết các hệ điều hành đều sử dụng kỹ thuật “retpoline”, dựa trên việc thay thế các hoạt động nhảy gián tiếp bằng lệnh “ret”, mà bộ xử lý sử dụng một đơn vị dự đoán trạng thái ngăn xếp riêng biệt. .không sử dụng khối dự đoán nhánh. Khi retpoline được giới thiệu vào năm 2018, người ta tin rằng các thao tác địa chỉ giống như Spectre là không thực tế đối với việc phân nhánh đầu cơ bằng cách sử dụng lệnh “ret”.

Các nhà nghiên cứu đã phát triển phương pháp tấn công Retbleed đã chứng minh khả năng tạo ra các điều kiện kiến ​​trúc vi mô để bắt đầu quá trình chuyển đổi suy đoán bằng cách sử dụng lệnh “ret” và đã xuất bản các công cụ làm sẵn để xác định chuỗi lệnh (tiện ích) phù hợp để khai thác lỗ hổng trong nhân Linux, trong đó các điều kiện đó biểu hiện.

Trong quá trình nghiên cứu, một cách khai thác đang hoạt động đã được chuẩn bị cho phép, trên các hệ thống có CPU Intel, trích xuất dữ liệu tùy ý từ bộ nhớ hạt nhân từ một quy trình không có đặc quyền trong không gian người dùng với tốc độ 219 byte mỗi giây và độ chính xác 98%. Trên bộ xử lý AMD, hiệu suất khai thác cao hơn nhiều—tốc độ rò rỉ là 3.9 KB mỗi giây. Như một ví dụ thực tế, chúng tôi trình bày cách sử dụng cách khai thác được đề xuất để xác định nội dung của tệp /etc/shadow. Trên các hệ thống có CPU Intel, cuộc tấn công nhằm xác định hàm băm mật khẩu người dùng root được thực hiện trong 28 phút và trên các hệ thống có CPU AMD - trong 6 phút.

Cuộc tấn công đã được xác nhận đối với các bộ xử lý Intel thế hệ 6-8 được phát hành trước quý 3 năm 2019 (bao gồm Skylake) và bộ xử lý AMD dựa trên vi kiến ​​trúc Zen 1, Zen 1+ và Zen 2 được phát hành trước quý 2021 năm 3. Trong các mẫu bộ xử lý mới hơn như AMD ZenXNUMX và Intel Alder Lake, cũng như trong bộ xử lý ARM, sự cố đã bị chặn bởi các cơ chế bảo vệ hiện có. Ví dụ: sử dụng hướng dẫn IBRS (Đầu cơ hạn chế nhánh gián tiếp) giúp bảo vệ khỏi các cuộc tấn công.

Một loạt các thay đổi đã được chuẩn bị cho nhân Linux và bộ ảo hóa Xen, những thay đổi này sẽ ngăn chặn sự cố trong phần mềm trên các CPU cũ hơn. Bản vá được đề xuất cho nhân Linux thay đổi 68 tệp, thêm 1783 dòng và xóa 387 dòng. Thật không may, việc bảo vệ này dẫn đến chi phí chung đáng kể - trong các văn bản được thực hiện trên bộ xử lý AMD và Intel, mức giảm hiệu suất được ước tính từ 14% xuống 39%. Tốt hơn nên sử dụng tính năng bảo vệ dựa trên hướng dẫn IBRS, có sẵn trong các thế hệ CPU Intel mới và được hỗ trợ bắt đầu bằng nhân Linux 4.19.

Trên bộ xử lý Intel, việc thay thế địa chỉ cho một bước nhảy gián tiếp mang tính suy đoán được thực hiện nhờ một tính năng xuất hiện khi xảy ra tràn thông qua giới hạn dưới (tràn dưới) trong Bộ đệm ngăn xếp trả về. Khi các điều kiện như vậy xảy ra, lệnh “ret” bắt đầu áp dụng logic lựa chọn địa chỉ tương tự như logic được sử dụng cho các bước nhảy gián tiếp thông thường. Hơn một nghìn vị trí đã được tìm thấy trong nhân Linux tạo điều kiện cho việc bắt đầu dòng chảy ngược như vậy và có thể truy cập được thông qua các lệnh gọi hệ thống.

Trên bộ xử lý AMD, việc thực thi suy đoán lệnh “ret” được thực hiện mà không cần tham chiếu đến bộ đệm dành riêng cho ngăn xếp (Ngăn xếp địa chỉ trả về) và đơn vị dự đoán nhánh coi lệnh “ret” không phải là trả về điều khiển mà là một nhánh gián tiếp và theo đó, sử dụng dữ liệu để dự đoán các chuyển đổi gián tiếp. Trong những điều kiện này, hầu như mọi hoạt động "ret" có thể truy cập được thông qua lệnh gọi hệ thống đều có thể bị khai thác.

Ngoài ra, một vấn đề khác cũng đã được xác định trong CPU AMD (CVE-2022-23825, Nhầm lẫn loại nhánh) liên quan đến việc triển khai các nhánh hư cấu - các điều kiện để dự đoán nhánh có thể xảy ra ngay cả khi không có lệnh nhánh cần thiết, điều này cho phép ảnh hưởng đến bộ đệm dự đoán nhánh không có hướng dẫn " ret". Tính năng này làm phức tạp đáng kể việc thực hiện bảo vệ và yêu cầu làm sạch bộ đệm dự đoán nhánh tích cực hơn. Việc bổ sung khả năng bảo vệ đầy đủ cho kernel dự kiến ​​sẽ tăng chi phí hoạt động thêm 209%.

Nguồn: opennet.ru

Thêm một lời nhận xét