国产智能网联汽车进入了辅助驾驶时代,发展非常迅猛,但安全问题也随之增多。本议题讲解国产智能网联汽车漏洞挖掘中的几种特殊方法和思路,也有对应的防护建议。供汽车相关安全研究人员和车企开发者参考。
例如:渗透汽车要准备哪些合适的软件和硬件?如何找到并进入车厂隐藏的"上帝模式"---工程模式? 如何提取车机系统固件,进而发现车辆终端和云端的漏洞等关键又有趣的话题。
马良先生从2017年到2022年的多次的智能网联汽车安全测试中,总结出来的测试套路和思路,题材均来自真实案例。本议题以实战经验的分享为主,不是对车联网架构的分析和攻击面的简单罗列。
在本议题中,马良先生讲解了国产智能网联汽车漏洞挖掘的几个实用的方法和思路,也有对应的防护讲解。此外还分享其常用的几个硬件和软件的使用经验。
【马良 绿盟科技格物实验室高级安全研究员】
具有十多年嵌入式软硬件开发经验, 擅长智能设备漏洞挖掘。往届看雪开发者大会演讲嘉宾、HITB会议演讲嘉宾。曾参加Xpwn、GeekPwn等比赛并获奖。多次挖掘智能设备和智能汽车漏洞经历。
大家好,今天我带来的议题是:国产智能网联汽车漏洞挖掘中的几个突破点,其实今天重点讲的是突破点(思路),不是漏洞。当然后边也安排了几个容易理解、又有危害的漏洞做一个简单的讲解。我先做一下自我介绍,我叫马良,来自绿盟科技格物实验室,是一名安全研究员,格物实验室关注的重点是物联网、车联网和工控方面的安全研究。我偶尔做硬件方面的一些实验电路,发现一些有意思的电路,我会融合一些创意,参加一些比赛。
比如说我自制一个机器特工,远程操控,进入办公系统,搞一些破坏或者是偷东西,当然也可以远程窃取一些信息,比如说图像、视频或者声音这些,又比如通过电力猫的一个安全缺陷,实现通过一根电线进入内网的创意,因为在一些影视剧里边说我通过网线过来了,或者一些恐怖片展示角色通过电视机屏幕走出来了,我就想能不能通过电线进去。当然也是有前提条件的,是用户正好用了有安全缺陷的电力猫。我在2018年讲过智能设备漏洞挖掘中的几个突破点,最后发现大家感兴趣的是固件提取。概述部分就是我今天要讲的主要内容。是我从渗透测试的角度讲一下车载娱乐系统,就是叫IVI和智能辅助驾驶系统,这两个系统的漏洞挖掘的经验。为什么要讲这两个系统,因为这两个系统在没有买车的情况下,比如租车也可以进行这两个系统的安全研究,门槛可能比较低(适合初学者入门)。我发现以前讲这个议题的人好像是没有,所以就选了这个议题。工具部分说我出去测车的时候带了哪些低成本的一些便携工具,然后解释一下说这几个工具是干什么用的。在2016-2017年的时候,其实我只有一个电烙铁,一个万用表,然后一个 USB转TTL线,就敢出去测各种智能设备了。这几年随着研究的深入,买的设备也越来越多了。下面是我测车常用的一些工具和设备,这些工具都是比较简易、比较便携的一些设备。汽车其实它有很多硬件接口,如果你没有对应的硬件工具的话,其实是很难测的,比如说你要测一个Wi-Fi方面的东西,但是你自己没有一个合适的WiFi热点,或者说你测网络,你要是连网线都没带,后边测硬件设备就没戏了。这些东西是最精简的一些工具。首先介绍的工具是USBTin,其实它是一个开源软件,我自己又画了个电路板,然后就搭配上外壳,就成了现在这个样子了。这是一个CAN总线的收发包跟fuzz工具,它可以收包抓包、重放跟Fuzz,要配合上对应的软件一起使用。这一个也是我最常用的,其实不只是在测车,测各种智能设备的时候都会用到这种架构来测。我大概给说一下,这个是一个WiFi抓包环境的示意图,可以通过WiFi设备---就是右边是被测设备,我是要抓取被测设备的Wi-Fi的数据包,我笔记本是通过手机来上网的,手机提供的是数据流量,就是把数据出去和进来,笔记本这边我再接一个随身WiFi的一个小模块,这随身WiFi它是做什么,它是提供一个热点,供被测设备接入的。这样的情况下,我就在笔记本上可以截获它中间流量了,比如说我打开Wireshark可以抓包,甚至可以解密HTTPS的数据包。这种测试方式其实主要是它便携,然后我在现场搭建也很便利,我3~5分钟就可以把这个环境很快搭建调试完毕。还有一个是HarkRF One,它里边主板是HarkRF One,然后加上外边这个模块以后,它就变成一个便携设备了,它有显示,也有键盘,就相当于我可以不用电脑操作了,可以对车的一些无线数据进行抓包和重放,可以测车里边的315M、433M之类的无线设备。这个设备的优点主要是便携,还有一个是它可以一个顶两个,平时用的话是便携,到了需要我跟电脑上位机连接的时候,它又可以当成HarkRF One用。上面我讲了几个小工具,下面我讲的议题里边也会穿插其他小工具。下面讲的就是汽车的工程模式和固件提取,内容有点多有点乱,所以我先把内容做了一个摘要。大家看一下这个摘要,下面我想讲怎么一步一步,从车的未知到已知,是怎么测试的,怎么进入系统的内部,最后拿到系统的shell,我们可以带着问题往下看,其实这些问题也是当初困扰我的一些问题,后边有解决的方法。
比如说我要找一个研究目标,找研究目标,其实关键的还是要看预算了,其实就是说你能拿出多少钱,你要是土豪,你可以直接买个整车来测试;如果预算稍微少一点,也可以租车或者是买车上的一个部件。比如说到车的后装市场或者到咸鱼上直接买一个车的中控设备,自己把电路分析一下,把电源接上,就可以开始测了。有一个友商的朋友写过一篇文章《汽车界的“华强北”一日游》其实就是指的广州陈田村,后来有一次出差我们也去了,后来发现这个地方做安全研究的话,不太适合去那买东西,因为他那个地方都是10年前出厂的设备,报废车的一些零件或者一些电子系统,是比较容易买到的。但是要是买新车或者新车上拆下来的东西不太好买,所以还是推荐咸鱼或者是去后装市场,我们看完他这篇文章以后,我们觉得里边的有些内容很受启发,后来我们就去了本地的后装市场,果然买到了几台中控设备,然后来测,发现了一些有意思的问题。某车载信息娱乐系统,这个是它的接口定义图,我们比较关心的是什么?比较关心的是它的电源部分,电源是怎么接的,里边有它的 USB接口,会接出 U盘来,还有两个接口是CAN总线接口,如果我们买到了设备,设备上面正好贴了接口定义标签了,我们直接接线就可以了。但是很多情况下我们只拿到一个电路板,或者说我们买到的东西上没有接线定义,我们怎么办?下面就是要解决这个问题。首先我们看一个智能设备的电源的原理图,这个电源原理图是一个非常典型的原理图,它输入的是5伏,5伏转换成后边的3.3伏。再看一下这个二极管是做什么的,二极管是防止接反的。你如果是把正负接反了,也不会烧,所以一般会有一个二极管。中间那个芯片,它是117,它是一个稳压芯片,前边是电容,就是电容是做什么的?电容是做滤波用的,输出也一样(要进行滤波),输出的电源,如果电压不太稳的话,它就要进行一个滤波。然后一般大电容是做什么用的?(做低频滤波)大电容是做稳压后滤波的,如果有一些大的波浪的话,就把它过滤掉。小电容是做什么的?(做高频滤波)小电容是有一些高频波,比如说有些尖的毛刺,会把毛刺过滤掉。所以一般情况电源芯片周围的大小电容会比较有特色。利用这些特性,拿到一个电路板,在电路板上找电源是怎么找。然后找“地”怎么找?这里边有一个特性,不知道大家注意到没有,就是电源不管是5伏还是3.3伏或者是12伏或者多少伏,它的“地”永远是连在一起的。针对这个“地”总是连在一起的特性,可以在拿到一个设备,没有官方资料情况下,我们就可以把电源的引脚找出来。汽车的电源电压一般是12伏,当然这些东西你也可以问卖家,或者查资料,你要知道车型的话肯定更好,有车的话你在车上量一下都可以。最重要的就是找"地","地"一定要找对。"地"如果要是找对了,后边问题就不大,这是一些找“地”的经验,这里边加粗的部分是重点,或者说我常用的一些判断的方法。还有其它找“地”的经验,比如说电路板上有个USB接口,我可以在网上查一下 USB接口是怎么定义的, USB接口里边有一个脚或者某几个脚,它是接"地"的,找到这个接"地"的脚了,跟它通的那个脚肯定是接“地”的,这样的话就把“地”就找出来了。在电路板接口端子上有一个是vcc,就是接12伏的,我们可以用上面的理论,比如说“地”和VCC它走线一般比较粗,它两个经过的电路都会有很多电容,你可以在电路板上看一下,就知道这一块可能是电源电路,它的一些特征是很明显的,基本上是根据上面这些方法来判断的,这样的话我们就把电源给接起来了。电源接起来了以后,下面讲:没有官方资料,怎么把 can总线的接口找到,也可以把电路板的网络接口也找到,这样的话就可以对设备、对电路板进行一个测试了。还有一个是在没有官方资料情况下,我在电路板上有一些芯片,我可以通过手机自带的微距镜头,或者通过买的外置微距镜头,或者通过买的专门的电子显微镜,看清楚芯片的的丝印,然后在网上查芯片的型号,就知道芯片的功能。它是CAN控制芯片。如果它是以太网的PHY芯片,这样的话我就知道跟它连接的脚肯定是以太网的功能了。就是类似的办法。下面这个图是CAN总线原理图, 外边接口是CAN总线,有时候多看看电路图,然后根据这些特征,我们就可以容易找到它的模块上引出的 can的接线。固件提取:有一些芯片加密了。一般的芯片是不会做加密的,程序没有保存在CPU里,程序保存在flash里面,这样我们就比较容易提取。但有些固件保存在CPU的Flash里边,关键它还加密了。加密的情况下就比较难弄,我们就破解芯片或者绕过登录这些办法进入到系统内部,进入到内部以后再用一些命令把那个固件给dump出来。2020年看雪峰会,付鹏飞同学讲了一个电压故障注入的一种方法。最近还发现一种开源的一种低成本的电磁故障注入的方法。可以看一下,右边是一个PICO树莓派的单片机,它通过一些按钮操作,就是这边这个按钮它是如果按下去,它就会对左边这个电路充电,后边这个电路其实有个变压器,它会给变压器产生 PWM脉冲。变压器要求要是有变化的电压输入,它才会在变压器另一端产生电压,这其实是个升压变压器,这样的话我们就可以用一个低压得到一个高压,这儿是变压器,这个地方是得到高压,在电容两端就产生产生高压储存起来了,产生高压的时候这个电磁线圈还没输出来,输出要有一个东西控制,就这边这个按钮按一下,然后它会控制MOS管,然后就把电磁线圈导通,最后这个是电磁线圈,给电磁线圈高压,电磁线圈就会产生电磁波,我们把电磁线圈放在芯片附近或者放在我们要搞的电路附近,在这种情况下,它就会对这个电路产生干扰,就对这个电路进行故障注入。通过这种方式,一个思路是我们可以用这个办法绕过系统的登录保护;另外一个思路是我们可以利用电磁故障注入的这套设备可以做芯片破解,当然这个是另外一个更复杂的议题了。下面讲一下汽车工程模式,汽车工程模式其实是厂家内置的一种特殊模式,用在开发、生产测试或者维护中,都会用到的一种模式,下面这个是汽车工程模式的菜单,它对我做渗透测试来说,最重要的功能是什么?最重要的功能就是开ADB,除了开ADB模式,还有一个升级菜单,在升级的时候,可以做点事情;如果开了ADB,我就可以进入汽车的内部了。工程模式按理说它也不算漏洞,但是它是我们进入汽车内部,然后继续深入研究的一个重要通道。比如说我们如何进入汽车的工程模式,我要找进入工程模式的办法。下面的几种办法就是我进入汽车工程模式的一些方法。其实大部分都是一个安卓系统,我在找进入工程模式的方法的时候,比如说我拿到了一个设备,我会把它当做安卓设备,在"系统->版本信息"里边就是多点几次,他可能就会弹出来,比如说他问你要密码,或者运气好的话直接就进去了。如果有密码的话,我们后边还会讲一个逆向找到密码的案例。进入的这些方法,我们也可以问客服要,可以要到!当然,要的时候是有一些技巧的,因为客服有些文档、 固件或固件升级包,可能只有4s店才给。你要是直接问他要的话,他是不给的。他其实是非常想帮助你,他非常想给你,但你要有一个说服他让他给你的理由,他才会给你。我们如果要是拿到汽车的固件升级包,我们可以进行一个逆向。有时候在二进制固件里边,有时候是在固件的一些html或JS代码里,我们可以发现工程模式的进入密码。这个图是两款车的工程密码的案例,通过逆向固件以后就找到了进入工程模式的密码,就进入工程模式了。极少的汽车还可以进入原生安卓模式。它本来是一个安卓系统,它的安卓系统一般是裁剪过的,有些东西基本是你只能看到厂家愿意让你看到的那个界面,有时候你能通过一些办法能进入原生的安卓模式,这个模式里边其实你还可以看到更多的信息,其实看到更多的信息起什么作用,主要是看这个系统里有没有什么软件,能控制到一些影响行车状态。比如说有一些软件,在系统里边它有一些菜单或者是有一些协议,可以跟车里别的系统交互,因为 IVI跟车里边的其他系统通信,可能会影响到汽车的行车安全,要在这些软件里边,要找到能影响物理安全的,能影响汽车物理状态的一些通用协议或者是一些软件,然后想办法来分析。我们进入工程模式,找到工程模式的密码了,我们也打开ADB接口的开关了,可以通过ADB进入系统了,但是从物理方面我们应该从哪进入,这个时候有一些接口,我们需要寻找一下。一般情况,IVI是有 USB接口的,通过 USB接口是可以调试的,一般我拿一个一边可以插电脑,另一边可以插进IVI里边的一个插U盘的一个口,就可以用 ADB进行调试了。但是也有一些电路板它是通过串口来调试的,我们可以通过下面的Jtagulator,进行串口识别,我们要把ADB的开关打开,如果打不开的话,那个USB口还是只能插U盘听听歌了。能进入ADB的话,我们就可以用ADB的命令在里边做一些事情了。进去以后一般是安卓系统,下面是ADB常用的shell命令,比如说我在里边可能会抓个包,抓完包以后我把包导出来,或者说这个系统没有root,我把一个root的软件复制到系统里边运行一下,看能不能把这个系统root了。如果要是去测车的同事比较多,只有一个USB口,可以把网络的 ADB调试接口打开,这样的话就可以好几个小伙伴一起Wi-Fi调试车了,这样就比较方便了。固件提取:进入系统以后,命令跟嵌入式Linux命令差不多,比如说用dd命令或者用tar命令打了包以后,再通过网络或串口传出来,或者直接打包在U盘里面,打包在TF卡里面都可以。用dd命令,直接保存在U盘或者TF卡里面,就把固件提取出来了。固件的文件拆解跟符号表恢复,这里边是有一些难点的。要搞清各种嵌入式文件系统的结构,这些文件系统的结构如果搞清楚了,再用一些编程就可以解决里边的一些问题,多实践就可以了。关于恢复固件符号表,我们也一直在关注这方面的东西,也发现了一些好的方法,目前准备申请的三个专利,其中一个已经公开了,一个刚申请,还有一个还在写。这些专利的大概方法:如果没有符号的话,我们通过一些签名或者别的方法恢复函数名,本来 ida就支持签名,我们在其基础上还有一些其他方法提高识别率,提高识别的速度跟准确性。进去系统以后,看固件有哪些风险点,进入系统的后台以后,先看它运行哪些进程,这些进程有没有网络通信,最好看一下它跟哪些云端和本地的IP通信,或者说他现在正在跟哪些IP地址进行通信,然后抓包分析它里边的通信的内容,然后找到对应的程序,逆向分析通信协议,逆向分析软件跟调试软件,发现软件里面的漏洞。
还有一个常用的办法是什么?是找这一个厂商跟别的厂商有不一样的地方,你就看一下它的特色功能,它的特色功能可能是自己重新写的,这里边有问题的可能性就更大一些了。比如说IVI或者辅助驾驶系统,我们关键是分析它能改变汽车运行状态的状态的地方(例如刹车、转向、加速和开门),然后再分析它的通信协议,然后分析它里边的APP之类的,然后这样的话就可能会有更大的概率挖到它的漏洞。后面是几个典型的分享。其实本来这个案例我还是有一些图片的,或者甚至是有视频的,但我收到几个车厂的叮嘱,怕误伤,把所有和漏洞有关的细节都去掉了,只能说一下思路了。比如说采用了不安全的通讯协议,这里边有两种情况,如果协议在没有保护的加密保护的情况下,传输过程中很容易篡改这些东西,大家都很容易理解。有个案例是HTTP协议,我通过中间人攻击,他本来要安装一个应用商店的软件,然后就替换成安装了别的软件了。还有一些最简单的通过抓应用商店的下载协议,结果发现应用商店用了FTP协议传输,其实本来也没什么,但是实际发现它进入FTP站点以后,它的APP商店是用FTP管理的,关键是还可以写, FTP权限还比较大,就比较危险了。采用了不安全的通信协议,车内部的通信,我通过逆向它的固件跟抓包,搞清楚它的通讯协议,就可以改变行车的运行状态了,我发个指令,车本来是这个状态,直接变成另外一个状态了,这就比较危险了。一个是他在车机系统的固件里边,保存了云端的登录凭据,这导致什么后果?我直接拿到了云端的权限。其实我不是特别懂web,但是我直接从固定里边拿到到他的web权限,直接就把他的云就给控制了。还有一个是APP里边保存云端的密钥,密钥不能放在安卓APP里边,结果攻击者可以登录到它的云上,用户所有上传的一些隐私的信息都在里边了,其实这是架构设计有问题的一些案例。大概今天讲的就是这么些内容,我刚才讲这些东西都是站在渗透测试角度的,比如说站在我的角度的。其实对厂商来说挺难的,因为厂商两三年前的车的软件商的开发团队可能已经解散了,团队可能不维护老系统了,有的可能遗留问题比较多,漏洞修复起来不容乐观。注意:峰会议题PPT及回放视频已上传至【看雪课程】https://www.kanxue.com/book-leaflet-153.htmPPT及回放视频对【未购票者收费】,对【已购票的参会人员免费:我方已通过短信将“兑换码”发至手机,按提示兑换即可】《看雪2022 SDC》
https://www.kanxue.com/book-leaflet-153.htm
文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458482822&idx=1&sn=13f269f0ee613726295c941a895fd3ad&chksm=b18e480c86f9c11a3daab021795a44acc40cbb38c4ffa76cf30c057095e3210c348762631e98#rd
如有侵权请联系:admin#unsafe.sh