安卓导出组件activity拒绝服务漏洞(Drozer调试)
- App在AndroidManifest.xml文件中设置了Activity为导出,导致该组件可以被第三方程序调用,并可以通过Intent接受参数传入。如果这些组件在从Intent获取参数的时候没有对其合法性进行校验,且代码没有使用异常处理,则会导致App抛出异常无法被捕获,进而导致App崩溃。第三方恶意程序可以通过在后台不断发送能够使App崩溃的Intent,使得程序无法正常运行
漏洞危害
- 第三方恶意程序可以通过在后台不断发送能够使App崩溃的Intent,使得程序无法正常运行
检测方法
1.参考Drozer官方文档对PC、测试手机进行配置;
2.PC连接模拟器
- adb connect 127.0.0.1:7555
3.模拟器中运行Drozer
4.配置端口转发
- adb forward tcp:31415 tcp:31415
5.启动Drozer控制台
- drozer console connect
6.获得当前应用导出的Activity
- run app.activity.info --package com.ccssoft.ywt
7.对搜索到的Activity逐个执行以下命令,尝试启动Activity
- run app.activity.start --component com.ccssoft.ywt (包名) com.ccssoft.module.outside.SSOLoginActivity (函数名)
发现程序已经奔溃,说明存在activity拒绝服务漏洞
修复建议
- 根据业务需要,对非必要导出的组件加入android:exported="false"属性,阻止其他程序访问
- 对于必须导出的组件,严格检查传入参数(Intent)的处理代码
- 如果该组件只需要在自己开发的应用之间调用、共享数据,最好将android:protectionLevel属性设置为"signature"保护级别。签名权限不需要用户确认,因此,这种方式不仅能提升用户体验,而且在相关应用使用相同的**进行签名来访问数据时,还能更好地控制对内容提供程序数据的访问