原书地址:http://opengarages.org/handbook/
(部分与技术无关部分没有翻译)
(本人萌新一只,有翻译的不准确的请各位前辈指教。)
理解攻击面:
如果你有软件渗透测试的经验,你应该熟悉攻击面的含义。在我们的讨论中,攻击面意味着发动攻击目标的途径。这个目标可能是车辆的整体或者一部分。在这个部分,我们不会讨论如何真正去攻击一辆汽车,我们只讨论车辆所有的“入口”。
把你自己想象成一个邪恶的间谍,正在试着对汽车做坏事。你需要评估它的环境和文件来发现它的弱点。对于车辆,我们需要考虑所有数据进入的车辆内部的途径,也就是车辆与外界通讯交流的途径:
外界:
——信号是如何被接受的?无线电?遥控器?传感器?
——物理键盘?
——触摸或者手势屏幕?
——如果是电动汽车,它怎么充电的?
内部:
——多媒体组件:CD?USB?蓝牙?
——诊断接口?
——仪表盘上的特殊功能?GPS?蓝牙?互联网?
当你想明白了这些,你会意识到有很多途径可以使数据进入车内,如果这些数据是畸形的或者是有恶意的,会发生什么?
威胁建模:
整本书是在威胁建模的基础上完成的,我们会给你一个快速的介绍,以便你可以更快的构建自己的模型。如果有的内容激起了你的兴趣,你可以从更深入的书上去学习它。
威胁建模是指对目标的信息进行收集整理集合,之后画出他们的联系。这张图被用来确定高风险输入的位置,同时也列出了一张检查清单,让你确定最佳的检查次序。
威胁建模是分级别的,我们开始第0层
第0层——俯瞰整体
在这,我们用上一节列出的清单,,你需要考虑数据是怎么进入车辆的,在中间画一辆车,在左侧写上内部途径,在右侧写上外部途径。
下面是一个级别0的图表
如果需要对全车进行安全审计,请保证这张表上列上了所有我们感兴趣的东西。接下来,给每个部分标号。
你的工作可以到此为止,但是,最好可以选择一个方向,做一下lv1
级别1——接收系统
现在,我们关注于每一个输入时如何沟通的,这张图几乎和lv0差不多,但是,我们这次增加了数据流的连接方式。无需深入研究具体的接收细节,我们只是在了解输入之间的沟通。
级别1如下图
现在,你可以看到娱乐中心的数据是分组传输的,注意一下每一个接收端的编号,第一个编号代表着他们在lv0中,第二个编号代表着接收端。
虚线标示信任边界,顶端是最不可靠的,底部是相对来说最可靠的,一个通讯路径穿过了越多的信任边界,它约不可靠,我们会在lv2中关注娱乐系统。
级别2——接收系统故障
现在,我们到了查看数据如何在汽车内部通讯的层面了,我们来关注一下影音娱乐系统,它接收的信息最复杂,并且,它也连接到了CAN网络上。
现在,我们用虚线框分组,表示信任边界,现在,有一个新的信任边界,它是娱乐系统的内核区,直接与内核通讯的系统比与应用通讯的系统有更高的风险等级,在这里,你可以看见蜂窝移动数据的风险等级高于wifi系统。注意一下标号变成了X.X.X,含义与上文提到的相同。
现在,我们可以开始推测了。理想情况下,你可能需要逆向娱乐系统来针对每一个进程和输入建立映射关系。在本手的的后部分,我们会提供一个程序来做这件事。
威胁建模可以被视为一个活生生的文档,他们随着目标的改变而变化,同时,他们也影响着你学习新知识的目标。经常升级的威胁建模,如果一个过程很复杂,那就建立多个级别的图表。在开始的时候,lv2就足够了。
娱乐系统:
娱乐系统这个名字通常是给有屏幕的中控板的,他们运行着操作系统linux或者window PE。这套系统的每个部分有不同的功能,并且大多数与车辆本身集成交互。
以下是物理接入点:
——usb接口
——检测插孔
——光驱
——DVD
——触摸屏,按键,等等。
无线接入点:
——蓝牙
——wifi
——蜂窝移动数据
——GPS
——XM
——遥控器
重要连接输出:
——CAN总线网络
——以太网
——高速娱乐总线
一些系统使用以太网在高速设备之间进行通讯,这可以是NTCAN或者RLLSI这种可以兼容传统IP通讯的can总线的通讯的协议。这本书的后续部分会介绍车辆的每个部分如何使用can总线进行互相通讯。
确定目标系统架构:
首先你要知道的事情就是,系统是怎么运行的?最简单的方法是搜索开机时显示的软件品牌。如果她没有显示出来,检查有关显示软件版本号的界面,它一般会显示出软件的名称,在互联网上查看一下是否有人进行了这方面的搜索或者由你开始这项工作。也要检查这个系统是否是一个有着独立网站和固件更新的第三方软件。下载任何你看见得固件和工具。
另一个要注意的事情是这个系统如何升级,一般的情况是经销商收取额外的费用来升级地图服务。有没有其他的升级方法呢?通常,USB或者光盘会被作为备份。
下面是本田思域上的一个娱乐系统
在顶部,有一个正常的CD托盘用来播放音乐,在底部有一个隐藏的塑料门,折下来之后,露出一个dvd托盘,就是用来升级地图软件的。
分析更新内容:
一般来说,跟新内容是以压缩包形式提供的,,它可能是一个zip文件或者CAB文件,但是可能没有扩展名或者扩展名不正确。你可以通过查看头文件或者使用*unx系统中的file工具来查看文件的真是属性。如果是一个dll文件或者是exe文件,那么这个系统就是基于Windows的,可执行文件的文件头也可以告诉你这个系统是运行在什么架构上的。比如ARM(例如本田思域)或者日立SuperH SH4处理器。如果你想要编辑新的驱动或者要编写攻击代码的话,这个信息很重要。
修改系统:
当你知道了操作系统,芯片架构和更新方法之后,接下来做的是就是你是否可以用这些信息来更改系统。有一些系统在更新的时候使用签名进行保护,这就很麻烦,但是,大部分的系统没有保护,或者只是用来简单的MD5哈希校验。对付它的最好方法就是修改更新用的软件,然后进行更新。
一开始的时候,一些可视的信息有助于检查,例如闪屏或是出现了一个图标。修改图像,重启,更新DVD上的内容,之后强制升级。强制升级系统的方法一般会在娱乐系统的说明书中有介绍。如果这个文件被压缩在一个文件里,你需要压缩修改之后的版本,如果有类似于MD5的哈希检测,你会在屏幕上看见有关于检测失败的提示。
如果你遇到一个校验问题,在更新文件里查找,校验值可能存在一个明显的地方。他可能是一个txt文档,文件名旁边的东西看起来4cb1b61d0ef0ef683ddbed607c74f2bf。你也需要用你新的镜像文件在同喜算法的运算下得出的值来更新这个值。为了确定是那种算法产生的哈希值,,你可以使用strings命令对二进制文件或者dll文件来寻找类似MD5或者sha这样的敏感字符。如果你熟悉哈希运算。哈希值得长度可以帮助你分析是何种算法。如果是一个段的哈希比如の78783分,可能就是一个CRC32或者自定义算法。自定义算法可以使用ida pro等工具查看它的反汇编算法。
应用程序与插件:
一些系统允许在设备上使用第三方应用,这种软件通常在应用商店或者供应商提供的界面上提供下载。考虑修改现有的插件或者创建你自己的,对于开发者来说,经常使用的方法是拷贝软件进行研究。对于闭源系统,这是一个好方法。
一旦你已经修改了开机屏幕,标志或者保修信息,上传了你自己的的二进制文件,之后做什么取决于你的目标。如果你在寻找娱乐系统的漏洞,下一步就是获取所有的二进制文件以便你分析。这项研究在其他书中介绍的很详细。
检查系统中的二进制文件和库文件,一般来说,当地图升级了,系统内核通常没有升级。还有,在系统中可能已经存在被发现的漏洞,他们的漏洞利用代码可能在Metasploit中存在了。
如果你的目标是要上传恶意代码去窃听蓝牙系统,唯一你可能需要的就是用于编译目标系统的SDK,经常娱乐操作系统使用像微软汽车平台SDK一样的工具。虽然不是必须的,着手这其中的一项会让你以后的任务更容易。
所有这些攻击都可以在不拆除任何零件的情况下完成。然而,你也可以通过拆除芯片内存或者其他零件来进行更深入的研究。这个部分的内容请参阅有关攻击ECU和其他系统的的章节。
车辆通讯系统:
在这个部分,我们会讨论几种不同的汽车采用的通讯协议,你的汽车可能只采用了一种,也有可能你的汽车比较老,一种也没有采用。
——CANBus:从1996年开始,这种协议成为了美国小汽车和轻型卡车的标准协议,但是在2008年被更改为非强制(欧洲在2001年),如果你的车比较老,可能是使用的CAN协议,但是请事先确认。
——LINBus:这是一种针对非同步传输系统的低成本通讯协议,没有被大规模的使用,在一些新式汽车上有出现。
——MOST:这是一种多媒体传输(Media Oriented System Transport)
——FlwxRay:一种同步数据的高速传输,在宝马的SUV中出现。
——Ethernet:这是一种类似于MOST协议的高速协议,他经常没有文档详解,只在分析中被发现,他们不像标准的双绞网线而是采用工业的电缆如RJFRB连接器。很多用光纤传输。
——TPMS:这是你的胎压检测系统用来报告胎压使用的协议,如果你得汽车有胎压监测系统,那它一定有TPMS。
——Immobilizers:从1998年以来,这是很多国家的汽车强制标准,如果你得点火钥匙有RFID识别功能,你的车就使用了这个协议。如果你去配钥匙的时候价格很贵,可能你的车钥匙就有RFID功能。
——v2v:车互联通讯系统在现在来说还是太早了,但是想象未来,工厂生产线上的汽车使用类似802.11协议创建了一套网络,与其他车辆互联,那会很有趣。
总线通讯协议:
CAN 总线协议:
CAN是Controller Area Network的缩写,它被汽车工业和制造业被广泛使用。一辆乘用车内部有大量的嵌入式系统和控制器,他们之间使用CAN协议进行通讯。
CAN使用两根线缆,CAN HIGH(CANH)和CAN LOW(CANL),can使用差别信号,这意味着在传输数据的时候,一根电缆上的电压的大小等于另一根线缆上的电压的大小,但是正负不同。这种方式对于干扰有很强的抵抗能力。下面就是一个典型的CAN信号:
CAN很容易被识别,空闲信号是2.5V,当产生激励的时候,一根变为3.5V,另一根变为1.5V。
一般来说,车辆会在方向盘的下部有一个OBD-II接口用于车辆的诊断。你可以在方向盘附近找到它,,可能是如下的形状:
这个连接器提供对多个总线的访问,一般来说是中速总线和低速总线。
CANH和CANL分别在6号插口和14号。
CAN总线数据包:
有两种形式的CAN总线数据包,分别是普通版和扩展版,
普通版协议如下图:
有三个重要元素:
——Arbitration ID(优先级ID):这是一个标识符,他不是像网络传输中的源ID或者接收ID,它是一个技术上的ID,每一个装置可能发出不同的优先级ID,如果有两个CAN的数据包被同时发出,有优先级ID小的一方优先传输。
——IDE:标识符,对于标准CAN数据包,这一位总为0
——DLC:数据长度码,表示数据的长度
——Data:需要传输的数据,最大为8bytes,它的长度可变,但是经常有一些结尾填充,,填充可能是00,0xFF,0xAA等等
优先级ID只是一个广播信息,不同的控制器只会挑选出他们关心的数据,所有的控制器都在同一个网络中。传输中,没有表示发送者(包括攻击者)的信息。这就有点想UDP,只是没有它那么复杂。
下面看看扩展格式,这种方式在远距离传输请求位(RTR)为1的时候使用。
扩展格式和标准格式很像,但是它把多个链连接在一起,以便传输更多的信息。以下是区别:
SRR在RTR中,且总为1
IDE总为1
有18位的ID-第二部分有11bit的ID
其余相同
你的汽车可能使用了SAEJ1850或者KWP2000等其他协议,他们也是can总线,但是他们使用了不同的物理总线通信协议。
(未完待续)