车联网安全漏洞挖掘

小米公司正式成立于2010年4月,是一家专注于高端智能手机、互联网、汽车智驾网联、智能家居生态链建设的创新型科技企业。以“让每个人都能享受科技的乐趣”为公司愿景,小米公司应用了互联网开发模式开发产品的模式,秉承开放、不排他、非独家的合作策略,和业界合作伙伴一起推动智能生态链建设。

小米科技车联网高级安全专家尹小元以《车联网安全漏洞挖掘》为主题,从车机固件提取、隐藏调试分析、常见漏洞挖掘几个方面展开,以下是演讲内容整理:

车联网安全漏洞挖掘

小米科技车联网高级安全专家尹小元

今天演讲主题是车联网安全的漏洞挖掘,这也是我目前在小米工作的一部分。我今天主要讲四个部分:1、个人介绍;2、讲解车机固件提取方法;3、分析调试模式的方法;4、车机端的漏洞挖掘方法。目前我在小米科技做车联网研究,有八年的行业相关工作经验,主要是做Web、APP和lOT等等工作,有多年的甲方车联网安全工作经验,目前对车联网安全体系建设和智能网联汽车漏洞挖掘有比较深入的研究。

车机固件提取

车机固件提取的第一步是信息收集,首先把设备拆开,收集储存芯片型号、封装信息、Datasheet。其中芯片型号比如说SK,SanDisk,Kioxia等等,封装有OIC,TSOP,BGA等,重要的信息有flash起始位置,大小等信息。接下来是选择合适的拆焊工具、根据封装选择编程器,比如RT809H,easyJTAG,西尔特7500,西尔特7500成本较高,使用也较少。,这一步骤主要是根据封装选择合适的编程器和编程器底座。接下来还要进行固件解包、固件逆向,这部分可以分析固件逻辑,是否存在可以利用的算法漏洞,最后是安全漏洞的验证工作。

现在对提取固件的流程和技术要点做一下总结:先将芯片用高温胶带固定,为了保证其他芯片不受高温影响,可能需要把其他芯片用高温胶带保护起来。接下来需要做预热工作,来回转动热风枪以便受热均匀,让芯片完整地脱离焊盘。具体操作中有很多需要注意的要点,尤其需要多加练习,比如说第一次掌握不好温度,就很容易损坏芯片,因此这是我们做车机固件提取硬件层面中最需要掌握的一项技术。接下来是软件层面,需要先找到对应格式的文件系统,通过dd命令将文件系统提取出来并进行验证,汽车启动的配置文件、脚本和配置信息和应用代码都在里面,这些是固件逆向所需要的最重要的文件。

隐藏调试分析

第二部分介绍的是隐藏调试,隐藏调试可用简单理解为官方“后门”,通常是为了发现问题或解决问题(售后)而预置的一个用于调试分析的功能模块,工作人员在进行维护时,通常会点击特定位置,通过特定窗口输入密码进入工程模式。这些密码会对外保密,一方面防止车主误操作,另一方面是减少黑客和改装厂篡改系统的风险。工程模式是检测汽车故障的有效路径,我们通过前面的方法把固件提取出来,可以通过固件逆向获取“暗码”。

除此以外,我们还可以通过搜索引擎、汽车论坛、汽车群等方式搜索到“暗码”。这里就是一个实际案例,我们直接通过搜索引擎拿到相应的论坛拿到调试码,第二个通过汽车群拿到更新包,通过逆向拿到调试码,最后一个就是通过咸鱼买相应的车机去提固件获取调试码。

常见漏洞挖掘

最后一部分就是常见漏洞挖掘。以特斯拉的车机漏洞挖掘为例:漏洞挖掘人员首先去拆解硬件,进一步分析芯片和调试口,然后进行探测,最后从以太网端口固件进入并分析其系统。通过车机逆向,漏洞挖掘人员发现可以在固件代码中植入远程指令(刷固件),并通过这些指令达到控制车机的目的。比较有影响的就是国外黑客查理·米勒通过远程利用的方法,直接让运行的汽车停下来,导致汽车事故的案例。

2.png

图片来源:小米官网

这是我们实际进行的一个车机漏洞挖掘,首先是芯片默认口令问题,我们通过硬件拆解,我们分析汽车装载的AG35芯片,通过把AG35芯片的外壳去掉,找到USB口并分析走向,接上飞线或者HSD接口,输入默认的密码,从而直接进入到AG35系统里面去。另外就是CPU,大部分CPU会有调试接口,我们通过工具可以直接进入系统,再做进一步分析。有时候这些调试口并不能进去到系统,我们可以通过故障注入的方法获取一个shell。

目前车机较多使用车载以太网进行通信,我们可以分析车机里面是不是有车载以太网的芯片,通过芯片分析接口的走向,通常是车载以太网双铰线,通过使用车载以太网转RJ45设备,可以进入到车内网,剩下就是内网渗透和信息收集的工作,这个跟做web渗透和车端的渗透原理其实是一样的。

以下是我们目前发现比较常见的漏洞。第一种是端口服务,我们在使用调试暗码进入车机系统之后,通过一些命令看目前系统运行的服务,如果发现adbd服务没有运行起来,那么我们可以通过打包系统镜像加入adbd服务或者修改系统启动参数来启动adbd方法以启动adb服务。同理,车机系统内的一些更新脚本、OTA进程、ftp服务等都是我们重点关注的对象。

第二种是二进制应用,这种主要依靠命令注入和栈溢出漏洞来进行利用。第三种是MQTT漏洞,目前车端MQTT用得非常多,主要用于将新闻等信息、天气交通等信息推送到车端,或者是把车辆的状态信息,比如位置、车辆状态信息推到云端,比如我们远程开车内空调,是可以通过MQTT去控制的。我们在实践测试中发现,某个车型有大量用户信息,包括手机号、车牌号、地点位置、轨迹、用户token等重要信息,都是通过MQTT泄露的,利用这些信息我们可以做很多有意思的事情,这里就不多说了。

第四种是OTA,现在很多开发人员会直接谷歌搜索代码库,甚至将官方的公开代码直接复制到自己的实际应用代码当中去。比如将示例AES算法的公私钥直接复制,用到自己代码中,甚至将一些AES算法的私钥和key、iv进行复制。在实际分析中,我们把一些车机的公钥或者Key直接复制到网站上去搜索,发现通过搜索公钥,可以直接拿到私钥信息,是一个很大的问题。在这里提醒下开发人员,在写代码的时候一定要有安全规范,如果参考了别人的代码,不要直接拿过来不做任何的更改,否则将会出现很大的问题。

3.png

图片来源:小米科技 尹小元

这是我们在实际测试中结合车机和APP漏洞利用链的案例:逆向APP主要是逆向登录和加密算法,一般APP都是加壳的,需要我们脱壳后进行逆向。这里的APP主要是控车的APP,我们首先是通过逆向源码,构造一些控车的代码,实际测试时候并没有成功,因为没有有效的控车的账号。

随后我们通过前面的MQTT发现了一些可用的手机号,通过手机号再去利用,挖掘应用级的漏洞,再去看控车指令如何构造,最后发现是通过云端的APP去远程控车的。于是我们进一步逆向其中所使用的供应商协议的逻辑漏洞,通过篡改部分代码,最终实现了通过云端APP控车。

以上这一条利用链是比较完美的,首先,APP端存在漏洞,虽然也做了一些加密,做了源码级别的加壳,但最后我们还是通过脱壳和应用层、网络层的抓包分析,实现了控车。此外,车机端的调试端也没有做一些严格保护,通过前面的方法对固件进行提取并逆向分析,最后发现它的控车是用某一个供应商的协议去控制的,从而找到了供应商的漏洞,补充一点,这个案例并没有使用D-bus系统进行远程控车。

(以上内容来自小米科技车联网高级安全专家尹小元于2022年8月26日由盖世汽车主办的2022中国汽车信息安全与功能安全大会发表的《车联网安全漏洞挖掘》主题演讲。)

版权声明:部分图片来源于互联网。本网转载自其它媒体的内容,目的在于传播更多信息,不代表本网观点立场。图片文字如有侵仅请联系hizhiche@qq.com删除。转载均有出处,如需转载须保留本网注明的稿件来源及作者署名。本文:Hi智车 » 车联网安全漏洞挖掘

赞 (0)