特斯拉Autopilot系统安全研究
文章来源:汽车ECU开发
发布时间:2021-07-27
Autopilot系统主要依赖于摄像头、超声波传感器和雷达。
特斯拉的Autopilot是马斯克最引以为豪的系统之一,其可提供L2级别的自动驾驶功能。Autopilot系统主要依赖于摄像头、超声波传感器和雷达。此外,Autopilot在HW3.0之前的版本配备了来自 Nvidia 等制造商的计算硬件,允许车辆使用深度学习处理数据以实时对条件做出反应。
APE,即“Autopilot ECU”,是特斯拉自动驾驶技术的关键部件。虽然已经有很多文章谈论它的硬件解决方案,但关于它的软件的讨论却少得多。众所周知之前所有的 APE 2.0 和 2.5 板卡都是基于 Nvidia 的 PX2 AutoChauffeur(实际上是高度定制的)。下面讨论主要集中在APE2.5。如下图1所示,简单的展示了其内部组件是如何连接的。
图1 APE内部模块的连接
APE和APE-B都是Tegra芯片,和Nvidia的PX2一样。LB是英飞凌Aurix芯片。此外,还有一个英伟达的GPU(GP106)连接到 APE。APE和APE-B上运行的软件镜像基本相同,而LB有自己的固件。在 APE中,LB 是一个协处理器,支持监控 CAN 总线上的消息,控制风扇速度,确定是否应该打开APE的部分功能等。在原始 PX2 板上,Aurix 芯片在串口上运行一个控制台 有几个有用的功能。但是在APE 2.5上,这个芯片只提供很少的控制台命令。
并非 APE 和 APE-B 都用于 Autopilot,特别是考虑到并非两个芯片都连接到所有传感器。来自雷达和其他传感器的信息通过一些 CAN 总线(包括私有的)传输,并由 LB 转发为 UDP 消息,UDP 消息可以被两个处理器接收。
但是所有摄像头,尤其是主摄像头、窄摄像头和鱼眼摄像头仅通过 CSI 接口连接到 APE。此外GPU 芯片仅连接到APE,没有看到足够的证据表明两个Tegra 芯片(以及摄像头)共享 GPU 芯片。因此我们认为 APE-B 只是一个类似“存根功能”的东西,而 APE 是执行实际工作的实际芯片。
后来对固件的调查表明,APE-B 有时可能会从用于启动 APE 的同一镜像启动。启动过程让我们相信,只要 APE 和 APE-B 运行相同的固件,我们就可以轻松实施我们的攻击。APE 的固件是一个 SquashFS 镜像,没有任何加密。该映像运行高度定制的 Linux(如 CID 和 IC)。在固件中我们观察到 APE 软件的二进制文件位于 /opt/autopilot 文件夹下。
在本节中,我们将介绍Autopilot中视觉系统的实现细节。二元视觉是 Autopilot 的关键组件之一。Autopilot 使用它来处理从所有摄像头收集的数据。我们对使用纯计算机视觉解决方案的自动雨刷和车道识别这两个功能进行了大量反向工作。这些函数的特殊过程可以概括为两部分:它们共同的预处理,以及它们自己的神经网络计算和后处理。
我们认为特斯拉使用的是12位HDR摄像头,可能是RCCB。视觉神经网络模型并不是为了直接处理这些图像而设计的。因此,程序需要先对图像进行预处理。
如前所述,不同的可执行文件(或服务)之间的通信是通过共享内存进行的,包括从相机获取的原始图像。这些图像是根据调度图从某些文件句柄中获取的。
图2 缓冲区由select()模型管理
此外,视觉任务还会从 /dev/i2c 和其他共享内存区域获取一些控制消息。出于诊断和产品改进的目的,图像的副本也将保存到共享内存中,以便快照任务可以获取和发送它。快照任务在不同的任务中有大量的记录点,这使得调试和功能开发工作更加高效。
从快照中收集的原始数据为 HDR、1280x960 和 16 位小端整数,色调映射图像如下图3所示。
图3 来自相机的色调映射图像
我们之前提到过函数 tesla:TslaOctopusDetector::unit_process_per_camera,它将处理来自每个相机的每一帧,包括预处理过程。首先从图像中删除一些前缀和后缀行。根据安森美为AR0132AT(可能不是特斯拉的传感器,但可能是类似型号)提供的数据手册,这些线可能仅用于像素调整和诊断目的,因此我们假设自动驾驶任务没有使用那些像素。