ntent 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

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

总结来说,其主要由两种攻击场景:

类型1:浏览器攻击

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

 

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

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

针对两种场景,是否有对应的防范措施?

1 收藏


直接登录
最新评论
  • YAQ 移动应用安全 2016/12/20

    对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攻击的方法主要是在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);

    更多介绍可查看:腾讯御安全技术博客