概述
在车联网的众多节点中,车机(head unit)可以说是最重要的一个节点,是云-车-人之间的信息枢纽,也是作为车联网信息安全的重中之重。针对车机所采用操作系统则越来越多地采用开源的Android系统来进行定制。
车机Android系统的架构
架构图示意如下:
图1:Android系统架构图
Android系统定制
Android是一个开源操作系统,在应用于车机系统的时候,为了系统的性能、体验和安全性等因素,主机厂通常对其进行深层次的定制,形成具有自己特色的车机系统。
定制工作通常包含以下四个层面:
- 驱动层定制
- Native层服务定制
- Framework层服务定制
- APK层应用定制
即,对Android架构中的各个层级进行定制时,将不需要的服务模块进行删除,增加具有自身特色需求的服务或应用,并且还需要针对配置文件进行对应的修改。
安全注意事项
对Android系统进行定制的时候,一定会考虑定制系统的安全性,下面介绍一部分注意事项供参考:
1.准备阶段
(1)准备最新的补丁程序。
(2)在代码树构建初期,尽可能移除不必要的应用程序和服务。
例如:
2.开发阶段
(1)打开编译器警告配置。用GCC编译工具举例如下:
- -wall-wextra:打开所有警告以帮助确保底层代码是安全的。
- -wconversion/-Wsign-conversion:进行unsigned/sign转换时发出警告。
- -wformat-security:警告使用表示可能存在安全问题的格式函数。
- -werror:将所有警告转换为错误。
(2)编译器的安全设置。用GCC编译工具举例如下:
- fstack-protector:fstack保护器。
- fortify_source:强化资源。
- wformat-security:格式安全。
(3)启用以下内存地址保护功能:
- ASLR(Address space layout randomization):地址空间布局随机化,是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。
- 栈保护程序内核特性:用来检测栈是否遭到溢出攻击。
- glibc指针保护。
(4)SOC GPS和陀螺仪:应受到MAC规则的保护,只允许访问Android资源管理。
(5)SOC BT和WIFI:应受到MAC规则的保护,只允许访问Android资源管理。
(6)应使用MAC规则保护SOC UART访问,以便仅允许访问CAN模块。
(7)应提供发布版本的静态代码分析报告。
例如:应在静态分析工具中验证Cert C和Cert Java规则。
3.上线阶段
(1)将root特权进程限制在最小权限。
(2)启动DEP(Data Execution Prevention数据执行预防),DEP是一组在存储器上运行额外检查的硬件和软件技术,有助于防止恶意程序码在系统上运行。
(3)禁用ADB,ADB应在生产后禁用。
(4)Android应用程序管理器只允许启动经车厂批准的应用程序。
(5)应支持关键代码和数据组件运行时的实时监视。
(6)应在运行期间监控以下组件的完整性(以下简称关键组件),举例如下:
- SELinux策略
- 内核代码中的DAC用户分离模块
(7)针对每个发布版本,推荐采用第三方产品来扫描已知公共漏洞(CVE)。
关于安全强化手段
为了强化设备系统的安全能力,Google在增强Android系统的安全性以外,还采用了安全计算环境TEE(Trusted Execution Environment)来强化业务的高安全需求。概要来说,主要为以下四方面:
- 验证设备(Attestation):通过安全计算环境TEE来安全地验证该设备是否被服务商认可,从而才能进一步为这个认可设备提供服务。
- 全盘加密(Protection):通过安全计算环境TEE中保管的密钥,来对设备上保存的数据进行全盘加密。
- 生物信息的隐私保护(Privacy):全流程保护设备主人的个人隐私信息,确保在设备的安全计算环境TEE以外(包括Android系统)都无法获取这些隐私信息的明文。全流程包括生物信息(如指纹和人脸)的采集、存储、信息对比等各个易被攻击的环节。
- 高安全业务的操作鉴权(Authentication):在Android Pay业务流程中,基于安全计算环境TEE实现了操作者的鉴权处理。
在以上安全强化手段的背后,除了需要安全计算环境TEE以外,更需要基础的密码学技术。
下一回,我们就来谈谈国密与其他密码学算法的区别,敬请关注。