Cấu hình MTE

MTE có thể được kích hoạt độc lập trong nhân Android và trong bất kỳ quy trình nào trong hệ thống Android. Google không bắt buộc phải có bất kỳ cấu hình cụ thể nào và nhằm mục đích mang lại sự linh hoạt tối đa cho các nhà chế tạo thiết bị.

Theo quan điểm của chúng tôi, tài liệu này mô tả các cài đặt và phạm vi MTE mà theo quan điểm của chúng tôi là mang lại sự cân bằng tốt giữa bảo mật và chi phí cho người dùng Android như một biện pháp giảm thiểu lỗ hổng liên tục.

hạt nhân

MTE trong kernel được cấu hình thông qua dòng lệnh. Giá trị mặc định là BẬT trong chế độ Đồng bộ hóa. Điều này có thể thay đổi trong tương lai vì một số lý do:

  • Nó đã được chứng minh là ảnh hưởng đáng kể đến hiệu suất và cần tối ưu hóa công việc.
  • Chất lượng mã hạt nhân được nhiều người cho là không đủ để vận chuyển MTE ở chế độ thực thi (nghĩa là hoảng loạn khi thất bại).

Khuyến nghị hiện tại là vô hiệu hóa kernel MTE trên các thiết bị sản xuất. Để thực hiện việc này, hãy thêm kasan=off vào dòng lệnh kernel.

Không gian người dùng

Google cung cấp danh sách mặc định các tệp nhị phân của không gian người dùng cần được bảo vệ bằng MTE. Danh sách này được soạn thảo với thông tin đầu vào từ Bảo mật Android và bao gồm các thành phần có đặc quyền và/hoặc xử lý thông tin đầu vào không đáng tin cậy. Bạn có thể tìm thấy danh sách cập nhật các tệp nhị phân gốc được đề xuất với MTE trong tệp memtag-common.mk trong hệ thống xây dựng Android. Ngoài ra, một số ứng dụng hệ thống cũng được bao gồm: hiện tại, Nfc, Bluetooth và SecureElement. Theo mặc định, các tệp nhị phân và ứng dụng này được bật ở chế độ Không đồng bộ.

Đề xuất hiện tại là sử dụng danh sách mục tiêu mặc định (không cần thay đổi). Ngoài ra, bạn nên đánh giá các phần bổ sung BSP và OEM vào hệ thống cốt lõi và bật MTE trên những hệ thống nhạy cảm về bảo mật.

Các ứng dụng

Ba ứng dụng hệ thống được liệt kê ở trên là những ứng dụng duy nhất sử dụng MTE tại thời điểm này. Để ứng dụng của bên thứ ba kích hoạt MTE, AndroidManifest.xml của nó sẽ cần chỉ định android:memtagMode với một giá trị khác ngoài off . Do đó, các bộ benchmark phổ biến như Geekbench hay AnTuTu không chạy được MTE. Nếu kernel MTE cũng bị vô hiệu hóa (xem kasan=off ở trên), thì điểm chuẩn dự kiến ​​sẽ cho thấy tác động rất hạn chế đến hiệu suất, nếu có.

Đối với các ứng dụng khác, hỗ trợ MTE trong Chrome đang được phát triển tích cực. Phiên bản Cửa hàng Play hiện tại của Chrome bao gồm cài đặt memtagMode=async trong tệp kê khai. Chúng tôi cũng kỳ vọng rằng một số ứng dụng quan tâm đến bảo mật trong hệ sinh thái Android (ví dụ: ứng dụng ngân hàng) cuối cùng cũng sẽ làm được điều tương tự. Mặt khác, chúng tôi hy vọng rằng một số ứng dụng yêu cầu hiệu suất CPU cao nhất, chẳng hạn như trò chơi, sẽ chọn tắt MTE.

Các chế độ khác

Các hướng dẫn trên chỉ sử dụng chế độ MTE không đồng bộ ở mọi nơi. Tùy thuộc vào phần cứng, các chế độ khác có thể nhanh gần hoặc chính xác. Chúng cũng cung cấp khả năng chẩn đoán tốt hơn và các thuộc tính giảm nhẹ lỗ hổng bảo mật mạnh hơn một chút.

Chúng tôi khuyên bạn nên thử nghiệm một hoặc hai cấu hình khác để xem liệu chúng có đủ tốt cho yêu cầu về hiệu suất/nguồn điện của bạn hay không. Chế độ MTE có thể được đặt cho từng lõi CPU trong hệ thống bằng cách ghi vào /sys/devices/system/cpu/cpu*/mte_tcf_preferred . Ví dụ: việc ghi sync (hoặc asymm ) sẽ khiến mọi quy trình không gian người dùng đã yêu cầu chế độ Async được tự động nâng cấp âm thầm lên Sync (hoặc Asymm) trong khi chạy trên lõi đó. Thiết lập này có thể được thực hiện trong tệp .rc khi khởi động thiết bị.

Chúng tôi khuyên bạn nên đo một hoặc hai cấu hình khác để kiểm tra xem chúng có đáp ứng yêu cầu về hiệu suất và nguồn điện của bạn hay không. Một số cấu hình thú vị để khám phá:

  • Bất đối xứng trên tất cả các lõi.
  • Bất đối xứng trên (các) lõi lớn, Đồng bộ hóa trên các lõi khác.

Để xác minh rằng một quy trình đang yêu cầu chế độ Không đồng bộ (có thể tự động nâng cấp), hãy kiểm tra xem dòng sau có bao gồm cả PR_MTE_TCF_SYNCPR_MTE_TCF_ASYNC hay không :

  debuggerd  | head -30 | grep tagged_addr

Thật không may, không có cách nào dễ dàng để xem chế độ hiệu quả của một quy trình; nhưng bất kỳ quy trình nào hiển thị cả hai giá trị được liệt kê ở trên đều phải tuân theo hành vi tự động nâng cấp.