การแยกระบบยานพาหนะ

เพื่อให้มั่นใจถึงความสมบูรณ์ของระบบรถยนต์ Android Automotive จะปกป้องข้อมูลขาเข้าในระดับเหล่านี้:

ส่วนประกอบของระบบ EVS

รูปที่ 1 สถาปัตยกรรมบริการระบบ

  • แอพ ระบบตรวจสอบว่าแอปได้รับอนุญาตให้พูดคุยกับระบบย่อยของรถยนต์
  • API ที่กำหนดไว้อย่างดี API ทั่วไปไม่ยอมรับ blobs ข้อมูลที่กำหนดเอง (ต้องมีการกำหนด API ไว้อย่างดี)
  • บริการรถ. การอัปเดตได้รับอนุญาตผ่าน OTA (หรือ USB) เท่านั้น พร้อมการเข้ารหัสทั้งดิสก์และการบูตที่ได้รับการตรวจสอบ ไม่สามารถไซด์โหลดได้
  • ยานพาหนะ HAL ยืนยันข้อความเฉพาะที่ได้รับอนุญาต

แอพและ API

Android Automotive สร้างขึ้นบน Android และโต้ตอบโดยตรงกับระบบย่อยที่มีความสำคัญด้านความปลอดภัยจำนวนมาก นอกจากนี้ ยานพาหนะที่แตกต่างกันอาจมีอินเทอร์เฟซที่แตกต่างกันพร้อมฟังก์ชันการทำงานที่แตกต่างกันบน Android เพื่อให้ฟังก์ชันการทำงานเหล่านี้ปลอดภัยและคล่องตัว ฟังก์ชันเหล่านี้จึงถูกแยกออกมาในเลเยอร์นามธรรม ซึ่งแยกจากส่วนอื่นๆ ของ Android เฉพาะ API ที่กำหนดไว้อย่างดี ซึ่งมีการจัดรูปแบบที่เข้มงวดในข้อความที่ส่งผ่านเครือข่ายในรถยนต์เท่านั้นที่สามารถสื่อสารกับ Vehicle HAL นี่เป็นอินเทอร์เฟซที่คาดเดาได้สำหรับนักพัฒนา Android และให้การโต้ตอบที่ปลอดภัยกับส่วนที่เหลือของยานพาหนะ

ข้อความ HAL ของยานพาหนะจะถูกกรองเป็นสองระดับ:

  • ระดับแอป แอพที่ไม่ใช่ระบบสามารถเข้าถึง HAL ของยานพาหนะผ่านบริการรถยนต์โดยได้รับอนุญาตอย่างเหมาะสม
  • ระดับ HAL ของยานพาหนะ ช่วยให้มีการป้องกันเพิ่มเติมอีกชั้นและรับประกันว่าข้อความที่ส่งไปยังระบบย่อยของยานพาหนะนั้นมาจากแหล่งที่ถูกต้องตามกฎหมาย ยังสามารถใช้เพื่อจำกัดอัตราข้อความ ป้องกันแอปที่เป็นอันตรายไม่ให้ท่วม CAN บัส และอาจรบกวนระบบย่อยของยานพาหนะ

ยานพาหนะ HAL

HAL ของยานพาหนะเป็นเลเยอร์ด้านล่างที่โต้ตอบกับยานพาหนะ โดยสื่อสารกับเครือข่ายในรถยนต์และฮาร์ดแวร์ยานพาหนะอื่นๆ ผ่านการเรียกการควบคุมอินพุต/เอาท์พุตของคนขับ (ioctl)

HAL ของยานพาหนะเป็นส่วนประกอบเดียวใน Android Automotive ที่เชื่อมต่อกับระบบ IVI ไม่ว่าจะผ่านการเชื่อมต่อตัวประมวลผลแอปโดยตรง/ไมโครคอนโทรลเลอร์ หรือควบคุมผ่าน VMCU การเข้าถึง Vehicle HAL ควรจำกัดไว้เฉพาะแอประบบที่ใช้กฎ SELinux และการอนุญาตที่เหมาะสมบนอินเทอร์เฟซเคอร์เนล

นโยบายของ SELinux

Android Automotive ขยาย SELinux เพื่อกรองการเข้าถึงของไดรเวอร์ รวมถึงการโทรแบบเปิด ปิด อ่าน เขียน และ ioctl การใช้การกรอง ioctl (พร้อมกับฟังก์ชัน SELinux อื่นๆ) จะจำกัดประเภทของข้อความ CAN ที่อนุญาตและยอมรับโดย Vehicle HAL ซึ่งช่วยลดพื้นที่การโจมตีได้อย่างมาก สำหรับรายละเอียดเกี่ยวกับ SELinux โปรดดูที่ Security-Enhanced Linux ใน Android

นอกจากนี้ กรณีการใช้งานด้านยานยนต์ยังรวมถึงข้อมูลที่ละเอียดอ่อนประเภทใหม่ที่ควรแยกและควบคุม ข้อมูลที่ละเอียดอ่อนมีสิทธิ์แยกต่างหาก ความสามารถอื่นๆ เช่น การควบคุม HVAC และการปรับหน้าต่าง ควรมอบให้กับแอประบบเท่านั้น ตัวอย่างนโยบาย SELinux เฉพาะด้านยานยนต์:

<permission-group
 android:name=”android.support.car.permission.CAR_MONITORING />

<permission
 android:name=”android.support.car.permission.CAR_MILEAGE”
 android:protectionLevel=”signature|privileged” />
<permission
 android:name=”android.support.car.permission.CAR_SPEED”
 android:permissionGroup=”android.permission-group.LOCATION”
 android:protectionLevel=”dangerous” />
<permission
 android:name=”android.support.car.permission.CAR_VENDOR_EXTENSION”
 android:permissionGroup=”android.support.car.permission.CAR_INFORMATION”
 android:protectionLevel=”signature|privileged” />

กลุ่มสิทธิ์ CAR_MONITORING ถูกสร้างขึ้นสำหรับการอนุญาตที่เกี่ยวข้องกับยานยนต์ ความเร็วปัจจุบันถือได้ว่าเป็นข้อมูลที่ละเอียดอ่อน ดังนั้นการอนุญาต CAR_SPEED จึงถูกสร้างขึ้นโดยมีระดับการป้องกันที่ เป็นอันตราย ระดับนี้หมายความว่าข้อมูลมีความเป็นส่วนตัวและละเอียดอ่อน สิทธิ์ CAR_VENDOR_EXTENSION ถูกสร้างขึ้นด้วยสิทธิ์ระดับระบบหรือลายเซ็น ซึ่งใช้สำหรับแอประบบหรือแอปที่ลงนามซึ่งได้รับสิทธิ์นี้อย่างชัดเจน

การบล็อกแอพและกิจกรรม

เพื่อลดการเสียสมาธิในการขับขี่ Android Automotive จึงมีการควบคุมเพิ่มเติม (รายการที่อนุญาต) เพื่อให้แน่ใจว่าจะใช้แอปที่ไซด์โหลดไม่ได้เมื่อรถกำลังเคลื่อนที่ แอพเหล่านี้ยังคงสามารถทำงานได้เมื่อรถจอดหรือหยุดรถ

รายการที่อนุญาตจะระบุแอปที่สามารถใช้ได้เมื่อรถเคลื่อนที่ เฉพาะแอประบบที่เชื่อถือได้เท่านั้นที่สามารถอัปเดตรายการที่อนุญาตได้ แม้ว่าการอัปเดตสามารถเกิดขึ้นได้บนเครือข่าย แต่การอัปเดตไม่ควรถือว่าเชื่อถือได้