0x00 Service安全简介
1、漏洞场景
Service是android四大组件之一,一个Service是没有界面且能长时间运行于后台的应用组件。
如果一个导出的Service没有做相应权限限制,任何应用可以去启动并且绑定到这个Service上,取决于被暴露的功能,这有可能使得一个应用去执行未授权的行为,获取敏感信息或者是污染修改内部应用的状态造成威胁。
2、漏洞分类
- 权限提升
- Service劫持
- 消息伪造
- 拒绝服务
0x01 权限提升
1、漏洞原理
当一个service配置了intent-filter
默认是被导出的,如果没对调用这个Service进行权限限制或者是没有对调用者的身份进行有效的验证,那么恶意构造的APP都可以对此Service传入恰当的参数进行调用,导致恶意的行为发生比如说调用具有system权限的删除卸载服务删除卸载其他应用。
2、防护
注册时声明其调用权限。
0x02 Service劫持
1、漏洞原理
- 启动Service的方法是ComponentName startService(intent service)。
- 启动service的intent参数使用有两种情况:
- 设置action,通过校验action来启动service
- 明确指定要启动的Service和包名ComponentName。
当仅通过action来启动Service时,攻击者可以创建接收该action的Service。
在Android系统中,如果存在多个Service接收同一个action,首先看priority值,值高先启动。存在同priority值的service,先安装应用的service优先级高。
2、检测方法
扫描应用程序的所有startService
和bindService
方法,查看启动的Intent参数,判断Intent是否满足以下情况:
1、Intent在创建时指定了class
2、Intent使用了setClass方法指定了class
3、Intent使用setComponent方法指定了package和class。
如果该Intent不满足以上任何的一种情况,则这个Service存在被外部应用程序劫持风险。
利用:当目的Service通过action来启动时,攻击者可创建接收相同action且priority值较高的Service。
3、防护
0x03 消息伪造
1、漏洞原理
暴露的Service对外接收Intent,如果构造恶意的消息放到Intent中传输,被调用的Service接收有可能产生安全隐患。
2、漏洞示例
替换指定升级下载的URL地址,可导致任意应用安装。
3、修复代码
0x04 拒绝服务
1、漏洞原理
主要是来源于Service启动时对接收的Intent等没有做异常情况下的处理,导致的程序崩溃。
2、防护
谨慎处理接收的intent以及其携带的信息。
对接收的任何数据做try catch
处理,对不符合预期的信息做异常处理。
常见异常处理:
- 空指针异常处理
- 类型转换异常(序列化)
- 数组越界访问异常
- 类未定义异常
- 其他异常
0x05 测试方法
1、查找导出的Service
service只能静态注册,通过反编译查看manifest.xml或者利用drozer即可确定service,若有导出的service则进行下一步。
2、查看service类
重点关注onCreate
/onStarCommand
/onHandleIntent
方法。
3、检索所有类中startService
/bindService
方法及其传递的数据;
4、根据业务情况编写测试poc或者直接使用adb命令测试。
0x06 安全建议
1、intent-filter和exported
- exported属性明确定义
- 私有service不定义intent-filter并且设置exported为false
- 公开的service设置exported为true,intent-filter可以定义或者不定义
- 内部/合作service设置exported为true,intent-filter不定义
2、other
- 只被应用本身使用的service应设置为私有
- service接收的数据需处理
- 内部service应设置protection level=“signature”
- 不应在service创建(onCreate方法被调用)的时候决定是否提供服务,应在onStartCommand/onBind/onHandleIntent等方法被调用的时候做判断
- 尽量不发送敏感数据、返回数据时应判断接收数据app是否有泄露风险
- 合作service应对合作公司的app签名做校验
- 有明确的服务需调用时,使用显示意图
0x07 参考
https://tea9.xyz/post/962818054.html
https://github.com/WooyunDota/DroidDrops/tree/master/2014