您的位置:首页 > 移动开发 > Android开发

Android静态安全检测 -> Service组件暴露

2016-07-12 17:52 459 查看

Service组件暴露 - exported属性

一、android:exported


该属性用来标示,其他应用的组件是否可以唤醒Service或者和这个Service进行交互


1. true

表示可以


2. false

【1】表示不可以,只有同一个应用的组件或者有着同样user
ID的应用可以启动这个Service或者绑定这个Service


【2】关于user ID的参考链接

http://yelinsen.iteye.com/blog/977683


3. 默认值

【1】 根据当前Service是否有intent
filter标签来定

-  没有intent filter - 默认值为false

没有任何的filter意味着这个Service只有在详细的描述了它的class name后才会被唤起,这表示当前Service只能在应用内部使用,因为其它应用程序并不知道这个class的存在,所以在这种情况下,它的默认值是false


-  有intent filter - 默认值为true

如果Service里面至少有一个filter的话,意味着该Service可以被外部应用使用,这个时候它的默认值是true


4. 权限控制


【1】不只有exported这个属性可以指定Service是否暴露给其它应用,也可以使用permission来限制外部实体唤醒当前Service


【2】android:permission

  指定唤醒Service或与Service交互所需要的权限名称


5. 参考链接


http://blog.csdn.net/watermusicyes/article/details/46460347

二、触发条件


1. 定位AndroidManifest.xml文件中的Service组件


【1】对应的特征:<service


2. exported属性的判断


【1】android:permission 如果设置权限控制,就认为不存在安全风险


【2】exported属性设置为true

  显示设置 android:exported="true"

  默认值为true,也就是具有intent filter标签,对应的特征:<intent-filter

三、漏洞原理


【1】导出的Service组件可以被第三方APP任意调用,导致敏感信息泄露,并可能受到权限提升、拒绝服务等攻击风险


【2】详细的原理&POC


http://www.droidsec.cn/android-service-security/

http://drops.wooyun.org/tips/4907

四、修复建议


【1】如果应用的Service组件不必要导出,或者组件配置了intent filter标签,建议显示设置组件的“android:exported”属性为false


【2】如果组件必须要提供给外部应用使用,建议对组件进行权限控制

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息