再谈APP网络端口开放问题
作者:admin | 时间:2017-3-25 23:18:42 | 分类:黑客技术 隐藏侧边栏展开侧边栏
0x00 网络端口开放概述
网络端口开放问题已经成为攻击者实现移动终端远程攻击的几大重要入口之一,但端该问题一直以来未受到广大开发人员的重视,直到“百度虫洞”的披露,将这个安全问题带来的严重危害赤裸裸的暴露在用户、开发者以及安全人员面前,大家才正真的意识到问题的严重性。
在APP开发过程中,为了实现某些特定功能,如厂商的应用推广、信息收集和上报、和PC进行交互等,会在APP中创建一个TCP OR http Server,并绑定到特定的端口上进行监听:IP: PORT,接收本地或远程客户端的链接请求。
Server接收Client端发来的请求数据/控制指令,并进行解析执行,调用对应的接口函数/后门函数,实现如安装指定应用、获取终端信息、获取账户信息、文件上传下载等功能,因此这些后门函数一旦被恶意攻击发掘并成功调用,将对用户造成严重危害。
0x01 网络端口开放威胁扫描
我们从应用商店随机拉取了100个热门应用,通过某漏洞扫描系统进行专项的端口威胁扫描,这里简单概述一下扫描方式。该系统包含了静态和动态扫描引擎,关于端口威胁的扫描,部分扫描规则配置文件如下:
<signatureid="e10566"type="api">
<logo>true</logo>
<name><init></name>
<cclass>Ljava/net/InetSocketAddress;</cclass>
</signature>
<signatureid="e10567"type="api">
<logo>false</logo>
<name>bind</name>
<cclass>Ljava/net/ServerSocket;</cclass>
</signature>
<signatureid="e10568"type="api">
<logo>true</logo>
<name><init></name>
<cclass>Ljava/net/DatagramPacket;</cclass>
</signature>
<signatureid="e10569"type="api">
<logo>false</logo>
<name>send</name>
<cclass>Ljava/net/DatagramSocket;</cclass>
</signature>
<signatureid="e10570"type="api">
<logo>true</logo>
<name>accept</name>
<cclass>Ljava/net/ServerSocket;</cclass>
</signature>
<signatureid="e10571"type="api">
<logo>true</logo>
<name>receive</name>
<cclass>Ljava/net/DatagramSocket;</cclass>
</signature>
<logic>
<pattern>(e10566 and e10567 and e10570) or (e10568 and e10569 and e10571)</pattern>
<scope>apk</scope>
</logic>
经过静态扫描引擎扫描后,将扫描命中的APP输入到动态扫描引擎,安装启动应用,获取到APP实际运行过程中开放的端口信息:
以下是批量扫描的结果:
从结果中,我们发现影音类的APP端口开放现象尤为普遍:
APP名称 | 版本 | 开放的端口信息 | APK MD5 |
百度视频 | 7.19.3 | 0::ffff:127.0.0.1:8058 | c8ae251b1e04c7516e4e975abe96ea93 |
0 ::ffff:127.0.0.1:38008 | |||
…… | |||
芒果TV | 4.5.5 | 00.0.0.0:20109 | 25c945a60f0b40c8cf61f1f288b2fe2b |
0 0.0.0.0:30107 | |||
…… | |||
乐视视频 | 6 | 00.0.0.0:6990 | 944a15a6eb3258bdbf9a7b3f26d806e2 |
0 0.0.0.0:1443 | |||
…… | |||
PPTV网络电视 | 5.2.4 | 00.0.0.0:1578 | d4d096681bb3da0da55c6ae03e1a6e3e |
0 0.0.0.0:1790 | |||
…… | |||
爱奇艺 | 6.8.0 | ||
暴风影音 | 5.2.39 | 00.0.0.0:9090 | 65db381e8811d3bb82b62968959d5d0f |
0 0.0.0.0:56339 | |||
…… | |||
QQ音乐 | 5.7.1.5 | 0 0.0.0.0:49152 | 0CF6E6BE8470004BB5E8C56A1F7FF4F6 |
腾讯视频 | 4.5.0.9698 | 00.0.0.0:12024 | F6247965EED0CE4EAF095DB7AD83A243 |
0 0.0.0.0:15418 | |||
…… | |||
百度音乐播放器 | 5.6.5.2 | 00.0.0.0:13000 | 52e21114b9a32a2de5c083679a9d2e38 |
搜狐视频 | 5.1.0 | 00.0.0.0:9010 | 2dc97f79583cd9e635e6b2fb707d988e |
另外,市场上比较热门的应用,如新浪微博、360手机助手、一号店、一些应用分发APP等也在本地开启网络端口进行监听,其中部分程序开启的端口可被利用,进而调用本地的一些危险后门接口。
庆幸的是,截止目前,以上部分应用已经通过关闭端口、移除高危接口函数、加强通信客户端的身份检测、执行条件限制等方式对端口开放问题进行了修复。
0x02 细数端口开放漏洞的代表作
案例一、百度wormhole
Moplus是百度自身应用中集成的一个SDK,SDK中的com.baidu.android.moplus.MoPlusService用于开启一个HTTP server,并绑定在6259/40310端口进行监听,这里以百度云7.8.3为例:
sdk中对于接收到的连接请求没有做任何限制或过滤,直接解析执行,导致任意IP可以对目标的客户端发送请求,执行后门函数:
攻击截图:
受百度wormhole影响的APP列表(以下数据来源于:http://drops.wooyun.org/papers/10061):
足球直播 |
悦动圈跑步 |
贴吧看片 |
百度贴吧简版 |
PhotoWonder |
足球巨星 |
优米课堂 |
贴吧饭团 |
百度贴吧HD |
hao123特价 |
足彩网 |
音悦台 |
视频直播 |
百度输入法 |
CCTV手机电视 |
卓易彩票 |
移动91桌面 |
生活小工具 |
百度手机助手 |
91桌面 |
助手贴吧 |
央视影音 |
上网导航 |
百度手机游戏 |
91助手 |
中国足彩网 |
修车易 |
全民探索 |
百度视频HD |
91爱桌面 |
中国蓝TV |
小红书海外购物神器 |
穷游 |
百度视频 |
91 Launcher |
中国蓝HD |
侠侣周边游 |
途牛网 |
百度浏览器 |
365彩票 |
珍品网 |
物色 |
汽车之家 |
百度翻译 |
购车族 |
掌上百度 |
万达电影 |
拇指医生 |
百度地图DuWear版 |
彩票365 |
萌萌聊天 |
歌勇赛 |
爆猛料 |
百度地图 |
百度贴吧青春版 |
美西时尚 |
凤凰视频 |
百姓网 |
百度HD |
PPS影音 |
么么哒 |
风云直播Pro |
百度桌面Plus |
百度 |
Selfie Wonder |
蚂蚁短租 |
多米音乐 |
百度云 |
安卓市场 |
百度图片 |
旅游攻略 |
都市激情飙车 |
百度游戏大全 |
爱奇艺视频 |
彩票到家 |
乐视视频 |
懂球帝 |
百度音乐2014 |
VidNow |
经理人分享 |
酷音铃声 |
蛋蛋理财 |
百度新闻 |
Video Now |
|
口袋理财 |
穿越古代 |
百度团购 |
T2F话友 |
案例二、新浪微博
新浪微博V5.2.0存在端口开放漏洞,通过该漏洞可以调起新浪微博的未导出组件、获取用户的登陆状态信息、作为攻击第三方应用的跳板。新浪微博在libweibohttp.so中实现了一个httpserver,并绑定了127.0.0.1在端口9527进行监听:
Java层对应的功能代码位于com\sina\weibo\utils\weibohttpd\a,b,c三个文件内,主要实现了三个功能:
1)在用户登陆的情况下,获取用户的登陆状态信息
http://127.0.0.1:9527/login?callback=xyz
关键代码:
攻击截图:
2)获取终端上任意APP的基本信息
http://127.0.0.1:9257/query?appid=com.rytong.bankbj
3)调起微博任意组件,包括未导出组件
htpp://127.0.0.1:9257/si?cmp=com.sina.weibo_com.sina.weibo.ChooseGoodsActivity
打开未导出组件“工程模式”,在APP权限内执行任意命令,这里如果微博客户端具有root权限,攻击者将可以通过微博获取懂啊root权限,控制用户手机。
关键代码:
攻击截图:
案例三、360手机助手
360手机助手V3.4.7本地开启了一个http服务,该服务会监听手机的38517端口,并且允许远程IP连接:
恶意攻击者可以远程链接到被攻击客户端,通过360手机助手在用户终端进行一些列操作,如自动下载恶意程序并伪装为终端上已安装程序的升级程序,或者一些热门应用,诱导用户点击安装等。关键代码如下:
攻击的URL格式:
http://ip:38517/in?url=downloadurl&sign=md5(downloadurl+key)&logo=pngurl&name=appname
其中可以是硬编码的,所以sign可以轻松的计算出来;logo和name可以自定义,用于欺骗用户,如下图:
0x03 结语
上图是乌云上某安全人员对某一重大后门漏洞的回复,从中可以看出:
1)为了这样or那样的目的,后门总是存在的,就看会不会被发现、能不能被利用、可不可被披露。
2)后门就在那里,尽管被发现、被利用、被披露,但竟然可以被隐藏而不愿去关闭。希望以上只是属于个例。实际中很多后门被发现被利用后,开发者会移除一些高危函数,加强对应的安全策略。
从安全研究人员的角度来说,我们不推荐或者说不赞同开发者在应用程序中留有后门,但是事实并不能如我们所愿,以下是固执坚持留后门的开发者的建议:
1)把门做坚固:通信数据加密,命令格式复杂化,移除对功能影响不大的高危接口,避免硬编码一些关键数据;
2)把门做隐蔽:关键代码做混淆做加固;
3)通行条件做苛刻:对数据来源做过滤,做身份验证。
但最安全、最值得推荐的方法依然是:NO DOOR,NO WAY~
转载请保留来源:duanwangye @比戈大牛