Android安全开发之启动私有组件漏洞浅谈

简介: 如何解决私有组件被导出组件启动带来的安全问题?

0x00 私有组件浅谈

android应用中,如果某个组件对外导出,那么这个组件就是一个攻击面。很有可能就存在很多问题,因为攻击者可以以各种方式对该组件进行测试攻击。但是开发者不一定所有的安全问题都能考虑全面。

对于这样的问题,最方便的修复方式就是在确定不影响业务的情况下,将这个存在问题的组件不对外导出变成私有组件。这样做的确很有效,私有组件也很安全。但是,如果存在某个私有组件能被导出组件启动的话,那么这个私有组件其实就不再是私有了。如果攻击者可以通过控制导出的组件对私有组件进行控制,那么攻击者的攻击面就大大的扩大了。如果不对这种情况进行关注很可能带来一系列安全问题。

正常情况:
1

私有组件能被启动情况:
2

0x01 启动私有组件原理分析

存在一个私有组件A,和一个对外导出组件B。如果B能够根据对外传入的Intent中的内容打开私有组件A,同时启动私有组件A的Intent的内容来自启动导出组件B的Intent的内容,那么攻击者就可以通过对外导出组件B,去控制私有导出组件A。这就可能会造成严重的安全风险。

下面用一个简单例子来说明如果能够启动私有组件,能引起的一些安全问题。
PrivateActivity.class
D1

很明显,PrivateActivity是存在问题的,因为从Intent中直接获取值之后,没有做任何异常处理。如果PrivateActivity是私有的一个Activity,并且开发工程师能保证传入到该Activity的Intent一定有值的话,那么其实是无法造成威胁的。但是如果存在另外一个MainActivity,如下:
D2

那么,攻击者就可以通过着么一条命令去实施攻击:
D3

那么应用就会崩溃。
3

这里只是一个简单的demo,用来说明存在问题。如果PrivateAcitivty里面存在很重要的逻辑业务处理的话,那么恶意攻击者可以通过控制MainActivity去控制PrivateActivity,进而控制PrivateActivity里面的逻辑走向,极有可能造成严重危害。

除了以上这种情况之外,还有一种情况,就是Intent Scheme URL,如果处理不当的话,也极有可能通过解析Uri的这个导出的组件去攻击启动其他私有组件。本质都是一样的,这里就不讨论这种情况了。

0x03 启动私有组件案例分析

这里以某个app7.5.0版本为例,分析它因为可以启动私有组件导致的严重问题。(目前该app已经没有再使用有问题的组件,有问题的SDK也早已经修复了这个问题)

首先,这个app存在一个私有组件VersionUpdateActivity:
4

这个私有组件是用来判断是否更新的,如果有,会根据Intent中的url链接去下载相应的更新apk包。

另外,该apk存在另外一个对外导出的组件。
5

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

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

那么很明显了,攻击者可以通过控制XGPushActivity进而控制这个应用的所有私有activity。

攻击私有组件VersionUpdateActivity的POC如下:
D4

这个命令会打开VersionUpdateActivity,如果存在更新,那么点击更新,下载的将是url对应的内容。

0x04 阿里聚安全对开发者的建议

首先,阿里聚安全已经能够检测到这样的问题了。对于上面案例分析中的app,阿里聚安全扫描器扫描到的结果如下:
8

对于这样的安全风险,阿里聚安全建议:
1、对于不必要对外导出的组件,请设置exported=false。
2、如果该组件因为各种原因,需要导出,那么请检查该组件能不能根据该组件的intent去启动其他私有组件。如果能,请根据业务严格控制过滤和校验intent中的内容,同时被启动的私有组件需要做好各种安全防范。

阿里聚安全 | Android安全开发系列文章

Android安全开发之安全使用HTTPS
Android安全开发之通用签名风险
Android安全开发之ZIP文件目录遍历
Android安全开发之Provider组件安全
Android安全开发之浅谈密钥硬编码
Android安全开发之浅谈网页打开APP
Android应用安全开发之浅谈加密算法的坑


作者:舟海、呆狐@阿里聚安全,更多阿里安全类技术文章,请访问阿里聚安全官方博客

相关文章
|
11月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1840 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1184 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1241 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
12月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
987 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
11月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
496 0
|
12月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1442 6
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
6259 77
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
752 11
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
618 0
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
549 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡

热门文章

最新文章