WIKI

7.7 Intent Scheme URL漏洞攻击检测

(1)描述

Intent Scheme URI是一种特殊的URL格式,用来通过Web页面启动已安装应用的Activity组件,大多数主流浏览器都支持此功能。

Android Browser的攻击手段——Intent Scheme URLs攻击。这种攻击方式利用了浏览器保护措施的不足,通过浏览器作为桥梁间接实现Intend-Based攻击。相比于普通Intend-Based攻击,这种方式极具隐蔽性,

如果在app中,没有检查获取到的load_url的值,攻击者可以构造钓鱼网站,诱导用户点击加载,就可以盗取用户信息。所以,对Intent URI的处理不当时,就会导致基于Intent的攻击。

(2)风险等级

高危

(3)影响范围

所有Android系统。

(4)检测方法

检测类型:静态分析

如果浏览器支持Intent Scheme URI语法,一般会分三个步骤进行处理:

1.        利用Intent.parseUri解析uri,获取原始的intent对象;

2.        intent对象设置过滤规则;

3.        通过Context.startActivityIfNeeded或者Context.startActivity发送intent 其中步骤2起关键作用,过滤规则缺失或者存在缺陷都会导致Intent Schem URL攻击。

 

关键:Intent.parseUri函数,通过扫描出所有调用了Intent.parseUri方法的路径,并检测是否使用如下的策略。

比较安全的使用Intent Scheme URI方法是:

如果使用了Intent.parseUri函数,获取的intent必须严格过滤,intent至少包含addCategory(android.intent.category.BROWSABLE)setComponent(null)setSelector(null)3个策略。

所以,在检测的时候只要根据Intent.parseUri函数返回的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)

(5)修复建议

如果使用了Intent.parseUri函数,获取的intent必须严格过滤,intent至少包含addCategory(android.intent.category.BROWSABLE)setComponent(null)setSelector(null)3个策略。

除了以上做法,还是不要信任任何来自网页端的任何intent,为了安全起见,使用网页传过来的intent时,要进行过滤和检查。

(6)样例参考

http://www.wooyun.org/bugs/wooyun-2014-073875

http://www.wooyun.org/bugs/wooyun-2014-067798

(7)参考资料

http://wolfeye.baidu.com/blog/intent-scheme-url/

http://www.jssec.org/dl/android_securecoding_en.pdf

http://drops.wooyun.org/mobile/15202

http://blog.csdn.net/l173864930/article/details/36951805

http://drops.wooyun.org/papers/2893