Bài viết này cho thấy cách các gadget thực thi suy đoán TIKTAG có thể rò rỉ thẻ bộ nhớ ARM MTE, cho phép các cuộc tấn công lỗi bộ nhớ thực tế chống lại Chrome và LinuxBài viết này cho thấy cách các gadget thực thi suy đoán TIKTAG có thể rò rỉ thẻ bộ nhớ ARM MTE, cho phép các cuộc tấn công lỗi bộ nhớ thực tế chống lại Chrome và Linux

Nghiên cứu Chi tiết các Cuộc Tấn công Thực tế Vượt qua Bảo vệ MTE trong Chrome và Linux

Tóm tắt

1. Giới thiệu

2. Bối cảnh

  • Phần mở rộng gắn thẻ bộ nhớ
  • Tấn công thực thi đầu cơ

3. Mô hình mối đe dọa

4. Tìm kiếm các Gadget rò rỉ thẻ

  • Mẫu rò rỉ thẻ
  • Fuzzing rò rỉ thẻ

5. Gadget TIKTAG

  • TIKTAG-v1: Khai thác thu hẹp đầu cơ
  • TIKTAG-v2: Khai thác chuyển tiếp Store-to-Load

6. Các cuộc tấn công thực tế

6.1. Tấn công Chrome

7. Đánh giá

8. Nghiên cứu liên quan

9. Kết luận và tài liệu tham khảo

\

Các cuộc tấn công thực tế

Để chứng minh khả năng khai thác của các gadget TIKTAG trong giảm thiểu dựa trên MTE, phần này phát triển hai cuộc tấn công thực tế chống lại Chrome và nhân Linux (Hình 9). Có một số thách thức khi phát động các cuộc tấn công thực tế sử dụng gadget TIKTAG. Đầu tiên, các gadget TIKTAG phải được thực thi trong không gian địa chỉ mục tiêu, yêu cầu kẻ tấn công xây dựng hoặc tìm gadget từ hệ thống mục tiêu. Thứ hai, kẻ tấn công phải kiểm soát và quan sát trạng thái bộ nhớ cache để rò rỉ kết quả kiểm tra thẻ. Trong phần sau, chúng tôi trình bày các cuộc tấn công thực tế sử dụng gadget TIKTAG trên hai hệ thống thực tế: trình duyệt Google Chrome (§6.1) và nhân Linux (§6.2), đồng thời thảo luận về các chiến lược giảm thiểu.

\ 6.1. Tấn công Chrome

Trình duyệt Web Trình duyệt web là bề mặt tấn công chính cho các cuộc tấn công dựa trên web vì nó xử lý nội dung web không đáng tin cậy, chẳng hạn như JavaScript và HTML. Trước tiên, chúng tôi tổng quan về mô hình mối đe dọa (§6.1.1) và cung cấp một gadget TIKTAG được xây dựng trong công cụ V8 JavaScript (§6.1.2). Sau đó, chúng tôi chứng minh hiệu quả của các gadget TIKTAG trong việc khai thác trình duyệt (§6.1.3) và thảo luận về các chiến lược giảm thiểu (§6.1.4).

\ ==6.1.1. Mô hình mối đe dọa.== Chúng tôi tuân theo mô hình mối đe dọa điển hình của các cuộc tấn công trình duyệt Chrome, trong đó kẻ tấn công nhằm khai thác các lỗ hổng hỏng bộ nhớ trong quá trình kết xuất. Chúng tôi giả định người dùng nạn nhân truy cập trang web do kẻ tấn công kiểm soát, phục vụ một trang web độc hại. Trang web bao gồm HTML và JavaScript được tạo thủ công, khai thác các lỗ hổng hỏng bộ nhớ trong quá trình kết xuất của nạn nhân. Chúng tôi giả định tất cả các kỹ thuật giảm thiểu hiện đại của Chrome đều được áp dụng, bao gồm ASLR [18], CFI [15], cách ly trang web [53], và V8 sandbox [56]. Ngoài ra, như một biện pháp phòng thủ trực giao, chúng tôi giả định rằng quá trình kết xuất cho phép gắn thẻ MTE ngẫu nhiên trong PartitionAlloc [2].

\ ==6.1.2. Xây dựng Gadget TIKTAG.== Trong môi trường V8 JavaScript, TIKTAG-v2 đã được xây dựng thành công và rò rỉ các thẻ MTE của bất kỳ địa chỉ bộ nhớ nào. Tuy nhiên, chúng tôi không tìm thấy gadget TIKTAG-v1 có thể xây dựng, vì ràng buộc thời gian chặt chẽ giữa BR và CHECK không khả thi trong kỹ thuật thoát V8 sandbox đầu cơ của chúng tôi (§A).

V8 TikTag-v2 Gadget. Hình 8 là gadget TIKTAG-v2 được xây dựng trong công cụ V8 JavaScript và mã giả C của nó sau khi biên dịch JIT. Với gadget này, kẻ tấn công có thể biết liệu thẻ đoán Tg có khớp với thẻ Tm được gán cho target_addr hay không. Kẻ tấn công chuẩn bị ba mảng, slow, victim, probe, và một giá trị idx. slow là một Unit8Array có độ dài 64 và được truy cập trong BR để kích hoạt dự đoán nhánh sai. victim là một Float64Array có độ dài 64, được truy cập để kích hoạt chuyển tiếp store-to-load. probe là một Uint8Array có độ dài 512, và được truy cập trong

\ TEST để rò rỉ kết quả kiểm tra thẻ. Giá trị idx kiểu Number được sử dụng trong truy cập ngoài giới hạn của victim. Giá trị idx được chọn sao cho victim[idx] trỏ đến targetaddr với thẻ đoán Tg (tức là, (Tg«56)|targetaddr). Để truy cập đầu cơ target_addr bên ngoài V8 sandbox, chúng tôi đã tận dụng kỹ thuật thoát V8 sandbox đầu cơ mà chúng tôi phát hiện trong quá trình nghiên cứu, được trình bày chi tiết trong §A. Dòng 8 của Hình 8a là khối BR của gadget TIKTAG-v2, kích hoạt dự đoán nhánh sai với slow[0].

\ Dòng 12-13 là khối CHECK, thực hiện chuyển tiếp store-to-load với victim[idx], truy cập target_addr với thẻ đoán Tg. Khi mã này được biên dịch JIT (Hình 8b), một kiểm tra giới hạn được thực hiện, so sánh idx với victim.length. Nếu idx là chỉ số ngoài giới hạn, mã trả về undefined, nhưng nếu trường victim.length mất nhiều thời gian để được tải, CPU thực thi đầu cơ các lệnh lưu trữ và tải sau đó.

\ Sau đó, dòng 17 triển khai khối TEST, truy cập probe với giá trị được chuyển tiếp val làm chỉ số. Một lần nữa, kiểm tra giới hạn trên val so với độ dài của probe được thực hiện trước, nhưng kiểm tra này thành công vì PROBEOFFSET nhỏ hơn độ dài của mảng probe. Kết quả là, probe[PROBEOFFSET] chỉ được lưu trong bộ nhớ cache khi chuyển tiếp store-to-load thành công, đó là trường hợp khi Tg khớp với Tm.

\ ==6.1.3. Tấn công bỏ qua MTE trên Chrome.== Hình 9a minh họa cuộc tấn công bỏ qua MTE tổng thể trên trình duyệt Chrome với nguyên hàm rò rỉ thẻ tùy ý của các gadget TIKTAG. Chúng tôi giả định một lỗ hổng tràn bộ đệm trong quá trình kết xuất, trong đó khai thác lỗ hổng tạm thời (ví dụ: use-after-free) phần lớn giống nhau. Lỗ hổng làm tràn một con trỏ (tức là, vuln_ptr) đến một đối tượng dễ bị tấn công (tức là, objvuln), làm hỏng đối tượng liền kề (tức là, objtarget).

\ Với việc thực thi MTE của PartitionAlloc, hai đối tượng có các thẻ khác nhau với xác suất 14/15. Để tránh gây ra ngoại lệ, kẻ tấn công cần đảm bảo rằng các thẻ của objvuln và objtarget giống nhau. TIKTAG-v2 có thể được sử dụng để rò rỉ thẻ của objvuln ( 1 ) và objtarget ( 2 ). Nếu cả hai thẻ bị rò rỉ đều giống nhau, kẻ tấn công khai thác lỗ hổng, điều này sẽ không gây ra lỗi kiểm tra thẻ ( 3 ). Nếu không, kẻ tấn công giải phóng và phân bổ lại objtarget và quay lại bước đầu tiên cho đến khi các thẻ khớp.

\ ==Kích hoạt kênh phụ bộ nhớ cache.== Để khai thác thành công một gadget TIKTAG, kẻ tấn công cần đáp ứng các yêu cầu sau:

i) huấn luyện nhánh,

ii) kiểm soát bộ nhớ cache, và

iii) đo lường bộ nhớ cache. Cả ba yêu cầu đều có thể được đáp ứng trong JavaScript.

Đầu tiên, kẻ tấn công có thể huấn luyện bộ dự đoán nhánh bằng cách chạy gadget với slow[0] khác không và idx trong giới hạn, và kích hoạt dự đoán nhánh sai trong BR với giá trị không trong slow[0] và idx ngoài giới hạn.

Thứ hai, kẻ tấn công có thể trục xuất các dòng bộ nhớ cache của slow[0], victim.length, và probe[PROBE_OFFSET] bằng các kỹ thuật trục xuất bộ nhớ cache JavaScript [8, 21, 70].

Thứ ba, kẻ tấn công có thể đo trạng thái bộ nhớ cache của probe[PROBE_OFFSET] với bộ đếm thời gian có độ phân giải cao dựa trên SharedArrayBuffer [16, 58].

\ ==Khai thác các lỗ hổng hỏng bộ nhớ.== Với các thẻ MTE bị rò rỉ, kẻ tấn công có thể khai thác các lỗ hổng hỏng bộ nhớ không gian và thời gian trong bộ kết xuất. Chiến lược tấn công phần lớn giống với các cuộc tấn công hỏng bộ nhớ truyền thống nhưng nên đảm bảo rằng lỗ hổng không gây ra lỗi kiểm tra thẻ bằng cách sử dụng các thẻ bị rò rỉ. Chúng tôi trình bày chi tiết hơn chiến lược tấn công trong §C.

\ ==6.1.4. Giảm thiểu.== Để giảm thiểu các cuộc tấn công bỏ qua MTE dựa trên gadget TIKTAG trong quá trình kết xuất trình duyệt, các biện pháp giảm thiểu sau có thể được sử dụng:

i) Sandbox nhận biết thực thi đầu cơ: Để ngăn kẻ tấn công phát động các cuộc tấn công dựa trên TIKTAG từ môi trường sandbox như V8 sandbox, sandbox có thể được củng cố bằng cách ngăn chặn bất kỳ truy cập bộ nhớ đầu cơ nào vượt ra ngoài vùng bộ nhớ của sandbox. Trong khi các trình duyệt web hiện đại sử dụng sandbox để cách ly nội dung web không đáng tin cậy khỏi bộ kết xuất, chúng thường bỏ qua các đường dẫn đầu cơ.

\ Ví dụ, Chrome V8 sandbox [56] và Safari Webkit sandbox [1] không trung gian hoàn toàn các đường dẫn đầu cơ [27]. Dựa trên các kỹ thuật nén con trỏ hiện tại [64], các đường dẫn đầu cơ có thể được hạn chế trong vùng sandbox bằng cách che các bit cao của con trỏ.

\ ii) Rào cản đầu cơ: Như được đề xuất trong §5, việc đặt rào cản đầu cơ sau BR cho các gadget TIKTAG tiềm năng có thể ngăn chặn các cuộc tấn công rò rỉ thẻ đầu cơ. Tuy nhiên, biện pháp giảm thiểu này có thể không áp dụng được trong môi trường trình duyệt quan trọng về hiệu suất, vì nó có thể gây ra chi phí hiệu suất đáng kể.

\ iii) Ngăn chặn xây dựng gadget: Như được đề xuất trong §5.2, gadget TIKTAG-v2 có thể được giảm thiểu bằng cách đệm các lệnh giữa lệnh lưu trữ và tải. Gadget TIKTAGv1, mặc dù chúng tôi chưa tìm thấy gadget có thể khai thác, có thể được giảm thiểu bằng cách đệm các lệnh giữa nhánh và truy cập bộ nhớ, như mô tả trong §5.1.

\ 6.2. Tấn công nhân Linux

Nhân Linux trên ARM được sử dụng rộng rãi cho các thiết bị di động, máy chủ và thiết bị IoT, khiến nó trở thành mục tiêu tấn công hấp dẫn. Khai thác lỗ hổng hỏng bộ nhớ trong nhân có thể leo thang đặc quyền của người dùng, và do đó MTE là cơ chế bảo vệ đầy hứa hẹn cho nhân Linux. Các cuộc tấn công dựa trên TIKTAG chống lại nhân Linux đặt ra những thách thức độc đáo khác với cuộc tấn công trình duyệt (§6.1).

\ Điều này là do không gian địa chỉ của kẻ tấn công bị cách ly khỏi không gian địa chỉ của nhân nơi gadget sẽ được thực thi. Trong phần sau, trước tiên chúng tôi tổng quan về mô hình mối đe dọa của nhân Linux (§6.2.1) và cung cấp một gadget TIKTAG bằng chứng khái niệm mà chúng tôi phát hiện trong nhân Linux (§6.2.2). Cuối cùng, chúng tôi chứng minh hiệu quả của các gadget TIKTAG trong việc khai thác các lỗ hổng nhân Linux (§6.2.3).

\ ==6.2.1. Mô hình mối đe dọa.== Mô hình mối đe dọa ở đây phần lớn giống với các cuộc tấn công leo thang đặc quyền điển hình chống lại nhân. Cụ thể, chúng tôi tập trung vào nhân Linux Android dựa trên ARM, được củng cố với các biện pháp bảo vệ nhân mặc định (ví dụ: KASLR, SMEP, SMAP và CFI). Chúng tôi cũng giả định nhân được củng cố với giải pháp gắn thẻ ngẫu nhiên MTE, tương tự như các giải pháp MTE sẵn sàng sản xuất, Scudo [3].

\ Cụ thể, mỗi đối tượng bộ nhớ được gắn thẻ ngẫu nhiên và một thẻ ngẫu nhiên được gán khi một đối tượng được giải phóng, do đó ngăn chặn cả hai lỗi hỏng bộ nhớ không gian và thời gian. Kẻ tấn công có khả năng chạy một tiến trình không có đặc quyền và nhằm leo thang đặc quyền của họ bằng cách khai thác các lỗ hổng hỏng bộ nhớ trong nhân. Giả định rằng kẻ tấn công biết các lỗ hổng hỏng bộ nhớ nhân nhưng không biết bất kỳ thẻ MTE nào của bộ nhớ nhân. Kích hoạt hỏng bộ nhớ giữa các đối tượng nhân với

\ các thẻ không khớp sẽ gây ra lỗi kiểm tra thẻ, điều này không mong muốn cho các khai thác thực tế. Một thách thức quan trọng trong cuộc tấn công này là gadget phải được xây dựng bằng cách tái sử dụng mã nhân hiện có và được thực thi bởi các cuộc gọi hệ thống mà kẻ tấn công có thể gọi. Vì kiến trúc ARMv8 tách các bảng trang người dùng và nhân, các gadget không gian người dùng không thể truy cập đầu cơ bộ nhớ nhân. Thiết lập này rất khác với mô hình mối đe dọa của việc tấn công trình duyệt (§6.1), đã tận dụng mã do kẻ tấn công cung cấp để xây dựng gadget. Chúng tôi cũng loại trừ việc xây dựng gadget dựa trên eBPF [17, 28], vì eBPF không khả dụng cho tiến trình Android không có đặc quyền [33].

\ ==6.2.2. Gadget TikTag nhân==. Như mô tả trong §4.1, các gadget TIKTAG phải đáp ứng một số yêu cầu, và mỗi yêu cầu đều kéo theo các thách thức trong môi trường nhân.

Đầu tiên, trong BR, dự đoán nhánh sai phải được kích hoạt với cond_ptr, phải có thể kiểm soát được từ không gian người dùng. Vì các bộ xử lý AArch64 gần đây cách ly huấn luyện dự đoán nhánh giữa người dùng và nhân [33], nên huấn luyện nhánh cần được thực hiện từ không gian nhân.

Second, in CHECK, guessptr should be dereferenced. guessptr should be crafted from the user space such that it embeds a guess tag (Tg) and points to the kernel address (i.e., target_addr) to leak the tag (Tm). Unlike the browser JavaScript environment (§6.1), user-provided data is heavily sanitized in system calls, so it is difficult to create an arbitrary kernel pointer.

\ For instance, accessok() ensures that the user-provided pointer points to the user space, and the arrayindexnospec macro prevents speculative out-of-bounds access with the user-provided index. Thus, guessptr should be an existing kernel pointer, specifically the vulnerable pointer that causes memory corruption. For instance, a dangling pointer in use-after-free (UAF) or an out-of-bounds pointer in buffer overflow can be used. Lastly, in TEST, testptr should be dereferenced, and testptr should be accessible from the user space. To ease the cache state measurement, test_ptr should be a user space pointer provided through a system call argument.

\ ==Các gadget được phát hiện.== Chúng tôi đã phân tích thủ công mã nguồn của nhân Linux để tìm gadget TIKTAG đáp ứng các yêu cầu nêu trên. Kết quả là, chúng tôi tìm thấy một gadget TIKTAG-v1 có khả năng khai thác trong sndtimeruserread() (Hình 10). Gadget này đáp ứng các yêu cầu của TIKTAG-v1 (§5.1). Tại dòng 10 (tức là BR), câu lệnh switch kích hoạt dự đoán nhánh sai với giá trị do người dùng kiểm soát tu->tread (tức là condptr). Tại các dòng 14-17 (tức là CHECK), tread (tức là guessptr) được hủy tham chiếu bởi bốn lệnh tải. tread trỏ đến một đối tượng struct sndtimer_tread64 mà kẻ tấn công có thể phân bổ và giải phóng tùy ý.

\ Nếu một lỗ hổng tạm thời biến tread thành một con trỏ treo, nó có thể được sử dụng làm guessptr. Tại dòng 20, (tức là TEST), một bộ đệm con trỏ không gian người dùng (tức là testptr) được hủy tham chiếu trong copytouser. Vì gadget này không thể truy cập trực tiếp từ không gian người dùng, chúng tôi đã thực hiện một sửa đổi nhỏ đối với mã nhân; chúng tôi đã xóa việc trả về sớm cho trường hợp mặc định tại dòng 6. Điều này đảm bảo rằng bộ đệm chỉ được truy cập trong đường dẫn đầu cơ để quan sát sự khác biệt trạng thái bộ nhớ cache do thực thi đầu cơ.

\ Mặc dù sửa đổi này không thực tế trong kịch bản thực tế, nó chứng minh khả năng khai thác tiềm năng của gadget nếu các thay đổi mã tương tự được thực hiện. Chúng tôi đã phát hiện thêm một số gadget có khả năng khai thác, nhưng chúng tôi không thể quan sát sự khác biệt trạng thái bộ nhớ cache giữa khớp thẻ và không khớp. Tuy nhiên, chúng tôi nghĩ rằng có tiềm năng mạnh mẽ để khai thác các gadget đó. Phát động các cuộc tấn công dựa trên TIKTAG liên quan đến kỹ thuật phức tạp và nhạy cảm, và do đó chúng tôi không thể thử nghiệm với tất cả các trường hợp có thể.

\ Đặc biệt, TIKTAG-v1 dựa vào thu hẹp đầu cơ trên các sự kiện đường dẫn sai, cũng có thể bao gồm lỗi dịch địa chỉ hoặc các ngoại lệ khác trong đường dẫn dự đoán nhánh sai. Vì các cuộc gọi hệ thống liên quan đến các luồng điều khiển phức tạp, thu hẹp đầu cơ có thể không được kích hoạt như mong đợi. Ngoài ra, một số gadget có thể trở nên có thể khai thác khi mã nhân thay đổi. Ví dụ, một gadget TIKTAG-v1 trong ip6mr_ioctl() không thể hiện hành vi rò rỉ thẻ MTE khi được gọi từ đường dẫn cuộc gọi hệ thống của nó (tức là ioctl). Tuy nhiên, gadget có rò rỉ thẻ khi nó được chuyển sang các syscall khác (ví dụ: write) với luồng điều khiển đơn giản.

\ ==6.2.3. Tấn công bỏ qua MTE nhân.== Hình 9b minh họa các cuộc tấn công bỏ qua MTE trên nhân Linux. Lấy lỗ hổng use-afterfree làm ví dụ, chúng tôi giả định kẻ tấn công đã xác định một gadget TIKTAG tương ứng, SysTikTagUAF(), có khả năng rò rỉ kết quả kiểm tra thẻ của con trỏ treo được tạo bởi lỗ hổng. Ví dụ, gadget TIKTAG-v1 trong sndtimeruser_read() (Hình 10) có thể rò rỉ kết quả kiểm tra thẻ của tread, có thể trở thành con trỏ treo do lỗ hổng use-after-free hoặc double-free.

\ Cuộc tấn công tiến hành như sau: Đầu tiên, kẻ tấn công giải phóng một đối tượng nhân (tức là objvuln) và để lại con trỏ của nó (tức là vuln_ptr) như một con trỏ treo ( 1 ). Tiếp theo, kẻ tấn công phân bổ một đối tượng nhân khác (tức là objtarget) tại địa chỉ của objvuln với SysAllocTarget() ( 2 ). Sau đó, kẻ tấn công gọi SysTikTag() với bộ đệm không gian người dùng (tức là ubuf) ( 3 ), và rò rỉ kết quả kiểm tra thẻ (tức là Tm == Tg) bằng cách đo độ trễ truy cập của ubuf ( 4 ). Nếu các thẻ khớp, kẻ tấn công kích hoạt SysExploitUAF(), một cuộc gọi hệ thống khai thác lỗ hổng use-after-free ( 5 ). Nếu không, kẻ tấn công phân bổ lại objtarget cho đến khi các thẻ khớp.

\ ==Kích hoạt kênh phụ bộ nhớ cache.== Như trong §6.1.3, việc khai thác thành công gadget TIKTAG yêu cầu i) huấn luyện nhánh, ii) kiểm soát bộ nhớ cache, và iii) đo lường bộ nhớ cache. Đối với huấn luyện nhánh, kẻ tấn công có thể huấn luyện bộ dự đoán nhánh và kích hoạt đầu cơ với các điều kiện nhánh do người dùng kiểm soát từ không gian người dùng. Đối với kiểm soát bộ nhớ cache, kẻ tấn công có thể xóa bộ đệm không gian người dùng (tức là ubuf), trong khi địa chỉ bộ nhớ nhân có thể được trục xuất bằng cache line bouncing [25]. Đối với đo lường bộ nhớ cache, độ trễ truy cập của ubuf có thể được đo bằng bộ đếm ảo (tức là CNTVCT_EL0) hoặc bộ đếm thời gian dựa trên bộ đếm bộ nhớ (tức là độ phân giải gần chu kỳ CPU).

\ ==Khai thác các lỗ hổng hỏng bộ nhớ.== Các gadget TIKTAG cho phép bỏ qua MTE và khai thác các lỗ hổng hỏng bộ nhớ nhân. Kẻ tấn công có thể gọi gadget TIKTAG trong nhân để đầu cơ kích hoạt hỏng bộ nhớ và thu được kết quả kiểm tra thẻ. Sau đó, kẻ tấn công có thể thu được kết quả kiểm tra thẻ và kích hoạt hỏng bộ nhớ chỉ khi các thẻ khớp. Chúng tôi trình bày chi tiết quá trình tấn công bỏ qua MTE nhân Linux trong §D.

\ ==6.2.4. Giảm thiểu.== Để giảm thiểu gadget TIKTAG trong nhân Linux, các nhà phát triển nhân nên xem xét các biện pháp giảm thiểu sau:

i) Rào cản đầu cơ: Các rào cản đầu cơ có thể giảm thiểu hiệu quả gadget TIKTAG-v1 trong nhân Linux. Để ngăn kẻ tấn công rò rỉ kết quả kiểm tra thẻ thông qua bộ đệm không gian người dùng, các hàm nhân truy cập địa chỉ không gian người dùng, chẳng hạn như copytouser và copyfromuser, có thể được củng cố bằng các rào cản đầu cơ. Như mô tả trong §5.1, rò rỉ kết quả kiểm tra thẻ với truy cập lưu trữ có thể được giảm thiểu bằng cách đặt rào cản đầu cơ trước truy cập lưu trữ (tức là TEST).

\ Ví dụ, để giảm thiểu các gadget tận dụng copytouser, rào cản đầu cơ có thể được chèn trước lệnh gọi copytouser. Đối với các gadget sử dụng truy cập tải vào bộ đệm không gian người dùng, các rào cản giảm thiểu các gadget nếu được chèn giữa nhánh và truy cập bộ nhớ nhân (tức là CHECK). Ví dụ, để giảm thiểu các gadget tận dụng copyfromuser, các nhà phát triển nhân nên phân tích cẩn thận cơ sở mã nhân để tìm mẫu của nhánh có điều kiện, truy cập bộ nhớ nhân và copyfromuser(), và chèn rào cản đầu cơ giữa nhánh và truy cập bộ nhớ nhân.

\ ii) Ngăn chặn xây dựng gadget: Để loại bỏ các gadget TIKTAG tiềm năng trong nhân Linux, mã nguồn nhân có thể được phân tích và vá. Vì các gadget TIKTAG cũng có thể được xây dựng bằng tối ưu hóa trình biên dịch, phân tích nhị phân có thể được thực hiện. Đối với mỗi gadget được phát hiện, các lệnh có thể được sắp xếp lại hoặc các lệnh bổ sung có thể được chèn để ngăn chặn xây dựng gadget, theo các chiến lược giảm thiểu trong §5.1 và §5.2.

:::info Tác giả:

  1. Juhee Kim
  2. Jinbum Park
  3. Sihyeon Roh
  4. Jaeyoung Chung
  5. Youngjoo Lee
  6. Taesoo Kim
  7. Byoungyoung Lee

:::

:::info Bài báo này có sẵn trên arxiv theo giấy phép CC 4.0.

:::

\

Cơ hội thị trường
Logo KernelDAO
Giá KernelDAO(KERNEL)
$0.06775
$0.06775$0.06775
-10.85%
USD
Biểu đồ giá KernelDAO (KERNEL) theo thời gian thực
Tuyên bố miễn trừ trách nhiệm: Các bài viết được đăng lại trên trang này được lấy từ các nền tảng công khai và chỉ nhằm mục đích tham khảo. Các bài viết này không nhất thiết phản ánh quan điểm của MEXC. Mọi quyền sở hữu thuộc về tác giả gốc. Nếu bạn cho rằng bất kỳ nội dung nào vi phạm quyền của bên thứ ba, vui lòng liên hệ service@support.mexc.com để được gỡ bỏ. MEXC không đảm bảo về tính chính xác, đầy đủ hoặc kịp thời của các nội dung và không chịu trách nhiệm cho các hành động được thực hiện dựa trên thông tin cung cấp. Nội dung này không cấu thành lời khuyên tài chính, pháp lý hoặc chuyên môn khác, và cũng không được xem là khuyến nghị hoặc xác nhận từ MEXC.