您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
Android安全之Intent Scheme Url攻击
 
作者:YAQ御安全 来源:51CTO 发布于:2016-12-23
  1925  次浏览      16
 

0X01 前言

Intent scheme url是一种用于在web页面中启动终端app activity的特殊URL,在针对intent scheme URL攻击大爆发之前,很多android的浏览器都支持intent scheme url。

Intent scheme url的引入虽然带来了一定的便捷性,但从另外一方面看,给恶意攻击页面通过intent-based攻击终端上已安装应用提供了便利,尽管浏览器app已经采取了一定的安全策略来减少这一类风险,但显然是不够的。

2014年3月,一篇关于intent scheme url攻击的文章:

Whitepaper – Attacking Android browsers via intent scheme URLs

详细介绍了相关的攻击手法,之后国内的漏洞收集平台上开始被这一类型漏洞刷屏。

0X02 Intent scheme url解析

一个intent scheme url的使用示例:

如果浏览器支持intent scheme url,在加载了改web页面后,将根据url生成一个intent,并尝试通过intent打来指定的activity。此过程中浏览器的需要完成的工作可以拆分为3步:

Step1:

根据url生成对应的intent object,此过程通过以下代码完成:

Intent intent = Intent.parseUri(url);

intent scheme url的内容可以根据一下语法规则设置的比较完善:

intent:

HOST/URI-path // Optional host 
#Intent;
package=[string];
action=[string];
category=[string];
component=[string];
scheme=[string];
end;

Step2:

intent过滤,安全起见,很多浏览器对step1中的intent object进行过滤,以抵御intent-based攻击,不用的浏览器,过滤规则各不相同。

Step3:

组件调用,最后一步就是使用step2过滤后的intent调用指定的组件,浏览器中一般使用Context#startActivityIfNeeded() 或者 Context#startActivity()方法实现。

下面是各大浏览器对Intent scheme URL的支持情况 :

0X03攻击场景

主要由两种攻击场景。

类型1:浏览器攻击

因为intent是浏览器依据url生成并以浏览器自己的身份发送的,因此攻击者恶意页面中的intent scheme url不仅可以调起导出组件,还可以调起私有组件。

类型2:终端上安装的任意APP

intent-based攻击一般是通过终端上安装的恶意app来实现的,但通过浏览器加载包含特定intent scheme url的恶意页面,可以实现对终端上安装的任意app远程intent-based攻击的效果。在2013年东京的Pwn2Own上比赛上,次攻击方式被应用于攻陷三星Samsung Galaxy S4。

0X04 攻击案例

以下介绍三个浏览器的intent scheme url攻击案例,攻击主要源于这些浏览器在step2(也就是intent过滤过程)中存在缺陷。

Opera mobile for Android cookie theft

Opera浏览器中缺少intent过滤步骤,一次可以通过恶意页面中的intent scheme url调起浏览器的任意activity,包括私有的activity,通过如下攻击代码可以获取到Opera浏览器的cookie:

"com.admarvel.android.ads.AdMarvelActivity"是Opera浏览器的私有组件,"url=file:///data/data/com.opera.browser/app_opera/cookies"是Opera浏览器cookie文件的存放位置。

Chrome for Android UXSS (Universal XSS)

Chrome的UXSS漏洞利用相对复杂,这里先介绍一下Intent Selector。Intent Selector机制提供一种main intent不匹配的情况下可以设置替补的方案。如下的intent scheme url:

其中“SEL”是selector intent的标识。

在chrome中包含以下代码:

1:Intent intent = Intent.parseUri(uri);

2:intent.addCategory("android.intent.category.BROWSABLE");

3:intent.setComponent(null);

4:context.startActivityIfNeeded(intent, -1);

第二行添加了BROWSABLE category(目标Activity允许本身通过 Web 浏览器启动,以显示链接引用的数据,以此过滤/防止一些不该被调起的组件被调起),第三行将组建设置为null,用以抵御intent-based攻击,但如果使用selector intent可以完美的bypass以上限制。

以下是android chrome上的一个UXSS攻击的POC:

Old stock browser cookie theft

Android stock browser (com.android.browser)的问题类似于android chrome,同样是在step2中对intent的过滤问题,最终攻击者可以盗取浏览器的cookie。此漏洞可能只存在于Android 4.3以下的设备,之后的版本中不一定预装stock browser。

0X05 总结

有效抵御intent scheme url攻击的方法主要是在step2中对intent做严格的安全限制:

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

0X06 参考

http://www.mbsd.jp/Whitepaper...

腾讯御安全为开发者推出了安全保护服务,其中包括漏洞扫描、应用加固、SO加固等,能够帮助企业软件发现潜在漏洞风险、防逆向、防篡改、防二次打包。有需求的团队可以登录御安全官网试用。

   
1925 次浏览       16
 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]

android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   


Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...