乾明 十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI
汽车越来越智能,越来越方便,但也带来新安全隐患。
车道保持辅助系统,即LKAS,之前以L2自动驾驶核心功能为卖点,开长途、开高速环路,都能让人类司机更轻松,现在成为各大智能车标配。
但就这样一个智能驾驶系统,在攻击下只需要1.3秒——稍一疏忽的时间,就会失控,从而在高速行驶中转向其他车道。
该结论来自安全领域顶级会议NDSS上的新研究,得到了Best Poster Award(top 1/30),研究者里有多位中国小哥。
而且在自动驾驶领域鲜有发声的字节跳动,出现在作者机构和致谢名单中。
咦?难道?还是……?
不妨先一起深入看一看这项新研究,而且我们也找到了论文作者进行了答疑。
车道保持辅助系统秒秒钟失控
论文主要由两位加州大学欧文分校的作者领衔。
在论文中,他们使用不覆盖车道线的“脏路补丁”作为攻击载体,在最先进的开源车道保持辅助系统OpenPilot上测试:攻击126公里时速的车辆,只需要0.9秒就能让它失控;72公里时速行驶下的汽车,只需要1.3秒。
而通常情况下,人类司机发现车辆失控,并采取措施的时间是2.3秒。目前,一共有15个汽车品牌的52个车型支持OpenPilot,包括大众高尔夫、丰田凯美瑞、本田CR-V等。
受到波及的并不仅仅只有使用了OpenPilot的车。研究团队表示,这一攻击适用于任何基于深度神经网络的车道保持系统,比如特斯拉的Autopilot,也可能会受到影响。
除了攻击方法具有广泛性,攻击效果也很明显。
论文中在3个场景中试验了攻击有效性。前两个场景采用的是comma2k19-1和comma2k19-1数据集,是真实世界高速公路场景。
第三个场景来自LGSVL-1数据集,模拟高速公路逼真度可达到工业级别,整体结果如下:
研究团队只针对前两个测试制作了演示视频——由变换后的摄像机图像,经过小车运动模型库输入生成。
换句话说,就是在BEV(俯视图)图像上放置了“脏路补丁”,从BEV生成摄像机输入,然后根据汽车运动模型更新下一帧状态。
首先看一下自动驾驶车辆在高速行驶 (126km/h)的情况。
在没有攻击的时候,车辆行进还非常平稳,能保持在自己原有的车道。但经过添加了脏路补丁后,车辆(我们在车里的视角)就像“喝醉了酒”一样,迅速驶出自己的车道。下面是正常情况和添加攻击后的视角对比情况:
第二个场景,是自动驾驶车辆中速行驶 (105km/h)的情况。进行攻击后,虽然没有高速情况下“醉”得那么夸张,但还是能够看出行驶位置迅速发生了偏移。
对比情况如下:
在第三个模拟场景中,自动驾驶车辆行驶速度为72km/h,在相对较为低速的情况下,造成攻击所用的时间为1.3s。
通常,LKAS被认为是专治走神打盹的辅助驾驶功能,但遇到这个“脏路补丁”,秒秒钟失控、出事儿,反应都来不及。
到底是什么样的攻击,可以让自动驾驶LKAS变得如此不稳定?
道路上“打补丁”
先简单科普下原理,基于深度神经网络(DNN)的LKAS,属于L2自动驾驶系统技术,最具代表性有OpenPilot和特斯拉的Autopilot,是当前使用最为广泛的智能驾驶技术之一,并正被更加广泛地使用。
但好用的同时,安全吗?毕竟驾驶上路,每一个隐患都事关人身安全。
这就是研究者们展开课题的初衷,加州大学欧文分校的博士生、该研究共同一作沈骏杰说:“从这类系统的用户角度考虑,我很想知道到底目前最好的车道保持系统是否足够安全,以及如何确保它的安全。”
2019年3月,他们正式立项,开始了针对LKAS安全性的研究。核心的前提假设是:这些LKAS基于DNN,是不是直接攻击DNN就能造成破坏?
并没有那么简单。想要破坏这样的LKAS,需要迈过“三座大山”:
- 第一,如何通过优化方法来系统,生成针对车道保持系统的恶意路面修复补丁(malicious road patch)。
- 第二,如何保证道路补丁的隐蔽性,避免引起驾驶员和行人怀疑。
- 第三,如何让生成的道路补丁能攻击连续多帧图像,并在车道保持系统受攻击改变车辆轨迹后还能保证攻击的有效性。
这项工作设计并实现了首个可以翻过“三座大山”的攻击方法,仅仅是一块“脏路补丁”。
他们假设攻击者拥有和被攻击对象一样的车道保持系统,并能通过逆向工程获悉该系统的细节,例如神经网络模型参数等。
如果被攻击对象是基于类似OpenPilot这种开源车道保持系统,攻击者很容易就能获得所有的模型参数和源代码。
如果被攻击对象采用的是类似Tesla Autopilot这类闭源系统,攻击者也能通过逆向工程获得模型的结构和参数。
例如去年腾讯科恩实验室就成功逆向出了Autopilot里面的模型,并成功发动了攻击。
不过, 这只是第一步。具体的攻击中,还需要生成基于车辆运动模型的输入。考虑到连续摄像机帧间攻击的相互依赖性,需要根据补丁生成过程中驱动轨迹的变化,对摄像机输入进行动态更新。
研究人员使用自行车模型,来模拟汽车轨迹的变化,然后通过对未受攻击的原始摄像机输入,应用透视变换,来更新摄像机输入。
下图中红色方框,就是模型输入区域。在透视变换后,虽然会造成一些失真和部分缺失,但位于中心的模型输入区域,仍然完整可用。
接下来生成恶意路面修复补丁,他们采用了一种优化方法——*多帧路径弯曲目标函数 (Multi-frame path bending objective function)。用它来替代目标函数,让汽车尽可能地发生偏离。
基于这样的目标函数,可以得到每个摄像机输入的梯度。但梯度下降并不能直接适用于更新恶意路面修复补丁。
研究人员将所有相机输入转换为BEV,让梯度对齐到相同的比例尺,并采取一个加权平均数,解决了这一问题。具体如下图所示:
同时,他们还将更新方向限制在了灰度范围内,假装是一个正常(但肮脏的)道路补丁,这样可以更加隐蔽地发起攻击。
那么问题来了,在现实世界中,发生这种攻击性的可能性如何?该如何应对?
该如何应对攻击?
研究团队称,这一攻击适用于任何基于深度神经网络的车道保持系统,接下来将会进一步完善攻击的适用性,进一步研究车道保持辅助系统中的漏洞。
他们在论文中说,如果有人可以刻意为之,比如出于商业或者金融目的,或者是企业之间的竞争,在现实世界中恶意发起攻击也不是不可能。
毕竟某社交平台的运营合伙人,刚刚因为恶意举报友商被抓,再次证明竞争无所不用其极……
既然如此,那么这个问题又该如何应对呢?论文作者之一沈骏杰从研究者的角度,给出了可行的方案。
他说:“这几年确实有很多研究者提出多种不同的防御手段,例如对抗训练,随机改变输入大小和填充等。”
但这些防御手段只能对这个问题提供一定程度的缓解。“目前还没有任何一种防御手段能完全解决对抗样本的问题。”他说。
一种可能的方向,是借助车辆辅助系统里面的其他信息,来交叉验证车道检测的结果。比如,用雷达对于周围车的估计来判断本车的横向偏移。
所以,即便在现实中发生类似攻击的情况可能性很小,但在安全性没有办法得到保证的时候,自动驾驶能否完全可依赖,还需要采取审慎态度。
在极端情况下,会要命。比如2016年5月,特斯拉的Autopilot因为卡车车体反光,摄像头并未识别对向的卡车,从而导致处于自动驾驶状态的Model S发生事故,导致驾驶员死亡。
道路千万条,安全永远是第一条。
加州大学欧文分校领衔,字节跳动参与
最后,解答下开头提出的“字节跳动之疑”。字节跳动并非布局自动驾驶,而是很前瞻性地把其中一名作者揽入麾下。
本次研究作者团队,来自加州大学欧文分校、字节跳动和东北大学,一共有6名研究人员。其中任教于美国东北大学的Xue Lin,本科毕业于清华。
两位同等贡献第一作者来自加州大学欧文分校,分别是Takami Sato和沈骏杰。
沈骏杰,2013年本科毕业于杭州电子科技大学通信工程专业,2015年在北卡罗来纳州立大学获得计算机工程硕士学位。
2016年前往加州大学欧文分校攻读博士学位,指导老师是陈齐——论文通讯作者。
陈齐于2012年毕业于南京大学计算机科学专业,之后前往密歇根大学读书,师从茅斫青教授,2018年在获得系统和网络安全博士学位,同年7月加入加州大学欧文分校,担任助理教授。
Takami Sato是沈骏杰的同门师弟,本科和硕士毕业于东京工业大学,于2019年在加州大学欧文分校攻读博士学位。此外,作者中还有一位加州大学欧文分校博士生,名为Ningfei Wang。
据沈骏杰介绍,他们主要专注于计算机安全研究。从2018年以来,围绕自动驾驶和智能交通系统的攻击和防御一共发布10多篇相关论文,分别在ACM CCS、Usenix Security、ICLR、EuroSys、NDSS发布。
这篇基于深度学习的车道保持辅助系统的安全性研究,是他们团队的最新成果。陈齐团队的研究人员之外,字节跳动的贾云瀚参与了这项研究。
贾云瀚2013年毕业于上海交通大学软件工程专业,之后前往密歇根大学攻读博士学位,师从茅斫青教授——和陈齐是同门师兄弟。
2018年博士毕业之后,他加入百度安全研究方向的X实验室。2019年8月加入字节跳动人工智能实验室担任研究科学家。
贾云瀚近年来的研究同样集中在安全,特别是智能汽车安全领域。2015年以来,贾云瀚在ACM CCS、NDSS等学术会议上发表15篇论文,获得过3项专利。
据悉,他作为独立研究者一作,与陈齐团队合作的论文,研究针对自动驾驶系统里面目标跟踪的攻击,已被ICLR 2020收录。
所以做什么业务可能不本质,有人才,真的可以为所欲为。
当然,有人才的前提,是得有钱……
传送门
论文地址:
https://www.ndss-symposium.org/wp-content/uploads/2020/02/NDSS2020posters_paper_15.pdf
作者系网易新闻·网易号“各有态度”签约作者
— 完 —