Tiết lộ chiến dịch tấn công Operation Triangulation

13:36 | 26/02/2024

Operation Triangulation là một chiến dịch phức tạp nhắm vào thiết bị iOS trong các cuộc tấn công zero-click. Tạp chí An toàn thông tin đã từng cung cấp một số bài viết liên quan đến chiến dịch này, như giải mã tính năng che giấu của phần mềm độc hại TriangleDB, những cuộc tấn công zero-day trên thiết bị iOS hay giới thiệu cách sử dụng công cụ bảo mật phát hiện tấn công zero-click. Tiếp nối chuỗi bài viết về chiến dịch Operation Triangulation, bài viết sẽ phân tích các phương thức khai thác, tấn công chính của tin tặc trong chuỗi tấn công này, dựa trên báo cáo của hãng bảo mật Kaspersky.

Chuỗi tấn công của Operation Triangulation

Tháng 6/2023, các nhà nghiên cứu của Kaspersky đã phát hiện một chiến dịch tấn công APT nhắm mục tiêu vào các thiết bị iOS. Với tên gọi là Operation Triangulation, chiến dịch này sử dụng một phương pháp tinh vi để thực hiện các hoạt động khai thác zero-click thông qua ứng dụng iMessage, từ đó phân phối tệp đính kèm độc hại có thể giành quyền kiểm soát hoàn toàn đối với dữ liệu người dùng và thiết bị, với mục tiêu nhắm vào các nhà ngoại giao và các quan chức chính phủ.

Để có góc nhìn tổng quan về chiến dịch tấn công Operation Triangulation, dưới đây là nội dung khái quát về cuộc tấn công iMessage zero-click. Cuộc tấn công này sử dụng bốn lỗ hổng zero-day, bao gồm CVE-2023-32434, CVE-2023-32435, CVE-2023-38606, CVE-2023-41990 và được thiết kế để hoạt động trên các phiên bản iOS lên đến phiên bản 16.2.

  • Đầu tiên, những kẻ tấn công gửi một tệp đính kèm iMessage độc ​​hại mà ứng dụng này xử lý nhưng không hiển thị bất kỳ dấu hiệu nào cho người dùng. Tệp đính kèm này khai thác lỗ hổng thực thi mã từ xa CVE-2023-41990 chỉ dành cho Apple.
  • Phầm mềm độc hại sử dụng các kỹ thuật lập trình Return/Jump-Oriented Programming và nhiều giai đoạn được viết bằng ngôn ngữ truy vấn NSExpression/NSPredicate, vá môi trường thư viện JavaScriptCore để thực thi khai thác leo thang đặc quyền được viết bằng JavaScript.
  • Việc khai thác JavaScript được làm xáo trộn để khiến cho nó hoàn toàn không thể đọc được và giảm thiểu kích thước. Tuy nhiên, phần mềm độc hại có khoảng 11.000 dòng mã, chủ yếu dành riêng cho JavaScriptCore cũng như phân tích và thao tác bộ nhớ kernel.
  • Phần mềm độc hại khai thác tính năng gỡ lỗi JavaScriptCore DollarVM ($vm) để có khả năng thao tác bộ nhớ của JavaScriptCore từ tập lệnh và thực thi các hàm API gốc. Ngoài ra, phần mềm độc hại cũng được thiết kế để hỗ trợ cả thiết bị iPhone cũ và mới, đồng thời bao gồm tính năng vượt qua Pointer Authentication Code (PAC) để khai thác các mẫu gần đây.
  • Trong chiến dịch, các tin tặc khai thác lỗ hổng tràn số nguyên CVE-2023-32434 để có được quyền truy cập đọc/ghi vào toàn bộ bộ nhớ vật lý của thiết bị ở cấp độ người dùng. Phần mềm độc hại sử dụng các thanh ghi I/O được ánh xạ bộ nhớ phần cứng (MMIO) để vượt qua Page Protection Layer (PPL).
  • Sau khi khai thác tất cả các lỗ hổng, việc khai thác JavaScript có thể tùy biến trên thiết bị nạn nhân, bao gồm thực thi phần mềm gián điệp, nhưng những kẻ tấn công đã lựa chọn các quy trình sau: (1) Khởi chạy tiến trình IMAgent và tiêm (injection) một payload để xóa các thành phần khai thác khỏi thiết bị; (2) Chạy quy trình Safari ở chế độ ẩn và chuyển tiếp nó đến một trang web ở giai đoạn tiếp theo.
  • Trang web có một tập lệnh xác minh nạn nhân và nếu quá trình kiểm tra vượt qua, sẽ tiếp đến giai đoạn tiếp theo là khai thác Safari. Giai đoạn này các tin tặc khai thác lỗ hổng CVE-2023-32435 để thực thi shellcode.
  • Shellcode thực thi một khai thác kernel khác dưới dạng tệp đối tượng Mach. Nó sử dụng các lỗ hổng tương tự, bao gồm CVE-2023-32434 và CVE-2023-38606. Shellcode này cũng rất lớn về kích thước và chức năng, nhưng hoàn toàn khác với cách khai thác kernel được viết bằng JavaScript, hầu hết mã của shellcode cũng được dành riêng cho việc phân tích cú pháp và thao tác với bộ nhớ kernel.
  • Việc khai thác giúp các tin tặc giành được quyền root và tiến hành thực thi các giai đoạn khác, ví dụ tải phần mềm gián điệp.

Hình 1. Chuỗi tấn công trong chiến dịch Operation Triangulation

Các mẫu iPhone gần đây có tính năng bảo mật dựa trên phần cứng bổ sung cho các vùng nhạy cảm của bộ nhớ kernel. Tính năng này ngăn chặn kẻ tấn công có được toàn quyền kiểm soát thiết bị nếu chúng có thể đọc và ghi bộ nhớ kernel, như đã đạt được trong cuộc tấn công này bằng cách khai thác lỗ hổng CVE-2023-32434. Kaspersky phát hiện rằng để vượt qua biện pháp bảo mật dựa trên phần cứng này, những kẻ tấn công đã sử dụng một tính năng phần cứng khác của SoC do Apple thiết kế.

Nếu cố gắng mô tả tính năng này và cách những kẻ tấn công lợi dụng nó, thì có thể mô tả như sau: Tin tặc có thể ghi dữ liệu vào một địa chỉ vật lý nhất định trong khi vượt qua cơ chế bảo vệ bộ nhớ dựa trên phần cứng bằng cách ghi dữ liệu, địa chỉ đích và băm dữ liệu vào các thanh ghi phần cứng không xác định của chip mà firmware không sử dụng.

Các nhà nghiên cứu nhận định rằng tính năng phần cứng không xác định này rất có thể được các kỹ sư hoặc nhà máy của Apple sử dụng cho mục đích gỡ lỗi, thử nghiệm hoặc tính năng này được đưa vào do sự nhầm lẫn.

Chi tiết kỹ thuật

Các thiết bị ngoại vi khác nhau có sẵn trong SoC có thể cung cấp các thanh ghi phần cứng đặc biệt mà CPU có thể sử dụng để vận hành các thiết bị này. Để điều này hoạt động, các thanh ghi phần cứng được ánh xạ tới bộ nhớ mà CPU có thể truy cập được và được gọi là “memory-mapped I/O (MMIO)”.

Phạm vi địa chỉ cho MMIO của thiết bị ngoại vi trong các sản phẩm của Apple (iPhone, Mac và các thiết bị khác) được lưu trữ ở định dạng tệp đặc biệt: Device Tree - DT (đây là một tệp mô tả phần cứng, có kiểu định dạng giống JSON và mô tả một cấu trúc cây). Các tệp DT có thể được trích xuất từ ​​firmware và có thể xem nội dung của chúng.

Hình 2. Ví dụ về cách lưu trữ phạm vi MMIO trên thiết bị

Khi phân tích cách khai thác được sử dụng trong cuộc tấn công Operation Triangulation, các nhà nghiên cứu phát hiện ra rằng hầu hết các MMIO được kẻ tấn công sử dụng để vượt qua tính năng bảo vệ bộ nhớ kernel dựa trên phần cứng không thuộc bất kỳ phạm vi MMIO nào được xác định trong DT. Việc khai thác nhắm vào các SoC Bionic Apple A12-A16, nhắm mục tiêu các khối đăng ký MMIO không xác định được đặt tại các địa chỉ sau: 0x206040000, 0x206140000 và 0x206150000.

Các nhà nghiên cứu nhận ra rằng nên kiểm tra xem những MMIO nào đã biết khác nằm ở khu vực gần các khối MMIO chưa biết này. Cách tiếp cận đó đã thành công. Hình 3 thể hiện kết quả kết xuất (dump) DT cho gfx-asc, đó là GPU coprocessor.

Hình 3. Kết xuất (dump) DT cho gfx-asc

Nó có hai phạm vi MMIO: 0x206400000-0x20646C000 và 0x206050000-0x206050008.

Hình 4. Mối tương quan giữa phạm vi MMIO gfx-asc và các địa chỉ được sử dụng bởi kẻ tấn công

Nói chính xác hơn, việc khai thác sử dụng các địa chỉ không xác định sau: 0x206040000, 0x206140008, 0x206140108, 0x206150020, 0x206150040 và 0x206150048. Điều này cho thấy, hầu hết chúng nằm ở khu vực giữa hai vùng gfx-asc và vùng còn lại nằm gần điểm bắt đầu của vùng gfx-asc đầu tiên, dẫn đến việc tất cả các thanh ghi MMIO này rất có thể thuộc về GPU coprocessor.

Sau đó, các nhà nghiên cứu xem xét kỹ hơn cách khai thác và phát hiện một số vấn đề sau. Điều đầu tiên mà việc khai thác thực hiện trong quá trình khởi tạo là ghi vào một số thanh ghi MMIO khác, thanh ghi này nằm ở một địa chỉ khác cho mỗi SoC. Với sự trợ giúp của DT và tiện ích của Siguza, pmgr, các nhà nghiên cứu có thể phát hiện ra rằng tất cả các địa chỉ này đều tương ứng với thanh ghi GFX trong phạm vi MMIO của trình quản lý nguồn.

Hình 5. Mã giả (Pseudocode) cho mã kiểm soát trình quản lý nguồn GFX từ việc khai thác

Cuối cùng, các nhà nghiên cứu đã quyết định thử truy cập vào các thanh ghi nằm ở những vùng không xác định này. Gần như ngay lập tức, GPU coprocessor đưa ra thông báo “GFX SERROR Exception class=0x2f (SError interrupt), IL=1, iss=0 – power(1)”. Bằng cách này, các nhà nghiên cứu có thể xác nhận rằng tất cả các thanh ghi MMIO không xác định được sử dụng để khai thác đều thuộc về GPU coprocessor.

Các nhà nghiên cứu của Kaspersky quyết định xem xét kỹ hơn cách khai thác vận hành các thanh ghi MMIO không xác định này. Thanh ghi 0x206040000 nổi bật so với tất cả các thanh ghi còn lại vì nó nằm trong một khối MMIO riêng biệt với tất cả các thanh ghi khác. Nó chỉ được chạm vào trong giai đoạn khởi tạo và hoàn thiện quá trình khai thác, đây là thanh ghi đầu tiên được thiết lập trong quá trình khởi tạo và là thanh ghi cuối cùng trong quá trình hoàn thiện.

Sau đó, các nhà nghiên cứu đã có thể nhận ra thanh ghi không xác định này là  0x206040000, đồng thời phát hiện ra chính xác những gì được ánh xạ tới dải địa chỉ 0x206000000–0x206050000.

Hình 6. Mã giả để sử dụng thanh ghi 0x206040000 bằng cách khai thác

Các nhà nghiên cứu đã có thể so khớp hàm ml_dbgwrap_halt_cpu từ mã giả ở trên với một hàm có cùng tên trong tệp dbgwrap.c của mã nguồn XNU. Tệp này chứa mã để làm việc với các thanh ghi gỡ lỗi ARM CoreSight MMIO của CPU chính. Mã nguồn cho biết có bốn vùng MMIO liên quan đến CoreSight, được đặt tên là ED, CTI, PMU và UTT. Mỗi vùng chiếm 0x10000 byte và tất cả chúng đều nằm cạnh nhau.

Hàm ml_dbgwrap_halt_cpu sử dụng vùng UTT và mã nguồn cho biết, không giống như ba hàm còn lại, nó không đến từ ARM mà là một tính năng độc quyền của Apple được thêm vào chỉ để thuận tiện.

Các nhà nghiên cứu có thể xác nhận rằng 0x206000000–0x206050000 thực sự là một khối thanh ghi gỡ lỗi CoreSight MMIO cho GPU coprocessor bằng cách ghi ARM_DBG_LOCK_ACCESS_KEY vào vị trí tương ứng. Mỗi core của CPU chính có khối thanh ghi gỡ lỗi CoreSight MMIO riêng, nhưng không giống như GPU coprocessor, địa chỉ của chúng có thể được tìm thấy trong DT.

Tiến hành xem xét các thanh ghi chưa biết còn lại được sử dụng bởi kẻ tấn công, các thanh ghi 0x206140008 và 0x206140108 kiểm soát việc bật/tắt và chạy tính năng phần cứng được kẻ tấn công sử dụng.

Hình 7. Mã giả để sử dụng các thanh ghi 0x206140008 và 0x206140108 bằng cách khai thác

Thanh ghi 0x206150020 chỉ được sử dụng cho SoC Apple A15/A16 Bionic. Nó được đặt thành 1 trong giai đoạn khởi tạo khai thác và thành giá trị ban đầu trong giai đoạn hoàn thiện. Trong khi đó, thanh ghi 0x206150040 được sử dụng để lưu trữ một số cờ (flag) và phần sau của địa chỉ vật lý đích. Thanh ghi cuối cùng là 0x206150048, được sử dụng để lưu trữ dữ liệu cần ghi và phần trên của địa chỉ vật lý đích, được nhóm cùng với hàm băm dữ liệu và một giá trị khác (có thể là một lệnh). Tính năng phần cứng này ghi dữ liệu theo các khối 0x40 byte và mọi thứ được ghi vào thanh ghi 0x206150048 trong chín lần ghi liên tiếp.

Hình 8. Mã giả để sử dụng các thanh ghi 0x206150040 và 0x206150048 bằng cách khai thác

Điều kiện là mọi thứ được thực hiện chính xác, phần cứng sẽ thực hiện truy cập trực tiếp bộ nhớ trực tiếp (DMA - Đây là một ᴄơ ᴄhế truуền dữ liệu với tốᴄ độ ᴄao từ ngoại ᴠi tới bộ nhớ và từ bộ nhớ tới bộ nhớ) và ghi dữ liệu vào vị trí được yêu cầu. Như vậy, tất cả công việc với tất cả các thanh ghi MMIO đã được thực hiện, tiến hành xem xét một điều cuối cùng, đó là cách tính băm. Thuật toán được hiển thị qua Hình 9 dưới đây.

Hình 9. Mã giả cho hàm băm được sử dụng bởi tính năng phần cứng không xác định này

Như Hình 9, đây là một thuật toán tùy chỉnh và hàm băm được tính bằng cách sử dụng bảng sbox được xác định trước. Có thể nhận thấy rằng hàm băm này trông không an toàn vì nó chỉ chiếm 20 bit (10+10, vì được tính hai lần), nhưng nó vẫn thực hiện công việc của mình miễn là không ai biết cách tính toán và sử dụng nó.

Kết luận

Qua quá trình phân tích, Kaspersky cho biết còn nhiều vấn đề chưa được giải đáp, không rõ làm thế nào những kẻ tấn công học được cách sử dụng tính năng phần cứng không xác định hoặc mục đích ban đầu của nó là gì. Các nhà nghiên cứu cũng không biết liệu nó được phát triển bởi Apple hay là thành phần của bên thứ ba như ARM CoreSight.

Kaspersky đánh giá các biện pháp bảo vệ dựa trên phần cứng nâng cao sẽ không có tác dụng trước những kẻ tấn công tinh vi, miễn là có các tính năng phần cứng có thể vượt qua các biện pháp bảo vệ đó, qua đó khẳng định sự phức tạp trong chiến dịch Operation Triangulation.

TÀI LIỆU THAM KHẢO

[1]. https://securelist.com/operation-triangulation-the-last-hardware-mystery/111669/

[2]. https://antoanthongtin.gov.vn/an-toan-thong-tin/chien-dich-apt-triangulation-va-nhung-cuoc-tan-cong-zero-day-tren-cac-thiet-bi-ios-109447

[3]. https://antoanthongtin.gov.vn/hacker-malware/chien-dich-tan-cong-zero-click-bang-phan-mem-doc-hai-co-dac-quyen-root-tren-ios-nham-muc-tieu-vao-nha-ngoai-giao-quan-chuc-chinh-phu-109041