大家好,我是海盗,欢迎来到海盗茶馆。今天跟大家聊一下车机的渗透思路以及实例。
基础知识:什么是车机车机,通俗理解就是车内的那块大屏。在看各种paper、文档的时候你会发现有各种叫法。IVI、AVN、HMI、HU等等,不要疑惑,指的都是同一个东西。
IVI:In-Vehicle Infotainment,车载信息娱乐系统。
AVN:指的是audio、video、navigation。最初的几个车内的功能。后来代指车机。
HMI: 人机接口。这个前面也讲过了。
HU: headunit,老外喜欢这么叫。
攻击面分析方法论攻击面的本质是什么?不知道大家有没有想过这个问题。其实就是IO。Input和Output。
只有在你能与目标进行IO交互的时候,才可能、才可以进行测试以及安全测试。理解这个本质,再去分析任何目标的攻击面就好理解的多了。
我们输入数据(In),根据反馈(Out)判断是否存在问题、数据中的poc是否正确执行等。理解这个本质,那么所有的攻击面,其实都可以归纳为寻找In的过程,从所有的In的路径,筛选出具备攻击可能的那一条,然后展开测试。
不过这里还要说明一下,攻击面的寻找,跟漏洞的确认,是两个不同的环节。一个是开始,一个是结尾。
车机的攻击面有了上面的方法论做基础,再去分析车机的攻击面,其实思路就很清楚了。就是寻找能与车机进行数据交互的方法。根据交互距离,我习惯分成如下几个类别:
接触攻击面HMI/触摸屏:你使用触摸屏,其实也是一种IO的过程。硬件设备及接口:如usb、OBD等。
近场攻击面车机系统以及车机应用的使用方式,如wifi、蓝牙。
远程攻击面,车机的远程攻击面不常见,移动App大多情况下都是与Tbox做交互。这里就暂时不多说了。
C车机破解过程关于如何获取实验室设备等等,不再赘述了。简言之就是实验室环境下我们拥有C车机、配套的显示屏、C车机线束引出来的usb接口。
识别系统车机点亮之后,看起来很酷炫的界面。只看界面其实是比较难判断到底是什么系统的。不过,常见的车机系统无非就是安卓、QNX以及inux。
不过黑盒状态下如何具体判断系统版本呢?我个人比较喜欢使用网络抓包分析的方法。
搞一个可以抓包的wifi,也可以使用你的手机热点,前提是能抓包。
打开车机内可以联网使用的app。
寻找需要联网的功能,触发网络请求,最好是http的请求,如图片等。我一般喜欢选版本检测更新,登录,注册,图片等。
打开捕获的数据包,寻找http请求,检查User-Agent。
如下就是我们捕获到的一个http的UA:
Dalvik/1.6.0 (Linux;U;Android 4.4.2;X4xxAUTO-MX6Q Build/A3.02.09208)
这个UA可以得出以下结论:
使用的Android 4.4.2。
X4xx AUTO 是车型信息。
MX6Q是硬件设备相关的信息。
Build/A3.02.09208 应该是这个请求发起的软件的版本编号。
4.4.2 的安卓漏洞应该挺多的,但是前提是你需要有数据输入的通道,得有个入口。这也就是审计与渗透所不同的地方。审计是把所有的问题都找出来告诉你,很可能大部分都不能被直接利用。而渗透,是找出来能被利用的漏洞并验证可用。
不抬杠,这个UA判断不一定完全准确,所以可以多找几个app的请求多看一下,毕竟所有的http头都是可以被定制的。
安卓车机的渗透思路国内很多车厂负责车机的Tier1,使用的系统都比较老旧,4.4的比较多,一直不太明白这个原因。使用这个系统对我们来说基本只要找到进入点,提权啥的都比较容易,因为可用的漏洞还是比较多的。但是如何寻找进入点呢?
系统升级/app升级漏洞
webview漏洞
系统内置应用漏洞
车机系统自身的bug
我前面的文章里大概讲过一下Tier1 跟Tier2,如果没有看过之前的文章也没关系,大家可以这么车机:缝合怪。