THE CAR HACKER’S HANDBOOK 第七、八、九、十章解读

七、构建和使用 ECU 测试台

如图 7-1 所示,ECU 测试台由 ECU、电源、可选的电源开关和 OBD-II 连接器组成。

基本型 ECU 测试台

最基本的测试平台包括待测设备和电源。给 ECU 上电后,就可以测试输入和通信功能了。

为方便测试台的使用和操作,至少需要添加一些组件或接口。

寻找 ECU

寻找 ECU 最好的方法是去汽车报废场。ECU 通常位于中控台收音机后面或手套箱后面。找不到的话可以沿着线束追踪到 ECU。

除了拆解或购买二手 ECU 外,还可以用模拟器,例如 ECUsim 2000。

刨析 ECU 线路

准备好零件后,需要找到 ECU 的电路图,以确定需要连接哪些线路才能使其正常运行。

可以从以下位置获取几种不同车辆的 ECU 引脚图:

http://www.innovatemotorsports.com/resources/ecu_pinout.php 和来自

ALLDATA 和 Mitchell 等商业资源。Chilton 汽车维修手册等书籍包含框图,但你会发现它们通常只涵盖最常见的维修组件,而不是整个 ECU。

如果您已经完成了所有接线,但仍然在 CAN 总线上看不到数据包,则可能是缺少终端电阻。要解决此问题,首先添加一个 120 欧姆的电阻,因为 CAN 总线的两端都有 120 欧姆的电阻。如果仍然无效,请添加第二个电阻。最大缺失值

构建更先进的测试平台

如果您准备进一步开展汽车黑客研究,请考虑构建一个更先进的 ECU 测试台,如图 7-4 所示。

该装置将 ECU 和 BCM 集成在一起,因为它还配备了启动车辆的原厂钥匙。请注意,可选的 IC 左下角有两个 1 千欧姆的电位器(或可变电阻器),它们分别连接到发动机温度和燃油管路。我们将使用这些电位器来生成传感器信号,这将在下一节中讨论。该测试台还包含一个小型 MCU,可以模拟向 ECU 发送曲轴和凸轮轴信号。

如图 7-4 所示的更复杂的装置可以轻松检测 CAN 通信:只需加载一个嗅探器,调节旋钮,然后观察数据包的变化即可。如果您知道目标线路及其输入类型,则可以轻松地伪造来自大多数组件的信号。

模拟传感器信号

• 冷却液温度传感器

• 燃油传感器

• 氧传感器,用于检测废气中的燃烧后氧气

• 节气门位置,实际上可能已经是一个电位器了

• 压力传感器 如果您的目标是生成更复杂或数字信号,请使用小型微控制器,例如 Arduino 或 Raspberry Pi。

霍尔效应传感器

霍尔效应传感器常用于检测发动机转速和曲轴位置 (CKP),并生成数字信号。如图 7-5 所示,霍尔效应传感器利用快门轮(或带有间隙的轮子)来测量转速。砷酸镓晶体在磁场作用下会改变其导电性。当快门轮旋转时,晶体会检测到磁场,并在未被快门轮遮挡时发出脉冲信号。通过测量脉冲频率,即可计算出车速。

您还可以使用凸轮轴正时链轮来测量速度。观察凸轮轴正时链轮时,磁铁位于轮子的侧面(参见图 7-6)。

使用示波器观察信号线,可以看到霍尔效应传感器产生方波信号。凸轮轴传感器通常有三根线:电源线、地线和传感器线。电源线通常为 12V,但信号线通常以 5V 电压输出到发动机控制模块 (ECM)。凸轮轴传感器也有光电式传感器,其工作原理类似,区别在于一侧是 LED,另一侧是光电管。

您可以通过一个称为触发轮的缺齿或正时标记来判断凸轮轴是否完成完整旋转。了解凸轮轴何时完成完整旋转至关重要。感应式凸轮轴传感器会产生正弦波信号,并且通常会有一个缺齿来检测完整旋转。

图 7-7 显示凸轮轴传感器大约每 2 毫秒重复一次信号。波形在 40 毫秒左右出现的跳跃或间隙,表示凸轮轴到达缺失齿的位置。该间隙的位置标志着凸轮轴完成一次完整旋转。为了将这些凸轮轴信号模拟到 ECU 测试台上,您需要为微控制器编写一个简单的程序。在编写微控制器代码来模拟这些传感器时,了解车辆使用的传感器类型非常重要,这样您才能知道在模拟凸轮轴齿时应该使用数字输出还是模拟输出。

模拟车辆速度

现在搭建一个测试平台来模拟车辆速度。我们将使用该测试平台以及图 7-4 所示的集成电路,通过 OBD-II 接口读取车辆的 VIN 码。

一旦我们知道车辆的生产年份和发动机类型,我们就可以获取电路图以确定哪些 ECU 线束控制发动机转速(参见图 7-8)。然后,我们可以向 ECU 发送模拟转速数据以测量其影响。使用电路图模拟实际发动机运行情况,可以轻松识别 CAN 总线上的目标信号。

图 7-8 中的接线图显示了如何从曲轴位置传感器 (CKP) 开始追踪线路,直到连接器 C2 的 27 号引脚接收来自曲轴传感器的发动机转速信号。在接线图中找到该引脚后,我们就可以找到 ECU 上对应的线路。我们可以将这条线路连接到任何位置。

Arduino 上的数字 I/O 引脚。在本例中,我们将使用引脚 2,然后在 A0 引脚上添加一个电位器,以控制曲轴位置传感器 (CKP) 向发动机控制模块 (ECM) 发送信号的“齿轮”的转速。引脚 2 的输出将发送到 C2 的引脚 27。

为了模拟从 CKP 传感器发送的发动机转速,我们编写了一个 Arduino 程序,以发送与电位器位置对应的延迟间隔的高低脉冲(参见清单 7-1)。

现在,我们将这段程序上传到 Arduino,启动测试平台,当我们旋转电位器上的旋钮时,集成电路上的转速刻度盘也会随之移动。在图 7-9 中,嗅探器流量的第二行显示,当我们旋转仲裁 ID 0x110(标记为 ID 的列)的电位器旋钮时,字节 2 和 3(0x0B 和 0x89)的值会发生变化。

截取这张屏幕截图时,转速表指针略低于 1,所以可能使用的是相同的算法。(有时你会发现,实际 CAN 数据包中的值并不总是与使用 UDS 服务的现成诊断工具所使用的算法相匹配,但如果它们匹配就很好。)

为了验证仲裁 ID 0x110(字节 2 和 3)是否控制转速,我们将发送自定义数据包。通过循环发送以下数据包,我们将使转速指针达到最大值。

虽然这种方法有效,而且一旦连接成功,只需几秒钟就能识别出负责转速的 CAN 数据包,但仍然存在一些明显的缺陷。偶尔会出现一个 CAN 信号,将转速值重置为 00 00,导致速度表停止转动。因此,尽管发动机控制模块(ECM)相当确定曲轴正在旋转,但它检测到了故障并试图进行重置。

八、攻击 ECU 和其他嵌入式系统

电路板分析

攻击汽车中 ECU 或任何嵌入书系统的第一步就是分析目标电路板。

识别型号

拆解电路板时,首先要看板上微控制器芯片型号。这些型号可以帮助我们找到对分析至关重要的信息。大多数汽车电路板上的芯片都是通用芯片。

可以从电路板上拆下,插入 EPROM 编程器以读取其固件。可以直接通过调试软件(如 JTAG)对现代系统进行重新编程。

解剖和识别芯片

找不到信号,有时只能靠芯片的标志和一些产品代码。

芯片型号下方是代码(VGT6)指示了芯片的具体功能,例如 USB 支持。如果将型号与 ST 代码结合查找,可以发现 STM32F407Vx 系列是一款 ARM Cortext M4 芯片,支持以太网、USB、两个 CAN 总线、LIN 以及 JTAG 和串行先调试。

图 8-2:STM32F4 数据手册引脚图

使用 JTAG 和串行线调试进行硬件调试

JTAG

JTAG 是一种协议,允许对芯片进行芯片级调试,支持固件的下载和上传。可以使用芯片的数据手册找到芯片上的 JTAG 连接点。

JTAGulator

通常会在芯片的电路板上找到一些从芯片本身引出的焊盘,这些焊盘可能允许我们访问 JTAG 引脚。

JTAGulator 支持使用螺丝端子或 Bus Pirate 电缆进行探测。JTAGulator 和 Bus Priate 电缆都用串行接口配置芯片并与之交互。

STM32F4DISCOVERY 套件

图 8-4:使用 STM32F4DISCOVERY 套件对 STM32 芯片进行编程。

您很可能需要为目标设备供电,但不要使用 SWD 连接器上的引脚 1,而是使用电路板 Discovery 部分的 3V 引脚,如图 8-4 所示。(请注意引脚图中的 3V 引脚)

Discovery 套件并非使用全部六个引脚进行 SWD 控制;nRESET 和 SWO 引脚是可选的。)连接成功后,您很可能需要读写固件。如果您使用的是 Linux 系统,可以从 GitHub 获取 ST-Link 工具,地址为 https://github.com/texane/stlink/。安装这些工具后,您不仅可以读写芯片的闪存,还可以启动 gdbserver 作为实时调试器。

使用 ChipWhisperer 进行侧信道分析

侧信道分析是另一种硬件攻击,用于绕过 ECU 和其他微控制器的保护机制,并破解内置加密。这类攻击利用嵌入式电子系统的各种特性,而不是直接针对特定的硬件或软件。侧信道攻击形式多样,有些攻击的成本高达 3 万至 10 万美元,因为它们需要电子显微镜等专用设备。这类昂贵的侧信道攻击通常具有侵入性,这意味着它们会对目标系统造成永久性的改变。

我们将重点介绍更简单、更经济的侧信道攻击,并借助 ChipWhisperer——一款来自 NewAE Technologies 的非侵入式工具(http://newae.com/chipwhisperer/)。ChipWhisperer 是一款开源的侧信道分析工具和框架,售价仅略高于 1000 美元,远低于同类非开源产品(后者通常起价约为 30000 美元)。

多目标受害板基本上由三个独立的系统组成:ATmega328、XMEGA 和智能卡读卡器。(ChipWhisperer 可以对智能卡执行中间人攻击,但由于汽车实际上并不使用智能卡,因此我们在此不做赘述。)

通过更改电路板上的跳线,您可以为不同的系统供电或禁用不同的系统,但请务必一次只启用一个部分,否则可能会导致电路板短路。测试前请务必仔细检查跳线设置。

最后,将目标板上 VOUT 的 SMA 电缆连接到 ChipWhisperer 前面板上 CH-A 的 LNA 连接器。表 8-2 显示了引脚定义。除非另有说明,否则我们将使用此设置进行演示。

这里到后面的就省略掉了,因为无法做复现,感兴趣的可以看文章原文。

构建和使用 ECU 测试台

车载信息娱乐系统(IVI)通常是指汽车中控台上的触摸屏界面。这些控制台通过运行 Windows CE、Linux、QNX 或 Green Hills 等操作系统,甚可能在虚拟机中运行 Android 系统。

九、车载信息娱乐系统

攻击面

用于与车辆通信:

辅助插孔

CD-ROM

DVD

触摸屏、旋钮或按钮及其他物理输入方式

USB 端口

蓝牙

蜂窝网络

数字广播

全球定位系统

无线上网

XM 收音机

内部网络控制:

总线网络(CAN、LIN、KWP、K-Line)

以太网

高速媒体总线

通过系统更新进行攻击

攻击 IVI 一种方式是攻击其软件。

在开始之前,需要知道 IVI 运行的操作系统,可以查找 IVI 的品牌,查看 IVI 主机或框架外部的标签。

没有的话可以去找软件版本号,第三方制造商生成,查询官网是否有固件更新。是否存在地图更新服务、地图更新的 U 盘或 DVD。

确定更新文件类型

系统更新通常以压缩文件的形式提供,文件拓展名为 .zip 或 .cab,但有时也会使用非标准拓展名。

应用和插件

无论您的目标是执行固件更新、创建自定义启动画面,还是进行其他攻击,您通常都会发现,与其直接攻击车载信息娱乐系统(IVI)操作系统本身,不如攻击 IVI 应用程序,这样更容易获取攻击或修改车辆所需的信息。一些系统允许在 IVI 上安装第三方应用程序,通常是通过应用商店或经销商定制的界面。例如,您通常会发现开发者可以通过某种方式侧载应用程序进行测试。修改现有插件或创建自己的插件是执行代码以进一步解锁系统的有效方法。由于目前仍在制定定义应用程序如何与车辆交互的标准,因此每个制造商都可以自由地实现自己的应用程序接口(API)和安全模型。这些 API 往往很容易被滥用。

识别漏洞

如果您正在查找车载信息娱乐系统 (IVI) 中存在的漏洞,下一步是提取 IVI 中的所有二进制文件以便进行分析。(这方面的研究在几本关于逆向工程的书籍中已有详细介绍,因此我在此不再赘述。)检查系统中二进制文件和库的版本。通常情况下,即使是地图更新,核心操作系统也很少更新,因此系统中很可能存在已知的漏洞。您甚至可能找到针对该系统的 Metasploit 漏洞利用程序!

例如,如果您的目标是创建一个恶意更新程序来窃听车辆的蓝牙驱动程序,那么您目前几乎已经拥有了所需的一切。您可能唯一还需要的是软件开发工具包 (SDK),它用于编译目标系统。获取一个 SDK 会让您的任务轻松许多,当然,您也可以使用十六进制编辑器来创建或修改二进制文件。通常,车载信息娱乐系统会……

攻击车载信息娱乐系统硬件

剖析 IVI 单元的连接

可以尝试检查车载信息娱乐系统(IVI)的线路和总线。首先需要拆下 IVI 单元,然后沿着线路追踪到电路板,以识别其组件和连接。

拆下 IVI 后,可以看到很多电线。

因为连接器会按照功能进行划分。(有些车辆将蓝牙和蜂窝网络功能放在另一个模块中,因此,如果你正在研究无线漏洞,而车载信息娱乐系统 (IVI) 单元没有这个无线模块,请继续查找远程信息处理模块。)通过追踪实际的电线或查看如图 9-5 所示的接线图,你会发现蓝牙模块实际上是与导航单元 (IVI) 分离的。请注意,图中蓝牙单元使用 CAN (B-CAN) 协议,引脚为 18。如果你查看导航单元的接线图,你会发现它没有使用 CAN 协议,而是直接将 K 线(引脚 3)连接到 IVI 单元。(我们在第 11 章中讨论过这些协议。)

拆卸 IVI 单元

这个阶段,我们应该开始追踪引脚并查看板载芯片的数据手册。

最后提一句,核心组件 AMB

十、车对车通信

车辆技术的最新趋势是车队车(V2V)通信。如果车辆与路侧设备通信,称为车对基础设施(V2I)通信。

V2V 主要目的是通过车辆与路测设备之间的动态网状网路(智能交通系统)向车辆传递安全和交通警告信息。

V2V 通信方法

在 V2V 通信领域中,车辆和路侧设备之前交互方式有三种:通过蜂窝网络;专用短程通信(DSRC),是一种通信协议;采用多种通信方式组合。

蜂窝网:

不需要路边传感器,而且蜂窝网具备安全系统,可依赖于运营商的安全措施。蜂窝网提供的安全保障是在无线层(GSM)而非协议层实现。如果连接设备用 IP 流量,则仍然需要应用标准的 IP 安全措施。

DSRC:
需要在现代车辆和新型路边设备上安装专用设备。专为 V2V 通信而设计,他比蜂窝网通信更可靠,延迟更低。

多种组合:

将 DSRC、WI-FI、卫星及任何其他方式混合通信。

  1. 物理层与链路层的“易感性”
    802.11p 的开放性:DSRC 基于 802.11p(类似 Wi-Fi),这意味着它继承了 Wi-Fi 的许多弱点。由于它在 5.9GHz 频段广播,攻击者可以使用通用软件无线电(SDR)设备轻松捕获信号。

  1. WSMP 短消息协议的安全挑战
  • 无状态与短包特性:WSMP 消息通常小于 500 字节。由于包极小,很难在单个包内包含复杂的加密握手或大型证书。
  • 1609.2 安全框架:这是重点!笔记提到的 IEEE 1609.2 是专门处理 V2X 安全的标准(包括数字签名、证书管理)。做安全必须研究如何在这种短消息中嵌入身份验证,而不造成过大的通信延迟。

  1. 通信距离带来的攻击面
  • 300m vs 1000m
    • V2V (300m):攻击者可以利用伪造的 OBU(车载单元)在车阵中发送虚假刹车信号,诱发追尾。
    • V2I (1000m):RSU(路侧单元)功率大、覆盖广,一旦被物理破解或固件劫持,攻击者可以控制整个十字路口的交通信号信息,危害极大。

核心协议对比:CAM vs DENM 这两类消息是 V2X 安全审计的首要目标。

CAM (周期性心跳):

攻击点:隐私跟踪与轨迹重构。因为它每秒发2次(2Hz),包含了极高精度的坐标、速度、甚至“车门开了没”。

安全风险:如果 ID 切换机制(Pseudonym)失效,攻击者能通过嗅探 CAM 100% 还原目标车辆行踪。

DENM (事件驱动):

攻击点:业务逻辑劫持。它只在出事(车祸、路面结冰)时发。

安全风险:伪造一个 DENM 消息(如“前方结冰”),可以强制周围大批量自动驾驶车辆减速或急刹,造成人为拥堵或连环车祸。

  1. 身份欺诈:Station ID 逻辑
    关键点:协议根据二进制 ID 区分车辆类型(如 101 是紧急车辆/公交)。

安全风险:权限提升攻击。攻击者通过 SDR 修改数据包,将自己的私家车 ID 伪造成 101。

后果:非法占用应急车道、强制修改信号灯(绿波通行)、在 V2I 系统中获取更高优先权。

  1. 数据完整性:置信度 (Confidence) 参数
    重点:CAM 消息里不只有数据,还有“置信度”(如加速度置信度、位置置信度)。

安全风险:算法投毒/传感器欺骗。如果攻击者能篡改置信度参数,即使数据本身看起来没问题,也会导致车载决策算法(ADAS)因不信任该数据而失效(Failsafe),从而让车辆进入危险模式。

  1. 物理与链路层的漏洞 (802.11p)
    嗅探难度:极低。不需要像普通 Wi-Fi 那样握手认证,DSRC 的 WAVE 协议可以直接抓包。

注入门槛:只要有支持 5.9GHz 的无线网卡或 SDR,就能注入伪造的 CAM/DENM 包。

DoS 风险:DSRC 带宽在复杂环境下极低(100-500Kbps)。攻击者只需发送少量垃圾包就能塞满信道,让真正的告警消息(如“行人横穿”)发不出来。

  1. 重点防护对象:RSU (路侧单元)
    安全定义:RSU 相当于 V2X 网络里的“超级管理员”。

高价值目标:它覆盖范围广(1000m),且负责下发“道路施工”、“信号灯相位”等全局指令。

渗透方向:物理拆解 RSU 硬件提取固件、劫持 RSU 后台管理接口。一旦 RSU 被控,整条路段的车辆都会接收到错误的诱导信息

表 10-1:DEMN 数据包的数据包结构和字节位置

WAVE 标准

安全隐患

基于 PKI 的安全措施

1、PKI(公钥基础设施)就是一套给车辆、云平台等发”数字身份证“的安全系统

它和我们用的 HTTPS/SSL 是一个原理

公钥:可公开给别人,用来数据加密

是要:自己保存,用来解密数据和签名

数字签名:用私钥签名,证明消息可靠,别人用公钥验证

2、车联网为什么使用 PKI

因为车联网(V2V、V2I、蜂窝网、DSRC 等)需要解决以下问题:

身份验证:证明我是真车/真云平台

数据完整性:确保消息传输没有被篡改

防抵赖、隐私保护、可信(有一个公认信任机构管理证书)

3、CA

CA(证书颁发机构):负责发放和吊销数字证书

4、V2V 中的 PKI 系统(SCMS,安全凭证管理系统)

PKI 系统必须保证 5 件事:

Accountability(可问责) 身份必须能通过可信的签名来验证。

Integrity(完整性) 数据必须能验证没有被中途篡改。

Nonrepudiation(不可否认性) 每笔交易/消息都必须被签名。

Privacy(隐私性) 传输的数据必须加密。

Trust(信任) 必须有一个可信的 CA 来管理证书。

可以理解为:PKI = 数字证书 + CA + 公私钥

车联网常用的 TLS 双向认证(车辆和云平台互相验证证书)

车辆证书:

参与 V2V 通信的车辆使用两种类型的证书:

长期证书(LTC)

此证书包含车辆识别信息,可被撤销。它用于获取短期证书的续期。

短期匿名证书(PC)

此证书有效期段,无需撤销,它会自动过期。(此类传输方式转为刹车或路况等信息而设计)

证书配置

1、首先,该设备(车辆)生成所谓的”履带式“密钥对,该密钥对公钥和高级加密标准(AES)拓展号发送给注册机构(RA)。

2、RA 会根据 Caterpillar 公钥和拓展号生成一批所谓的”茧“公钥。这些茧会成为新的私钥。密钥的数量是任意的,与请求密钥的设备无关。

3、匿名证书颁发机构(PCA)对茧密钥进行随机化处理,并生成”蝴蝶“密钥。然后,这些密钥通过加密通道返回给源设备,因此 RA 无法看到内容

整个流程自行理解一下吧。

V2V 更新风险

虽然通过 V2V 接口进行更新非常诱人,因为它能显著降低基础设施成本和开销(无需投资大量额外的路边基础设施),但它也有局限性。例如,车辆只能从附近同向行驶且行驶时间足够长的车辆接收 CRL 下载;反方向行驶的车辆可能行驶过快,导致下载无法完成。此外,这种 V2V 方法也为恶意行为者提供了机会,他们可以注入恶意 CRL,从而阻止合法设备或隐藏恶意行为者,而这些恶意 CRL 随后可能会传播开来。像病毒一样在车流中传播。

不幸的是,V2V 协议的安全防护完全侧重于通信协议本身。车载系统(例如 ECU)负责请求和存储 CRL(车辆状态响应列表)、报告异常行为以及发送车辆信息,但这种不安全的系统为攻击者提供了注入恶意代码的便捷途径。攻击者无需控制实际执行 V2V 通信的设备,只需修改 ECU 固件或伪造总线上的数据包,V2V 设备便会忠实地对信息进行签名并发送到网络。正是由于这种漏洞,这种方法被非正式地称为“伪造”。

不当行为报告

V2V 和 V2I 系统旨在能够发送各种异常行为报告,从车辆的常规故障到黑客篡改系统的通知,无所不包。这些异常行为报告随后会触发证书吊销。但是,车辆如何知道是否收到了被黑客入侵的数据包呢?答案因汽车行业而异,但基本原理是:ECU(电子控制单元)或其他设备接收到数据包后,会检查其是否“合理”。例如,接收设备可能会将消息与 GPS 信号进行比对,或者识别车辆以异常速度(例如 500 英里/小时)行驶的报告。当检测到错误时,车辆应发送警告信息。

例如,如果设备出现异常行为,最终会导致证书被吊销。异常行为监管机构(MA)的任务是识别并吊销异常设备的证书。

一个值得考虑的情况是,车辆的证书吊销列表 (CRL) 更新间隔过短,或者车辆长时间未靠近路边设备,导致其 CRL 过期。这类车辆可能在不知情的情况下转发错误信息,从而被系统标记为恶意车辆,并可能导致其证书被吊销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值