远程攻击 Android 蓝牙
在上周的CanSecWest安全会议上我论述了一种对Android4.3及其以上版本适用的蓝牙协议栈(Bluedroid)的远程攻击。这篇文章简单的描述了这个bug。
如果读者没有耐心的话,可以点这里直接观看攻击视频。
这个漏洞存在于Bluedroid的BLE数据包解析代码中。要测试这个漏洞,攻击者需要强制一名用户连接到恶意的BLE(蓝牙智能)设备上。连接时,该恶意设备会发布一个格式错误的GATT通知数据包,从而造成协议栈的崩溃。
这听上去好像有点牵强——攻击者能强制一名用户连接到设备上。但考虑到这样一个事实:很多Android的BLE应用会适时连接到任何广告设备上来确定其是否是与该应用程序相关联的设备。只要有应用是出于攻击的目的连接就可以成功。
但这个漏洞没有可利用性:崩溃是由一个FORTIFY_SOUCE检测错误所造成的。此外,该漏洞已在Android4.4以上的版本中被修复。
问题代码
问题代码可以在stack/gatt/gatt_cl.c中的gett_process_notification(614行)处被找到。这段代码用于解析通知包(BLE设备周期性的发送给BLE机主的消息)。在626行可以看到如下代码:
STREAM_TO_UINT16 (value.handle, p); value.len = len - 2; memcpy (value.value, p, value.len);
value.len是unit16_t。p和len都可由攻击者控制,但我们只对len感兴趣。p表示攻击者发送的数据包内容,len则是该数据包的大小。
这段代码输出一个至少2字节大小的数据包。如果攻击者发送了只有一个字节的格式错误的数据包,那么value.len=len-2的计算结果将会下溢到65534。那么memcpy将会试图从p中拷贝将近64000字节的数据。
演示
我为此做了一个演示视频。
我用经修改过的BlueZ(linux 蓝牙协议栈)的版本搭建了一个攻击平台,BlueZ在这里作为一个运行GATT服务的BLE设备。当一个BLE机主连接时,它会自动发送一个只有单字节大小的通知数据包。
在视频中,我使用一个BLE心跳监控应用演示了这个漏洞。出于演示的目的,我手动连接该应用至恶意的BlueZ设备。当音乐结束时协议崩溃了。
adb logcat的输出类似于如下显示:
F/libc (19174): FORTIFY_SOURCE: memcpy buffer overflow. Calling abort(). F/libc (19174): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 19956 (BTU)
我再次注意到该攻击是不可利用的——原因是FORTIFY_SOURCE的运行检测机制。该代码在编译时已知目标缓冲区的长度。在运行时,该代码会检查memcpy的长度是否大于目标缓冲区,如果是则会调用abort()。
时间表
以下是bug追踪时间表:
2013-09-30:向google披露该漏洞
2013-10-07:承诺解决
2013-10-30:Android 4.4 r0.9 标记该漏洞
2013-10-31:Android 4.4发布版修复
google并没有在Android 4.3上发布修复版,原因是他们希望所有用户都升级到4.4。
更多信息
如果你想要学习更多关于BLE主动攻击和模糊化处理技术,可以观看我的CanSecWest演讲视频。Outsmarting Bluetooth Smart.
原文链接: lacklustre 翻译: 伯乐在线 - deathmonkey
文章转载自 开源中国社区 [http://www.oschina.net]

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
新 Android 恶意程序获取 Root 权限卸载安全软件
FireEye Labs的安全研究人员发现了一个源自中国的Android恶意程序家族, 它正迅速传播到全世界20多个国家,它的指令控制服务器(CC)域名是aps.kemoge.net,因此被取名为Kemoge。Kemoge将合法应用 重新打包,伪装成合法应用上传到第三方应用商店,通过网站和广告宣传,用户一旦安装之后它会收集设备信息上传到广告服务器,然后用广告轰炸用户。 Kemoge一开始只是恼人,但很快它会变得邪恶。它会调用一个多重加密的压缩文件,该压缩文件包含了最多8个root利用可执行工具,去获取root权 限,将AndroidRTService.apk植入到系统分区/system。植入到系统分区之后用户将设备恢复出厂状态也无法抹掉恶意程序。恶意程序 然后联系aps.kemoge.net获取指令,将IMEI、IMSI、储存信息和安装应用等数据上传到CC服务器,CC服务器发回指令卸载安全应用和流 行的合法应用。研究人员分析的样本代码中全都包含简体中文字符,他们从中发现了一名叫Zhang Long的中国开发者。 文章转载自 开源中国社区[https://www.oschina.net]...
- 下一篇
KitKat系统发现BUG:付费输入法更新后自动停用
相信很多使用Android智能手机的用户都会使用第三方键盘应用来替代系统默认的输入法。在最新的KitKat系统中用户可能已经注意当对付费的键盘输入法应用进行升级之后将会自动跳转到默认的键盘输入法。而更糟糕的是你此前更新的键盘最终会停用。 症状: 这个有趣的BUG仅仅对那些购买了付费输入法的用户,免费输入法则不受影响。这个BUG是这样触发的: 1.你先安装一款付费的键盘输入法 2.你将其设置为默认输入法,然后进行使用 3.然后某一天Google Play商城推送这款输入法的更新 4.你点击更新 5.KitKat系统在更新完整之后自动将其付费应用进行停用 6.当你点击输入框的时候,会自动呼出默认的键盘输入法而不是你此前设定的输入法。 根据我们的测试所有付费的Android输入法都存在这个BUG。对此Google官方表示已经收到了这个BUG,并表示在未来的版本更新中对其修复。 编译于 androidpolice/cnbeta 文章转载自 开源中国社区 [http://www.oschina.net]
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境