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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!