新闻链接:http://www.2cto.com/News/201502/377233.html
新闻时间:2015-02-13
新闻正文:
ADAC(全德汽车俱乐部)想深入了解内嵌移动网络调制解调器的汽车如何向制造商发送数据。C'T(德国计算机技术类的杂志)为ADAC介绍了一位安全专家。这位专家深入分析宝马汽车ConnectedDrive系统的数据传输过程。最终,他发现一系列安全漏洞,允许未授权的攻击者打开车门。
\
物联网并不止步于控制车库的大门:越来越多的车默认配备蜂窝调制解调器与SIM卡。根据制造商的不同,这些调制解调器可以完成不同的事情:它们可能为乘客提供互联网访问;它们也可以发送遥测数据或交通信息到制造商,或它们可以在发生碰撞启动应急服务。有些品牌的汽车,一个手机APP允许车主通过移动APP控制车辆的一些功能。其中的功能可能包含辅助加热系统或对电动车的主电池充电。
BMW是该领域的领导者之一,其ConnectedDrive已经在市场上使用多年。和C'T(德国计算机技术类的杂志)一样,ADAC对ConnectedDrive系统传输数据对隐私和消费者保护的影响非常感兴趣。他们委托我深入调查这个事情,而结果是令人震惊的:即使关注点起初并不是安全性,我还是发现了一些严重的漏洞。
FreeBuf科普:什么是ConnectedDrive服务?
ConnectedDrive,德国BMW公司于2006年联手Google公司开发的“联网驾驶”服务。ConnectedDrive 有5项服务,BMW助理,BMW在线,BMW导航,BMW电话服务和车内互联网接入,所有这些提供给你独一无二的移动体验——最大化的安全、舒适和驾驶乐趣。
为了开展研究,ADAC提供了几辆配有ConnectedDrive的宝马车,其中有一辆宝马320D Touring(不懂车,不知道中文名是什么款)。我并没有从制造商获得任何特殊的资料,只能依赖那些网上公开的信息。
为获得第一印象,我查看了一下ConnectedDrive的控制单元,发现所谓的Combox有几种型号。除了其他功能,Combox设备还负责车上多媒体功能,如播放U盘上的音乐文件或配对手机与车上内置的蓝牙免提装置。自2010年以来,这个设备已经部署在各种宝马车型。
\
Combox内部构造:除了其他东西,控制单元会将宝马汽车的ConnectedDrive服务连接到在线服务器。它的调制解调器可以看到位于电路板的右上角。
Combox所使用的CPU是SH-4A,一款Renesas生产的功能强大的32位RISC处理器。产自Cinterion(原属西门子)的调制解调器完成设备的移动通信功能。同时,该设备也使用一款Renesas 生产的V850ES型微控制器。选择V850ES想必是看中了它的低功耗,即使在车已经停下且引擎不运行的情况下,也能够让调制解调器接收消息。但SH-4A较大的功率需求将会很快耗尽电池存储的电量。
拆卸
刚开始,我从车上拆下COMBOX模块,并把它连接到AC适配器,再激活模块的应急功能,此功能通常通过驾驶舱内的按钮触发。通过查看主板上的模块,我识别出电源线的管脚及连接器(connector)上的应急按钮。互联网上的资料搜集提供了另一种可行的路径:通过下载面向宝马汽车维修中心的诊断软件,它描述了管脚配置信息。为了记录COMBOX在移动网络中产生的流量,我使用基站搭建了测试环境。这个基站可以支持OpenBSC,从而模拟了一个蜂窝网络。(宝马和基站都买不起,肿么办?)
\
*使用类似SysmoBTS或nanoBTS的基站来模拟蜂窝网络,记录控制单元的数据流 *
当按下应急按钮时,Combox发送文本消息,然后发起语音呼叫。文本消息经加密处理,无法透漏任何可识别的特征。在应急模式被触发的每次测试中,发送的数据看起来都不一样,暗示着数据可能经过加密过处理。
为了查明数据在什么地方加密,我记录蜂窝调制解调器与V850ES微控制器之间的传输数据,该流量通过串行线路传输。为了解调制解调器上连接器的配置,我咨询了网上可以查到的所有型号。因为我在串行线路上记录的数据中无法找到应急文本消息,我断定应急消息的创建和加密位于调制解调器。这个假设是合理的;可以扩展蜂窝调制解调器来提供这样的功能。
脱焊
遇到加密这种棘手情况,我不得不去获得调制解调器的固件。调制解调器单元并不包含可获取固件的标准化测试接口(联合测试工作组,JTAG)。这就意味着我不得不从调制解调器上拆除闪存模块焊点,然后使用适配器板来读取固件。这可不是是一项简单的工作,因为芯片经过BGA封装-在脱焊后,还需要锡球重整(reball),然而供应商为你提供了关照。
\
Combox的调制解调单元加密文本消息
为了分析固件,我使用足够多的I/O管脚和匹配的1.8伏I/O电压把适配器板的闪存芯片连接到STM32评估电路板。只需几行C代码,我就通过评估电路板的串口连接器把闪存的内容提取到PC机上。为了分析固件代码,我动用了神器IDA Pro。它可以探测汇编代码,而且支持这款调制解调器的ARM处理器。
\
调制解调器的闪存经过脱焊后连接到适配器板(左侧)。读取固件的方法来可能看起来有些荒唐,但确实有效
通过IDA Pro工具,我迅速识别出固件上多种加密和哈希算法。这是因为流行加密算法使用特定的表与常数,它们可以被自动化地查找。基于这些发现,我可以查找到使用相同加密和哈希算法的其他代码。
寻找密钥
加密秘钥来自何处?作为乐天派,我起初推测厂商会为每辆车生成唯一的密钥,并存储在V850ES微型控制器上,然后再发送到蜂窝调制解调器。由于在这种假设场景下查找密钥需要花费大量的工作,所以我决定继续分析应急呼叫的协议。固件中的特定字符串表明,它似乎正在使用NGTP协议(下一代Telematics协议)。并不令人感到意外,因为宝马公司是NGTP主要支持者之一。
为了定义通信协议,NGTP使用标准符号表示法ASN.1(抽象语法标记1)。经过分析得知,该固件使用开源编译器asn1c来创建语法。结合asn1c工作原理来查看固件的结构,我尝试重构接近该协议所用的ASN.1语法。这个步骤是必须的,因为NGTP只是对协议如何构建给出建议,但并未规定实际的实现细节。
按照这个思路,我再次踏上寻找加密密钥的道路。NGTP协议包含更新密钥的函数,让我确信密钥一定存在某个地方。长期以来,寻找总是徒劳无功。在最后一次尝试中,我分析了固件中一个随机数据块。我尝试把该数据块的部分数据作为密钥来解密记录的紧急文本消息。经过一些失败的尝试后,最后获得了成功。
这个发现愈发让我感到怪异。他们不会真的对所有的汽车都使用同样的密钥材料吧?另外,我目前只能查看紧急文本消息。对那种使用场景,所有车拥有相同密钥并不会造成什么危害。
我发现了加密使用DES(56位密钥)算法和AES128(128位密钥)算法。为签名消息,固件使用了三种签名算法DES CBC-MAC,HMAC-SHA1和HMAC-SHA256。消息的头部指定了算法的类型和所用的密钥对。
目前,尚不清楚宝马公司为什么会使用DES算法,因为DES算法的破解已有一段时间了。而且相对于其他加密算法,DES数据块的长度更短,从而生成更短的加密消息。3DES情况也一样,但起码3DES被多数人认为是安全的。
重组
在成功地尝试解密与解码应急短信后,我把注意力转向了汽车本身。我想要查明当涉及安全相关的功能时,宝马汽车的通信是否会受到更好的保护。为了这个目的,我开始调查车门远程解锁的功能。
为使用这个功能,车主首先需要在BMW网站上注册账户并开启远程服务。驾驶员可以使用iOS和Android版的My BMW Remote移动应用来打开驾驶员旁边的车门。为了详细了解其工作原理,我不得不再次记录汽车收发的数据。这需要先发送一条短信,否则不可能与已关闭引擎的汽车建立数据连接。
获得这条短信的最简单方法是监听Combox设备上蜂窝调制解调器与V850ES微控制器之间的串口连接。在只是APP打开车门后,我的确在记录的数据中找到一条文本消息。这条消息似乎包含调试字符,因为它实际上已经蜂窝调制解调器处理过。
通过对My BMW Remote移动应用的加密算法与密钥表的了解,我可以轻易地解码与分析这条消息。为了查看汽车的反应,我使用模拟的蜂窝网络向汽车发送消息的副本(重放攻击)。
\
攻击宝马ConnectedDrive系统
接收到短信之后,汽车大约花费一分钟启动连接到主处理单元的系统。COMBOX通过蜂窝网向宝马后台服务器发起连接,并尝试访问服务器上的数据。如果Combox没有接收到任何数据,连接被终止,什么事情也不会发生。这就意味着短信不足以打开车门,系统还需要来自后台进一步的数据。
对于刚刚发生的事情,令人吃惊的是汽车与宝马服务器之间的蜂窝连接可以在模拟网络中毫无保留的记录下来。汽车只是发送一个简单HTTP Get请求,在传输过程并没使用SSL或TLS加密。
为查明汽车期望从宝马后台获得的数据,在利用短信开始重放攻击之前,我至需通过App触发解锁序列。通过这种方式,服务器便会存储有关我这辆汽车的所需信息。紧接着,车门便打开了。
新数据可以使用上面所述的方法来解密与分析。这一次所用的协议又是NGTP,但使用不同的签名算法与加密算法:AES128而不是DES,HMAC-SHA256而不是DES-CBC-MAC,但是使用相同的加密表。
破门而入
现在,我已经具备充足的知识来模拟解锁功能的所有组件。我可以伪造打开车门的数据,而所需的设备只是一个基站和一台笔记本,这台笔记本将发送伪造的短信,然后再伪装成宝马的后台服务器。
问题是已经提取出来的密钥是否适用于其他的汽车。对其他几台宝马汽车的测试让我吃下定心丸。在这个测试过程,我获知了一些额外情况。如果配备ConnectedDrive的车辆没有激活远程服务,远程打开车门就不能奏效。不过,我们可以利用模拟的蜂窝网络来激活远程服务。
这个工作类似于前面的攻击。汽车发送一条短信,指示它从BMW服务器上下载新的配置数据。配置数据通过HTTP Get请求加载,配置数据被格式化成未加密且易于理解的XML文件。配置文件并不能防篡改,这种问题原本可以利用数据签名轻易解决。这就意味着我可以使用模拟网络轻易地激活远程服务,然后再打开车门。
至少,汽车会检查消息的目的地址,即消息应该被发送到哪辆汽车。这个检查是通过查看消息中的VIN(车辆标识码)来完成的。如果VIN不能与提出质疑的汽车相匹配,它就不会执行发送的命令。这对攻击者来说并不是什么障碍,因为COMBOX在这方面给予攻击者极大的帮助:如果Combox不能接收到有效的VIN码,它实际上会发送一条错误消息,而这条错误消息会包含VIN来标识错误消息的发送者。
\
一些BMW车型中,COMBOX已经被替换成其他类型的控制单元。TCB(Telematic Communication Box)支持通用移动通信系统(UMTS),而且不会不泄露VIN,但仍使用已知的加密密钥。
在接下来的研究,我也研究了几款最新的BMW车型。其中在一些车型中,COMBOX已经被替换为其他的控制装置。多媒体与免提功能已经整合到所谓的Headunit。而蜂窝通信已经迁移到到TCB (Telematic Communication Box),它现在除了支持GPRS/EDGE连接,还支持通用移动通信系统(UTM)。TCB会忽略未包含正确VIN的消息。因为它要么不回复,正确VIN码并不像在COMBOX中一样那么容易查明。不过,通信仍然使用了适用所有车辆的已知密钥。
实践
在现实中,通过模拟网络远程解锁车门将会是什么样子?这要求所需设备能够放在一个公文包或一个背包中。模拟网络的覆盖范围即使在市中心也可以超过100米。所谓国际移动用户识别码捕捉器(IMSI catcher)比实际的移动网络拥有更强的信号,所以会导致手机优选选择伪造的移动蜂窝网络。IMSI catcher不需要事先知道目标汽车的电话号码。IMSI catcher使用TMSI替代。当一个移动设备接入IMSI伪造的网络时,IMSI会给这个设备分配一个TMSI。如果目标车辆使用TCB模块,攻击者阻塞这个区域存在的UMTS信号,迫使控制单元退回到GSM模式。
因为不仅配有ConnectedDrive的汽车会接入到伪造的移动蜂窝网络,通过查看IMEI码来过滤接入的设备是个不错的方法,IMEI码是分配给所有移动设备与蜂窝调制解调器的唯一序列码。IMEI码的前8位数字指示设备的类型(手机型号代码,TAC)。攻击者可以利用这个方法区分Combox与TCB。
获知某个汽车配备了Combox,攻击者可以查找到VIN,然后激活远程服务并打开驾驶员旁的车门。如果汽车装备了TCB,VIN可以通过另一种方式获取。根据汽车所销往的国家,VIN可以在挡风玻璃上看到或出现在门框的铭牌上,因此当有人离开汽车时,攻击者可以使用相机拍下来。解锁车门并没有留下任何痕迹,即使在拥挤的街道也不显眼。
结论
在初步调查时,我发现了ConnectedDrive上的6歌安全漏洞:
①BMW在所有的车辆上使用相同的对称密钥②一些服务并没有在汽车与宝马公司后台的传输过程中加密消息③ConnectedDrive配置数据不能防篡改④COMBOX在NGTP错误消息中泄露VIN码⑤通过短信发送的NGTP数据使用不安全的DES加密算法加密⑥COMBOX没有实施保护措施来防御重放攻击
这些问题本来可以被轻易地避免。例如,在传输过程中执行加密的组件都已具备,但仅仅被一些ConnectedDrive服务所使用。此外,制造商可以通过写入VIN使上述控制系统拥有不同的标识,因此也可以为每个车辆写入唯一的密钥。
一年前接受C'T杂志的采访时,宝马公司研发部门的克劳斯布特内尔博士说,当涉及到公司的在线服务时,汽车的安全和授权访问具有最高优先级。参考布特内尔的话,宝马公司把所有服务路由到自己的安全后台。此外,汽车只处理授权的命令,且命令只能是预先设定的命令列表中的。
原则上,这是正确的,但知易行难。据宝马公司宣称,安全漏洞已全部修复。尽管宝马公司信誓旦旦担保没问题,但对于车主来说又该何去何从?不幸的是,ConnectedDrive不能被轻易关闭-它没有提供类似手机飞行模式的功能。
为了永久关闭ConnectedDrive,车主要填写一个书面请求,还要跑一趟汽车维修中心。其中自助措施是断开Combox或TCB与天线。取决于车型而定,这个方法易于实施,因为控制单元位于行李厢的地板下面。不过,这样也就关闭了自动应急呼叫(Security与Safety不能兼得啊)。
没想那么长远的车主寄希望制造商在处理在线服务的细节时已经足够谨慎。ADAC要求汽车装备的计算机采用先进的防止篡改与非法访问的保护措施。要求中提到,这种保护应该遵守与其他行业相同的安全标准。此外,这些安全措施也要通过第三方中立机构验证-例如作为德国波恩联邦信息安全局的公共标准认证((Common Criteria Certification)的一部分。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课