برای اطمینان از یکپارچگی سیستم خودرو، Android Automotive از داده های دریافتی در این سطوح محافظت می کند:
شکل 1. معماری سرویس سیستم
- برنامه ها سیستم تأیید میکند که برنامهای مجوز صحبت با زیرسیستمهای خودرو را دارد.
- APIهای خوب تعریف شده API های عمومی حباب های داده دلخواه را نمی پذیرند (API ها باید به خوبی تعریف شوند).
- سرویس خودرو. بهروزرسانیها فقط از طریق OTA (یا USB)، با رمزگذاری تمام دیسک و بوت تأیید شده مجاز هستند. نمی توان جانبی را بارگذاری کرد.
- HAL وسیله نقلیه. تأیید می کند که پیام های خاص مجاز هستند.
برنامه ها و API ها
Android Automotive بر روی Android ساخته شده است و مستقیماً با زیرسیستم های متعدد ایمنی در تعامل است. علاوه بر این، وسایل نقلیه مختلف ممکن است دارای رابط های مختلف با عملکردهای مختلف در معرض اندروید باشند. برای ایمن و سادهسازی این قابلیتها، آنها در یک لایه انتزاعی جدا از بقیه اندروید جدا شدهاند. فقط APIهای کاملاً تعریف شده با قالب بندی دقیق در پیام های ارسال شده از طریق شبکه های داخل خودرو می توانند با Vehicle HAL ارتباط برقرار کنند. این یک رابط قابل پیش بینی برای توسعه دهندگان اندروید فراهم می کند و یک تعامل امن با بقیه وسیله نقلیه فراهم می کند.
پیام های HAL خودرو در دو سطح فیلتر می شوند:
- سطح برنامه برنامه های غیر سیستمی می توانند با مجوزهای مناسب از طریق سرویس خودرو به HAL وسیله نقلیه دسترسی داشته باشند.
- سطح HAL خودرو. اجازه می دهد تا یک لایه حفاظتی اضافی و اطمینان حاصل شود که پیام های ارسال شده به زیرسیستم های خودرو از یک منبع قانونی سرچشمه می گیرند. همچنین میتواند برای رتبهبندی پیامهای محدود، جلوگیری از سرازیر شدن برنامههای مخرب در گذرگاه CAN و تداخل احتمالی با زیرسیستمهای خودرو استفاده شود.
HAL وسیله نقلیه
Vehicle HAL یک لایه پایین تر است که با وسیله نقلیه در تعامل است و با شبکه های داخل خودرو و سایر سخت افزارهای خودرو از طریق تماس های کنترل ورودی/خروجی راننده (ioctl) ارتباط برقرار می کند.
HAL وسیله نقلیه تنها مؤلفه در Android Automotive است که به سیستم IVI متصل است، یا از طریق اتصال مستقیم پردازنده برنامه / میکروکنترلر یا از طریق یک VMCU دریچه ای دارد. دسترسی به Vehicle HAL باید به برنامه های سیستمی با استفاده از قوانین SELinux و مجوزهای مناسب در رابط های هسته محدود شود.
سیاست های SELinux
Android Automotive SELinux را برای فیلتر کردن دسترسی راننده از جمله تماسهای باز، بسته، خواندن، نوشتن و ioctl گسترش میدهد. استفاده از فیلتر ioctl (همراه با سایر عملکردهای SELinux) نوع پیام های CAN مجاز و پذیرفته شده توسط Vehicle HAL را محدود می کند و سطح حمله را به شدت کاهش می دهد. برای جزئیات بیشتر در مورد SELinux، به Linux Enhanced Security در 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 کنترلهای اضافی (فهرست مجاز) را برای اطمینان از عدم استفاده از برنامههای جانبی در هنگام حرکت وسیله نقلیه ارائه میکند. این برنامهها همچنان میتوانند وقتی وسیله نقلیه پارک شده یا متوقف شده است اجرا شوند.
لیست مجاز برنامه هایی را مشخص می کند که می توانند هنگام حرکت وسیله نقلیه استفاده شوند. فقط برنامه های سیستم قابل اعتماد می توانند لیست مجاز را به روز کنند. در حالی که بهروزرسانیها میتوانند از طریق شبکه انجام شوند، بهروزرسانیها نباید قابل اعتماد در نظر گرفته شوند.