คุณสามารถเปิดใช้ 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 ค่าข้างต้น ตามลักษณะการอัปเกรดอัตโนมัติ