Lỗ hổng macOS iOS nghiêm trọng: Vượt ASLR bằng rò rỉ con trỏ

Nghiên cứu từ Jann Horn, chuyên gia của Google Project Zero, đã công bố một lỗ hổng macOS iOS mới lạ. Lỗ hổng này có khả năng cho phép kẻ tấn công vượt qua các biện pháp bảo vệ Address Space Layout Randomization (ASLR) thông qua việc rò rỉ con trỏ (pointer leaks) trong quá trình tuần tự hóa (serialization).
Cụ thể, lỗ hổng macOS iOS này khai thác một kỹ thuật tinh vi tận dụng các cấu trúc dữ liệu được khóa bằng con trỏ (pointer-keyed data structures) trong framework tuần tự hóa NSKeyedArchiver của Apple. Kỹ thuật này cho phép rò rỉ địa chỉ bộ nhớ mà không cần đến các vi phạm an toàn bộ nhớ (memory safety violations) hoặc các cuộc tấn công thời gian (timing attacks) phức tạp.
Kẻ tấn công có thể thực hiện cuộc tấn công khi một ứng dụng trên macOS hoặc iOS thực hiện giải tuần tự hóa (deserializes) dữ liệu độc hại do kẻ tấn công cung cấp. Sau đó, ứng dụng sẽ tuần tự hóa lại (re-serializes) các đối tượng kết quả và trả lại dữ liệu đã tuần tự hóa này cho kẻ tấn công.
Jann Horn đã phát hiện vấn đề này trong các cuộc thảo luận nội bộ của nhóm Project Zero về các kỹ thuật rò rỉ ASLR từ xa (remote ASLR leaks). Đây là những kỹ thuật cơ bản và cần thiết để khai thác một số lỗi hỏng bộ nhớ (memory corruption bugs) nghiêm trọng trên các thiết bị của Apple.
Mặc dù không xác định được bề mặt tấn công thực tế cụ thể nào có thể bị ảnh hưởng trực tiếp trên macOS hoặc iOS, Horn đã minh họa thành công kỹ thuật rò rỉ con trỏ này. Ông đã sử dụng tuần tự hóa NSKeyedArchiver trong một trường hợp thử nghiệm nhân tạo để chứng minh khả năng hoạt động của nó.
Cơ chế Hoạt động của Kỹ thuật ASLR Bypass
Kỹ thuật khai thác lỗ hổng macOS iOS này tận dụng một số thành phần chính của framework Core Foundation của Apple. Để hiểu rõ mức độ nghiêm trọng của lỗ hổng nghiêm trọng này, cần có cái nhìn tổng quan về ASLR và vai trò của các cấu trúc dữ liệu trong việc lưu trữ và xử lý địa chỉ bộ nhớ.
Address Space Layout Randomization (ASLR) là một biện pháp bảo mật cốt lõi trong các hệ điều hành hiện đại, bao gồm cả macOS và iOS. Mục tiêu của ASLR là ngẫu nhiên hóa vị trí của các vùng bộ nhớ quan trọng (như heap, stack, thư viện) của một quy trình trong không gian địa chỉ. Điều này gây khó khăn đáng kể cho kẻ tấn công trong việc dự đoán địa chỉ chính xác của mã và dữ liệu, từ đó làm giảm khả năng thực hiện các cuộc tấn công khai thác lỗi hỏng bộ nhớ (memory corruption exploits) một cách đáng tin cậy.
Bằng cách làm rò rỉ địa chỉ con trỏ một cách có kiểm soát, kỹ thuật này giúp kẻ tấn công xác định chính xác vị trí các thành phần quan trọng trong bộ nhớ. Điều này vô hiệu hóa hiệu quả mục tiêu của ASLR, mở đường cho các cuộc tấn công khai thác lỗi hỏng bộ nhớ vốn trước đây bị ASLR cản trở.
Khai thác NSNull Singleton để rò rỉ địa chỉ
Điểm yếu đầu tiên trong lỗ hổng macOS iOS này nằm ở việc khai thác thể hiện singleton của CFNull. Thể hiện này được lưu trữ trong bộ đệm chia sẻ (shared cache) của hệ thống.
Điều đáng chú ý là CFNull, khi không có trình xử lý băm tùy chỉnh nào được cung cấp, sẽ sử dụng chính địa chỉ con trỏ của nó làm mã băm (hash codes). NSNull là một đối tượng đặc biệt trong các framework Cocoa/Cocoa Touch, thường được dùng để biểu thị sự vắng mặt của một giá trị (tương tự như null trong các ngôn ngữ khác nhưng là một đối tượng thực tế).
Việc xử lý NSNull như một singleton với địa chỉ con trỏ làm mã băm tạo ra một kênh thông tin tiềm ẩn. Kẻ tấn công có thể truy vấn hoặc suy ra địa chỉ này thông qua các thao tác tuần tự hóa.
Thao tác Bảng Băm NSDictionary
Bước tiếp theo trong kỹ thuật khai thác là khả năng thao túng các bảng băm của đối tượng NSDictionary. Kẻ tấn công có thể chèn các khóa NSNumber được chọn lọc cẩn thận vào NSDictionary.
Các khóa NSNumber này được thiết kế để ánh xạ tới các vùng băm (hash buckets) cụ thể trong cấu trúc dữ liệu của NSDictionary, từ đó tạo ra các mẫu và trật tự dự đoán được trong cấu trúc dữ liệu nội bộ. NSDictionary là một lớp cơ bản trong Objective-C để quản lý các cặp khóa-giá trị, và hành vi băm của nó, đặc biệt khi các đối tượng được sử dụng làm khóa, trở thành một vector tấn công quan trọng.
Việc chèn các khóa một cách có chủ đích cho phép kiểm soát một phần cấu trúc bên trong của bảng băm, tạo điều kiện thuận lợi cho việc rò rỉ thông tin.
Phân tích Thứ tự Tuần tự hóa để Giải mã Thông tin
Sau khi thao túng bảng băm, kẻ tấn công sẽ phân tích thứ tự của các khóa trong các đối tượng NSDictionary đã được tuần tự hóa lại. Bằng cách này, họ có thể xác định vị trí của các vùng băm và trích xuất thông tin quan trọng về địa chỉ bộ nhớ.
Quy trình này liên quan đến việc gửi khoảng 50KB dữ liệu tuần tự hóa được tạo đặc biệt đến ứng dụng mục tiêu. Dữ liệu này chứa nhiều thể hiện NSDictionary với các mẫu cụ thể của khóa NSNumber và NSNull.
Khi ứng dụng mục tiêu giải tuần tự hóa dữ liệu độc hại này và sau đó tuần tự hóa lại, thứ tự của các phần tử trong đầu ra sẽ tiết lộ thông tin về địa chỉ bộ nhớ của singleton NSNull. Địa chỉ này chính là mục tiêu mà kẻ tấn công muốn làm rò rỉ để vượt qua ASLR.
Ảnh hưởng và Rủi ro Tiềm ẩn của lỗ hổng macOS iOS
Mặc dù lỗ hổng macOS iOS này chỉ là một cuộc tấn công lý thuyết và chưa có tác động thực tế nào được chứng minh, nó cho thấy một khía cạnh đáng lo ngại. Cụ thể, cách thức băm dựa trên con trỏ (pointer-based hashing) trong các cấu trúc dữ liệu được khóa có thể dẫn đến rò rỉ địa chỉ bộ nhớ trong các điều kiện cụ thể.
Kỹ thuật rò rỉ con trỏ này có thể được kết hợp với các khai thác khác để vô hiệu hóa các biện pháp bảo vệ ASLR. Điều này đặc biệt nguy hiểm vì việc vượt qua ASLR thường là bước đầu tiên và quan trọng nhất trong chuỗi khai thác phức tạp, giúp các cuộc tấn công hỏng bộ nhớ trở nên đáng tin cậy hơn và dễ thực hiện hơn.
Nghiên cứu này dựa trên các công trình trước đây về tấn công va chạm băm (hash collision attacks) và thể hiện các phương pháp mới để tiết lộ thông tin nhạy cảm thông qua các cơ chế tuần tự hóa. Nó mở ra một lĩnh vực nghiên cứu mới về các vector tấn công tiềm ẩn trong các framework hệ thống.
Biện pháp Giảm thiểu và Bản vá Bảo mật của Apple
Apple đã nhanh chóng khắc phục lỗ hổng macOS iOS này trong các bản phát hành bảo mật vào ngày 31 tháng 3 năm 2025. Việc này cho thấy sự quan tâm của Apple đối với các phát hiện về bảo mật, ngay cả khi chúng là lý thuyết và chưa có bằng chứng khai thác trong thực tế.
Biện pháp giảm thiểu mạnh mẽ nhất được đề xuất bao gồm việc tránh sử dụng địa chỉ đối tượng làm khóa tra cứu trong các cấu trúc dữ liệu. Thay vào đó, nên triển khai các hàm băm được khóa (keyed hash functions) có khả năng chống lại các cuộc tấn công suy luận địa chỉ. Điều này giúp giảm thiểu khả năng rò rỉ địa chỉ xuống mức các oracle bằng con trỏ (pointer equality oracles), nơi chỉ có thể xác định hai con trỏ có bằng nhau hay không, chứ không phải giá trị địa chỉ thực tế của chúng.
Project Zero đã báo cáo vấn đề này trực tiếp cho Apple mà không công khai trên hệ thống theo dõi lỗi công khai của họ. Lý do chính là thiếu các bề mặt tấn công thực tế đã được chứng minh tại thời điểm báo cáo, nhưng nó vẫn dẫn đến việc phát hành một bản vá bảo mật quan trọng.
Việc tiết lộ về lỗ hổng macOS iOS này một lần nữa nhấn mạnh tầm quan trọng của các thực hành tuần tự hóa an toàn (secure serialization practices) và các hệ lụy bảo mật tiềm tàng của các cơ chế băm dựa trên con trỏ trong các framework hệ thống. Các nhà phát triển cần đặc biệt cảnh giác với cách các đối tượng được tuần tự hóa và giải tuần tự hóa, đặc biệt khi quá trình này liên quan đến dữ liệu do người dùng hoặc kẻ tấn công cung cấp.









