เฟรมเวิร์กการจำลองเสมือนของ Android (AVF) ใช้แนวทางด้านความปลอดภัยแบบแบ่งเป็นชั้นๆ ซึ่งแต่ละชั้นจะเพิ่มการบังคับใช้เพิ่มเติม เพื่อป้องกันไม่ให้มีการเรียกใช้เพย์โหลดที่กำหนดเองภายใน pVM รายการชั้นความปลอดภัยของ AVF มีดังนี้
Android จะตรวจสอบว่าเฉพาะแอปที่มีสิทธิ์ pVM เท่านั้นที่ได้รับอนุญาตให้สร้างหรือตรวจสอบ pVM
Bootloader - Bootloader จะตรวจสอบว่าเฉพาะอิมเมจ pVM ที่ลงชื่อโดย Google หรือ ผู้จำหน่ายอุปกรณ์เท่านั้นที่ได้รับอนุญาตให้บูต และปฏิบัติตามขั้นตอน การเปิดเครื่องที่ได้รับการยืนยันของ Android สถาปัตยกรรมนี้หมายความว่าแอปที่เรียกใช้ pVM จะรวมเคอร์เนลของตัวเองไม่ได้
pVM มีการป้องกันแบบหลายชั้น เช่น SELinux, สำหรับเพย์โหลดที่เรียกใช้ใน pVM การป้องกันแบบหลายชั้นจะไม่อนุญาตให้แมปข้อมูลเป็น ไฟล์ที่เรียกใช้งานได้ (
neverallow execmem) และตรวจสอบว่า W^X ใช้ได้กับไฟล์ทุกประเภท
โมเดลความปลอดภัย
การรักษาความลับ ความสมบูรณ์ และความพร้อมใช้งาน (CIA Triad) เป็นโมเดลที่ออกแบบมาเพื่อเป็นแนวทางในการกำหนดนโยบายความปลอดภัยของข้อมูล
- การรักษาความลับ คือชุดกฎที่จำกัดการเข้าถึงข้อมูล
- ความสมบูรณ์ คือการรับประกันว่าข้อมูลมีความน่าเชื่อถือและถูกต้อง
- ความพร้อมใช้งาน คือการรับประกันว่าหน่วยงานที่ได้รับอนุญาตจะเข้าถึงข้อมูลได้อย่างน่าเชื่อถือ
การรักษาความลับและความสมบูรณ์
การรักษาความลับ มาจากคุณสมบัติการแยกหน่วยความจำที่บังคับใช้โดย ไฮเปอร์ไวเซอร์ pKVM โดย pKVM จะติดตาม การเป็นเจ้าของหน่วยความจำ ของหน้าหน่วยความจำจริงแต่ละหน้าและคำขอจากเจ้าของให้แชร์หน้าต่างๆ pKVM จะตรวจสอบว่าเฉพาะ pVM ที่มีสิทธิ์ (โฮสต์และเกสต์) เท่านั้นที่มีการแมปหน้าดังกล่าวในตารางหน้าของระยะที่ 2 ซึ่งควบคุมโดยไฮเปอร์ไวเซอร์ สถาปัตยกรรมนี้จะรักษาเนื้อหาของหน่วยความจำที่เป็นของ pVM ให้เป็นส่วนตัว เว้นแต่เจ้าของจะแชร์กับ pVM อื่นอย่างชัดแจ้ง
ข้อจำกัดในการรักษาความลับยังครอบคลุมถึงเอนทิตีใดๆ ใน ระบบที่เข้าถึงหน่วยความจำในนามของ pVM ได้แก่ อุปกรณ์ที่มี DMA และ บริการที่ทำงานในเลเยอร์ที่มีสิทธิ์มากกว่า ผู้จำหน่ายระบบวงจรรวมบนชิป (SoC) ต้องปฏิบัติตามข้อกำหนดชุดใหม่ก่อนจึงจะรองรับ pKVM ได้ หากไม่ปฏิบัติตาม เราจะไม่สามารถรักษาความลับได้
ความสมบูรณ์ ใช้กับข้อมูลในหน่วยความจำและการคำนวณ โดย pVM จะทำสิ่งต่อไปนี้ไม่ได้
- แก้ไขหน่วยความจำของกันและกันโดยไม่ได้รับความยินยอม
- ส่งผลต่อสถานะ CPU ของกันและกัน
ไฮเปอร์ไวเซอร์จะบังคับใช้ข้อกำหนดเหล่านี้ อย่างไรก็ตาม ปัญหาเกี่ยวกับความสมบูรณ์ของข้อมูลยังเกิดขึ้นกับการจัดเก็บข้อมูลเสมือนเมื่อต้องใช้โซลูชันอื่นๆ เช่น dm-verity หรือ AuthFS
หลักการเหล่านี้ไม่แตกต่างจากการแยกกระบวนการที่ Linux มีให้ ซึ่งการเข้าถึงหน้าหน่วยความจำจะควบคุมด้วยตารางหน้าของระยะที่ 1 และเคอร์เนลจะสลับบริบทระหว่างกระบวนการ อย่างไรก็ตาม ส่วน EL2 ของ pKVM ซึ่งบังคับใช้คุณสมบัติเหล่านี้มีพื้นที่การโจมติน้อยกว่าเคอร์เนล Linux ทั้งหมด 3 เท่า (ประมาณ 10,000 เทียบกับ 20 ล้านบรรทัดของโค้ด) จึงรับประกันได้มากขึ้นสำหรับกรณีการใช้งานที่มีความละเอียดอ่อนเกินกว่าจะพึ่งพาการแยกกระบวนการ
pKVM มีขนาดที่เหมาะสมกับการยืนยันอย่างเป็นทางการ เรากำลังสนับสนุนการวิจัยทางวิชาการอย่างเต็มที่ ซึ่งมีเป้าหมายเพื่อพิสูจน์คุณสมบัติเหล่านี้อย่างเป็นทางการในไบนารี pKVM จริง
ส่วนที่เหลือของหน้านี้จะกล่าวถึงการรับประกันการรักษาความลับและความสมบูรณ์ที่คอมโพเนนต์แต่ละรายการรอบๆ pKVM มอบให้
ไฮเปอร์ไวเซอร์
pKVM เป็นไฮเปอร์ไวเซอร์ที่ใช้ KVM ซึ่งแยก pVM และ Android ออกเป็นสภาพแวดล้อมการดำเนินการที่ไม่ไว้วางใจซึ่งกันและกัน คุณสมบัติเหล่านี้ยังคงอยู่แม้ในกรณีที่ pVM ใดก็ตามถูกบุกรุก รวมถึงโฮสต์ ไฮเปอร์ไวเซอร์ทางเลือกที่สอดคล้องกับ AVF ต้องมีคุณสมบัติที่คล้ายกัน
pVM จะเข้าถึงหน้าของเอนทิตีอื่น เช่น pVM หรือไฮเปอร์ไวเซอร์ ไม่ได้ เว้นแต่เจ้าของหน้าจะแชร์อย่างชัดแจ้ง กฎนี้รวมถึง pVM โฮสต์และใช้ได้กับการเข้าถึง CPU และ DMA
ระบบจะล้างหน้าเว็บที่ pVM ใช้ก่อนที่จะส่งคืนไปยังโฮสต์ เช่น เมื่อมีการทำลาย pVM
ระบบจะล้างหน่วยความจำของ pVM ทั้งหมดและเฟิร์มแวร์ pVM จากการบูตอุปกรณ์ครั้งหนึ่งก่อนที่ Bootloader ของระบบปฏิบัติการจะทำงานในการบูตอุปกรณ์ครั้งถัดไป
เมื่อแนบดีบักเกอร์ฮาร์ดแวร์ เช่น SJTAG, pVM จะเข้าถึงคีย์ที่สร้างไว้ก่อนหน้านี้ไม่ได้
เฟิร์มแวร์ pVM จะไม่บูตหากยืนยันอิมเมจเริ่มต้นไม่ได้
เฟิร์มแวร์ pVM จะไม่บูตหากความสมบูรณ์ของ
instance.imgถูกบุกรุกเฉพาะอินสแตนซ์ pVM นั้นๆ เท่านั้นที่จะสร้างห่วงโซ่ใบรับรอง DICE และตัวระบุอุปกรณ์แบบผสม (CDI) ที่มอบให้กับอินสแตนซ์ pVM ได้
ระบบปฏิบัติการเกสต์
Microdroid เป็นตัวอย่างของระบบปฏิบัติการ ที่ทำงานภายใน pVM Microdroid ประกอบด้วย Bootloader ที่ใช้ U-boot, GKI, พื้นที่ผู้ใช้ Android บางส่วน และตัวเปิดใช้เพย์โหลด คุณสมบัติเหล่านี้ยังคงอยู่แม้ในกรณีที่ pVM ใดก็ตามถูกบุกรุก รวมถึงโฮสต์ ระบบปฏิบัติการทางเลือกที่ทำงานใน pVM ควรมีคุณสมบัติที่คล้ายกัน
Microdroid จะไม่บูตหากยืนยัน
boot.img,super.img,vbmeta.imgหรือvbmeta\_system.imgไม่ได้Microdroid จะไม่บูตหากการยืนยัน APK ไม่สำเร็จ
อินสแตนซ์ Microdroid เดียวกันจะไม่บูตแม้ว่าจะมีการอัปเดต APK แล้วก็ตาม
Microdroid จะไม่บูตหาก APEX ใดก็ตามยืนยันไม่สำเร็จ
Microdroid จะไม่บูต (หรือบูตด้วยสถานะเริ่มต้นที่สะอาด) หากมีการแก้ไข
instance.imgนอก pVM เกสต์Microdroid ให้การรับรองห่วงโซ่การบูต
การแก้ไข (ที่ไม่ได้ลงชื่อ) อิมเมจดิสก์ที่แชร์กับ pVM เกสต์จะทำให้เกิดข้อผิดพลาด I/O ในฝั่ง pVM
เฉพาะอินสแตนซ์ pVM นั้นๆ เท่านั้นที่จะสร้างห่วงโซ่ใบรับรอง DICE และ CDI ที่มอบให้กับอินสแตนซ์ pVM ได้
การเขียนลงในโวลุ่มพื้นที่เก็บข้อมูลที่เข้ารหัสจะได้รับการรักษาความลับ แต่ไม่มีการป้องกันการย้อนกลับในระดับความละเอียดของบล็อกการเข้ารหัส นอกจากนี้ การดัดแปลงบล็อกข้อมูลภายนอกโดยพลการอื่นๆ จะทำให้บล็อกดังกล่าวปรากฏเป็นข้อมูลขยะสำหรับ Microdroid แทนที่จะตรวจพบอย่างชัดเจนว่าเป็นข้อผิดพลาด I/O
Android
คุณสมบัติเหล่านี้ได้รับการดูแลโดย Android ในฐานะโฮสต์ แต่จะไม่เป็นจริงในกรณีที่โฮสต์ถูกบุกรุก
pVM เกสต์จะโต้ตอบกับ pVM เกสต์อื่นๆ โดยตรงไม่ได้ (เช่น สร้างการเชื่อมต่อ
vsock)เฉพาะ
VirtualizationServiceใน pVM โฮสต์เท่านั้นที่สร้างช่องทางการสื่อสารกับ pVM ได้เฉพาะแอปที่ลงชื่อด้วยคีย์แพลตฟอร์มเท่านั้นที่ขอสิทธิ์สร้าง เป็นเจ้าของ หรือโต้ตอบกับ pVM ได้
ระบบจะไม่นำตัวระบุที่เรียกว่าตัวระบุบริบท (CID) ซึ่งใช้ในการตั้งค่า
vsockการเชื่อมต่อ ระหว่างโฮสต์กับ pVM กลับมาใช้ซ้ำเมื่อ pVM โฮสต์ทำงานอยู่ เช่น คุณจะแทนที่ pVM ที่ทำงานอยู่ด้วย pVM อื่นไม่ได้
ความพร้อมใช้งาน
ในบริบทของ pVM ความพร้อมใช้งาน หมายถึงโฮสต์จัดสรรทรัพยากรที่เพียงพอให้กับเกสต์เพื่อให้เกสต์สามารถทำงานที่ออกแบบมาให้ทำได้
หน้าที่รับผิดชอบของโฮสต์รวมถึงการจัดกำหนดการ CPU เสมือนของ pVM KVM แตกต่างจากไฮเปอร์ไวเซอร์ประเภทที่ 1 ทั่วไป (เช่น Xen) ซึ่งมีการตัดสินใจด้านการออกแบบอย่างชัดเจนในการมอบหมายการจัดกำหนดการเวิร์กโหลดให้กับเคอร์เนลโฮสต์ การตัดสินใจด้านการออกแบบนี้ช่วยลดขนาดของฐานการคำนวณที่เชื่อถือได้ (TCB) ลงอย่างมาก และช่วยให้โฮสต์ตัดสินใจด้านการจัดกำหนดการได้อย่างมีข้อมูลมากขึ้นเพื่อเพิ่มประสิทธิภาพให้เหมาะสมที่สุด เนื่องจากตัวจัดกำหนดการในปัจจุบันมีขนาดใหญ่และซับซ้อน อย่างไรก็ตาม โฮสต์ที่เป็นอันตรายอาจเลือกที่จะไม่จัดกำหนดการเกสต์เลย
ในทำนองเดียวกัน pKVM ยังมอบหมายการจัดการการขัดจังหวะทางกายภาพให้กับเคอร์เนลโฮสต์เพื่อลดความซับซ้อนของไฮเปอร์ไวเซอร์และให้โฮสต์เป็นผู้รับผิดชอบการจัดกำหนดการ เราพยายามอย่างเต็มที่เพื่อให้การส่งต่อการขัดจังหวะของเกสต์ส่งผลให้เกิดการปฏิเสธการให้บริการเท่านั้น (การขัดจังหวะน้อยเกินไป มากเกินไป หรือส่งไปยังเส้นทางที่ไม่ถูกต้อง)
สุดท้าย กระบวนการตรวจสอบเครื่องเสมือน (VMM) ของโฮสต์มีหน้าที่รับผิดชอบในการจัดสรรหน่วยความจำและจัดหาอุปกรณ์เสมือน เช่น การ์ดเครือข่าย VMM ที่เป็นอันตรายอาจระงับทรัพยากรจากเกสต์
แม้ว่า pKVM จะไม่มอบความพร้อมใช้งานให้กับเกสต์ แต่การออกแบบจะปกป้องความพร้อมใช้งานของโฮสต์จากเกสต์ที่เป็นอันตราย เนื่องจากโฮสต์สามารถขัดจังหวะหรือยุติเกสต์และเรียกคืนทรัพยากรได้ทุกเมื่อ
การเปิดเครื่องที่ปลอดภัย
ข้อมูลจะเชื่อมโยงกับอินสแตนซ์ของ pVM และการเปิดเครื่องที่ปลอดภัยจะช่วยให้ควบคุมการเข้าถึงข้อมูลของอินสแตนซ์ได้ การบูตครั้งแรกของอินสแตนซ์จะจัดเตรียมอินสแตนซ์โดยการสร้างเกลือลับแบบสุ่มสำหรับ pVM และแยกรายละเอียด เช่น คีย์สาธารณะและแฮชการยืนยันออกจากอิมเมจที่โหลด ระบบจะใช้ข้อมูลนี้เพื่อยืนยันการบูตครั้งต่อๆ ไปของอินสแตนซ์ pVM และตรวจสอบว่าระบบจะปล่อยข้อมูลลับของอินสแตนซ์ให้กับอิมเมจที่ผ่านการยืนยันเท่านั้น กระบวนการนี้เกิดขึ้นในทุกขั้นตอนการโหลดภายใน pVM ได้แก่ เฟิร์มแวร์ pVM, pVM ABL, Microdroid และอื่นๆ
DICE จะมอบคู่คีย์การรับรองให้กับแต่ละขั้นตอนการโหลด โดยส่วนสาธารณะของคีย์นี้จะได้รับการรับรองในใบรับรอง DICE สำหรับขั้นตอนนั้น คู่คีย์นี้อาจเปลี่ยนแปลงระหว่างการบูต ดังนั้นระบบจึงสร้าง ข้อมูลลับในการผนึก ซึ่งมีความเสถียรสำหรับอินสแตนซ์ VM ในการรีบูต และเหมาะสำหรับการปกป้องสถานะถาวร ข้อมูลลับในการผนึกมีค่ามากสำหรับ VM ดังนั้นจึงไม่ควรใช้โดยตรง แต่ควรสร้างคีย์ในการผนึกจากข้อมูลลับในการผนึก และทำลายข้อมูลลับในการผนึกโดยเร็วที่สุด
แต่ละขั้นตอนจะส่งออบเจ็กต์ CBOR ที่เข้ารหัสแบบกำหนดไว้ ไปยัง ขั้นตอนถัดไป ออบเจ็กต์นี้มีข้อมูลลับและห่วงโซ่ใบรับรอง DICE ซึ่งมีข้อมูลสถานะสะสม เช่น ขั้นตอนสุดท้ายโหลดอย่างปลอดภัยหรือไม่
อุปกรณ์ที่ปลดล็อก
เมื่อปลดล็อกอุปกรณ์ด้วย fastboot oem unlock ระบบจะล้างข้อมูลผู้ใช้
กระบวนการนี้จะปกป้องข้อมูลผู้ใช้จากการเข้าถึงที่ไม่ได้รับอนุญาต ระบบจะทำให้ข้อมูลที่เป็นส่วนตัวของ pVM ไม่ถูกต้องด้วยเมื่อมีการปลดล็อกอุปกรณ์
เมื่อปลดล็อกแล้ว เจ้าของอุปกรณ์จะสามารถแฟลชพาร์ติชันใหม่ได้อย่างอิสระ ซึ่งปกติแล้วจะได้รับการปกป้องโดยการเปิดเครื่องที่ได้รับการยืนยัน รวมถึงพาร์ติชันที่มี pvmfw และการติดตั้งใช้งาน pKVM ดังนั้น อุปกรณ์ที่ปลดล็อกจึงไม่น่าเชื่อถือในการปฏิบัติตามโมเดลความปลอดภัยของ pVM
บุคคลภายนอกสามารถสังเกตสถานะที่อาจไม่ปลอดภัยนี้ได้โดยการตรวจสอบ สถานะการเปิดเครื่องที่ได้รับการยืนยัน ของอุปกรณ์ ในใบรับรองการรับรองคีย์