การกำหนดค่า MTE

คุณสามารถเปิดใช้ MTE แยกต่างหากในเคอร์เนล Android และใน ในระบบ Android Google ไม่ได้ออกคำสั่งที่เจาะจงใดๆ การกำหนดค่าและมีเป้าหมายเพื่อให้อุปกรณ์มีความยืดหยุ่นสูงสุด เครื่องมือสร้างขึ้นมา

เอกสารฉบับนี้อธิบายการตั้งค่าและขอบเขต MTE ตามความเห็นของเรา ให้การเลือกที่ดีระหว่างความปลอดภัยและต้นทุนสำหรับ Android ให้ผู้ใช้ใช้งานอยู่เสมอเป็นการลดช่องโหว่

เคอร์เนล

MTE ในเคอร์เนลจะได้รับการกำหนดค่าผ่านบรรทัดคำสั่ง โดยค่าเริ่มต้นคือ "เปิด" ในโหมด "ซิงค์" อาจมีการเปลี่ยนแปลงในอนาคตสำหรับ เหตุผลหลายประการ:

  • ซึ่งแสดงให้เห็นว่าส่งผลต่อประสิทธิภาพและความต้องการอย่างมีนัยสำคัญ งานด้านการเพิ่มประสิทธิภาพ
  • เป็นที่รับรู้กันอย่างกว้างขวางว่าคุณภาพของรหัสเคอร์เนลไม่เพียงพอต่อการจัดส่ง MTE ในโหมดการบังคับใช้ (กล่าวคือ ตื่นตระหนกเมื่อล้มเหลว)

คําแนะนําปัจจุบันคือปิดใช้ Kernel MTE อุปกรณ์ที่ใช้งานจริง โดยเพิ่ม kasan=off ลงในส่วน บรรทัดคำสั่งของเคอร์เนล

พื้นที่ผู้ใช้

Google ให้รายการไบนารีพื้นที่ผู้ใช้ที่จะป้องกันตามค่าเริ่มต้น ผ่าน MTE รายการสร้างขึ้นจากอินพุตของ Android Security และมีคอมโพเนนต์ที่ได้รับสิทธิ์และ/หรือจัดการที่ไม่น่าเชื่อถือ อินพุต รายการไบนารีแบบเนทีฟที่แนะนำ คุณสามารถดูข้อมูลด้วย MTE ได้ใน เวลา memtag-common.mk ในบิลด์ของ Android ระบบ นอกจากนี้ หลาย แอประบบ เหล่านี้รวมอยู่ด้วย ได้แก่ ปัจจุบัน, NFC บลูทูธและ SecureElement ไบนารีและแอปเหล่านี้ ในโหมดอะซิงโครนัสโดยค่าเริ่มต้น

คำแนะนำปัจจุบันคือใช้รายการเป้าหมายเริ่มต้น (ไม่ต้องเปลี่ยนแปลง) นอกจากนี้ ขอแนะนำให้ประเมิน การเพิ่ม BSP และ OEM ในระบบหลักและเปิดใช้ MTE ในระบบหลัก ซึ่งมีความละเอียดอ่อนต่อความปลอดภัย

แอป

แอประบบ 3 รายการข้างต้นเป็นเพียงแอปเดียวที่ใช้ MTE ในขณะนี้ เพื่อให้แอปของบุคคลที่สามเปิดใช้ MTE โดย AndroidManifest.xml จะต้องระบุ android:memtagMode ที่มีค่าอื่นๆ กว่า off ดังนั้น ชุดโปรแกรมเปรียบเทียบทั่วไป เช่น ทั้งนี้ Geekbench หรือ AnTuTu ไม่ทำงานโดยใช้ MTE ในกรณีที่ใช้ MTE ของเคอร์เนลด้วย ปิดใช้ (ดู kasan=off ด้านบน) การเปรียบเทียบ คาดว่าจะส่งผลต่อประสิทธิภาพน้อยมาก หากมี

ส่วนแอปอื่นๆ มีการพัฒนาการรองรับ MTE ใน Chrome Chrome เวอร์ชันปัจจุบันใน Play Store ประกอบด้วย การตั้งค่า memtagMode=async ในไฟล์ Manifest และความคาดหวังของเรา แอปที่คำนึงถึงความปลอดภัยจำนวนมากในระบบนิเวศของ Android (เช่น แอปธนาคาร) ในที่สุดก็จะทำเช่นเดียวกัน ใน ในขณะเดียวกัน เราคาดว่าบางแอป ที่ใช้ CPU สูงสุด เช่น เกม จะเลือกปิดใช้ MTE ไว้

โหมดอื่นๆ

วิธีการข้างต้นใช้เฉพาะโหมด MTE แบบอะซิงโครนัสเท่านั้น ในทุกที่ โหมดอื่นๆ อาจเกือบทั้งหมด หรือ เร็วมากๆ แต่ยังให้การวินิจฉัยที่ดีขึ้น คุณสมบัติที่มีประสิทธิภาพยิ่งขึ้นในการลดช่องโหว่

เราขอแนะนำให้ทดสอบการกำหนดค่าอื่นอีก 1 หรือ 2 รายการเพื่อดูว่า ดีพอสำหรับความต้องการด้านประสิทธิภาพ/พลังงานของคุณ โหมด MTE สำหรับแกน CPU แต่ละแกนในระบบได้โดยเขียนไปยัง /sys/devices/system/cpu/cpu*/mte_tcf_preferred เช่น การเขียน sync (หรือ asymm) จะทำให้กระบวนการ userspace ที่ขอ โหมดอะซิงโครนัสจะได้รับการอัปเกรดอัตโนมัติเป็น Sync (หรือ Asymm) โดยอัตโนมัติขณะ ซึ่งใช้แกนอื่นๆ กัน การตั้งค่านี้ทําได้ในไฟล์ .rc ในอุปกรณ์ เวลาเปิดเครื่อง

เราขอแนะนำให้วัดการกำหนดค่าอื่นอีก 1 หรือ 2 รายการเพื่อตรวจสอบว่า เป็นไปตามข้อกำหนดด้านประสิทธิภาพและพลังงาน ใช้บ้าง การกำหนดค่าที่น่าสนใจที่ควรสำรวจมีดังนี้

  • Asymm บนแกนทั้งหมด
  • Asymm บนแกนขนาดใหญ่ และ Sync บนแกนอื่นๆ

หากต้องการยืนยันว่ากระบวนการขอโหมดอะซิงโครนัส (อาจทำได้) อัปเกรดอัตโนมัติ) ตรวจสอบว่าบรรทัดต่อไปนี้มีทั้ง PR_MTE_TCF_SYNC และ PR_MTE_TCF_ASYNC

  debuggerd <PID> | head -30 | grep tagged_addr

ขออภัย ไม่มีวิธีง่ายๆ ในการดูโหมดที่มีประสิทธิภาพสำหรับ กระบวนการ แต่กระบวนการที่แสดงทั้ง 2 ค่าข้างต้น ตามลักษณะการอัปเกรดอัตโนมัติ