这个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,如果没有看过之前的文章也没关系,大家可以这么车机:缝合怪。
攒一个车机可能有三拨人:攒系统的,通用软件厂商,车厂自己的软件外包。这么一个缝缝补补的怪物,出现3不管地带很常见。千万别把车厂的软件品控想的太牛逼,尤其是国内车厂,外包的质量更不用说了。
系统升级
C这台车机,做的相对还算不错的。系统升级可以本地以及网络,本地升级的话需要去下载升级包。网络升级的话联网后直接通过网络匹配版本,然后下载升级包。不过可惜的是,人家的升级包都是加密的。嗯嗯,搞不清楚解密方法之前,这个地方无从下嘴。
app个体的的升级呢,直接砍掉了。只能通过大版本的升级来升级单个app。
此路不通。我们看下一个。
webview
通过前面的抓包分析,http请求不少,但是触发webview解析的不多,不少都是json数据。序列化漏洞?嗯嗯,想法不错。
在一个隐私资料里面,发现一个url可以点击,看起来点击就打开一个类似浏览器的东西。只不过域名写死的。这个肯定也难不倒我们。dns劫持就可以了。随便写个alert的页面测试下是不是可以执行js,失望了,并没有弹框。我们浏览器的大牛研究了端时间发现没有可利用的漏洞,放弃了。
不过到这一步,并不全是没有收获,我们自己改造了一个黑盒流量分析的工具出来,实现http的自动保存、dns的劫持以及泛域名的劫持、路由劫持等。
这条路也不通啊,再往下看呗。
内置应用
C车机主界面可拉起的内置应用很少,除了地图、音乐这些常规的并没有太多可发挥的空间。
系统bug
在有些沮丧的时候,有一个好玩的发现。当把无线键鼠的usb接收器插到车机的usb接口时,系统会对键盘的部分按键做出反应。
在某一个特定的系统主题下面,系统会对键盘的属性键做出反应,右下角弹出一个菜单,包括壁纸、管理应用以及系统设置。看到这里我有种预感,这里应该可以搞定。
你想起来什么了?windows 3389的输入法绕过登录界面拉起cmd的利用?还是早期安卓电视可以调出系统设置菜单?
经过省略1w字的坚持不懈的人肉测试之后,终于发现,管理应用中可以调出某一个输入法的配置界面,
注:配图非原图,保密性的关系,原图没办法放出来,帮助大家理解下这个流程。
这个输入法的设置按钮可以拉起“语音和输入法”的界面,然后点击“语音和输入法”,就返回了系统设置界面。
到这里却被卡住了,应用程序界面并没有安装的按钮。
肯定不能在这里放弃啊,搞来搞去,发现在设置界面有个主屏幕的选项,进去之后,看到几个启动器,选择名字是“启动器”的那个启动器,回到主界面,哈哈,主界面变空白了,右边出现了那个久违的代表应用程序的按钮。
想象下,空也没只有红框里的程序按钮。点击,桃花源出来了。
系统所有的安装的应用程序都在这里了。
接触式getshell
应用程序里面有三个引起了我们的注意,一个叫“工程模式”,一个是ES文件管理器,还有一个叫“安装”。
ES文件管理器版本不高,存在漏洞,但是权限不够,无法安装应用。
工程模式,拉起一看,像是内部测试用的应用。在其中一个菜单中发现连接ADB,点击,接上USB,果然adb出来了。更要命的是,居然是root。
通过adb,我们拉下来车机内的所有的app进行分析,幸运的还找到了一个解密后的升级包。这下就可以进行静态分析了。
到这里,已经差不多了,还有一个“安装”没有看。
负责移动安全的同学看了下逆向的的“安装”app,发现只要在u盘特定目录下的应用程序就可以进行安装。安装应用也搞定了。
近场攻击
近场的攻击思路比较明确,车机没有蓝牙只有wifi。接入车机的WIIF热点或者让车机接入我的可控的WIFI。然后进行端口扫描。端口扫描只有有限的两个端口在开放。
接触式getshell以后,才对开放了这两个端口的jar进行分析,发现这个socket协议可以写文件,并且没有检查文件名。剩下的套路就比较简单了:
-
还原socket协议格式。
-
编写poc。
不过,只能写文件其实是不够的,非接触式的情况下,我们希望写入的后门能被自动拉起运行。
疑似0day
我们分析了安卓4.4 的开机流程,PMS负责应用程序的安装卸载包管理等。其中:
/data/system/users/userId/Package-restrictions.xml
这个文件记录了应用的enable或者disable的信息。
然后经过分析相关的安卓源代码,发现了一个疑似0day的漏洞,通过写入/修改特定目录的文件,就可以实现写入的应用在系统重启后被拉起的目的。
这里真的不能多说了。
结尾
其实C这台车机的安全在我们看过的车机里面还算一般的,跟国外的比起来差距还不是一点的大。不过比起那些可以远程ssh的车机来说,已经算很好了。
不过关于“缝合怪”这个称呼也一点都没有叫错。系统这块安卓4.4 并不能算是很大的问题,问题在于做二次开发以及车厂自己的debug软件上存在很多的安全隐患。上层的负责导航等软件的厂商的安全水位明显比系统的高出不少,但是沙地起高楼也没什么用处。
所以还是那句话,千里之堤毁于蚁穴。永远不要小看任何一个bug,因为这个bug可能会导致你最后全军覆没。