车联网:车机Android系统安全介绍
概述:在车联网众多节点中,车机(head unit)可以说是最重要的一个节点,是车内与车外的信息枢纽。作为车联网信息安全的重中之重,车机系统目前绝大部分采用的是Android系统,比较流行的车机Android系统安全架构如下图:
图1:车机系统架构
从图1可以看出,车机的架构分为安全区域(Secure world)和非安全区域(Normal world)。Android安全域:负责处理数据和驱动系统资源的软件模块,通过Android框架策略和SELinux与非安全域隔离;非安全域:负责连接WiFi和BT的软件模块。TEE和Trust Zone利用arm secure world技术并将Trust Zone用作安全存储的隔离层。今天主要和大家分享的是Android安全相关的知识。
 
裁剪:Android是一个开源操作系统,应用于车机系统,为了系统的安全和性能,车厂必须对其进行深层次的裁剪,定制成为自己特的车机系统,从而确保车联网信息安全。通常可以根据车型和业务需求判断保留必要的模块和定制符合自己的一个精简Android操作系统,以达成必要的综合性能、安全性方面的需求。
剪裁通常包含以下几个方面:
驱动层的裁剪
Android native层服务的裁剪
Android frameworks层服务的裁剪
汽车手机Android APP层的裁剪
对Android架构中的各个层级进行裁剪时,将不需要的信息进行删除,需要添加的信息进行代码编写,针对相关设置文件进行相关修改。对于数据安全级别较高的设备驱动,可以采用将其从Normal world域迁移到安全域TEE中的方式,这也是TEE区别于HSM/eSE的地方。例如车辆位置的经纬度采集,车联网中,车辆位置信息的重要性众所周知,将其放入TEE中做安全保护,将大大提高其安全性。笔者认为这或许将是未来车联网安全的趋势。
裁剪后的Android系统如图2所示:
图2:Android裁剪后架构图
安全设置:车机上的Android系统裁剪完成后,针对Android系统的安全、性能还需要以下的设置。
1:启用以下内存地址保护功能:
ASLR(Address space layout randomization)中文意思:地址空间布局随机化,是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。
栈保护程序内核特性:用来检测栈是否遭到溢出攻击。
双重free检测:是一种在free时利用伪造chunk并且欺骗操作系统,达到修改内存的目的
glibc指针保护
2:GCC编译器安全设置:
Fstack-protector:fstack保护器
Fortify_source:强化资源
Wformat-security:格式安全
3:编译器配置应使用以下GCC编译器设置进行警告处理: 
-wall-wextra:打开所有警告以帮助确保底层代码是安全的。
-Wconversion/-Wsign-conversion:转换-unsigned/sign转换时发出警告。
-Wformat-security:警告使用表示可能存在安全问题的格式函数。
-Werror:将所有警告转换为错误。
-wtrampolines:警告为指向嵌套函数的指针生成的蹦床。蹦床需要可执行堆栈。
 
4:车机Android系统应启用DEP(Data Execution Prevention数据执行预防):一组在存储器上运行额外检查的硬件和软件技术,有助于防止恶意程序码在系统上运行。
5:Android操作系统应在生成产品版本时安装最新的补丁程序。
6:Android操作系统不应将“Zygote”用于应用程序分叉。
7:ADB应在生产后禁用,并仅在安全调试过程中打开。
8:禁用无线ADB。
9:Android操作系统应删除以下服务:
10:Android应用程序管理器只允许启动经车厂批准的应用程序。
11:车机应支持关键代码和数据组件的运行时监视。
12:车机应在运行期间监控以下组件的完整性(以下简称关键组件) 
SELinux策略
分区访问配置(r/w/x)
内核代码中的DAC用户分离模块
13:敏感内容的文件的安全删除应遵循指定的标准。
14:应提供发布版本的静态代码分析报告。Cert C和Cert Java规则应在静态分析工具中验证。
15:每个发布版本,应扫描第三方组件的已知公共漏洞(CVE)。
16:SOC GPS和陀螺仪应受到MAC规则的保护,只允许访问Android资源管理。
17:SOC BT和WIFI应受到MAC规则的保护,只允许访问Android资源管理。
18:应使用MAC规则保护SOC UART访问,以便仅允许访问CAN模块。
19:root特权进程应限制在最小值。
20:所有不必要的应用程序和服务都应从构建中移除。