Android安全检测-Intent Scheme URLs攻击风险

这一章我们来学习“Intent Scheme URLs攻击风险”,网上的文章关于这个风险的介绍可谓是千篇一律,翻阅下来之后发现内容大致相同,单看这些文章的介绍仍然让人感觉到云里雾里,故此篇文章中会讲清楚这风险的产生和应对方法。

一、漏洞原理

利用intent scheme URLs(意图协议URL),可以通过web页面发送intent来启动App应用。攻击者可构造特殊格式的URL直接向系统发送意图,启动App应用的Activity组件或者发送异常数据,导致应用的敏感信息泄露或者应用崩溃。
上述的漏洞描述中可知,通过web页面发送intent来启动App应用这个操作没有经过过滤和校验那么就会存在风险。我们来拆解一下上述的文字。
(1)web页面: 一般指的是被检测的APP,也就是说被检测APP有浏览器功能,并支持Intent Scheme协议,相当于被检测APP是一个桥梁当然若是APP使用了Intent.parseUri方法,并且uri来自于外部输入的话,就算没有浏览器功能,也可能产生此漏洞
(2)启动App应用: 一般启动的是任意APP的暴露的Activity组件

综上可知:Intent Scheme URLs攻击风险,一般会和其它漏洞进行综合利用,比如:Intent Scheme URLs攻击 + Activity组件暴露 = 可产生拒绝服务漏洞(APP崩溃)、WebView相关漏洞(加载恶意页面、远程代码执行等)、APP静默下载安装等。若被检测APP存在intent scheme URLs漏洞,这就会导致手机设备内的任意APP若存在可关联的漏洞,那么就可以通过Intent Scheme URLs漏洞进行恶意攻击

二、前置知识

通过漏洞原理可以了解到漏洞产生的原因,那么现在来了解一下和这个漏洞相关的一些知识
(1)Intent Scheme协议:
通过浏览器(WebView)加载URI的形式使用Intent协议跳转到指定的app页面。一般使用Intent.parseUri(String uri,int flags)方法,来构造Intent。第二个参数的值的会影响Scheme协议的构造方式,大致如下:
a. Intent.URI_INTENT_SCHEME:经常使用,URI形式类似:scheme://host:port/path
b. Intent.URI_ANDROID_APP_SCHEME:URI形式类似:android-app://{package_id}[/{scheme}[/{host}[/{path}]]][#Intent;{...}]
c. Intent.URI_ALLOW_UNSAFE:一般不使用,不太安全

(2)android.intent.category.BROWSABLE:
android.intent.category.BROWSABL的意思就是允许浏览器在特定条件下可以打开APP的Activity,例如:

 <activity
            android:name=".MainActivity"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
        		<!--协议部分,随便设置 test://aaa.com:8088/from?type=abcd  -->
        		<data android:scheme="test"
            		android:host="aaa.com"
            		android:path="/from"
            		android:port="8088"/>
            </intent-filter>
 </activity>

通过 Intent.parseUri("test://aaa.com:8088/from?type=abcd",Intent.URI_INTENT_SCHEME),构造Intent即可启动MainActivity

三、检测手段

step1:扫描全局代码,是否存在使用Intent.parseUri
step2:若URI来源于外部的输入,并使用了Intent.parseUri方法,那么获取的Intent必须严格过滤,判断Itent是否至少包含addCategory(“android.intent.category.BROWSABLE”),setComponent(null),setSelector(null)3个策略。若URI在代码内硬编码,则针对此URI进行漏洞测试。
step3:汇总结果

四、修复方法

1、如果使用了Intent.parseUri方法,那么必须对获取的intent进行严格过滤,intent至少包含addCategory(“android.intent.category.BROWSABLE”),setComponent(null),setSelector(null)3个策略
2、对于外部来源的intent要进行严格过滤,也可设立白名单。


asjhan for Android reverse

posted @ 2021-11-16 16:58  asjhan  阅读(54)  评论(0编辑  收藏  举报  来源