차량 시스템 분리

자동차 시스템의 무결성을 보장하기 위해 Android Automotive는 다음과 같은 수준에서 수신 데이터를 보호합니다.

EVS 시스템 구성요소

그림 1. 시스템 서비스 아키텍처

  • 애플리케이션. 시스템은 애플리케이션에 자동차 하위 시스템과 통신할 수 있는 권한이 있는지 확인합니다.
  • 잘 정의된 API. 일반 API는 임의의 데이터 blob을 허용하지 않습니다(API를 잘 정의해야 함).
  • 자동차 서비스. 전체 디스크 암호화 및 자체 검사 부팅을 사용하는 OTA(또는 USB)를 통해서만 업데이트가 허용됩니다. 사이드로드할 수 없습니다.
  • 차량 HAL. 특정 메시지만 허용되는지 확인합니다.

애플리케이션 및 API

Android Automotive는 Android에 내장되어 있으며 안전에 중요한 여러 하위 시스템과 직접 상호작용합니다. 또한, 차량마다 Android에 노출된 다양한 기능을 가진 다양한 인터페이스가 있을 수 있습니다. 이러한 기능을 안전하고 간소화하도록 하기 위해 인터페이스는 나머지 Android와는 별도로 추상화 계층에서 분리됩니다. 차량 내부 네트워크를 통해 전송되는 메시지에 엄격한 형식이 지정되어 있으며 잘 정의된 API만 차량 HAL과 통신 가능합니다. 이러한 방식을 통해 Android 개발자에게 예측 가능한 인터페이스를 제공하고 차량의 나머지 부분과 안전하게 상호작용할 수 있습니다.

차량 HAL 메시지는 다음 두 가지 수준에서 필터링됩니다.

  • 애플리케이션 수준. 비시스템 애플리케이션은 적절한 권한을 가진 자동차 서비스를 통해 차량 HAL에 액세스할 수 있습니다.
  • 차량 HAL 수준. 차량 하위 시스템으로 보낸 메시지가 합법적인 소스에서 보낸 것인지에 관한 추가 보호 레이어를 제공합니다. 또한 한도 메시지를 평가하여 악성 애플리케이션에 의한 CAN 버스 플러딩으로 차량 하위시스템이 방해받지 않도록 할 수 있습니다.

차량 HAL

차량 HAL은 차량과 상호작용하는 하위 레이어로, 드라이버 입력/출력 제어(ioctl) 호출을 통해 차량 내 네트워크 및 기타 차량 하드웨어와 통신합니다.

차량 HAL은 직접 애플리케이션 프로세서/마이크로컨트롤러 연결을 통하거나 VMCU를 통해 게이트로 통제되어 IVI 시스템에 연결된 Android Automotive의 유일한 구성요소입니다. 차량 HAL 액세스는 SELinux 규칙과 커널 인터페이스의 적절한 권한을 사용하는 시스템 애플리케이션으로 제한되어야 합니다.

SELinux 정책

Android Automotive는 SELinux를 확장하여 open, close, read, write, ioctl 호출을 비롯한 드라이버 액세스를 필터링합니다. 다른 SELinux 기능과 함께 ioctl 필터링을 사용하면 차량 HAL에서 허용 및 수락하는 CAN 메시지 유형이 제한되어 공격 경로가 크게 줄어듭니다. SELinux에 관한 자세한 내용은 Android의 보안이 강화된 Linux를 참고하세요.

또한, 자동차 사용 사례에는 분리 및 제어되어야 하는 새로운 유형의 민감한 정보가 포함됩니다. 민감한 정보는 별도의 권한을 갖습니다. HVAC 컨트롤 및 창 조정 같은 다른 기능은 시스템 애플리케이션에만 부여해야 합니다. Automotive 관련 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는 차량이 움직일 때 사이드로드된 애플리케이션을 사용할 수 없도록 하는 추가 컨트롤(허용 목록)을 제공합니다. 이러한 앱은 차량이 주차되거나 중지된 경우에도 계속 실행될 수 있습니다.

허용 목록은 차량이 움직이고 있을 때 사용할 수 있는 애플리케이션을 지정합니다. 신뢰할 수 있는 시스템 앱에서만 허용 목록을 업데이트할 수 있습니다. 네트워크를 통해 업데이트를 할 수 있지만, 업데이트는 신뢰할 수 있는 것으로 간주되지 않습니다.