Arm v9 ขอแนะนำ Arm Memory Tagging Extension (MTE) ซึ่ง เป็นการใช้งานฮาร์ดแวร์ ของหน่วยความจำที่แท็ก
ในระดับสูง MTE จะแท็กการจัดสรร/จัดสรรหน่วยความจำแต่ละรายการด้วยข้อมูลเมตาเพิ่มเติม โดยจะกำหนดแท็กให้กับตำแหน่งหน่วยความจำ ซึ่งสามารถเชื่อมโยงกับพอยน์เตอร์ที่อ้างอิงตำแหน่งหน่วยความจำนั้นได้ ณ รันไทม์ CPU จะตรวจสอบว่าตัวชี้และแท็กข้อมูลเมตาตรงกันในการโหลดและจัดเก็บแต่ละครั้ง
ใน Android 12 ตัวจัดสรรหน่วยความจำฮีปเคอร์เนลและ userspace สามารถเพิ่มการจัดสรรแต่ละรายการด้วยข้อมูลเมตาได้ ซึ่งจะช่วยตรวจจับจุดบกพร่องที่ไร้การใช้งานและบัฟเฟอร์ล้น ซึ่งเป็นสาเหตุที่พบบ่อยที่สุดของจุดบกพร่องด้านความปลอดภัยของหน่วยความจำในโค้ดเบสของเรา
โหมดการทำงานของ MTE
MTE มีโหมดการทำงานสามโหมด:
- โหมดซิงโครนัส (SYNC)
- โหมดอะซิงโครนัส (ASYNC)
- โหมดอสมมาตร (ASYMM)
โหมดซิงโครนัส (SYNC)
โหมดนี้ได้รับการปรับให้เหมาะสมเพื่อความถูกต้องของการตรวจจับจุดบกพร่องเหนือประสิทธิภาพ และสามารถใช้เป็นเครื่องมือตรวจจับจุดบกพร่องได้อย่างแม่นยำ เมื่อยอมรับค่าใช้จ่ายด้านประสิทธิภาพที่สูงกว่าได้ เมื่อเปิดใช้งาน MTE SYNC จะทำหน้าที่เป็นระบบลดความปลอดภัย เมื่อแท็กไม่ตรงกัน ตัวประมวลผลจะยกเลิกการดำเนินการทันทีและยุติกระบวนการด้วย SIGSEGV
(รหัส SEGV_MTESERR
) และข้อมูลทั้งหมดเกี่ยวกับการเข้าถึงหน่วยความจำและที่อยู่ที่มีข้อบกพร่อง
เราขอแนะนำให้ใช้โหมดนี้ในระหว่างการทดสอบเป็นทางเลือกแทน HWASan/KASAN หรือในการใช้งานจริงเมื่อกระบวนการเป้าหมายแสดงถึงพื้นผิวการโจมตีที่มีช่องโหว่ นอกจากนี้ เมื่อโหมด ASYNC ระบุว่ามีจุดบกพร่อง สามารถรับรายงานจุดบกพร่องที่แม่นยำได้โดยใช้รันไทม์ API เพื่อสลับการดำเนินการเป็นโหมด SYNC
เมื่อทำงานในโหมด SYNC ตัวจัดสรร Android จะบันทึกการติดตามสแต็กสำหรับการจัดสรรและการจัดสรรคืนทั้งหมด และใช้รายการเหล่านั้นเพื่อจัดทำรายงานข้อผิดพลาดที่ดีขึ้น ซึ่งรวมถึงคำอธิบายข้อผิดพลาดของหน่วยความจำ เช่น การใช้งานหลังจากไม่มีการใช้งาน หรือบัฟเฟอร์ล้น และสแต็ก ร่องรอยของเหตุการณ์ความทรงจำที่เกี่ยวข้อง รายงานดังกล่าวให้ข้อมูลตามบริบทมากขึ้น และทำให้ติดตามและแก้ไขจุดบกพร่องได้ง่ายขึ้น
โหมดอะซิงโครนัส (ASYNC)
โหมดนี้ได้รับการปรับให้เหมาะสมเพื่อประสิทธิภาพที่มากกว่าความแม่นยำของรายงานข้อบกพร่อง และสามารถใช้เป็นการตรวจจับค่าใช้จ่ายต่ำสำหรับข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ
บนแท็กที่ไม่ตรงกัน ตัวประมวลผลจะดำเนินการดำเนินการต่อไปจนกว่ารายการเคอร์เนลที่ใกล้ที่สุด (เช่น syscall หรือการขัดจังหวะตัวจับเวลา) โดยที่ยุติกระบวนการด้วย SIGSEGV
(โค้ด SEGV_MTEAERR
) โดยไม่บันทึกที่อยู่ที่มีข้อบกพร่องหรือการเข้าถึงหน่วยความจำ
เราขอแนะนำให้ใช้โหมดนี้ในการใช้งานจริงบนโค้ดเบสที่ได้รับการทดสอบอย่างดี โดยที่ความหนาแน่นของจุดบกพร่องด้านความปลอดภัยของหน่วยความจำต่ำ ซึ่งทำได้โดยใช้โหมด SYNC ในระหว่างการทดสอบ
โหมดอสมมาตร (ASYMM)
คุณสมบัติเพิ่มเติมใน Arm v8.7-A โหมด Asymmetric MTE ให้การตรวจสอบการอ่านหน่วยความจำแบบซิงโครนัส และการตรวจสอบการเขียนหน่วยความจำแบบอะซิงโครนัส โดยมีประสิทธิภาพใกล้เคียงกับโหมด ASYNC ในสถานการณ์ส่วนใหญ่ โหมดนี้เป็นการปรับปรุงเหนือโหมด ASYNC และเราขอแนะนำให้ใช้แทน ASYNC ทุกครั้งที่พร้อมใช้งาน
ด้วยเหตุนี้ ไม่มี API ใดที่อธิบายไว้ด้านล่างนี้กล่าวถึงโหมดอสมมาตร แต่ระบบปฏิบัติการสามารถกำหนดค่าให้ใช้โหมดอสมมาตรเสมอเมื่อมีการร้องขอแบบอะซิงโครนัส โปรดดูส่วน "การกำหนดค่าระดับ MTE ที่ต้องการเฉพาะ CPU" สำหรับข้อมูลเพิ่มเติม
MTE ในพื้นที่ผู้ใช้
ส่วนต่อไปนี้จะอธิบายวิธีการเปิดใช้งาน MTE สำหรับกระบวนการของระบบและแอปพลิเคชัน MTE ถูกปิดใช้งานตามค่าเริ่มต้น เว้นแต่ว่าตัวเลือกใดตัวเลือกหนึ่งด้านล่างจะถูกตั้งค่าสำหรับกระบวนการเฉพาะ (ดูว่าองค์ประกอบใดที่ MTE เปิดใช้งานสำหรับ ด้านล่าง )
การเปิดใช้งาน MTE โดยใช้ระบบบิลด์
เนื่องจากเป็นคุณสมบัติทั่วทั้งกระบวนการ MTE จะถูกควบคุมโดยการตั้งค่าเวลาในการสร้างของไฟล์ปฏิบัติการหลัก ตัวเลือกต่อไปนี้อนุญาตให้เปลี่ยนการตั้งค่านี้สำหรับไฟล์ปฏิบัติการแต่ละรายการ หรือสำหรับไดเรกทอรีย่อยทั้งหมดในแผนผังต้นทาง การตั้งค่าจะถูกละเว้นในไลบรารีหรือเป้าหมายใดๆ ที่ไม่สามารถปฏิบัติการหรือทดสอบได้
1. การเปิดใช้งาน MTE ใน Android.bp
( ตัวอย่าง ) สำหรับโครงการเฉพาะ:
โหมดเอ็มทีอี | การตั้งค่า |
---|---|
MTE แบบอะซิงโครนัส | sanitize: { memtag_heap: true, } |
MTE แบบซิงโครนัส | sanitize: { memtag_heap: true, diag: { memtag_heap: true, }, } |
หรือใน Android.mk:
โหมดเอ็มทีอี | การตั้งค่า |
---|---|
Asynchronous MTE | LOCAL_SANITIZE := memtag_heap |
Synchronous MTE | LOCAL_SANITIZE := memtag_heap LOCAL_SANITIZE_DIAG := memtag_heap |
2. การเปิดใช้งาน MTE บนไดเร็กทอรีย่อยในแผนผังต้นทางโดยใช้ตัวแปรผลิตภัณฑ์:
โหมดเอ็มทีอี | รวมรายการ | ยกเว้นรายการ |
---|---|---|
อะซิงโครนัส | PRODUCT_MEMTAG_HEAP_ASYNC_INCLUDE_PATHS MEMTAG_HEAP_ASYNC_INCLUDE_PATHS | PRODUCT_MEMTAG_HEAP_EXCLUDE_PATHS MEMTAG_HEAP_EXCLUDE_PATHS |
ซิงค์ | PRODUCT_MEMTAG_HEAP_SYNC_INCLUDE_PATHS MEMTAG_HEAP_SYNC_INCLUDE_PATHS |
หรือ
โหมดเอ็มทีอี | การตั้งค่า |
---|---|
MTE แบบอะซิงโครนัส | MEMTAG_HEAP_ASYNC_INCLUDE_PATHS |
MTE แบบซิงโครนัส | MEMTAG_HEAP_SYNC_INCLUDE_PATHS |
หรือโดยการระบุเส้นทางแยกของไฟล์ปฏิบัติการ:
โหมดเอ็มทีอี | การตั้งค่า |
---|---|
MTE แบบอะซิงโครนัส | PRODUCT_MEMTAG_HEAP_EXCLUDE_PATHS MEMTAG_HEAP_EXCLUDE_PATHS |
MTE แบบซิงโครนัส |
ตัวอย่าง (การใช้งานคล้ายกับ PRODUCT_CFI_INCLUDE_PATHS
)
PRODUCT_MEMTAG_HEAP_SYNC_INCLUDE_PATHS=vendor/$(vendor) PRODUCT_MEMTAG_HEAP_EXCLUDE_PATHS=vendor/$(vendor)/projectA \ vendor/$(vendor)/projectB
การเปิดใช้งาน MTE โดยใช้คุณสมบัติของระบบ
การตั้งค่าบิลด์ด้านบนสามารถแทนที่ได้ขณะรันไทม์โดยการตั้งค่าคุณสมบัติของระบบต่อไปนี้:
arm64.memtag.process.<basename> = (off|sync|async)
โดยที่ basename
หมายถึงชื่อฐานของไฟล์ปฏิบัติการ
ตัวอย่างเช่น หากต้องการตั้งค่า /system/bin/ping
หรือ /data/local/tmp/ping
เพื่อใช้ MTE แบบอะซิงโครนัส ให้ใช้ adb shell setprop arm64.memtag.process.ping async
การเปิดใช้งาน MTE โดยใช้ตัวแปรสภาพแวดล้อม
อีกวิธีหนึ่งในการแทนที่การตั้งค่าบิลด์คือการกำหนดตัวแปรสภาพแวดล้อม: MEMTAG_OPTIONS=(off|sync|async)
หากมีการกำหนดทั้งตัวแปรสภาพแวดล้อมและคุณสมบัติระบบ ตัวแปรจะมีความสำคัญกว่า
การเปิดใช้งาน MTE สำหรับแอปพลิเคชัน
หากไม่ได้ระบุ MTE จะถูกปิดใช้งานตามค่าเริ่มต้น แต่แอปที่ต้องการใช้ MTE สามารถทำได้โดยการตั้งค่า android:memtagMode
ใต้แท็ก <application>
หรือ <process>
ใน AndroidManifest.xml
android:memtagMode=(off|default|sync|async)
เมื่อตั้งค่าบนแท็ก <application>
คุณลักษณะจะส่งผลต่อกระบวนการทั้งหมดที่ใช้โดยแอปพลิเคชัน และสามารถแทนที่ได้สำหรับแต่ละกระบวนการโดยการตั้งค่าแท็ก <process>
สำหรับการทดลอง สามารถใช้ การเปลี่ยนแปลงความเข้ากันได้ เพื่อตั้งค่าเริ่มต้นของแอตทริบิวต์ memtagMode
สำหรับแอปพลิเคชันที่ไม่ได้ระบุค่าใดๆ ในรายการ (หรือระบุ default
)
สิ่งเหล่านี้สามารถพบได้ภายใต้ System > Advanced > Developer options > App Compatibility Changes
ในเมนูการตั้งค่าส่วนกลาง การตั้งค่า NATIVE_MEMTAG_ASYNC
หรือ NATIVE_MEMTAG_SYNC
จะเปิดใช้งาน MTE สำหรับแอปพลิเคชันเฉพาะ
หรือสามารถตั้งค่าได้โดยใช้คำสั่ง am
ดังต่อไปนี้:
$ adb shell am compat enable NATIVE_MEMTAG_[A]SYNC my.app.name
การสร้างอิมเมจระบบ MTE
เราขอแนะนำอย่างยิ่งให้เปิดใช้งาน MTE บนไบนารีดั้งเดิมทั้งหมดในระหว่างการพัฒนาและการพัฒนา ซึ่งจะช่วยตรวจจับข้อบกพร่องด้านความปลอดภัยของหน่วยความจำตั้งแต่เนิ่นๆ และให้ความครอบคลุมแก่ผู้ใช้ตามความเป็นจริง หากเปิดใช้งานในการทดสอบบิลด์
เราขอแนะนำอย่างยิ่งให้เปิดใช้งาน MTE ในโหมดซิงโครนัสบนไบนารีดั้งเดิมทั้งหมดในระหว่างการพัฒนา
SANITIZE_TARGET=memtag_heap SANITIZE_TARGET_DIAG=memtag_heap m
เช่นเดียวกับตัวแปรใดๆ ในระบบบิลด์ SANITIZE_TARGET
สามารถใช้เป็นตัวแปรสภาพแวดล้อมหรือการตั้งค่า make
(เช่น ในไฟล์ product.mk
)
โปรดทราบว่าการดำเนินการนี้จะเปิดใช้งาน MTE สำหรับกระบวนการดั้งเดิมทั้งหมด แต่ไม่ใช่สำหรับแอปพลิเคชัน (ซึ่งแยกจาก zygote64
) ซึ่งสามารถเปิดใช้งาน MTE โดยทำตามคำแนะนำ ด้านบน
การกำหนดค่าระดับ MTE ที่ต้องการเฉพาะ CPU
ใน CPU บางตัว ประสิทธิภาพของ MTE ในโหมด ASYMM หรือแม้แต่ SYNC อาจใกล้เคียงกับของ ASYNC สิ่งนี้ทำให้คุ้มค่าที่จะเปิดใช้การตรวจสอบที่เข้มงวดยิ่งขึ้นบน CPU เหล่านั้นเมื่อมีการร้องขอโหมดการตรวจสอบที่เข้มงวดน้อยกว่า เพื่อให้ได้รับประโยชน์จากการตรวจจับข้อผิดพลาดของการตรวจสอบที่เข้มงวดยิ่งขึ้นโดยไม่มีข้อเสียด้านประสิทธิภาพ
ตามค่าเริ่มต้น กระบวนการที่กำหนดค่าให้ทำงานในโหมด ASYNC จะทำงานในโหมด ASYNC บน CPU ทั้งหมด ในการกำหนดค่าเคอร์เนลเพื่อรันกระบวนการเหล่านี้ในโหมด SYNC บน CPU เฉพาะ การซิงค์ค่าจะต้องเขียนลงในรายการ sysfs
/sys/devices/system/cpu/cpu<N>/mte_tcf_preferred
ณ เวลาบูต ซึ่งสามารถทำได้ด้วยสคริปต์เริ่มต้น ตัวอย่างเช่น ในการกำหนดค่า CPU 0-1 เพื่อรันกระบวนการในโหมด ASYNC ในโหมด SYNC และ CPU 2-3 เพื่อใช้รันในโหมด ASYMM สิ่งต่อไปนี้อาจถูกเพิ่มเข้าไปในส่วนคำสั่ง init ของสคริปต์เริ่มต้นของผู้ขาย:
write /sys/devices/system/cpu/cpu0/mte_tcf_preferred sync write /sys/devices/system/cpu/cpu1/mte_tcf_preferred sync write /sys/devices/system/cpu/cpu2/mte_tcf_preferred asymm write /sys/devices/system/cpu/cpu3/mte_tcf_preferred asymm
Tombstones จากกระบวนการโหมด ASYNC ที่ทำงานในโหมด SYNC จะมีการติดตามสแต็กที่แม่นยำของตำแหน่งของข้อผิดพลาดของหน่วยความจำ อย่างไรก็ตาม จะไม่รวมการติดตามสแต็กการจัดสรรหรือการจัดสรรคืน การติดตามสแต็กเหล่านี้จะพร้อมใช้งานก็ต่อเมื่อมีการกำหนดค่ากระบวนการให้ทำงานในโหมด SYNC เท่านั้น
int mallopt(M_THREAD_DISABLE_MEM_INIT, level)
โดยที่ level
คือ 0 หรือ 1
ปิดใช้งานการกำหนดค่าเริ่มต้นหน่วยความจำใน malloc และหลีกเลี่ยงการเปลี่ยนแท็กหน่วยความจำ เว้นแต่จำเป็นเพื่อความถูกต้อง
int mallopt(M_MEMTAG_TUNING, level)
level
ไหน:
-
M_MEMTAG_TUNING_BUFFER_OVERFLOW
-
M_MEMTAG_TUNING_UAF
เลือกกลยุทธ์การจัดสรรแท็ก
- การตั้งค่าเริ่มต้นคือ
M_MEMTAG_TUNING_BUFFER_OVERFLOW
-
M_MEMTAG_TUNING_BUFFER_OVERFLOW
- เปิดใช้งานการตรวจจับเชิงกำหนดของบัฟเฟอร์ล้นเชิงเส้นและข้อบกพร่องอันเดอร์โฟลว์โดยการกำหนดค่าแท็กที่แตกต่างให้กับการจัดสรรที่อยู่ติดกัน โหมดนี้มีโอกาสลดลงเล็กน้อยในการตรวจจับจุดบกพร่องที่ไร้การใช้งาน เนื่องจากมีเพียงครึ่งหนึ่งของค่าแท็กที่เป็นไปได้สำหรับตำแหน่งหน่วยความจำแต่ละตำแหน่ง โปรดทราบว่า MTE ไม่สามารถตรวจพบโอเวอร์โฟลว์ภายในแท็กแกรนูลเดียวกัน (ชิงค์ที่จัดเรียง 16 ไบต์) และอาจพลาดโอเวอร์โฟลว์เล็กๆ น้อยๆ ได้แม้ในโหมดนี้ การโอเวอร์โฟลว์ดังกล่าวไม่สามารถเป็นสาเหตุของความเสียหายของหน่วยความจำได้ เนื่องจากหน่วยความจำภายในหนึ่งแกรนูลไม่เคยถูกใช้สำหรับการจัดสรรหลายครั้ง -
M_MEMTAG_TUNING_UAF
- เปิดใช้งานแท็กแบบสุ่มอย่างอิสระสำหรับความน่าจะเป็นที่สม่ำเสมอ ~93% ในการตรวจจับทั้งเชิงพื้นที่ (บัฟเฟอร์ล้น) และข้อบกพร่องชั่วคราว (ใช้หลังจากอิสระ)
นอกเหนือจาก API ที่อธิบายไว้ข้างต้นแล้ว ผู้ใช้ที่มีประสบการณ์อาจต้องการทราบสิ่งต่อไปนี้:
- การตั้งค่าการลงทะเบียนฮาร์ดแวร์
PSTATE.TCO
สามารถระงับการตรวจสอบแท็กได้ชั่วคราว ( ตัวอย่าง ) ตัวอย่างเช่น เมื่อคัดลอกช่วงหน่วยความจำที่มีเนื้อหาแท็กที่ไม่รู้จัก หรือแก้ไขปัญหาคอขวดของประสิทธิภาพในฮอตลูป - เมื่อใช้
M_HEAP_TAGGING_LEVEL_SYNC
ตัวจัดการข้อขัดข้องของระบบจะให้ข้อมูลเพิ่มเติม เช่น การจัดสรรและการติดตามสแต็กการจัดสรรคืน ฟังก์ชันนี้ต้องการการเข้าถึงบิตแท็ก และเปิดใช้งานโดยส่งแฟล็กSA_EXPOSE_TAGBITS
เมื่อตั้งค่าตัวจัดการสัญญาณ โปรแกรมใด ๆ ที่ตั้งค่าตัวจัดการสัญญาณของตัวเองและมอบหมายการขัดข้องที่ไม่ทราบสาเหตุให้กับระบบขอแนะนำให้ทำเช่นเดียวกัน
MTE ในเคอร์เนล
หากต้องการเปิดใช้งาน KASAN ที่เร่งด้วย MTE สำหรับเคอร์เนล ให้กำหนดค่าเคอร์เนลด้วย CONFIG_KASAN=y
, CONFIG_KASAN_HW_TAGS=y
การกำหนดค่าเหล่านี้เปิดใช้งานตามค่าเริ่มต้นบนเคอร์เนล GKI เริ่มต้นด้วย Android 12-5.10
ซึ่งสามารถควบคุมได้ในเวลาบูตโดยใช้อาร์กิวเมนต์บรรทัดคำสั่งต่อไปนี้:
-
kasan=[on|off]
- เปิดหรือปิดการใช้งาน KASAN (ค่าเริ่มต้น:on
) -
kasan.mode=[sync |async ]
- เลือกระหว่างโหมดซิงโครนัสและอะซิงโครนัส (ค่าเริ่มต้น:sync
) -
kasan.stacktrace=[on|off]
- ไม่ว่าจะรวบรวมการติดตามสแต็ก (ค่าเริ่มต้น:on
)- การรวบรวมการติดตามสแต็กยังต้องการ
stack_depot_disable=off
- การรวบรวมการติดตามสแต็กยังต้องการ
-
kasan.fault=[report|panic]
- ไม่ว่าจะพิมพ์เฉพาะรายงานหรือตื่นตระหนกเคอร์เนลด้วย (ค่าเริ่มต้น:report
) โดยไม่คำนึงถึงตัวเลือกนี้ การตรวจสอบแท็กจะถูกปิดใช้งานหลังจากข้อผิดพลาดที่รายงานครั้งแรก
การใช้งานที่แนะนำ
เราขอแนะนำอย่างยิ่งให้ใช้โหมด SYNC ในระหว่างการเริ่มต้น การพัฒนา และการทดสอบ ตัวเลือกนี้ควรเปิดใช้งานแบบโกลบอลสำหรับกระบวนการทั้งหมดที่ใช้ ตัวแปรสภาพแวดล้อม หรือกับ ระบบบิลด์ ในโหมดนี้ ข้อบกพร่องจะถูกตรวจพบตั้งแต่เนิ่นๆ ของกระบวนการพัฒนา โค้ดเบสจะมีความเสถียรเร็วขึ้น และไม่ต้องเสียค่าใช้จ่ายในการตรวจจับข้อบกพร่องในภายหลังในการผลิต
เราขอแนะนำอย่างยิ่งให้ใช้โหมด ASYNC ในการใช้งานจริง นี่เป็นเครื่องมือที่มีค่าใช้จ่ายต่ำสำหรับการตรวจจับข้อบกพร่องด้านความปลอดภัยของหน่วยความจำในกระบวนการตลอดจนการป้องกันในเชิงลึกเพิ่มเติม เมื่อตรวจพบข้อบกพร่อง นักพัฒนาสามารถใช้ประโยชน์จากรันไทม์ API เพื่อสลับไปที่โหมด SYNC และรับการติดตามสแต็กที่แม่นยำจากกลุ่มผู้ใช้ตัวอย่าง
เราขอแนะนำอย่างยิ่งให้กำหนดค่าระดับ MTE ที่ต้องการเฉพาะ CPU สำหรับ SoC โดยทั่วไปโหมด Asymm จะมีลักษณะการทำงานเหมือนกับ ASYNC และมักจะดีกว่าเสมอ แกนประมวลผลขนาดเล็กมักจะแสดงประสิทธิภาพที่คล้ายคลึงกันในทั้งสามโหมด และสามารถกำหนดค่าให้เลือกใช้ SYNC ได้
นักพัฒนาควรตรวจสอบการมีอยู่ของข้อขัดข้องโดยการตรวจสอบ /data/tombstones
logcat
หรือโดยการตรวจสอบไปป์ไลน์ DropboxManager
ของผู้จำหน่ายเพื่อหาจุดบกพร่องของผู้ใช้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการดีบักโค้ดเนทิฟของ Android โปรดดูข้อมูล ที่นี่
ส่วนประกอบแพลตฟอร์มที่เปิดใช้งาน MTE
ใน Android 12 ส่วนประกอบของระบบที่มีความสำคัญด้านความปลอดภัยจำนวนหนึ่งใช้ MTE ASYNC เพื่อตรวจจับข้อขัดข้องของผู้ใช้ปลายทางและทำหน้าที่เป็นชั้นการป้องกันเชิงลึกเพิ่มเติม ส่วนประกอบเหล่านี้คือ:
- daemons เครือข่ายและยูทิลิตี้ (ยกเว้น
netd
) - Bluetooth, SecureElement, NFC HAL และแอปพลิเคชันระบบ
-
statsd
มอน -
system_server
-
zygote64
(เพื่ออนุญาตให้แอปพลิเคชันเลือกใช้ MTE)
เป้าหมายเหล่านี้ถูกเลือกตามเกณฑ์ต่อไปนี้:
- กระบวนการที่มีสิทธิ์พิเศษ (หมายถึงกระบวนการที่สามารถเข้าถึงบางสิ่งที่โดเมน SELinux ที่ไม่มีสิทธิ์เข้าถึงแอปไม่ได้)
- ประมวลผลอินพุตที่ไม่น่าเชื่อถือ ( กฎข้อที่สอง )
- การชะลอตัวของประสิทธิภาพที่ยอมรับได้ (การชะลอตัวไม่ได้สร้างเวลาแฝงที่มองเห็นได้ของผู้ใช้)
เราสนับสนุนให้ผู้จำหน่ายเปิดใช้งาน MTE ในการผลิตสำหรับส่วนประกอบเพิ่มเติมตามเกณฑ์ที่กล่าวไว้ข้างต้น ในระหว่างการพัฒนา เราขอแนะนำให้ทดสอบส่วนประกอบเหล่านี้โดยใช้โหมด SYNC เพื่อตรวจจับจุดบกพร่องที่แก้ไขได้ง่าย และประเมินผลกระทบของ ASYNC ต่อประสิทธิภาพการทำงาน
ในอนาคต Android วางแผนที่จะขยายรายการส่วนประกอบของระบบที่เปิดใช้งาน MTE โดยได้รับคำแนะนำจากคุณลักษณะด้านประสิทธิภาพของการออกแบบฮาร์ดแวร์ที่กำลังจะมีขึ้น