เปิดส่วนขยายการติดแท็กหน่วยความจำ

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 จะทำได้ชั่วคราว ระงับการตรวจสอบแท็ก (ตัวอย่าง) เช่น เมื่อคัดลอกช่วงหน่วยความจำที่มีเนื้อหาแท็กที่ไม่รู้จัก หรือ การจัดการจุดคอขวดของประสิทธิภาพในวงลัด
  • เมื่อใช้ 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 คือ เปิดอยู่ โดยมีคำแนะนำโดยคุณลักษณะด้านประสิทธิภาพของการออกแบบฮาร์ดแวร์ที่จะมีขึ้น