本文主要是介绍Android静态安全检测 - Activity组件暴露,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Activity组件暴露 - exported属性
一、android:exported
该属性用来标示,当前Activity是否可以被另一个Application的组件启动
1. true
表示允许被启动
2. false
【1】表示不允许被启动,这个Activity只会被当前Application或者拥有同样user ID的Application的组件调用
【2】关于user ID的参考链接
http://yelinsen.iteye.com/blog/977683
3. 默认值
【1】根据Activity中是否有intent filter标签来定
- 没有intent filter - 默认值为false
没有任何的filter意味着这个Activity只有在详细的描述了它的class name后才能被唤醒,这意味着这个Activity只能在应用内部使用,因为其它应用程序并不知道这个class的存在,所以在这种情况下,它的默认值是false
- 有intent filter - 默认值为true
如果Activity里面至少有一个filter的话,意味着这个Activity可以被其它应用从外部唤起,这个时候它的默认值是true
4. 权限控制
【1】不只有exported这个属性可以指定Activity是否暴露给其它应用,也可以使用permission来限制外部实体唤醒当前Activity
【2】android:permission 指定启动该Activity所需要的权限名称
5. 参考链接
http://blog.csdn.net/watermusicyes/article/details/46460347
二、触发条件
1. 定位AndroidManifest.xml文件中的Activity组件
【1】对应的特征:<activity
2. exported属性的判断
【1】android:permission 如果设置权限控制,就认为不存在安全风险
【2】exported属性设置为true
显示设置android:exported="true"
默认值为true,也就是具有intent filter标签,对应的特征:<intent-filter
3.主Activity(MainActivity)
【1】应用程序需要包含至少一个Activity组件来支持MAIN操作和LAUNCHER种类,即为主Activity
对应的特征
【2】暴露的Activity组件不包括主Activity
三、漏洞原理
【1】导出的Activity组件可以被第三方APP任意调用,导致敏感信息泄露,并可能受到绕过认证、恶意代码注入等攻击风险
【2】详细的原理&POC
http://www.droidsec.cn/android-activtity-security/
http://drops.wooyun.org/tips/3936
四、修复建议
【1】如果应用的Activity组件不必要导出,或者组件配置了intent filter标签,建议显示设置组件的“android:exported”属性为false
【2】如果组件必须要提供给外部应用使用,建议对组件进行权限控制
这篇关于Android静态安全检测 - Activity组件暴露的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!