移动安全学习笔记——组件安全之Service组件漏洞挖掘

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、检测方法

扫描应用程序的所有startServicebindService方法,查看启动的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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值