安全风险 - 组件导出风险

news2024/11/18 12:18:15

在安全审查中关于组件导出风险是一种常见问题,不同组件都有可能遇到这种问题,而且从一定角度来看的话,如果涉及到三方业务,基本处于无法解决的场景,所以我们需要说明为何无法避免这种风险

组件导出风险能不能规避?能不能解决?

如果你的组件风险是由 exported 属性所引起,那么可以规避,也可以解决,只要将 exported 设置为 false 即可; 这样外部就无法调用项目内组件了,自然就避免了风险的产生,同时带来了一些不太好的结果,例如业务出错、功能缺失等等,毕竟 很多项目内集成的三方平台SDK都是需要 exported 所附带的权限的!

最终结果:当 组件导出风险 遇到三方业务时,很多时候我们可能无法规避这类型风险!

    • 基础分析
    • 那些无法解决的风险场景
      • Activity 组件导出风险
      • Service 组件导出风险
      • Broadcast Receiver组件导出风险
    • 定义权限、保护组件

基础分析

组件导出风险一般都是由 android:exported 属性引起的,如果我们在 AndroidManifest 对应组件内声明了 android:exported=true,意味着允许让外部组件启动这个组件;反之,则不允许让外部组件启动这个组件;

初步搜索后,AI已经给出了部分参考答案,简单看一下就好(解决方式未尝试,不确定是否可用)

在这里插入图片描述

其实当你已经将 android:exported 设置为 true 时,已经证明该组件因业务需要确实需要被外部调用,这种场景如果是项目内我方业务的话,可以参考 权限过滤intent-filter 过滤方式(个人感觉这种方式只是在内部做了限制保护,从安全检查的角度来看可能当你android:exported 设置为 true 时就已经存在风险了,并不关注你内部做了何限制…)

如果android:exported设置了false,又在外部试图启动这个Activity,则会发生程序崩溃,报异常,例如:

 java.lang.SecurityException: Permission Denial: starting Intent

常见组件可以参考Android四大组件

  • 活动(Activity):用于表现功能,是用户操作的可视化界面,它为用户提供了一个完成操作指令的窗口;
  • 服务(Service):后台运行服务,不提供界面呈现;
  • 广播接受者(Broadcast Receive):用于接收广播;
  • 内容提供者(Content Provider):支持多个应用中存储和读取数据,相当于数据库。

exported 在不同场景下默认值也有所不同

关于exported属性还是挺关键的,参考自 Android 组件导出风险及防范

Activity、Service、Broadcast Receiveexported 默认值

  • 没有 intent filter 时,默认为 false
  • intent filter 时,默认为 true

Content Providerexported 默认值

  • minSdkVersion 或者 targetSdkVersion 小于16时,默认为 true
  • 大于17时,默认为 false

那么组件导出的风险到底有哪些?

  • Activity :可能导致登录界面被绕过、拒绝服务攻击、程序界面被第三方恶意调用等风险
  • Service :能被系统或者第三方的App直接调出并使用,可能导致拒绝服务攻击,程序功能被第三方恶意调用等风险
  • Broadcast Receiver :对外部事件进行过滤接收,并根据消息内容执行响应,如果设置了导出权限,可能被系统或者第三方的App直接调出并使用。同时可能导致敏感信息泄露、登录界面被绕过等风险。
  • Content Provider :可能导致程序内部的敏感信息泄露,数据库SQL注入等风险

那些无法解决的风险场景

像以下这些场景的导出风险从一定角度来说是无法解决的,我们只需反馈给安全人员因为什么业务原因,无法避免此项风险

Activity 组件导出风险

检测方式

  1. 反编译提取应用的 AndroidManifest 文件并解析获取所有注册的Activity组件
  2. 查看是否显式的设置可导出信息或者配置了意图过滤器

微博分享SDK(配置)

在这里插入图片描述

解决方式:像这种三方平台组件,一般都无法解决,主要是因为涉及到已有业务,除非剥离业务,但这也不现实~ 所以只需要反馈到安全机构因XX业务原因,无法规避这类型风险

Service 组件导出风险

检测方式

  1. 反编译提取应用的 AndroidManifest 文件并解析
  2. 获取所有注册的 Service 组件,查看是否显式的设置了可导出信息或者配置了意图过滤器

魅族推送、通知服务(配置)

在这里插入图片描述

解决方式:像这种三方平台组件,一般都无法解决,主要是因为涉及到已有业务,除非剥离业务,但这也不现实~ 所以只需要反馈到安全机构因XX业务原因,无法规避这类型风险(图中的就是微博分享的业务功能

Broadcast Receiver组件导出风险

检测方式

  1. 反编译提取应用的 AndroidManifest 文件并解析
  2. 获取所有注册的 Receiver 组件,查看是否显式的设置了可导出信息或者配置了意图过滤器

极光推送-小米推送相关业务(配置)

在这里插入图片描述


定义权限、保护组件

权限过滤中涉及到了权限定义,参考 Android 组件导出风险及防范 做个笔记

Android提供了自定义权限的能力,应用可以定义自己的权限,如在清单文件中自定义一个 permission

 <permission
   android:label="允许打开WebActivity页面权限"
   android:name="com.littlejerk.sample.permission.WEB"
   android:protectionLevel="signature" />
  • label:权限的描述
  • name:该权限的名称,使用该权限时通过名称来指定使用的权限
  • protectionLevel:该权限受保护的等级,这很重要,它有三个等级
    • signature:签名级别权限,即权限的定义方和注册方必须具有相同的签名才有效
    • system:系统级别权限,即权限的定义方和注册方必须为系统应用
    • signatureOrSystem :同签名或系统应用,上述二者具备其一即可

用刚定义的权限来保护暴露的组件(activity)

  <!--调用方必须申请此权限-->
  <uses-permission android:name="com.littlejerk.sample.permission.WEB"/>
  
  <activity
      android:permission="com.littlejerk.sample.permission.WEB"
      android:name=".other.WebActivity">
      <intent-filter>
          <action android:name="com.littlejerk.sample.action.VIEW_URL" />
          <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
  </activity>

个人思考:在项目中看到了 push模块 的权限声明、授权,有可能是集成三方平台时平台自己做的权限定义,如果从这方面来看平台可能已经尽可能降低了组件导出风险,至少不会造成二次导出风险

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1799529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python的最小二乘法(OLS)函数

1、作用 pandas提供了一些很方便的功能&#xff0c;比如最小二乘法(OLS)&#xff0c;可以用来计算回归方程式的各个参数。 2、Python导出的OLS模型的结果 下面是如何解读Python导出的OLS模型的结果。 1. 回归系数&#xff1a; 代表每个自变量对因变量的影响程度&#xff0c…

文本审核纠错

探索高效文本审查利器&#xff1a;Word Checker-CSDN博客 GitHub - shibing624/pycorrector: pycorrector is a toolkit for text error correction. 文本纠错&#xff0c;实现了Kenlm&#xff0c;T5&#xff0c;MacBERT&#xff0c;ChatGLM3&#xff0c;LLaMA等模型应用在纠错…

Facebook与AI:探索人工智能在社交平台上的应用

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;社交媒体平台正利用这些先进技术为用户提供更为个性化和高效的体验。作为全球最大的社交媒体平台之一&#xff0c;Facebook在AI应用领域的探索和实践尤为引人注目。本文将深入探讨Facebook如何在其平台上应用…

jupyter notebook使用conda环境

pycharm中安装过可以使用的库在jupyter notebook中导入不进来 1 检查pycharm中安装的库的位置 2 检查jupyter notebook中安装的库的位置 3 查看jupyter notebook内核名字 可以看到jupyter notebook中内核名字叫ipykernel 4 安装ipykernel 在pycharm的terminal中 pip instal…

【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言一、变量1.1 基础知识1.2 包级变量的声明形式深入解析&#x1f4cc; 声明并同时显式初始化&#x1f4cc; 声明但延迟初始化&#x1f4cc; 声明聚类与就近原则 1.3 局部变量的声明形式深入探讨&#x1f4cc; 延迟初始化的…

深度学习每周学习总结P10(车牌识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 数据链接 提取码&#xff1a;ppv1 –来自百度网盘超级会员V5的分享 目录 0. 总结1. 数据导入、查看数据分类&#xff0c;自定义transform…

米尔NXP i.MX 93开发板的Qt开发指南

1. 概述 Qt 是一个跨平台的图形应用开发框架&#xff0c;被应用在不同尺寸设备和平台上&#xff0c;同时提供不同版权版本供用户选择。米尔 NXP i.MX 93 开发板&#xff08;MYD-LMX9X开发板&#xff09;使用 Qt6.5 版本进行应用开发。在 Qt 应用开发中&#xff0c;推荐使用 Qt…

初级网络工程师之入门到入狱(一)

本文是我在学习过程中记录学习的点点滴滴&#xff0c;目的是为了学完之后巩固一下顺便也和大家分享一下&#xff0c;日后忘记了也可以方便快速的复习。 网络工程师从入门到入狱 前言一、交换机二、路由器三、DHCP&#xff08;动态主机配置协议&#xff09;四、路由器配置 DHCP自…

OpenAI发布GPT-4思维破解新策略,Ilya亦有贡献!

OpenAI正在研究如何破解GPT-4的思维&#xff0c;并公开了超级对齐团队的工作&#xff0c;Ilya Sutskever也在作者名单中。 论文地址&#xff1a;https://cdn.openai.com/papers/sparse-autoencoders.pdf 代码&#xff1a;https://github.com/openai/sparse_autoencoder 特征可…

【Qt秘籍】[009]-自定义槽函数/信号

自定义槽函数 在Qt中自定义槽函数是一个直接的过程&#xff0c;槽函数本质上是类的一个成员函数&#xff0c;它可以响应信号。所谓的自定义槽函数&#xff0c;实际上操作过程和定义普通的成员函数相似。以下是如何在Qt中定义一个自定义槽函数的步骤&#xff1a; 步骤 1: 定义槽…

贪吃蛇游戏的编程之旅:在Windows PyCharm中使用Python

在电脑游戏的发展史中&#xff0c;贪吃蛇游戏无疑是其中的经典之作。许多人对其简单而上瘾的游戏玩法念念不忘。对编程爱好者来说&#xff0c;重新编写一个贪吃蛇游戏不仅是对青春回忆的一种致敬&#xff0c;也是一个极佳的学习机会。本文将引导你在Windows系统的PyCharm环境下…

写入文件内容

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在实例01中&#xff0c;虽然创建并打开一个文件&#xff0c;但是该文件中并没有任何内容&#xff0c;它的大小是0KB。Python的文件对象提供了write()…

MFC实现子控件focus焦点上下移动父控件ListView和Gridview也跟着向上下移动

项目中要实现mfc功能&#xff0c;然后子控件焦点下移&#xff0c;LIstView和Gridview父控件不会下移&#xff0c;所以就有这个文章。废话不多说直接上代码。 MFCGridView.java import android.content.Context; import android.util.AttributeSet; import android.view.View;…

【Cityengine】Cityengine生产带纹理的建筑模型导入UE4/UE5(下)

【Cityengine】Cityengine生产带纹理的建筑模型导入UE4/UE5&#xff08;下&#xff09; 一、导出数据&#xff08;2022中文版案例&#xff09;二、安装datasmith插件三、导入数据四、检查导入材质是否正常五、编辑替换材质六、安装模型编辑插件七、编辑替换建筑规则 一、导出数…

LLM的基础模型7:Positional Encoding

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

路径

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 用于定位一个文件或者目录的字符串被称为一个路径。在程序开发时&#xff0c;通常涉及两种路径&#xff0c;一种是相对路径&#xff0c;另一种是绝对…

关闭文件及使用with语句

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 关闭文件 打开文件后&#xff0c;需要及时关闭&#xff0c;以免对文件造成不必要的破坏。关闭文件可以使用文件对象的close()方法实现。close()方…

学习算法笔记(7.5)-贪心算法(股票售卖问题)

学到这里的大家应该都非常清楚贪心算法到底是怎么一回事了&#xff0c;说白了就是动态规划的一种特例&#xff0c;没有动态规划的使用范围广&#xff0c;但是效率却比动态规划效率高&#xff0c;贪心算法不考虑之前的情况&#xff0c;只考虑当前的最优选择以期达到最优的结果。…

通过血清拉曼光谱进行COVID-19的高效初步筛查

通过血清拉曼光谱进行COVID-19的高效初步筛查 原创 小王搬运工 时序课堂 2024-06-04 20:04 四川 论文地址&#xff1a;https://analyticalsciencejournals.onlinelibrary.wiley.com/doi/full/10.1002/jrs.6080 论文源码&#xff1a;无 期刊&#xff1a;JOURNAL OF RAMAN SPE…

数据挖掘实战-基于Catboost算法的艾滋病数据可视化与建模分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…