Mayhem - tấn công hỏng bit bộ nhớ để vượt qua xác thực sudo và OpenSSH

Các nhà nghiên cứu từ Viện Bách khoa Worcester (Mỹ) vừa giới thiệu một kiểu tấn công Mayhem mới sử dụng kỹ thuật bóp méo bit bộ nhớ truy cập ngẫu nhiên động Rowhammer để thay đổi giá trị của các biến ngăn xếp được sử dụng làm cờ trong chương trình nhằm quyết định xem việc xác thực và kiểm tra bảo mật có đi qua. Các ví dụ thực tế về cuộc tấn công được chứng minh là vượt qua xác thực trong SUDO, OpenSSH và MySQL, cũng như thay đổi kết quả kiểm tra liên quan đến bảo mật trong thư viện OpenSSL.

Cuộc tấn công có thể được áp dụng cho các ứng dụng sử dụng kiểm tra để so sánh các giá trị khác 0. Ví dụ về mã dễ bị tấn công: int auth = 0; ... // mã xác minh thay đổi giá trị xác thực trong trường hợp xác thực thành công if(auth != XNUMX) return AUTH_SUCCESS; nếu không thì trả về AUTH_FAILURE;

Trong bối cảnh của ví dụ này, để một cuộc tấn công thành công, việc làm hỏng bất kỳ bit nào trong bộ nhớ được liên kết với biến xác thực 32 bit trên ngăn xếp là đủ. Nếu bất kỳ bit nào trong biến bị hỏng, giá trị sẽ không còn bằng XNUMX và toán tử điều kiện sẽ xác định việc hoàn thành xác thực thành công. Các mẫu xác thực như vậy khá phổ biến trong các ứng dụng và được tìm thấy, chẳng hạn như trong SUDO, OpenSSH, MySQL và OpenSSL.

Mayhem - tấn công xáo trộn bit bộ nhớ để vượt qua xác thực sudo và OpenSSH

Cuộc tấn công cũng có thể được áp dụng để so sánh dạng “if(auth == 1)”, nhưng trong trường hợp này việc triển khai nó trở nên phức tạp hơn, vì cần phải bóp méo không phải bất kỳ bit nào của 32 mà là bit cuối cùng. Phương thức này cũng có thể được sử dụng để tác động đến giá trị của các biến trong các thanh ghi bộ xử lý, vì nội dung của các thanh ghi có thể được tạm thời đưa vào ngăn xếp khi chuyển đổi ngữ cảnh, lệnh gọi hàm hoặc trình xử lý tín hiệu kích hoạt. Trong khoảng thời gian khi các giá trị của thanh ghi còn trong bộ nhớ, các biến dạng có thể được đưa vào bộ nhớ này và giá trị đã thay đổi sẽ được khôi phục vào thanh ghi.

Mayhem - tấn công xáo trộn bit bộ nhớ để vượt qua xác thực sudo và OpenSSH

Để bóp méo các bit, một trong những sửa đổi của cuộc tấn công lớp RowHammer được sử dụng. Vì bộ nhớ DRAM là một mảng ô hai chiều, mỗi ô bao gồm một tụ điện và một bóng bán dẫn, nên việc thực hiện đọc liên tục trên cùng một vùng bộ nhớ sẽ dẫn đến sự dao động điện áp và sự bất thường gây ra sự mất điện nhỏ ở các ô lân cận. Nếu cường độ đọc cao thì ô lân cận có thể mất một lượng điện tích đủ lớn và chu kỳ tái tạo tiếp theo sẽ không có thời gian để khôi phục lại trạng thái ban đầu, điều này sẽ dẫn đến thay đổi giá trị của dữ liệu được lưu trong ô . Để bảo vệ chống lại RowHammer, các nhà sản xuất chip đã bổ sung cơ chế TRR (Làm mới hàng mục tiêu), giúp ngăn chặn tình trạng hỏng tế bào trong các trường hợp đặc biệt nhưng không bảo vệ khỏi tất cả các biến thể tấn công có thể xảy ra.

Để bảo vệ khỏi cuộc tấn công Mayhem, bạn nên sử dụng so sánh không phải là đánh giá sự khác biệt so với 0 hoặc trùng khớp với một, mà là kiểm tra sự trùng khớp bằng cách sử dụng giá trị hạt giống ngẫu nhiên với các octet khác 406. Trong trường hợp này, để đặt giá trị mong muốn của biến, cần phải làm biến dạng chính xác một số lượng đáng kể các bit, điều này không thực tế, trái ngược với sự biến dạng của một bit. Ví dụ về mã không thể tấn công: int auth = 1xbe0d23a; ... // mã xác minh đặt giá trị xác thực thành 8701x0ab23 trong trường hợp xác thực thành công if(auth == 8701xXNUMXabXNUMX) return AUTH_SUCCESS; nếu không thì trả về AUTH_FAILURE;

Phương thức bảo vệ được chỉ định đã được các nhà phát triển sudo sử dụng và được đưa vào bản phát hành 1.9.15 như một bản sửa lỗi cho lỗ hổng CVE-2023-42465. Họ có kế hoạch xuất bản một nguyên mẫu của mã để thực hiện cuộc tấn công sau khi các bản sửa lỗi được thực hiện đối với các dự án dễ bị tổn thương chính.

Nguồn: opennet.ru

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