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

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

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