前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android Service漏洞挖掘

android Service漏洞挖掘

作者头像
tea9
发布2022-07-16 17:33:29
9310
发布2022-07-16 17:33:29
举报
文章被收录于专栏:tea9的博客

Service安全场景和危害

代码语言:javascript
复制
Service是android四大组件之一,一个Service是没有界面且能长时间运行于后台的应用组件。其他应用的组件可以启动一个服务运行于后台,即使用户切换到另一个应用也会继续运行。另外,一个组件可以绑定到一个service来进行交互,即使这个交互是进程间通讯也没问题。例如,一个service可能处理网络事物,播放音乐,执行文件I/O,或与一个内容提供者交互,所有这些都在后台进行。Service不是分离开的进程,除非其他特殊情况,他不会运行在自己的进程,而是作为启动运行它的进程的一部分。Service不是线程,这意味着它将在主线程里劳作。  

如果一个导出的Service没有做严格的限制,任何应用可以去启动并且绑定到这个Service上,取决于被暴露的功能,这有可能使得一个应用去执行未授权的行为,获取敏感信息或者是污染修改内部应用的状态造成威胁。  

Service漏洞分类

  • 权限提升
  • services劫持
  • 消息伪造
  • 拒绝服务

权限提升漏洞

代码语言:javascript
复制
当一个service配置了intent-filter默认是被导出的,如果没对调用这个Service进行权限限制或者是没有对调用者的身份进行有效的验证,那么恶意构造的APP都可以对此Service传入恰当的参数进行调用,导致恶意的行为发生比如说调用具有system权限的删除卸载服务删除卸载其他应用。

service劫持

代码语言:javascript
复制
攻击原理:隐式启动service,当存在同名service,先安装应用的service优先级高。  

消息伪造

代码语言:javascript
复制
暴露的Service对外接收Intent,如果构造恶意的消息放到Intent中传输,被调用的Service接收有可能产生安全隐患。  

如:指定升级下载的URL地址,可导致任意应用安装!  

消息伪造

代码语言:javascript
复制
protected void onHandleIntent(Intent intent){
    Intent v0;
    String v23;
    Serializable pushMsg=intent.getSerializableExtra("PushMsg");
    ...
    AppVersionManager.getInstance(Youku.context).showAPpAgreementDialog();

    switch(pushMsg.type){
        case 1:{
            goto label_53;

        }
    }
}

label_53:
    intent.setFlags(876609536);
    intent.setClass(this,UpdateActivity.class);
    intent.putExtra("updateurl",pushMsg.updateurl);
    intent.putExtra("updateversion",pushMsg.updateversion);
    intent.putExtra("updatecontent",pushMsg.updatecontent);
    intent.putExtra("updateType",2);
    this.startActivity(intent);
    return;

拒绝服务

代码语言:javascript
复制
Service的拒绝服务主要是来源于Service启动时对接收的Intent等没有做异常情况下的处理,导致的程序崩溃。主要体现的方面如给Service传输未null的intent或者是传输序列化对象导致接收时候的类型转化异常。  

修复: 1.改成service exported false 2.删除多余测试代码,验证token

拒绝服务:防护

  • 空指针异常
  • 类型转换异常
  • 数组越界访问异常
  • 类未定义异常
  • 其他异常 //Serializable: Intent i = this.getIntent(); if(i.getAction().equals(“serializable_action”)){ i.getSerializableExtra(“serializable_key”);//未做异常判断 } //Parcelable: this.b=(RouterConfig)this.getIntent().getParcelableExtra(“filed_router_config”);//引发转型异常崩溃 谨慎处理接收的intent以及其携带的信息。 对接收到的任何数据try catch处理,以及对不符合预期的数据做异常处理。

Service安全防护

  • 私有service不定义intent-filter并且设置exported为false。
  • 公开的service设置exported为true,intent-filter可以定义或者不定义。
  • 合作service需对合作方的app签名做校验。
  • 只被应用本身使用的service应设置为私有。
  • service接收到的数据需谨慎处理。
  • 内部service需使用签名级别的protectionLevel来判断是否为内部应用调用。
  • 不应在service创建(onCreate方法被调用)的时候决定是否提供服务,应在onStartCommand/onBind/onHandleIntent等方法被调用的时候做判断。
  • 当service又返回数据的时候,因判断数据接收app是否又信息泄露的风险。
  • 有明确的服务需调用时使用显示意图。
  • 尽量不发送敏感信息。
  • 启动Activity时不设置intent的FLAG_ACTIVITY_NEW_TASK标签。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Service安全场景和危害
  • Service漏洞分类
  • 权限提升漏洞
  • service劫持
  • 消息伪造
  • 消息伪造
  • 拒绝服务
  • 拒绝服务:防护
  • Service安全防护
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档