Arm v9 เปิดตัว Arm Memory การติดแท็ก Extension (MTE) ซึ่งเป็นการติดตั้งใช้งานฮาร์ดแวร์ ความทรงจำที่ติดแท็ก
MTE จะติดแท็กการจัดสรรหน่วยความจำ/ข้อตกลงร่วมกันแต่ละรายการด้วย ข้อมูลเมตาเพิ่มเติม โมเดลจะกำหนดแท็กให้กับตำแหน่งหน่วยความจำ ซึ่งสามารถเป็น ซึ่งเชื่อมโยงอยู่กับตัวชี้ที่อ้างอิงตำแหน่งหน่วยความจำนั้น CPU ขณะรันไทม์ ตรวจสอบว่าตัวชี้และแท็กข้อมูลเมตาตรงกันกับแต่ละโหลดและการจัดเก็บ
ใน Android 12 ตัวจัดสรรหน่วยความจำฮีปเคอร์เนลและฮีปของ Userspace สามารถเสริม การจัดสรรแต่ละรายการ ด้วยข้อมูลเมตา วิธีนี้จะช่วยตรวจหาการใช้งานหลังจากใช้ฟรีและ ข้อบกพร่องที่ล้นเกินหน่วยความจำ ซึ่งเป็นแหล่งที่มาที่พบบ่อยที่สุดของข้อบกพร่องด้านความปลอดภัยของหน่วยความจำใน ฐานของโค้ดของเรา
โหมดการทํางานของ MTE
MTE มีโหมดการทำงาน 3 โหมด ดังนี้
- โหมดซิงโครนัส (SYNC)
- โหมดอะซิงโครนัส (ASYNC)
- โหมดอสมมาตร (ASYMM)
โหมดซิงโครนัส (SYNC)
โหมดนี้ได้รับการเพิ่มประสิทธิภาพเพื่อความถูกต้องของการตรวจจับข้อบกพร่องในด้านประสิทธิภาพและ
สามารถใช้เป็นเครื่องมือตรวจหาข้อบกพร่องที่แม่นยำได้ เมื่อค่าใช้จ่ายในการดำเนินการที่สูงขึ้น
ที่ยอมรับได้ เมื่อเปิดใช้แล้ว MTE SYNC จะทำหน้าที่เป็นการลดความเสี่ยงด้านความปลอดภัย
เมื่อแท็กไม่ตรงกัน ตัวประมวลผลจะล้มเลิกการดำเนินการทันทีและ
สิ้นสุดกระบวนการด้วย SIGSEGV
(รหัส
SEGV_MTESERR
) และข้อมูลทั้งหมดเกี่ยวกับการเข้าถึงหน่วยความจำและ
ที่อยู่ที่ไม่ถูกต้อง
เราขอแนะนำให้ใช้โหมดนี้ในระหว่างการทดสอบแทนการใช้โหมด HWASan/KASAN หรือในการใช้งานจริงเมื่อกระบวนการเป้าหมายแสดงถึงช่องโหว่ พื้นที่การโจมตี นอกจากนี้ เมื่อโหมด ASYNC ได้ระบุว่ามี คุณสามารถรับรายงานข้อบกพร่องที่แม่นยำได้โดยใช้ API รันไทม์เพื่อเปลี่ยน การดำเนินการกับโหมด SYNC
เมื่อทำงานในโหมดซิงค์ ตัวจัดสรร Android จะบันทึกสแต็กเทรซ การจัดสรรและการซื้อขายพื้นที่โฆษณา จะใช้เพื่อสร้างรายงานข้อผิดพลาดที่ดีขึ้นซึ่งจะมีคำอธิบายเกี่ยวกับความทรงจำ เช่น Use- After Free หรือบัฟเฟอร์ล้น และสแต็กเทรซของ เหตุการณ์ความทรงจำที่เกี่ยวข้อง รายงานดังกล่าวให้ข้อมูลตามบริบทมากขึ้น ทำให้ติดตามและแก้ไขข้อบกพร่องได้ง่ายขึ้น
โหมดอะซิงโครนัส (ASYNC)
โหมดนี้ได้รับการเพิ่มประสิทธิภาพเพื่อประสิทธิภาพมากกว่าความแม่นยำของรายงานข้อบกพร่องและ
เป็นการตรวจจับค่าใช้จ่ายต่ำสำหรับข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ
เมื่อแท็กไม่ตรงกัน ผู้ประมวลผลข้อมูลจะดำเนินการต่อไปจนกว่าจะไปถึง
รายการเคอร์เนล (เช่น เสียง Syscall หรือตัวจับเวลาที่รบกวน) ซึ่งจะทำให้สิ้นสุด
กระบวนการที่มี SIGSEGV
(รหัส SEGV_MTEAERR
) โดยไม่มี
บันทึกที่อยู่หรือการเข้าถึงหน่วยความจำที่ไม่ถูกต้อง
เราขอแนะนำให้ใช้โหมดนี้ในเวอร์ชันที่ใช้งานจริงในโค้ดเบสที่ได้รับการทดสอบมาเป็นอย่างดี
เป็นที่ทราบว่าข้อบกพร่องด้านความปลอดภัยของหน่วยความจำนั้นอยู่ในระดับต่ำ ซึ่งทำได้โดยการใช้
โหมดซิงค์ระหว่างการทดสอบ
โหมดอสมมาตร (ASYMM)
ฟีเจอร์เพิ่มเติมใน Arm v8.7-A ในโหมด Asymmetric MTE ทำให้คุณใช้งานได้แบบซิงโครนัส ตรวจสอบการอ่านหน่วยความจำ และการตรวจสอบการเขียนหน่วยความจำแบบไม่พร้อมกัน มีประสิทธิภาพใกล้เคียงกับโหมด ASYNC ในสถานการณ์ส่วนใหญ่ โหมดนี้ได้รับการปรับปรุงใหม่กว่าโหมด ASYNC และเราขอแนะนำให้ใช้แทน ASYNC เมื่อใดก็ตามที่พร้อมใช้งาน
ด้วยเหตุนี้ API ที่อธิบายไว้ด้านล่างจึงไม่ได้พูดถึง "อสมมาตร" และสามารถกำหนดค่าให้ระบบปฏิบัติการใช้โหมดอสมมาตรเสมอเมื่อ ขอข้อมูลแบบอะซิงโครนัส โปรดดูคอลัมน์ "การกำหนดค่าเฉพาะ CPU ระดับ MTE ที่ต้องการ" สำหรับข้อมูลเพิ่มเติม
MTE ในพื้นที่ผู้ใช้
ส่วนต่อไปนี้อธิบายวิธีเปิดใช้ MTE สำหรับกระบวนการของระบบ และแอปพลิเคชันต่างๆ MTE จะปิดใช้อยู่โดยค่าเริ่มต้น เว้นแต่จะใช้ตัวเลือกใดตัวเลือกหนึ่งด้านล่าง ตั้งค่าสำหรับกระบวนการที่เฉพาะเจาะจง (ดูคอมโพเนนต์ MTE ที่เปิดใช้สำหรับด้านล่าง)
เปิดใช้ MTE โดยใช้ระบบบิลด์
MTE ถูกควบคุมโดยการตั้งค่าเวลาบิลด์ของ ไฟล์ปฏิบัติการหลัก ตัวเลือกต่อไปนี้อนุญาตให้เปลี่ยนการตั้งค่านี้สำหรับ ไฟล์ปฏิบัติการแต่ละรายการ หรือไดเรกทอรีย่อยทั้งหมดในโครงสร้างซอร์ส การตั้งค่าจะถูกละเว้นในไลบรารี หรือเป้าหมายที่ไม่ใช่ไฟล์ปฏิบัติการหรือ การทดสอบ
1. กำลังเปิดใช้ MTE ใน Android.bp
(ตัวอย่าง)
สำหรับโปรเจ็กต์เฉพาะ
โหมด MTE | การเกริ่นนำ |
---|---|
MTE แบบไม่พร้อมกัน | sanitize: { memtag_heap: true, } |
MTE แบบซิงโครนัส | sanitize: { memtag_heap: true, diag: { memtag_heap: true, }, } |
หรือใน Android.mk:
โหมด MTE | การเกริ่นนำ |
---|---|
Asynchronous MTE |
LOCAL_SANITIZE := memtag_heap |
Synchronous MTE |
LOCAL_SANITIZE := memtag_heap LOCAL_SANITIZE_DIAG := memtag_heap |
2. การเปิดใช้ MTE ในไดเรกทอรีย่อยในโครงสร้างแหล่งที่มาโดยใช้ผลิตภัณฑ์ ตัวแปร:
โหมด 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 | การเกริ่นนำ |
---|---|
MTE แบบไม่พร้อมกัน | MEMTAG_HEAP_ASYNC_INCLUDE_PATHS |
MTE แบบซิงโครนัส | MEMTAG_HEAP_SYNC_INCLUDE_PATHS |
หรือระบุเส้นทางยกเว้นของไฟล์ปฏิบัติการดังนี้
โหมด MTE | การเกริ่นนำ |
---|---|
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
สำหรับแอปที่
ไม่ระบุค่าใดๆ ในไฟล์ Manifest (หรือระบุ
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 ทั้งหมดได้ ในการกำหนดค่าเคอร์เนลให้เรียกใช้กระบวนการเหล่านี้ในโหมดซิงค์เปิดอยู่
CPU ที่เฉพาะเจาะจง ค่าการซิงค์จะต้องเขียนไปยัง
sysfs
รายการ
/sys/devices/system/cpu/cpu<N>/mte_tcf_preferred
เมื่อเปิดเครื่อง
ซึ่งทำได้ด้วยสคริปต์ init เช่น หากต้องการกำหนดค่า CPU 0-1
เมื่อต้องการเรียกใช้โหมด ASYNC ในโหมด SYNC และ CPU 2-3 ที่จะใช้งานในโหมด ASYMM
อาจเพิ่มสิ่งต่อไปนี้ลงในวลี init ของสคริปต์ 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
Tombstone จากกระบวนการของโหมด 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 ไบต์) และอาจไม่ได้มีขนาดเล็กมาก เกินขีดจำกัดแม้ในโหมดนี้ การดำเนินการที่เกินมาดังกล่าวไม่ได้เป็นสาเหตุของหน่วยความจำไม่ได้ เนื่องจากหน่วยความจำภายใน 1 เม็ดไม่เคยใช้ซ้ำหลายครั้ง การจัดสรรM_MEMTAG_TUNING_UAF
- เปิดใช้แท็กแบบสุ่มแบบอิสระ สำหรับความน่าจะเป็นแบบเดียวกันประมาณ 93% ที่จะตรวจพบทั้งเชิงพื้นที่ (บัฟเฟอร์ล้น) และ ชั่วคราว (ใช้หลังใช้งานฟรี)
นอกเหนือจาก API ที่อธิบายไว้ข้างต้น ผู้ใช้ที่มีประสบการณ์อาจต้องการ ทราบข้อมูลต่อไปนี้
- การตั้งค่าการลงทะเบียนฮาร์ดแวร์
PSTATE.TCO
จะทำได้ชั่วคราว ระงับการตรวจสอบแท็ก (ตัวอย่าง) เช่น เมื่อคัดลอกช่วงหน่วยความจำที่มีเนื้อหาแท็กที่ไม่รู้จัก หรือ การจัดการจุดคอขวดของประสิทธิภาพในแบบ Hot Loop - เมื่อใช้
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
) ไม่ว่าจะเป็นเรื่องนี้ ระบบจะปิดการตรวจสอบแท็ก หลังจากเกิดข้อผิดพลาดครั้งแรก
การใช้งานที่แนะนำ
เราขอแนะนำให้ใช้โหมดซิงค์ระหว่างการเรียกใช้ การพัฒนา และ การทดสอบ ควรเปิดใช้ตัวเลือกนี้ทั่วโลกสำหรับกระบวนการทั้งหมดที่ใช้ตัวแปรสภาพแวดล้อมหรือในระบบการสร้าง ในโหมดนี้ ระบบจะตรวจพบข้อบกพร่อง ในช่วงต้นของกระบวนการพัฒนา โค้ดเบสจะมีความเสถียรเร็วกว่า ค่าใช้จ่ายในการตรวจหาข้อบกพร่องภายหลังในการผลิตจะหลีกเลี่ยงได้
เราขอแนะนำอย่างยิ่งให้ใช้โหมด ASYNC ในเวอร์ชันที่ใช้งานจริง โดยอัตรานี้ เครื่องมือโอเวอร์เฮดสำหรับตรวจจับข้อบกพร่องด้านความปลอดภัยของหน่วยความจำในกระบวนการ และการป้องกันในเชิงลึกยิ่งขึ้น เมื่อระบบตรวจพบข้อบกพร่อง นักพัฒนาแอปสามารถ ใช้ประโยชน์จาก API รันไทม์เพื่อเปลี่ยนเป็นโหมดซิงค์และรับสแต็กเทรซที่แม่นยำ จากกลุ่มผู้ใช้ตัวอย่าง
ขอแนะนำให้กำหนดค่าระดับ MTE ที่ต้องการสำหรับ CPU โดยเฉพาะสำหรับ SoC โดยปกติโหมด Asymm จะมีลักษณะการทำงาน เหมือนกับ ASYNC และมักจะชอบมากกว่า แกนในลำดับขนาดเล็กมักจะแสดงคล้ายๆ กัน ประสิทธิภาพการทำงานในทั้ง 3 โหมด และสามารถกำหนดค่าให้ต้องการใช้ SYNC
นักพัฒนาแอปควรตรวจสอบการเกิดข้อขัดข้องโดยตรวจสอบ
/data/tombstones
,
logcat
หรือโดยการตรวจสอบผู้ให้บริการ DropboxManager
สำหรับข้อบกพร่องของผู้ใช้ปลายทาง ดูข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไขข้อบกพร่องของโค้ดที่มาพร้อมเครื่อง Android ได้ที่
ดูข้อมูลได้ที่นี่
คอมโพเนนต์แพลตฟอร์มที่เปิดใช้ MTE
ใน Android 12 คอมโพเนนต์ของระบบที่สำคัญต่อความปลอดภัยจำนวนหนึ่งใช้ MTE ASYNC เพื่อตรวจหาข้อขัดข้องของผู้ใช้ปลายทาง และทำหน้าที่เป็นเลเยอร์เพิ่มเติม ป้องกันในเชิงลึก ซึ่งได้แก่
- ดีมอนเครือข่ายและยูทิลิตี (ยกเว้น
netd
) - บลูทูธ, SecureElement, NFC HAL และแอประบบ
- Daemon
statsd
รายการ system_server
zygote64
(เพื่ออนุญาตให้แอปเลือกใช้ MTE)
เป้าหมายเหล่านี้ถูกเลือกตามเกณฑ์ต่อไปนี้:
- กระบวนการที่เป็นสิทธิพิเศษ (หมายถึงกระบวนการที่มีสิทธิ์เข้าถึงบางสิ่ง โดเมน SELinux ไม่มี)
- ประมวลผลการป้อนข้อมูลที่ไม่น่าไว้วางใจ (กฎ จาก 2 รายการ)
- การชะลอตัวด้านประสิทธิภาพที่ยอมรับได้ (การชะลอตัวไม่ให้ผู้ใช้เห็น เวลาในการตอบสนอง)
เราขอแนะนำให้ผู้ให้บริการเปิดใช้ MTE ในการใช้งานจริงสำหรับคอมโพเนนต์เพิ่มเติม
ตามเกณฑ์ที่กล่าวถึงข้างต้น เราขอแนะนำให้ทดสอบระหว่างการพัฒนา
คอมโพเนนต์เหล่านี้โดยใช้โหมดซิงค์ เพื่อตรวจหาข้อบกพร่องที่แก้ไขแล้วได้อย่างง่ายดาย และประเมิน
ASYNC มีผลกระทบต่อประสิทธิภาพการทำงาน
ในอนาคต Android มีแผนที่จะขยายรายการคอมโพเนนต์ของระบบ MTE คือ
เปิดใช้อยู่ โดยมีคำแนะนำโดยคุณลักษณะด้านประสิทธิภาพของการออกแบบฮาร์ดแวร์ที่จะมีขึ้น