Một lỗ hổng lớp Meltdown đã được phát hiện trong bộ xử lý AMD dựa trên vi kiến ​​trúc Zen+ và Zen 2

Một nhóm các nhà nghiên cứu từ Đại học Kỹ thuật Dresden đã xác định được một lỗ hổng (CVE-2020-12965) trong bộ xử lý AMD dựa trên vi kiến ​​trúc Zen+ và Zen 2, cho phép tấn công lớp Meltdown. Ban đầu, người ta cho rằng bộ xử lý AMD Zen+ và Zen 2 không dễ bị tổn thương bởi lỗ hổng Meltdown, nhưng các nhà nghiên cứu đã xác định được một tính năng dẫn đến quyền truy cập suy đoán vào các vùng bộ nhớ được bảo vệ khi sử dụng địa chỉ ảo không chính tắc.

Kiến trúc AMD64 chỉ sử dụng 48 bit đầu tiên của địa chỉ ảo và bỏ qua 16 bit còn lại. Người ta quy định rằng các bit từ 48 đến 63 phải luôn sao chép giá trị của bit 47 (phần mở rộng bit dấu). Nếu điều kiện này bị vi phạm và một nỗ lực được thực hiện để truy cập vào một địa chỉ có giá trị tùy ý của các bit trên, bộ xử lý sẽ tạo ra một ngoại lệ. Việc lấp đầy các bit trên nhiều lần sẽ làm cho không gian địa chỉ khả dụng được chia thành hai khối - khối thấp hơn (từ 0 đến 00007FFFFFFFFFFFFFFFF), trong đó các bit trên được đặt thành 800000000000 và khối trên (từ FFFF1 đến FFFFFFFFFFFFFFFFFF), trong đó tất cả các bit trên được đặt thành XNUMX.

Các địa chỉ nằm trong các khối được chỉ định được gọi là địa chỉ chuẩn và các địa chỉ không chính xác với nội dung tùy ý của các bit trên được gọi là không chuẩn. Phạm vi địa chỉ chuẩn thấp hơn thường được phân bổ cho dữ liệu quy trình và phạm vi trên được sử dụng cho dữ liệu hạt nhân (quyền truy cập vào các địa chỉ này từ không gian người dùng bị chặn ở cấp phân tách đặc quyền).

Lỗ hổng Meltdown cổ điển dựa trên thực tế là trong quá trình thực hiện các hướng dẫn mang tính suy đoán, bộ xử lý có thể truy cập vào vùng dữ liệu riêng tư và sau đó loại bỏ kết quả vì các đặc quyền đã đặt cấm quyền truy cập đó từ quy trình của người dùng. Trong chương trình, khối được thực thi suy đoán được tách khỏi mã chính bằng một nhánh có điều kiện, trong điều kiện thực tế luôn kích hoạt, nhưng do thực tế là câu lệnh điều kiện sử dụng một giá trị được tính toán mà bộ xử lý không biết trong quá trình thực thi ưu tiên của mã, tất cả các tùy chọn nhánh được thực hiện mang tính suy đoán.

Do các hoạt động được thực hiện theo suy đoán sử dụng cùng một bộ đệm như các lệnh được thực hiện thông thường, nên trong quá trình thực thi suy đoán có thể đặt các điểm đánh dấu trong bộ đệm phản ánh nội dung của các bit riêng lẻ trong vùng bộ nhớ riêng, sau đó trong mã được thực thi thông thường để xác định giá trị của chúng thông qua thời gian. phân tích 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.

Một đặc điểm của lỗ hổng mới ảnh hưởng đến bộ xử lý AMD Zen+ và Zen 2 là CPU cho phép các hoạt động đọc và ghi suy đoán truy cập bộ nhớ bằng các địa chỉ không chính tắc không hợp lệ, chỉ cần bỏ qua 16 bit trên. Do đó, trong quá trình thực thi mã suy đoán, bộ xử lý luôn chỉ sử dụng 48 bit thấp hơn và tính hợp lệ của địa chỉ được kiểm tra riêng. Nếu, khi dịch một địa chỉ ảo không chính tắc sang địa chỉ vật lý trong bộ đệm dịch kết hợp (TLB), phát hiện thấy sự trùng khớp trong phần chính tắc của địa chỉ thì hoạt động tải suy đoán sẽ trả về giá trị mà không tính đến nội dung trong số 16 bit trên, cho phép bỏ qua việc chia sẻ bộ nhớ giữa các luồng. Sau đó, thao tác sẽ bị coi là không hợp lệ và bị loại bỏ, nhưng việc truy cập bộ nhớ sẽ hoàn tất và dữ liệu sẽ nằm trong bộ đệm.

Trong quá trình thử nghiệm, sử dụng kỹ thuật xác định nội dung của bộ đệm FLUSH+RELOAD, các nhà nghiên cứu đã có thể tổ chức một kênh để truyền dữ liệu ẩn với tốc độ 125 byte mỗi giây. Ngoài chip AMD, vấn đề này còn ảnh hưởng đến tất cả các bộ xử lý Intel vốn dễ bị tổn thương Meltdown cổ điển. Các kỹ thuật tương tự giúp chặn các cuộc tấn công Meltdown, chẳng hạn như sử dụng hướng dẫn LFENCE, có thể được sử dụng để bảo vệ chống lại kiểu tấn công mới này. Ví dụ: nếu bộ xử lý Intel bao gồm tính năng bảo vệ phần cứng chống lại Meltdown hoặc hệ thống đã bật tính năng bảo vệ phần mềm thì những cấu hình như vậy sẽ không dễ bị ảnh hưởng bởi biến thể tấn công mới.

Đồng thời, các nhà nghiên cứu lưu ý rằng, so với bộ xử lý Intel, kiến ​​trúc của bộ xử lý AMD hạn chế khả năng thực hiện các cuộc tấn công thực sự, nhưng không loại trừ việc sử dụng phương pháp mới kết hợp với các cuộc tấn công vi kiến ​​trúc khác để tăng hiệu quả của chúng. Đặc biệt, cuộc tấn công được đề xuất không cho phép xác định nội dung vùng bộ nhớ của kernel và các tiến trình khác, nhưng bị giới hạn ở khả năng truy cập vào các luồng khác của cùng một chương trình đang chạy trong cùng một không gian bộ nhớ ảo.

Vì một chương trình không có lỗ hổng có khả năng truy cập vào các luồng của nó, nên từ quan điểm thực tế, phương pháp này được quan tâm để vượt qua sự cô lập hộp cát và tổ chức can thiệp vào công việc của các luồng khác trong các chương trình cho phép thực thi của bên thứ ba. mã, chẳng hạn như trình duyệt web và công cụ JIT. Các nhà nghiên cứu đã kiểm tra lỗ hổng của công cụ JavaScript SpiderMonkey và nhân Linux để tấn công, nhưng không tìm thấy các chuỗi mã dễ bị tấn công có thể được sử dụng để thực hiện một cuộc tấn công. Ngoài việc tấn công các ứng dụng, phương pháp này còn có thể được sử dụng để buộc các luồng dữ liệu không được chấp nhận giữa các thành phần vi kiến ​​trúc của bộ xử lý trong khi khai thác các lỗ hổng vi kiến ​​trúc khác.

Nguồn: opennet.ru

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