“You can’t have a back door in the software because you can’t have a back door that’s only for the good guys.“ – Apple CEO Tim Cook
“你不应该给软件装后门因为你不能保证这个后门只有好人能够使用。” – 苹果CEO 库克
0x00 序
最早接触网络安全的人一定还记得当年RPC冲击波,WebDav等远程攻击漏洞和由此产生的蠕虫病毒。黑客只要编写程序扫描网络中开放了特定端口的机器,随后发送对应的远程攻击代码就可以控制对方主机,在控制对方主机后,程序可以继续扫描其他机器再次进行攻击。因为漏洞出在主机本身,想要修复漏洞必须安装补丁才行,但因为很多人并不会及时升级系统或者安装补丁,所以漏洞或者蠕虫会影响大量的机器非常长的时间,甚至有的蠕虫病毒可以感染全世界上亿的 服务器 ,对企业和用户造成非常严重的损失。
Android发布后,我们就一直幻想着能发现一个像PC上的远程攻击一样厉害的漏洞,但是Android系统默认并没有开放任何端口,开放socket端口的APP也非常稀少,似乎出现像PC那样严重的漏洞是不太可能的。但可惜的是,世界上并没有绝对的安全,就在这么几个稀少的端口中,我们真的找了一个非常严重的socket远程攻击漏洞,并且影响多个用户量过亿的APP,我们把这个漏洞称之为WormHole虫洞漏洞。
0x01 影响和危害
WormHole虫洞漏洞到底有多严重呢?请看一下我们统计的受影响的APP列表(还没有统计全):
百度地图 检测版本8.7
百度手机助手 检测版本6.6.0
百度浏览器 检测版本6.1.13.0
手机百度 检测版本6.9
hao123 检测版本6.1
百度音乐 检测版本5.6.5.0
百度贴吧 检测版本6.9.2
百度云 检测版本7.8
百度视频 检测版本7.18.1
安卓市场 检测版本6.0.86
百度新闻 检测版本5.4.0.0
爱奇艺 检测版本6.0
乐视视频 检测版本5.9
…完整列表见附录
这个列表是2015年10月14号统计的百度系APP的最新版,理论上所有小于等于检测版本的这些百度系的APP都有被远程攻击的危险。根据易观智库的统计排行:
可以看到手机百度、百度手机助手、百度地图等百度系APP有着上亿的下载安装量和加起来超过三亿的活跃用户。
安装了百度的这些APP会有什么后果和危害呢?
无论是 wifi 无线网络或者3G/4G 蜂窝网络,只要是手机在联网状态都有可能受到攻击。攻击者事先无需接触手机,无需使用DNS欺骗。
此漏洞只与app有关,不受系统版本影响,在google最新的android 6.0上均测试成功。
漏洞可以达到如下攻击效果:
远程静默安装应用
远程启动任意应用
远程打开任意网页
远程静默添加联系人
远程获取用用户的GPS地理位置信息/获取imei信息/安装应用信息
远程发送任意intent广播
远程读取写入文件等。
下面是视频DEMO:
俺们做的视频效果太差,下面demo视频是从雷锋网上看到的:
0x02 漏洞分析
安装百度系app后,通过adb shell连接手机,随后使用netstat会发现手机打开了40310/6259端口,并且任何IP都可以进行连接。
原来这个端口是由java层的nano http实现的,并且这个http服务,百度给起名叫immortal service(不朽/不死的服务)。为什么叫不朽的呢?因为这个服务会在后台一直运行,并且如果你手机中装了多个有wormhole漏洞的app,这些app会时刻检查40310/6259端口,如果那个监听40310/6259端口的app被卸载了,另一个app会立马启动服务重新监听40310/6259端口。
我们继续分析,整个immortal service服务其实是一个http服务,但是在接受数据的函数里有一些验证,比如 http 头部remote-addr字段是否是”127.0.0.1”,但是会一点web技巧的人就知道,只要伪造一下头部信息就可把remote-addr字段变成”127.0.0.1”。
成功的和http server进行通讯后,就可以通过url给APP下达指令了。拿百度地图为例,以下是百度地图APP中存在的远程控制的指令的反汇编代码:
geolocation 获取用户手机的GPS地理位置(城市,经度,纬度)
getsearchboxinfo 获取手机百度的版本信息
getapn 获取当前的网络状况(WIFI/3G/4G运营商)
getserviceinfo 获取提供 nano http 的应用信息
getpackageinfo 获取手机应用的版本信息
sendintent 发送任意intent 可以用来打开网页或者与其他app交互
getcuid 获取imei
getlocstring 获取本地字符串信息
scandownloadfile 扫描下载文件(UCDownloads/QQDownloads/360Download…)
addcontactinfo 给手机增加联系人
getapplist获取全部安装app信息
downloadfile 下载任意文件到指定路径如果文件是apk则进行安装
uploadfile 上传任意文件到指定路径 如果文件是apk则进行安装
当我们看到这些远程指令的时候吓了一跳。你说你一个百度地图好好的导航行不行?为什么要去给别人添加联系人呢?添加联系人也就算了,为什么要去别的服务器下载应用并且安装呢?更夸张的是,安装还不是弹出对话框让用户选择是否安装,而是直接申请root权限进行静默安装。下图是代码段:
可以看到下载完app后会有三个判断:
手机助手为系统应用直接使用android.permission.INSTALL_PACKAGES权限静默安装应用
手机助手获得 root 权限后使用 su 后执行 pm install 静默安装应用
非以上二种情况则弹出引用安装的确认框
一般用户是非常相信百度系APP,如果百度系APP申请了root权限的话一般都会通过,但殊不知自己已经打开了潘多拉的魔盒。
如果手机没root就没法静默安装应用了吗?不是的,downloadfile和uploadfile可以选择下载文件的位置,并且百度系app会从”/data/data/[app]/”目录下动态加载一些dex或so文件,这时我们只需要利用downloadfile或uploadfile指令覆盖原本的dex或so文件就可以执行我们想要执行的任意代码了。比如说,利用dex或者so获取一个反弹shell,然后把提权的exp传到手机上执行获得root权限,接下来就可以干所有想干的任何事情了。
因为影响过大,暂不公布,会在WormHole漏洞修复完后更新。
0x04 测试
简单测试了一下WormHole这个漏洞的影响性,我们知道3G/4G下的手机其实全部处于一个巨大无比的局域网中,只要通过4G手机开个热点,就可以用电脑连接热点然后用扫描器和攻击脚本对全国甚至全世界连接了3G/4G的手机进行攻击。在家远程入侵一亿台手机不再是梦。
我们使用获取包名的脚本,对电信的下一个 C 段进行了扫描,结果如下:
Discovered open port 6259/tcp on 10.142.3.25 "com.baidu.searchbox","version":"19"Discovered open port 6259/tcp on 10.142.3.93 "packagename":"com.baidu.appsearch"Discovered open port 6259/tcp on 10.142.3.135 "com.hiapk.marketpho","version":"121"Discovered open port 6259/tcp on 10.142.3.163 "packagename":"com.hiapk.marketpho"Discovered open port 6259/tcp on 10.142.3.117 "com.baidu.browser.apps","version":"121"Discovered open port 6259/tcp on 10.142.3.43 "com.qiyi.video","version":"20"Discovered open port 6259/tcp on 10.142.3.148 "com.baidu.appsearch","version":"121"Discovered open port 6259/tcp on 10.142.3.196 "com.baidu.input","version":"16"Discovered open port 6259/tcp on 10.142.3.204 "com.baidu.BaiduMap","version":"20"Discovered open port 6259/tcp on 10.142.3.145 "com.baidu.appsearch","version":"121"Discovered open port 6259/tcp on 10.142.3.188 "com.hiapk.marketpho","version":"21"Discovered open port 40310/tcp on 10.142.3.53 "com.baidu.BaiduMap","version":"122"Discovered open port 40310/tcp on 10.142.3.162 "com.ting.mp3.android","version":"122" Discovered open port 40310/tcp on 10.142.3.139 "com.baidu.searchbox","version":"122"Discovered open port 40310/tcp on 10.142.3.143 "com.baidu.BaiduMap","version":"122"Discovered open port 40310/tcp on 10.142.3.176 "packagename":"com.baidu.searchbox"
255个IP就有16手机有WormHole漏洞。
除此之外,我们发现华为,三星,联想,金立等公司的某些机型在中国出厂的时候都会预装百度系app,突然间感到整个人都不好了。。。
0x05 总结
我们已经在2015年10月14日的时候将WormHole的漏洞报告通过乌云提交给了百度,并且百度已经确认了漏洞并且开始进行修复了。但这次漏洞并不能靠服务器端进行修复,必须采用升级app的方法进行修复,希望用户得到预警后尽快升级自己的应用到最新版,以免被WormHole漏洞攻击。
0x06 受影响的app列表
足球直播足球巨星足彩网卓易彩票助手贴吧中国足彩网中国蓝TV中国蓝HD珍品网掌上百度悦动圈跑步优米课堂音悦台移动91桌面央视影音修车易小红书海外购物神器侠侣周边游物色万达电影贴吧看片贴吧饭团视频直播生活小工具上网导航全民探索穷游途牛网 (新版本已经修复)汽车之家 (新版本已经修复)拇指医生(医生版)萌萌聊天美西时尚么么哒蚂蚁短租旅游攻略乐视视频酷音铃声口袋理财经理人分享购车族歌勇赛凤凰视频风云直播Pro多米音乐都市激情飙车懂球帝蛋蛋理财穿越古代彩票到家彩票365爆猛料百姓网百度桌面Plus百度云百度游戏大全百度音乐2014百度新闻百度团购百度图片百度贴吧青春版百度贴吧简版百度贴吧HD百度输入法百度手机助手百度手机游戏百度视频HD百度视频百度浏览器百度翻译百度地图DuWear版百度地图百度HD百度安卓市场爱奇艺视频VidNowVideo NowT2F话友Selfie WonderPPS影音PhotoWonderhao123特价CCTV手机电视91桌面91助手91爱桌面91 Launcher365彩票
1.文章是提前编辑好打算漏洞公开后再发布,趋势已经发文所以跟进.
2.网上公布的一些 app 列表大多是根据百度 moplus SDK 的特征指令静态扫描得来这样会有一定误报导致无辜 app 躺枪,比如漫画岛app 虽然集成了此 SDK 但是因为代码混淆策略,指令实现类名被混淆后 findClass 无法找到,所以 exp 都会提示404.
3.关联漏洞
WooYun: 百度输入法安卓版存在远程获取信息控制用户行为漏洞(可恶意推入内容等4G网络内可找到目标)

WooYun: WormHole虫洞漏洞总结报告(附检测结果与测试脚本)
最新版的百度地图sdk 怎么使覆盖物在屏幕中心固定?
(point);//设置地图中心点
关于Android L最小的sdk版本是什么解决方法
MiniMum Required SDK:最低支持的android api版本,低于这个版本的android手机不能安装你的应用Target SDK:你的应用最高支持android api版本compile With:哪个版本的android SDK(1.5~4.2)编译你的工程,也就是最适合的,最原生支持你的应用的android版本。 Theme :这个随意,主题选择说白了:就是最小,最大,和最适合的问题。 10种技巧可提升Android应用运行效果技巧1:从优秀的编程开始要采用已为用户所接受的运算法则和标准的设计样式,这些被人们长期使用的编程法则也同样适用于Android应用,尤其当这些应用使用内在设备服务时。 比如,假设你编写的应用需要以地理定位服务为基础。 只需要在必要时开始注册进行位置更新,在无需更新信息时,确保应用停止更新进程。 这会帮助节省设备的电量和系统处理器的负担。 技巧2:保持应用的灵活性通过使用AsyncTask、IntentService或自定义背景服务来保持应用的灵活性。 使用加载器来简化加载时间较长数据的状态管理,比如光标。 不可让应用在其他进程进行时显得缓慢或完全静止。 如果某些操作需要一定的时间和资源,应当将这个进程单独分离出来异步处理,这样你的应用才能够保持流畅的运行。 可以运用这种方法的操作包括:磁盘读写,访问内容供应方、数据库和网络,其他需要较长时间的任务。 技巧3:使用最新的Android SDK版本和API保持应用的更新,使用Android平台提供的最新内容。 随着Android平台的发展,它也在逐步改善中。 某些功能被移除,或者替换成更好的选项。 其核心API中的漏洞已修复,整个API性能已得到提升。 该平台已引入装载器之类的新API,帮助开发者编写更为稳定和反应灵敏的应用。 Android 3.0应用支持硬件加速,你可以加以应用。 应当理解的是,最佳的表现情况会随着时间逐渐改变。 睿智的开发者会更新平台发布的最新内容和API。 技巧4:检查Strict Mode你可以使用称为“StrictMode”的Android API来查找编程中的问题。 StrictMode会帮助你识别应用是否正在耗费内存,也可以帮你检查应用是否正在尝试开展漫长的模块化操作。 StrictMode类(注:即)与Android 2.3同期发布。 技巧5:在发布之前停用或最小化调试和诊断你在Android应用的开发中可能会将某些调试代码构建其中。 在应用发布之前确保这些功能被最小化或完全停用。 接下来,让我们来讨论如何用优秀的用户界面设计原则让你的应用加载速度更快。 技巧6:保持布局简洁自然简洁自然的布局会加快加载速度。 不要让屏幕布局中充斥过多不必要的内容。 花点时间开发用户可以有效使用的简洁用户界面,不要将过多的功能性内容塞入单个屏幕中。 这不仅对应用表现有帮助,而且会帮助用户更有效地使用应用。 分割内容可以帮助划分用户界面功能性,同时不牺牲应用在各种不同设备上的灵活性。 技巧7:根据目标设备调整应用资源根据特定的设备配置来调整资源,这样它们就能够有效地加载。 在图像资源方面,这个显得尤为重要。 如果你的应用中有大型的图片资源需要加载,那么要做好调整。 另一个技巧是,当以许多种设备为目标时,保持应用包文件大小合适,只需要在其中包含应用运行所需的核心资源即可,然后让用户根据具体设备下载应用其他内容。 技巧8:使用Hierarchy Viewer工具Hierarchy Viewer工具可以帮助你解除应用布局中的漏洞。 它还提供了许多有价值的信息,比如每个View控制需要多长的时间。 找到问题所属领域,这样解决问题会更加简单。 技巧9:使用layouTOPt工具layoutopt工具是个简单的命令行工具,可以帮助你识别不必要的控制和其他让你布局资源崩溃的事项,提升其性能。 它可以帮助你找到不必要的多余布局控制。 较少和较浅布局可优化应用运行性能。 最后,在自认为应用达到最好状况时,对其进行测试。 技巧10:使用Traceview和其他Android应用压缩工具Android SDK中有许多可以压缩应用的工具。 可能最流行的工具就是Traceview,这个图像工具可以帮助你调试和找到应用的性能问题。
请教各位关于百度地图api标注点marker的click事件问题
标记监听啊//添加标记点击监听(click,function(e){(,function(rs){showLocationInfo(,rs);});});(point,15);//设置中心点坐标和地图级别(marker);//将标记添加到地图中
发表评论