汽车云服务渗透测试报告简述

本文作者:VisualThreat 车联网安全公司 CEO 严威

参考来源:GeekCar

1.汽车安全漏洞分类总结

        汽车应用中最常见安全漏洞排名前三的是通信不安全,代码无混淆,和中间人攻击。

        如果我们要细分,下表是按照应用的不同分类总结出来的安全数据,最后一行是车厂定制类。

VulnerabilityURIURLComponentExposed AccessRepackageCodeUnsecuredMan-in-the-Middle
ExposureExposureExposurePrivilegeConfusionCommunicationAttack
Number Of160217168124124215226176
Vulnerabilities
OBD36.90%75.40%40.00%36.90%58.50%67.70%95.40%41.50%
导航地图60.60%63.60%66.70%51.50%30.30%69.70%66.70%66.70%
租车74.20%90.30%58.10%38.70%22.60%80.60%96.80%87.10%
保养67.90%60.70%67.90%53.60%42.90%67.90%67.90%46.40%
汽车诊断56.00%60.00%60.00%32.00%64.00%88.00%88.00%56.00%
汽车资讯52.90%82.40%52.90%41.20%70.60%76.50%70.60%70.60%
购车52.90%52.90%58.80%35.30%17.60%88.20%41.20%52.90%
驾驶习惯37.50%37.50%56.30%50.00%68.80%81.30%81.30%37.50%
违章80.00%50.00%90.00%40.00%20.00%30.00%40.00%90.00%
打车90.00%100.00%70.00%30.00%20.00%60.00%80.00%80.00%
车厂定制33.30%100.00%66.70%33.30%33.30%66.70%100.00% 

2. VisualThreat 安全测试报告

2.1.     软件概况

应用名称比亚迪云服务版本号2.5.0
文件大小12520.6KB提交时间2015-06-08 22:19:52
MD5 值8369878A566CB65D355C80D8E3D46418处理时间2015-06-08 23:05:43

这款应用是 2015 年 6 月 8 号通过应用商店下载后进行分析。

2. 2    VisualThreat 汽车应用安全漏洞测试

2.2.1.  测试结论

分类监测点中高等级风险
代码安全应用重打包
网络通信HTTPS 服务器未验证
网络通信HTTPS 证书未校验
网络通信WebView 远程代码攻击
数据存储代码包含敏感信息
数据存储程序数据任意备份
数据存储资源文件包含敏感信息
功能安全组件间通信中的隐式发送
代码安全Log 信息未清除

2.2.2 部分安全漏洞说明

漏洞1:HTTPS 服务器未验证

漏洞现象

以下信息存在有 HTTPS 通信服务器未校验的问题。这次攻击就利用了这点。

#1 [SDK]:cn.sharesdk.framework.network.i.a()Lorg/apache/http/client/HttpClient;||||sget-object v0, Lorg/apache/http/conn/ssl/SSLSocketFactory;->ALLOW_ALL_HOSTNAME_VERIFIER:Lorg/apache/http/conn/ssl/X509HostnameVerifier;||||invoke-virtual {v1, v0}, Lorg/apache/http/conn/ssl/SSLSocketFactory;->setHostnameVerifier(Lorg/apache/http/conn/ssl/X509HostnameVerifier;)V||||

#2 [SDK]:m.framework.network.NetworkHelper.getSSLHttpClient()Lorg/apache/http/client/HttpClient;||||sget-object v0, Lorg/apache/http/conn/ssl/SSLSocketFactory;->ALLOW_ALL_HOSTNAME_VERIFIER:Lorg/apache/http/conn/ssl/X509HostnameVerifier;||||invoke-virtual {v1, v0}, Lorg/apache/http/conn/ssl/SSLSocketFactory;->setHostnameVerifier(Lorg/apache/http/conn/ssl/X509HostnameVerifier;)V|||

漏洞风险

即使做了对证书有效性的判断,但是如果没有验证云端服务器本身是否可信,仍然会造成伪装云端服务器而发生的中间人攻击。例如,攻击者可以盗用云服务平台可信证书,伪装服务器建通信对话,解密客户端发送的敏感信息,比如车主的信息(姓名、车牌号、车架号、身份证号、第二联系人姓名、手机号等)和控制密码,获取这些信息后伪装成用户通过云平台对车辆进行非法控制。

解决方案

移动软件大多只和固定的云服务器通信,因此可以在代码中更精确地直接验证是否某信任的服务器。

漏洞2:HTTPS 证书未校验

漏洞现象

以下信息存在有证书未校验的问题

#1 [SDK]:cn.sharesdk.framework.network.m.checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.method public checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.locals 0||||return-void||||.end method||||

#2 [SDK]:cn.sharesdk.framework.network.m.checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.method public checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.locals 0||||return-void||||.end method||||

#3 [SDK]:com.amap.api.services.core.k$b.checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.method public checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.locals 0||||return-void||||.end method||||

#4 [SDK]:com.amap.api.services.core.k$b.checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.method public checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.locals 0||||return-void||||.end method||||

#5 [SDK]:m.framework.network.SSLSocketFactoryEx$1.checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.method public checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.locals 0||||return-void||||.end method||||

#6 [SDK]:m.framework.network.SSLSocketFactoryEx$1.checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.method public checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V||||.locals 0||||return-void||||.end method||||

漏洞风险

客户端通过数字证书判断服务器是否可信,并采用证书中的公钥与服务器进行加密通信。开发者在代码中不检查服务器证书的有效性,或选择接受所有的证书,这种做法可能导致的问题是中间人攻击。

解决方案

移动软件大多只和固定的云服务器通信,因此可以在代码中更精确地直接验证是否某张特定的证书。

漏洞3:Log 信息未清除

漏洞现象

以下代码进行了 Log 输出

#1 com.byd.aeri.caranywhere.CarStateDetail.a()V||||invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I||||

#2 com.byd.aeri.caranywhere.CarStateDetail.onCreate(Landroid/os/Bundle;)V||||invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I||||

#3 com.byd.aeri.caranywhere.CarStateDetail.onDestroy()V||||invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I||||

#4 com.byd.aeri.caranywhere.CarStateDetail.onPause()V||||invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I||||

#5 com.byd.aeri.caranywhere.CarStateDetail.onResume()V||||invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I||||

#6 com.byd.aeri.caranywhere.CarStatus.a(Landroid/graphics/Bitmap;Ljava/lang/String;Ljava/lang/String;)V||||invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I||||

#7 com.byd.aeri.caranywhere.CarStatus.a(Landroid/graphics/Bitmap;Ljava/lang/String;Ljava/lang/String;)V||||invoke-static {v1, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I||||

#8 com.byd.aeri.caranywhere.CarStatus.j()V||||invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I||||

#9 com.byd.aeri.caranywhere.CarStatus.j()V||||invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I||||

#10 com.byd.aeri.caranywhere.CarStatus.j()V||||invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I||||

漏洞风险

应用程序中 Log 调试开关未关闭,可能会导致被黑客利用熟悉业务流程。由于核心业务逻辑通过 Log 方式泄露,大大降低了对智能汽车的攻击门槛。这种攻击方式经常会被用到。

解决方案

在产品应用最终打包和发布的过程中移除相关的 Log 函数,避免敏感信息被攻击者截获,进而利用来对车辆进行控制。

漏洞4:应用重打包

漏洞现象

移动应用被反编译并且成功二次打包。

漏洞风险

攻击者将应用反汇编,然后在其中添加、修改、删除等一些指令序列;最后,将这些指令重新汇编并打包成新的 APK 文件,再次签名,就可以给其他手机安装了。通过重打包,攻击者可以加入恶意代码、改变软件的数据或指令,而软件原有功能和界面基本不会受到影响,用户难以察觉。比如通过应用重打包进行控制车辆的提权指令,在有效的云服务器授权期间,执行开启发动机行为。

漏洞5:功能安全 :组件间通信中的隐式发送

漏洞现象

以下组件间通信未指定接收方,为隐式发送。

#1 [SDK]:cn.sharesdk.framework.utils.e$b.b(ILjava/lang/String;)I||||invoke-direct {v0}, Landroid/content/Intent;-><init>()V||||invoke-virtual {v1, v0}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;)V||||

漏洞风险

如果组件间通信为隐式调用,任何软件都可以响应这个调用请求。攻击者可以通过构造伪造的恶意组件,响应隐式调用的 Intent,可以读取请求组件间传输的数据,包括车主的信息和控制密码等,弹出虚假的用户界面以展开进一步钓鱼攻击。比如授权用户对车身的远程开关车门指令未到达执行组件,进而造成车身控制的失效。

漏洞6:WebView 远程代码攻击

漏洞现象

以下代码有被远程代码执行的可能

#1 com.byd.aeri.caranywhere.JoinEnergyCmpt.a()V||||invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V||||

#2 com.byd.aeri.caranywhere.Settings_Help.a()V||||invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V||||

#3 com.byd.aeri.caranywhere.Videoweb.onCreate(Landroid/os/Bundle;)V||||invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V||||

#4 com.byd.aeri.caranywhere.fz.run()V||||invoke-virtual {v0, v1}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V||||

#5 [SDK]:cn.sharesdk.framework.authorize.g.b()Lcn/sharesdk/framework/authorize/RegisterView;||||invoke-virtual {v1, v4}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V||||

漏洞风险

WebView 通过 JS 同服务器端交互在用户移动设备上展示页面,JS 可能包含恶意代码,造成恶意代码远程执行,实现对车辆的远程控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值