Android安全开发之启动私有组件漏洞浅谈
0x00 私有组件浅谈
android应用中,如果某个组件对外导出,那么这个组件就是一个攻击面。很有可能就存在很多问题,因为攻击者可以以各种方式对该组件进行测试攻击。但是开发者不一定所有的安全问题都能考虑全面。
对于这样的问题,最方便的修复方式就是在确定不影响业务的情况下,将这个存在问题的组件不对外导出变成私有组件。这样做的确很有效,私有组件也很安全。但是,如果存在某个私有组件能被导出组件启动的话,那么这个私有组件其实就不再是私有了。如果攻击者可以通过控制导出的组件对私有组件进行控制,那么攻击者的攻击面就大大的扩大了。如果不对这种情况进行关注很可能带来一系列安全问题。
正常情况:

私有组件能被启动情况:

0x01 启动私有组件原理分析
存在一个私有组件A,和一个对外导出组件B。如果B能够根据对外传入的Intent中的内容打开私有组件A,同时启动私有组件A的Intent的内容来自启动导出组件B的Intent的内容,那么攻击者就可以通过对外导出组件B,去控制私有导出组件A。这就可能会造成严重的安全风险。
下面用一个简单例子来说明如果能够启动私有组件,能引起的一些安全问题。
PrivateActivity.class
很明显,PrivateActivity是存在问题的,因为从Intent中直接获取值之后,没有做任何异常处理。如果PrivateActivity是私有的一个Activity,并且开发工程师能保证传入到该Activity的Intent一定有值的话,那么其实是无法造成威胁的。但是如果存在另外一个MainActivity,如下:
那么,攻击者就可以通过着么一条命令去实施攻击:
那么应用就会崩溃。

这里只是一个简单的demo,用来说明存在问题。如果PrivateAcitivty里面存在很重要的逻辑业务处理的话,那么恶意攻击者可以通过控制MainActivity去控制PrivateActivity,进而控制PrivateActivity里面的逻辑走向,极有可能造成严重危害。
除了以上这种情况之外,还有一种情况,就是Intent Scheme URL,如果处理不当的话,也极有可能通过解析Uri的这个导出的组件去攻击启动其他私有组件。本质都是一样的,这里就不讨论这种情况了。
0x03 启动私有组件案例分析
这里以某个app7.5.0版本为例,分析它因为可以启动私有组件导致的严重问题。(目前该app已经没有再使用有问题的组件,有问题的SDK也早已经修复了这个问题)
首先,这个app存在一个私有组件VersionUpdateActivity:

这个私有组件是用来判断是否更新的,如果有,会根据Intent中的url链接去下载相应的更新apk包。
另外,该apk存在另外一个对外导出的组件。

该组件在实现过程中,通过获取到的Intent,经过一系列检查,进入pushClickedResult函数中。

在pushClickedResult函数中,主要做了以下几个操作:
1、首先获取intent中activity
2、然后将这个值作为将要启动的activity的classname
3、将intent传入将要启动的activity
4、然后启动activity

那么很明显了,攻击者可以通过控制XGPushActivity进而控制这个应用的所有私有activity。
攻击私有组件VersionUpdateActivity的POC如下:
这个命令会打开VersionUpdateActivity,如果存在更新,那么点击更新,下载的将是url对应的内容。
0x04 阿里聚安全对开发者的建议
首先,阿里聚安全已经能够检测到这样的问题了。对于上面案例分析中的app,阿里聚安全扫描器扫描到的结果如下:

对于这样的安全风险,阿里聚安全建议:
1、对于不必要对外导出的组件,请设置exported=false。
2、如果该组件因为各种原因,需要导出,那么请检查该组件能不能根据该组件的intent去启动其他私有组件。如果能,请根据业务严格控制过滤和校验intent中的内容,同时被启动的私有组件需要做好各种安全防范。
阿里聚安全 | Android安全开发系列文章
-------------------------------------------------------------------
* 作者:舟海、呆狐@阿里聚安全,更多阿里安全类技术文章,请访问阿里聚安全官方博客
Android安全开发之启动私有组件漏洞浅谈的更多相关文章
- android studio 开发中启动android项目报错sdk版本不一致解决方案
安卓项目开发中新建项目后再run'的时候发现报错com.android.support:appcompat-v7依赖报错 查看下build.gredle所配置的参数: 打开项目的build.gradl ...
- android app开发中的常用组件
1 Activity 1.1 Activity的启动 第一,android manifest中指定的主activity,点击app的icon启动进入. 第二,使用intent,在另外一个activit ...
- Android多activity启动两种方式浅谈
(1)第一种方式就是常见的通过intent来启动,被启动的activity需要在mainfest里面注册activity (2)第二种就是通过setContentView来启动,这里activity不 ...
- 寒冬之下,移动开发没人要了? 浅谈 iOS 开发者该 何去何从?
前言: 作者 | 梅梅 文章来源 CSDN 对于移动互联网而言,2018 年像是球场上的一声裁判哨.哨声响起,高潮迭起的上半场结束.本该再创辉煌的下半场,还没开赛却被告之:规则改变.场地收缩.教 ...
- Android项目实战(二十):浅谈ListView悬浮头部展现效果
先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数,关注数这一部分)在滑动到顶端的时候不消失,而是停留在整个界面头部. 我们先分析要解决的问题: 1.如何实现列表ListView顶部视图跟随Lis ...
- PHP开发安全之近墨者浅谈(转)
==过滤输入/输出转义 过滤是Web应用安全的基础.它是你验证数据合法性的过程.通过在输入时确认对所有的数据进行过滤,你可以避免被污染(未过滤)数据在你的程序中被误信及误用.大多数流行的PHP应用的漏 ...
- Android项目实战(五十一):浅谈GreenDao
比较出名的数据库框架 GreenDao使用步骤: 1.app目录下的build.gradle文件 添加依赖 compile 'org.greenrobot:greendao:3.2.0' 顶部添加插件 ...
- android应用开发-从设计到实现 2-8 组件与经常使用模式
组件与经常使用模式 前面已经比較全面的介绍了Material Design相关的设计哲学.设计原理和方法论. 这一章開始,我们将看看这些原理是怎样在安卓系统其中得到实践的. 一个应用并非全然从什么都没 ...
- Android 开发:由模块化到组件化(一)
在Android SDK一文中,我们谈到模块化和组件化,现在我们来聊聊组件化开发背后的哪些事.最早是在广告SDK中应用组件化,但是同样适用于普通应用开发 以下高能,请做好心理准备,看不懂请发私信来交流 ...
随机推荐
- devexpress表格控件gridcontrol特殊应用(一)——实现禁用特定行(附源代码)
一些特殊的项目中会存在一些特殊需求,如需要禁用特定行.这时候gridcontrol的一般属性是实现不了的,就需要做一些更改.这时候你就需要去devexpress官网中找寻些资料(官网https://w ...
- Finding distance between two curves
http://answers.opencv.org/question/129819/finding-distance-between-two-curves/ 问题: Hello, Im trying ...
- 【Zookeeper】源码分析之网络通信(一)
一.前言 前面已经分析了请求处理链中的多数类,接着继续分析Zookeeper中的网络通信模块. 二.总体框图 对于网络通信模块,其总体框图如下所示 说明: Stats,表示ServerCnxn上的统计 ...
- Loadrunner之脚本编写
先打开loadrunner的服务器(打开成功之后会出现一个绿色的X) 以订票系统为例(http://127.0.0.1:1080/WebTours/) 录制一个登陆的脚本. 利用C语言编写一个简单的脚 ...
- 下载安装Cygwin
下载程序 http://www.cygwin.com/ 安装程序 下载完成后,运行setup.exe程序,出现安装画面. 直接点“下一步”,出现安装模式的对话框,如下图所示: 这里可以看到有三种安装模 ...
- 每天一个Linux命令(13)--less命令
less 工具也是对文件或其它输出进行分页显示的工具,应该说是Linux正统馋看文件内容的工具,功能极其强大.less 的用法比起 more 更加有弹性. 在 more 的时候,我们没有办法向前面 ...
- 成为一名合格的ERP实施顾问应该具备哪些修为
要想成为一个合格ERP实施顾问,究竟需要点什么素质.请注意,这里的素质与技能是两码事,素质特别强调的是某种修养,技能可以速成,修养必须积累沉淀. 快速切入客户业务的能力 作为一个合格的ERP实施人员, ...
- ThinkPHP模板的知识(比较全的知识)
php框架 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格 ...
- win7下使用git
1 安装git for window 2 安装tortoiseGit 3 生成public key 3.1 打开git bash 3.2 创建~/.ssh文件夹 mkdir ~/.ssh 3.3 配置 ...
- Java面试04|Spring框架
1.动态代理的几种方式 Java主要有两种代理,JDK和Cglib动态代理.先看JDK代理实例如下: JDK创建代理有一个限制,即它只能为接口创建代理实例.举个例子如下: public interfa ...