เอกสารนี้มีกรณีการใช้งานทั่วไปสําหรับ AVF
การคอมไพล์แบบแยก
VM ที่มีการป้องกันเป็น Enclave ที่ปลอดภัยจากซอฟต์แวร์ ซึ่งให้สภาพแวดล้อมที่ปลอดภัยในการคอมไพล์โค้ดที่มีความละเอียดอ่อนด้านความปลอดภัย สภาพแวดล้อมนี้ช่วยให้สามารถย้ายการคอมไพล์ bootclasspath
และ JAR ของเซิร์ฟเวอร์ระบบ (ที่ทริกเกอร์โดยการอัปเดต APEX) จากการบูตระยะแรกไปไว้ก่อนการรีบูต และลดเวลาในการบูตหลังการอัปเดต APEX ได้อย่างมีนัยสำคัญ
การติดตั้งใช้งานอยู่ใน com.android.compos
APEX คอมโพเนนต์นี้ไม่บังคับและสามารถรวมไว้ได้โดยใช้ไฟล์ make
เป้าหมายด้านความปลอดภัยคือการคอมไพล์อินพุตที่ยืนยันแล้วอย่างตรงไปตรงมาและสร้างเอาต์พุตโดยแยกส่วน Android ในฐานะไคลเอ็นต์ที่ไม่น่าเชื่อถือจะไม่สามารถแก้ไขเอาต์พุตการคอมไพล์ไม่ว่าในทางใดก็ตาม นอกเหนือจากการทำให้คอมไพล์ไม่สำเร็จ (เมื่อ Android กลับไปใช้การคอมไพล์ตอนบูต)
บริการคอมไพล์ใน VM จะสร้างลายเซ็นก็ต่อเมื่อไม่มีการเกิดข้อผิดพลาดระหว่างการคอมไพล์ทั้งหมดเท่านั้น Android สามารถเรียกข้อมูลคีย์สาธารณะจาก VM เพื่อยืนยันลายเซ็นได้
คีย์ของ VM จะสร้างขึ้นจากโปรไฟล์ DICE ของ VM ซึ่งกำหนดโดย APEX และ APK ที่ต่อเชื่อมกับ VM นอกเหนือจากพารามิเตอร์อื่นๆ ของ VM เช่น ความสามารถในการแก้ไขข้อบกพร่อง
หากต้องการตรวจสอบว่าคีย์สาธารณะไม่ได้มาจาก VM ที่คาดไม่ถึง Android จะบูต VM เพื่อตรวจสอบว่าคีย์ถูกต้องหรือไม่ ระบบจะบูต VM ในการบูตช่วงต้นหลังจากการอัปเดต APEX แต่ละครั้ง
เมื่อใช้การบูตที่ยืนยันแล้วของ VM ที่มีการป้องกัน บริการคอมไพล์จะเรียกใช้เฉพาะโค้ดที่ยืนยันแล้วเท่านั้น ดังนั้น โค้ดจึงสามารถกำหนดให้ยอมรับเฉพาะอินพุตที่ตรงตามเงื่อนไขบางอย่าง เช่น ยอมรับไฟล์อินพุตเฉพาะในกรณีที่มีการกำหนดชื่อและข้อมูลสรุป fs-verity
ในรายการที่อนุญาต
API ที่แสดงจาก VM เป็นพื้นที่การโจมตี ระบบจะถือว่าไฟล์อินพุตและพารามิเตอร์ทั้งหมดมาจากไคลเอ็นต์ที่ไม่น่าเชื่อถือ และต้องได้รับการยืนยันและตรวจสอบก่อนดำเนินการ
VM จะยืนยันความสมบูรณ์ของไฟล์อินพุต/เอาต์พุต โดยจัดเก็บไฟล์ไว้ใน Android เป็นเซิร์ฟเวอร์ไฟล์ที่ไม่น่าเชื่อถือ ดังนี้
- เนื้อหาของไฟล์อินพุตต้องได้รับการยืนยันก่อนใช้งานโดยใช้อัลกอริทึม
fs-verity
หากต้องการให้ไฟล์อินพุตพร้อมใช้งานใน VM คุณต้องระบุแฮชรูทของไฟล์ในคอนเทนเนอร์ (APK) ที่ส่งผลต่อโปรไฟล์ DICE ของ VM เมื่อใช้แฮชรูทที่เชื่อถือได้ ผู้โจมตีจะไม่สามารถดัดแปลงอินพุตได้โดยไม่ถูกตรวจพบ - ต้องรักษาความสมบูรณ์ของไฟล์เอาต์พุตใน VM แม้ว่าไฟล์เอาต์พุตจะจัดเก็บไว้ใน Android แต่ในระหว่างการสร้าง ระบบจะรักษาความสมบูรณ์ในรูปแบบต้นไม้
fs-verity
เดียวกัน แต่อัปเดตแบบไดนามิกได้ ไฟล์เอาต์พุตสุดท้ายจะระบุได้ด้วยแฮชรูทซึ่งแยกอยู่ใน VM บริการใน VM จะปกป้องไฟล์เอาต์พุตด้วยลายเซ็น