姓名:胡娟
学号:20021110092
转载自:https://mp.weixin.qq.com/s/didptKY4CeQmEfC84kMfsA
【嵌牛导读】
在现代汽车中,CAN 总线命令对于诊断、安全监控和自动驾驶等广泛应用是必要的。但是,只有一小部分 CAN 总线命令是标准化的,其他绝大多数是由汽车制造商私下开发的。目前揭示专有 CAN 总线命令最有效的方法就是使用真实汽车进行逆向工程,不幸的是,这是耗时且成本高昂的。本文提出了一个经济高效的(不需要真正的汽车)和自动(无需人工干预)系统,CAN-HUNTER,用于使用汽车配套移动应用程序对 CAN 总线命令进行逆向工程。
【嵌牛鼻子】
移动应用,汽车总线
【嵌牛正文】
背景简介
对于现代汽车,大约有数百个电子控制单元(ECU)负责控制各种子系统,如转向、加速、制动、车门和车窗。为了协调这些复杂的组件,CAN 总线设计用于连接 ECU 并确保整个系统正常工作。网络内所有组件都可以理解的消息会来回发送,以便进行通信,称为 CAN 总线消息。这些消息是用特定的标准化结构形成的,如图1所示。CAN 总线命令的语义通常可分为两类:(1) 控制,它操作车辆的物理部件,如解锁车门和启动发动机;(2) 诊断,用于查询车辆的数据(如速度和温度)。对于每个语义含义,都有一个对 CAN 总线命令的一对一映射。例如,对于丰田普锐斯,CAN总线命令标识符"0x750"是指主体,"0x7C4"用于空调。
如今,汽车制造商和第三方开发人员已经生产了大量移动应用程序,以与车载系统(如车载信息娱乐 (IVI))连接,并提供方便的基于应用的车辆控制或诊断。有趣的是,为了实现与现有车载系统的兼容性,这些应用从根本上仍然依赖于 CAN 总线命令来与车辆接合。也就是说,这些应用必须包含直接或间接生成 CAN 总线命令的逻辑(通过加密狗或云服务器中的转换或中继)为每个受支持的车辆生成 CAN 总线命令。因此,这种新形成的汽车移动应用生态系统可以为 CAN 总线命令的逆向工程创造新的方向。这也是本篇论文的切入方向,通过逆向这些app来达到获取CAN总线命令的目的。
系统设计
从整体上来看,CANHUNTER分为三个部分:反向切片(backward slicing),语法恢复(syntactics recovery)和语义恢复(semantics recovery)。它首先将移动应用程序的二进制代码作为输入,对其进行反汇编和反编译,并通过对反编译后的代码进行反向切片来生成执行路径。然后,它使用动态强制执行(dynamic forced execution),以感兴趣的执行路径运行应用程序,从中可以发现CAN总线命令的语法和语义。
A.Backward Slicing(方向切片)
并非移动应用程序中的所有代码都有助于CAN总线命令的生成,因此我们使用反向切片来确定我们感兴趣的代码路径,从而可以高效地执行分析。反向切片需要从一些底层接口开始。为了识别这些入口点,我们发现CAN总线命令通常是通过具有固定底层网络API的无线网络(例如蓝牙和Wi-Fi)从应用程序发送到车辆的。因此,我们的反向切片算法首先会识别这些接口,并初始化一组目标变量,这些目标变量携带要发送的数据。然后,它向后迭代反编译后的程序语句,并根据目标变量及其闭包的生成方式生成执行路径。
B. Syntactics Recovery(语法恢复)
语法的恢复是为了推断CAN总线命令的具体值,这是通过强制执行执行路径中涉及的指令来实现的。由于指令独立于外部输入,因此可以直接执行。具体来说,执行从树的叶节点开始,最后在根节点结束。在代表特定块的每个节点内,该算法根据它们在切片中出现的顺序执行每个指令。强制执行在运行汽车伴侣应用程序的真实移动设备上动态执行。网络发送API的每次调用都会通过我们的动态强制执行生成CAN总线命令。我们记录该命令,并保留其值作为其语法。
C. Semantics Recovery(语意分析)
在通过强制执行对CAN总线命令进行语法恢复的过程中,CANHUNTER还会推断其语义以及车辆模型信息(如果可用)。我们根据观察经验来设计一种语义恢复算法:CAN总线命令的语义通常在应用程序代码中显示为常量字符串,而OBD-II加密狗或车辆内部的CAN都不会识别或使用这些字符串。开发人员将这些人类可以理解的语义集成到汽车配套应用程序中的原因是为了帮助用户将CAN总线命令与相关功能相关联。因此,我们的语义恢复算法使用以下两种启发式:(i)UI组件相关性和(ii)函数自变量关联,以推断CAN总线命令的语义。
实验结果
在我们测试的236个应用程序中,CANHUNTER总共从107个中发现了182619个CAN总线命令。其中,使用语义恢复了157,296条命令(占86.1%)。尽管并非所有命令都使用语义来恢复,但我们要强调的是,与依靠手工或模糊处理来构造CAN总线命令的现有方法相比,CANHUNTER提供的自动语法恢复已经很有用,因为它可以加速逆向工程过程在实车测试中。注意,CANHUNTER还发现了称为OBD PIDs的标准化CAN总线命令,该命令用于诊断目的,并且在诊断应用程序中无处不在。由于这些命令的文档记录清楚,并具有保留标识符的独特功能,我们能够将它们与非标准的CAN总线命令区分开。总体而言,这些经过记录的OBD PIDs约占我们结果的15%,而其余85%是自定义的CAN总线命令。
为了评估CANHUNTER的有效性,我们需要验证从实验中恢复的CAN总线命令的正确性。但是,执行全面的正确性验证非常困难,原因有两个。首先,几乎不可能仅用实车来验证所有这些命令,因为它既效率低又成本高。其次,汽车制造商和第三方开发人员将CAN总线命令视为机密信息,几乎无从获得。尽管如此,在本文中,我们还是尝试从三个方面评估有效性:公共资源,交叉验证和真实汽车测试。这使我们能够成功验证130,011(71.2%)的命令语法以及128,298 (70.3%) 命令语意。
论文出处:
Haohuang Wen, Qingchuan Zhao, Qi Alfred Chen, Zhiqiang Lin: Automated Cross-Platform Reverse Engineering of CAN Bus Commands From Mobile Apps. 27th Annual Network and Distributed System Security Symposium, NDSS 2020