MTE สามารถเปิดใช้งานได้อย่างอิสระในเคอร์เนลของ Android และในกระบวนการใดๆ ในระบบ Android Google ไม่ได้กำหนดการกำหนดค่าเฉพาะใดๆ และมีเป้าหมายเพื่อให้ผู้สร้างอุปกรณ์มีความยืดหยุ่นสูงสุด
เอกสารนี้อธิบายการตั้งค่าและขอบเขตของ MTE ซึ่งตามความเห็นของเรา ถือเป็นการแลกเปลี่ยนที่ดีระหว่างความปลอดภัยและค่าใช้จ่ายสำหรับผู้ใช้ Android เนื่องจากการบรรเทาช่องโหว่ที่ทำงานตลอดเวลา
เคอร์เนล
MTE ในเคอร์เนลได้รับการกำหนดค่าผ่านทางบรรทัดคำสั่ง ค่าเริ่มต้นคือเปิดในโหมดซิงค์ สิ่งนี้อาจมีการเปลี่ยนแปลงในอนาคตด้วยเหตุผลหลายประการ:
- พบว่าส่งผลกระทบอย่างมีนัยสำคัญต่อประสิทธิภาพและจำเป็นต้องปรับปรุงประสิทธิภาพ
- คุณภาพของโค้ดเคอร์เนลได้รับการยอมรับอย่างกว้างขวางว่าไม่เพียงพอที่จะจัดส่ง MTE ในโหมดการบังคับใช้ (นั่นคือ ภาวะตื่นตระหนกเมื่อเกิดความล้มเหลว)
คำแนะนำปัจจุบันคือการ ปิดการใช้งานเคอร์เนล MTE บนอุปกรณ์ที่ใช้งานจริง เมื่อต้องการทำเช่นนี้ ให้เพิ่ม kasan=off
ในบรรทัดคำสั่งเคอร์เนล
พื้นที่ผู้ใช้
Google จัดเตรียมรายการไบนารีพื้นที่ผู้ใช้เริ่มต้นที่จะป้องกันด้วย MTE รายการนี้ประกอบด้วยอินพุตจากความปลอดภัยของ Android และมีส่วนประกอบที่มีสิทธิ์และ/หรือจัดการอินพุตที่ไม่น่าเชื่อถือ รายการไบนารีดั้งเดิมล่าสุดที่แนะนำกับ MTE สามารถพบได้ในไฟล์ memtag-common.mk ในระบบบิลด์ Android นอกจากนี้ยังมี แอปพลิเคชันระบบหลายตัว รวมอยู่ด้วย: ปัจจุบัน Nfc, Bluetooth และ SecureElement ไบนารีและแอปพลิเคชันเหล่านี้เปิดใช้งานในโหมด Async ตามค่าเริ่มต้น
คำแนะนำในปัจจุบันคือการ ใช้รายการเป้าหมายเริ่มต้น (ไม่จำเป็นต้องเปลี่ยนแปลง) นอกจากนี้ ขอแนะนำให้ประเมินการเพิ่ม BSP และ OEM ให้กับระบบหลัก และเปิดใช้งาน MTE ในระบบที่มีความสำคัญด้านความปลอดภัย
การใช้งาน
แอปพลิเคชันระบบทั้งสามรายการข้างต้นเป็นแอปพลิเคชันเดียวที่ใช้ MTE ในขณะนี้ เพื่อให้แอปพลิเคชันบุคคลที่สามเปิดใช้งาน MTE นั้น AndroidManifest.xml
จะต้องระบุ android:memtagMode
ด้วยค่าอื่นที่ไม่ใช่ off
ดังนั้น ชุดเบนช์มาร์กทั่วไป เช่น Geekbench หรือ AnTuTu จะไม่ทำงานด้วย MTE หากเคอร์เนล MTE ถูกปิดใช้งานด้วย (ดู kasan=off
ด้านบน) เกณฑ์มาตรฐานคาดว่าจะแสดงผลกระทบต่อประสิทธิภาพที่จำกัดมาก ถ้ามีเลย
สำหรับแอปอื่นๆ Chrome มีการพัฒนาการรองรับ MTE อย่างแข็งขัน Chrome เวอร์ชัน Play Store ปัจจุบันมีการตั้งค่า memtagMode=async
ในรายการ เราคาดหวังด้วยว่าแอปที่คำนึงถึงความปลอดภัยจำนวนหนึ่งในระบบนิเวศของ Android (เช่น แอปธนาคาร) จะทำเช่นเดียวกันในที่สุด ในทางกลับกัน เราคาดหวังว่าแอปพลิเคชันบางตัวที่ต้องการประสิทธิภาพ CPU สูงสุด เช่น เกม จะเลือกที่จะปิดใช้งาน MTE ต่อไป
โหมดอื่นๆ
คำแนะนำข้างต้นใช้เฉพาะโหมด Asynchronous MTE เท่านั้นในทุกที่ โหมดอื่นๆ อาจจะเกือบหรือเร็วพอๆ กัน ทั้งนี้ขึ้นอยู่กับฮาร์ดแวร์ นอกจากนี้ยังให้การวินิจฉัยที่ดีขึ้นและคุณสมบัติการบรรเทาช่องโหว่ที่ค่อนข้างแข็งแกร่งอีกด้วย
เราขอแนะนำให้ทดสอบการกำหนดค่าอื่นหนึ่งหรือสองแบบเพื่อดูว่าดีเพียงพอสำหรับความต้องการด้านประสิทธิภาพ/พลังงานของคุณหรือไม่ โหมด MTE สามารถตั้งค่าสำหรับแต่ละ CPU คอร์ในระบบโดยการเขียนไปที่ /sys/devices/system/cpu/cpu*/mte_tcf_preferred
ตัวอย่างเช่น การเขียน sync
(หรือ asymm
) จะทำให้กระบวนการ userspace ใดๆ ที่ร้องขอโหมด Async ได้รับการอัปเกรดอัตโนมัติเป็น Sync (หรือ Asymm) โดยอัตโนมัติในขณะที่ทำงานบนคอร์นั้น การตั้งค่านี้สามารถทำได้ในไฟล์ .rc ณ เวลาบูตอุปกรณ์
เราขอแนะนำให้วัดการกำหนดค่าอื่นๆ หนึ่งหรือสองแบบเพื่อตรวจสอบว่าเป็นไปตามข้อกำหนดด้านประสิทธิภาพและพลังงานของคุณหรือไม่ การกำหนดค่าที่น่าสนใจในการสำรวจ:
- ไม่สมมาตร บนแกนทั้งหมด
- ความไม่สมดุล บนคอร์ขนาดใหญ่ ซิงค์ บนคอร์อื่น
หากต้องการตรวจสอบว่ากระบวนการกำลังร้องขอโหมด Async (พร้อมการอัพเกรดอัตโนมัติที่เป็นไปได้) ให้ตรวจสอบว่าบรรทัดต่อไปนี้มีทั้ง PR_MTE_TCF_SYNC และ PR_MTE_TCF_ASYNC :
debuggerd| head -30 | grep tagged_addr
น่าเสียดายที่ไม่มีวิธีง่ายๆ ในการดูโหมดที่มีประสิทธิภาพสำหรับกระบวนการ แต่กระบวนการใดๆ ที่แสดงทั้งสองค่าที่แสดงไว้ข้างต้นจะขึ้นอยู่กับลักษณะการอัปเกรดอัตโนมัติ