文:岡 健五,译:牛喀网
CAN总线是车载网络技术发展中的典型代表。本文针对车载网络的攻击,基于多层防御的原则,介绍一下车内网络的4层防护技术。
车载系统在进化过程中的漏洞
这次我们介绍下车内网络的安全技术。车内网络的架构和通信都是有安全保证需要的。
以往机械式的构造和功能在逐渐演变为受汽车电子和软件控制的系统,在这过程中,原来简单且独立的系统已经变成了相互关联的复杂系统。
结果不仅安全方面变得脆弱了,而且也更容易成为黑客攻击的目标,能够诱发攻击的要素也增多了。这些通过汽车网络安全专家近些年攻破的汽车网络案例就可以见分晓。因此,安全的车内网络架构变得极为重要。
之前介绍的网络攻击以及被黑的案例提到了几个攻击者可以侵入的入口。包括蓝牙栈漏洞的利用、使用移动电话呼叫车机SIM卡、音频调制解调器恶意利用、WMA文件恶意利用、WiFi密码攻击、诊断口直接接入等。
网络完全防护的基本出发点是多层防御(Defense-in-depth),对于车内网络我们也推荐多层方法。例如博世公司推荐的多层汽车网络安全方法共有四层。
図1 实现汽车网络安全的4层构造
安全的车内网络架构
首先最外面的第四层是与车联网相关的,目的是保护汽车整车的通信安全性和完整性以及驾驶员的隐私。推荐的安全解决方案是,与外部通信时经过防火墙,并满足通信和外部接口相关的安全标准。
比如 IEEE 1609.2,ETSI TS 103 097等,定义了ITS相关的无线网络的安全通信规范。而且要使用软件组件和应用层网关(ALG:Application LayerGateway)将车内网络和外部通信分割。
接下来是第三层电子电气架构。目的是分离并保护整个车内网域。推荐使用能够管理通信数据以及访问权限的车载安全网关。
例如,车载网关可以按照车内LAN网络的规范,以CAN的ID和报文内容,以及报文的传输频率为基础,对通信内容进行检查和过滤。
使用列出安全通信对象的“白名单”方式,可以验证帧的ID,使用“状态包检查”和“深度包检查”等包过滤技术则可以检查报文的内容。
此外,通过与正常传输的频率比较,可以检测出以更高频率或更低频率发送的报文。应该限制对安全网关的诊断和非标准数据的传输,如果必须接入访问的话,要请求解锁。
図2 第二层/三层的构成
第二层主要目的是保护车内网络信号的完整性,是汽车网络安全重要一环。这个部分十分重要,后面详细说明。
最里面的第一层,是为了保护车辆搭载的各个ECU的软件和数据的完整性。推荐的解决方案是采用面向汽车网络安全的安全硬件模块。关于基于EVITA的安全硬件模块,在连载文章联网汽车网络安全(三)中有介绍。
车载网络安全的重要目标之一是确保所有ECU都按照预期的状态动作。为了实现这个目标,需要采用安全烧录、安全启动、运行时意外监测、安全调试等安全机制。对硬件的要求有:加密密钥的完整性和机密性保护,安全存储,加密加速器,安全应用运行的所需要的安全执行环境等。
安全的车内网络通信
即使针对车外通信进行了安全防护,也会存在恶意攻击者采用各种方式侵入车内网络的可能性。因此,对这些攻击采用可能的应对措施是必要的。
目前为止,汽车网络安全研究人员展示的案例中,通过侵入CAN总线,对制动的动作/不动作,转向系统操作、“行驶、转弯,停车”等跟车辆安全相关的控制都实现了。
即便是对ECU软件架构指定了标准的AUTOSAR,也意识到了车内网络通信相关的问题。并制定了“安全的片上系统(SecOC)”规范,在4.2.1版本发布。
AUTOSAR的SecOC规范考虑了常规车内网络上的资源制约,对发送到车辆网络上的重要数据,提供了有效且适当的验证方法。
该规范中,主要描述了根据报文认证码MAC(Message Authentication Code)按照对称(公共秘钥)加密方式进行验证的方法。对称加密方法可以用更小的秘钥实现与非对称(公钥)加密系统同级别的安全性水平,同时运算量减少了。硬件上和软件上都可实现。
但是,AUTOSAR的SecOC配置很灵活,支持对称和不对称两种加密方法。SecOC模块可以方便地集成到AUTOSAR通信栈。SecOC规范提供了验证和完整性保护机制,即确保接收的数据发送自正确的ECU而且没有数据被篡改。而且,SecOC规范中也支持信息交互的新鲜性保护。
図3 MAC生成和验证案例
ECU上实现AUTOSAR的SecOC模块
首先,发信和收信ECU都需要实现SecOC。每个SecOC模块有用于数据新鲜性保护的新鲜值(比如新鲜性计数器、时间戳等)
发信和收信ECU要各自保存且共享私钥。发信ECU首先生成一个叫做认证码(Authenticator)的认证信息(比如MAC),MAC生成算法根据实际报文,私钥和新鲜值计算出唯一的认证数据,其结果是诸如128位的MAC这样的数。
消息的有效负荷由实际的报文、新鲜值以及认证码组成。报文的长度根据安全等级、性能要求不同。比如,为了缩短报文的长度,SecOC规范支持将报文截断。因而对于支持各种认证码长度的报文系统都能灵活应对。这种情况下,报文的有效负荷由截断的新鲜值,截断的认证码组成。
截断的新鲜值,应该从新鲜值的最低位(LSB)配置,相反,截断的认证码应该从最高位(MSB)开始配置。送信端的ECU将实际报文、新鲜值和认证码组成的有效负荷发动到收信端ECU。
为了防止回放攻击,收信端的ECU首先验证收到的新鲜值(LSB)比本地保存的新鲜值(LSB)高。然后收信ECU将收到的实际报文、本地保存的新鲜值(MSB)和收到的新鲜值(LSB)连接起来,连接后的值和秘钥作为MAC生成算法的输入。
计算出来的MAC和收到的MAC比较,比较成功的话,收信端ECU可以认为报文来自可靠的(共享同一个私钥)ECU,确保消息没有被篡改,也是新鲜的(未被重播)。
使用截断认证码的情况下,只发送了MAC的一部分,只能使用一部分MAC做比较。按照SecOC的规范,推荐的秘钥长度最低要求是128位。关于截断的认证码的尺寸,NIST(National Institute of Standards and Technology)认为如果MAC有64位以上,就足够防护预测攻击(guessingattack)。
当然,因为有各种各样的用例,为了达到期望的安全等级,决定截断MAC的时候,安全专家必须要慎重的考虑。在计算资源有限的情况下,认证码计算推荐使用AES-CMAC(Advanced Encryption StandardCipher-based Message Authentication Code)算法。
汽车网络安全相关的安全问题,主机厂应当充分的考量,特别应该把车内网络的安全放在十分重要的位置。