纵观近百年来汽车制造业的发展历程,产业跨进的每一步背后都有着技术创新作为支撑。汽车技术创新对世界经济、社会发展、人们的生产生活方式产生了极其深远的影响。1908年,福特公司正式推出T型车,背后是其首创的汽车生产流水线;1981年,汽车第一次具备了车载导航系统——“Electro Gyrocator”,Electro Gyrocator(电子陀螺仪导航器)由日本本田和阿尔派公司合作推出,装配在第二代本田雅阁汽车上,该导航系统在当时售价为2750美元,约占车辆总体售价的1/4;时至今日,几乎所有车辆都已配备了泊车辅助系统,汽车产业在技术层面持续革故鼎新。
随着汽车新技术和新变革加速落地,安全漏洞问题也随之产生,通过物联网实现网络连接的汽车正暴露在和手机、笔记本电脑一样的网络安全威胁中。Fuzz测试,又被称为模糊测试,是一种相对简单的解决方案,可为汽车安全问题提供必要的预防措施。
什么是Fuzz测试?
Fuzz的释义为“绒毛、起毛、做绒毛状飞散、使模糊、变得模糊”,在软件测试领域一般指代“模糊测试”,又称Fuzzing。本文将统一称作Fuzz测试。
Fuzz测试是用于检测软件或计算机系统安全漏洞的自动化软件测试技术,其核心思想是将自动或半自动生成的随机数据列入到DUT(Device Under Test,被测设备)中并监视其异常,以发现可能存在的错误。Fuzz测试可被用作白盒、灰盒或黑盒测试,其工具通常分为变异测试(mutation-based)和生成测试(generation-based),能够发现先前未能发现的漏洞,即零日漏洞。Fuzz工具通常会针对协议缓冲区发送字节、字母或整数序列。
自动驾驶的潜在风险
当前的汽车技术已远远发展至发动机以外更复杂的范畴,车载设备通过无线通信技术,可以对信息网络中所有车辆的动态信息进行有效利用,从而在车辆运行中提供各种功能服务,自动驾驶也应运而生。这一概念被称为车联网,是IoT(Internet of Things,物联网)的一种。车联网带来方便快捷的同时,也成为了黑客攻击汽车控制系统的主要渠道,存在可被利用的安全漏洞。
Upstream Security 发布的《2021 年全球汽车网络安全报告》预测称,在 2021-2023 年,网络黑客攻击或将导致汽车业折损近 240 亿美元。报告指出:“汽车生态中的网络威胁尤为令人担忧,因为此类威胁可能直接影响道路使用者的安全。车辆本身就很危险;再加上联网,现代汽车就更加危险了。”
▲2010-2020年汽车安全影响因素
数据来源:Upstream《2021年全球汽车网络安全报告》
由于自动驾驶尚未得到广泛应用,且汽车制造商通常会在既定的平台标准上开发自己的安全协议,相对应的安全漏洞也未得到适当的研究和记录。美国国家标准与技术研究所 (National Institute of Standards and Technology,NIST) 在其自动驾驶汽车系统和组件的漏洞检测(Common Vulnerabilities & Exposures,CVE)数据库中记录的问题数量虽然较少,但随着近几年特斯拉等涉及智能驾驶的汽车事故频频发生,自动驾驶的安全隐患问题不容忽视。
Fuzz测试:自动驾驶和车联网
想象一下这样的情况:当您正在高速公路上驾驶自动驾驶汽车——引擎正在与传感器通信,发送和接收数千个数据包。突然,另一个不明节点向您的引擎发送了数千个数据包。该节点没有遵守规则,不按协议规定的字节数来发送。虽然您的引擎已经过测试并具备抵抗这些数据包的能力,但是随着节点不断发送整数或十六进制组合的数据包,这些不被处理的数据可能导致缓冲区溢出,汽车引擎就将被关闭。这是安全漏洞被利用的情况下,随时都可能出现的可怕场景。为了防止这种情况,可以使用模糊器来测试协议中的每个指定区域和缓冲区,从而确保每辆自动驾驶的汽车都具备抵御那些试图破坏程序、绕过登录直接进行远程操作的攻击者的能力。
Fuzz测试方法有以下几种:
1. 基于变异:有效代码样本被随机变异并以错误的格式输入,虽然可以满足基本测试需求,但变异可能无法提供导致程序崩溃的缓冲区的明确输出,且难以重现,很难找到确切的漏洞。
2. 基于重放:Fuzz测试工具使用已保存的数据样本,对其进行变异后重放以创建攻击,然而这种方法在双向的汽车动态协议中效果也并不理想。
3. 基于语法生成:在这种方法中,Fuzz测试工具将学习RFC(Request For Comments,参考标准)并理解其语法,明确哪些字段可能不会发生变异、哪些字段可以测试。基于语法生成用例的Fuzz测试工具将构建有效的输入序列,对通信的特定部分进行测试,确保所有数据包不会立即被被测设备阻塞——不会产生序列错误的测试用例。
尽管Fuzz测试并不是唯一的解决方案,但确实是自动驾驶行业最合适的选择:它不像静态分析工具,需要被测设备信息和源代码才能检测潜在漏洞,而是将整个堆栈进行黑盒化的模糊处理。这样,无需任何关于被测设备的信息和测试访问权限,开发者在开发阶段和预发布阶段就能发现漏洞。Fuzz测试能在每个协议、每个独特的场景下进行。
Fuzz测试的另一个关键优势,与利用IP通信发现漏洞的不同之处,在于其能够通过需要串行连接的协议进行通信,为没有TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)通信的产品提供强大的测试支持。
开发者可以通过Fuzz测试重现安全攻击并理解产品的协议结构,从而判断协议的哪些部分更容易受到攻击,并采取更好的解决措施。当前阶段,Fuzz测试无疑是解决汽车自动驾驶安全问题必要且有效的测试方案。
参考链接:
1、https://blog.beyondsecurity.com/start-using-fuzzing-to-improve-autonomous-vehicle-security/
2、http://www.199it.com/archives/1192606.html