Activity组件暴露导致本地拒绝服务
2015-07-17 21:39
211 查看
这几天团队打算一起学习Android App漏洞挖掘方面的知识,于是乎拿了一个app当测试例子,争取在上面找到漏洞。在学习过程中发现Android四大组件的安全性还是占有较大的比重,另外比较关心的是数据的安全性。数据泄漏、明文存储等和数据相关都是比较重要的。但是今天找到的一个漏洞是关于Activity组件的,本地拒绝服务漏洞。
同时学习了drozer的使用方法,利用drozer帮忙找漏洞。
下面总结一些常用的drozer命令:
run app.package.info -f xxx
xxx是包名的一部分,运行这条命令之后会显示完整的包名
run app.package.info -a <包名>
运行这条命令会打印出包相关的信息,包括版本、路径、权限、uid、gid等
run app.package.attacksurface <包名>
运行这条命令之后会打印出这个应用四大组件的攻击面,Activity, Service, Content Provider, Broadcast是否有暴露的风险
run app.activity.info -a <包名>
运行这条命令会打印出exported的activity,并且显示是否需要相应的权限
run app.activity.start --component <包名> <activity>
如果activity是exported并且不需要权限,那么运行这条命令就可以启动相应的activity了
(目前只测试了activity组件,所以关于其他组件的命令暂时还没有使用)
首先说明一下这个本地拒绝服务漏洞的大概原理:
通过drozer可以找到exported的activity,而许多activity的调用是不需要权限的,即permission=null。意味着,其他应用无须权限就可以调用这些activity。同时,如果activity的调用是需要参数的,那么在调用时不带上参数就会因为输入异常导致应用崩溃了,这样就造成了本地拒绝服务。
漏洞修补的方法也很简单,可以从以下三个方面下手:
1.不需要被外部调用的activity设置android:exported="false";
2.若需要外部调用,需自定义signature或者signatureOrSystem级别的权限;
3.注册的组件请严格校验输入参数,注意空值判定和类型转换判断
简单的Poc:
Intent intent = new Intent();
intent.setComponent(new ComponentName(<包名>, <activity>));
intent.putExtra("", "");
startActivity(intent);
同时学习了drozer的使用方法,利用drozer帮忙找漏洞。
下面总结一些常用的drozer命令:
run app.package.info -f xxx
xxx是包名的一部分,运行这条命令之后会显示完整的包名
run app.package.info -a <包名>
运行这条命令会打印出包相关的信息,包括版本、路径、权限、uid、gid等
run app.package.attacksurface <包名>
运行这条命令之后会打印出这个应用四大组件的攻击面,Activity, Service, Content Provider, Broadcast是否有暴露的风险
run app.activity.info -a <包名>
运行这条命令会打印出exported的activity,并且显示是否需要相应的权限
run app.activity.start --component <包名> <activity>
如果activity是exported并且不需要权限,那么运行这条命令就可以启动相应的activity了
(目前只测试了activity组件,所以关于其他组件的命令暂时还没有使用)
首先说明一下这个本地拒绝服务漏洞的大概原理:
通过drozer可以找到exported的activity,而许多activity的调用是不需要权限的,即permission=null。意味着,其他应用无须权限就可以调用这些activity。同时,如果activity的调用是需要参数的,那么在调用时不带上参数就会因为输入异常导致应用崩溃了,这样就造成了本地拒绝服务。
漏洞修补的方法也很简单,可以从以下三个方面下手:
1.不需要被外部调用的activity设置android:exported="false";
2.若需要外部调用,需自定义signature或者signatureOrSystem级别的权限;
3.注册的组件请严格校验输入参数,注意空值判定和类型转换判断
简单的Poc:
Intent intent = new Intent();
intent.setComponent(new ComponentName(<包名>, <activity>));
intent.putExtra("", "");
startActivity(intent);
相关文章推荐
- 模拟 HDOJ 4552 Running Rabbits
- Mongodb监控命令
- java回调机制学习
- [Leetcode 226, Easy] Invert Binary Tree
- 女神教你字符串——违和感(字符串)
- Linux设置tomcat开机启动
- windows7旗舰版激活密钥
- zoj 3677 Paint Erased
- HDU4452——模拟——Running Rabbits
- CSU 1111 D(Contest #3)
- InteliJ IDEA + Genymotion搭建Android开发环境(win 7)
- 大型网站的灵魂——性能
- 关于获取config.properties文件内容
- POJ 1853 Cat
- poj 3468 A Simple Problem with Integers
- edittext 下划线颜色更改
- [翻译]Introduction to Monoids and Semigroups with Spark
- AngularJS性能优化心得,自己踩过的抗,及一些别人的经验(转哦)
- UVA - 11991 Easy Problem from Rujia Liu?
- Boost智能指针——scoped_ptr