网络安全Kali学习系列 · 第56篇

Android 组件安全与 Drozer

四大组件 · Intent 注入 · 自动化安全审计
📋 本篇导读
  • Android 四大组件安全风险
  • Activity / Service / Broadcast Receiver / Content Provider 攻击面
  • Intent 注入与组件劫持
  • Drozer 框架安装与使用
  • Drozer 模块与自动化审计

一、Android 四大组件

Android 四大组件是应用的核心构建块,也是安全审计的重点。每个组件都可以通过 Intent 被其他应用调用,如果配置不当会导致严重的安全问题。

1.1 四大组件概览

组件 功能 安全风险
Activity 用户界面,与用户交互 越权访问敏感页面、Intent 注入
Service 后台运行任务,无界面 未授权调用、数据泄露
Broadcast Receiver 接收系统/应用广播消息 广播劫持、敏感数据泄露
Content Provider 共享数据,提供统一接口 SQL 注入、目录遍历、数据泄露

1.2 关键属性:exported

android:exported="true":组件可被其他应用调用(外部可达)
android:exported="false":组件只能被本应用内部调用
隐式规则:如果组件定义了 intent-filter,默认 exported=true
注意:Android 12(API 31)及以上要求,使用 intent-filter 的组件必须显式声明 android:exported。

二、Activity 安全

2.1 常见风险

风险类型 描述 危害等级
越权访问 无需登录直接打开登录后的页面 高危
Intent 注入 通过 Intent 传入恶意数据控制应用行为 高危
敏感信息泄露 返回结果中包含 token、密码等 中危
钓鱼页面劫持 伪造登录界面诱导用户输入密码 中危

2.2 攻击示例:越权访问

Bash · adb 命令启动导出 Activity
1
2
3
4
5
6
# 直接启动登录后的 UserInfo Activity
adb shell am start -n com.example.app/.UserInfoActivity
# 带参数启动(Intent 注入)
adb shell am start -n com.example.app/.WebViewActivity
-e url "https://evil.com/phish.html"

三、Service 安全

风险类型 描述 示例
未授权调用 导出的 Service 可被任意应用调用 支付服务、账户管理服务
Binder 接口泄露 AIDL 接口方法未做权限校验 getUserInfo() 返回所有用户数据
拒绝服务 恶意构造 Intent 导致崩溃 传入 null 或异常类型数据
Bash · adb 启动/绑定导出 Service
1
2
3
4
5
# 启动导出的 Service
adb shell am startservice -n com.example.app/.PayService
# 停止 Service
adb shell am stopservice -n com.example.app/.PayService

四、Broadcast Receiver 安全

4.1 风险类型

风险类型 描述 危害
广播劫持 恶意应用注册相同 action 接收敏感广播 高危
伪造广播 发送伪造广播触发应用执行敏感操作 高危
数据泄露 广播中携带敏感数据(token、短信内容) 中危
拒绝服务 发送畸形广播导致应用崩溃 低危
Bash · adb 发送伪造广播
1
2
3
4
5
6
# 发送自定义 action 的广播
adb shell am broadcast -a com.example.app.LOGIN_SUCCESS
-e token "fake_token_123"
# 发送有序广播(可能被拦截)
adb shell am broadcast -a android.provider.Telephony.SMS_RECEIVED

五、Content Provider 安全

Content Provider 是最容易出现严重漏洞的组件,通常与 SQL 注入、目录遍历、数据泄露相关。

5.1 常见漏洞

漏洞类型 原理 危害等级
SQL 注入 Uri 参数直接拼接到 SQL 语句 高危
路径遍历 openFile 接口未校验文件路径 高危
未授权访问 导出 Provider 未加权限控制 高危
Bash · adb 测试 Content Provider
1
2
3
4
5
6
# 查询 Content Provider 数据
adb shell content query --uri content://com.example.app.provider/users
# SQL 注入测试
adb shell content query --uri "content://com.example.app.provider/users"
--where "1=1 --"
Bash · 路径遍历测试
1
2
3
# 读取系统文件(路径遍历)
adb shell content read --uri
"content://com.example.app.file/../../../etc/hosts"

六、Drozer 框架

Drozer 是一款 Android 安全测试框架,提供了自动化的组件安全审计能力。它通过在设备上安装 Agent App,从 PC 端下发指令进行测试。

6.1 安装与配置

Bash · Drozer 安装
1
2
3
4
5
6
7
8
9
10
# 1. PC 端安装 drozer
pip install drozer
# 或下载 deb/rpm 包安装
# 2. 安装 drozer Agent APK 到设备
adb install drozer-agent.apk
# 3. 启动 Agent 并开启服务(设备端操作)
# 打开 Drozer Agent App -> Embedded Server -> ON
# 默认端口: 31415
Bash · 连接 drozer
1
2
3
4
5
6
# 1. 端口转发
adb forward tcp:31415 tcp:31415
# 2. 连接 drozer console
drozer console connect
# 成功后进入 dz> 提示符

6.2 常用模块

模块路径 功能 对应组件
app.package.attacksurface 列出应用的攻击面(导出组件) 全部
app.activity.info 查看 Activity 详细信息 Activity
app.activity.start 启动指定 Activity Activity
app.service.info 查看 Service 详细信息 Service
app.service.send 发送 Intent 到 Service Service
app.broadcast.info 查看 Broadcast Receiver 信息 Receiver
app.broadcast.send 发送广播 Receiver
app.provider.info 查看 Content Provider 信息 Provider
app.provider.query 查询 Provider 数据(注入测试) Provider
scanner.provider.injection 自动扫描 SQL 注入 自动
scanner.provider.traversal 自动扫描路径遍历 自动

6.3 实战:Drozer 全流程审计

Text · Drozer 交互流程
1
2
3
4
5
6
7
8
9
# 进入 drozer console 后
dz> run app.package.list -f example
dz> run app.package.attacksurface com.example.app
# 输出: Exported Activities/Services/Receivers/Providers 数量
# 查看导出 Activity 并尝试启动
dz> run app.activity.info -a com.example.app
dz> run app.activity.start --component com.example.app
com.example.app.UserInfoActivity
Text · Content Provider 自动扫描
1
2
3
4
5
6
7
8
# 自动扫描 SQL 注入
dz> run scanner.provider.injection -a com.example.app
# 自动扫描路径遍历
dz> run scanner.provider.traversal -a com.example.app
# 手动查询
dz> run app.provider.query content://com.example.app.provider/users

七、Intent 注入详解

Intent 是 Android 组件间通信的载体。Intent 注入指攻击者构造恶意 Intent 触发组件执行非预期操作。

7.1 注入类型

类型 说明 危害示例
Extra 注入 传入恶意 Extra 参数控制逻辑 传入 isAdmin=true 越权
Data 注入 通过 Intent data 传递恶意 URI WebView 加载钓鱼页面
Action 注入 构造特定 action 触发逻辑分支 触发重置密码操作
PendingIntent 劫持 窃取或重定向 PendingIntent 通知点击事件被劫持

八、防御措施

8.1 组件安全最佳实践

组件 防御措施
通用原则 最小权限原则:不需要导出的组件一律设置 exported=false
Activity 敏感页面验证登录状态;对 Intent Extra 做严格校验;使用 signature 级权限
Service 自定义权限保护;验证调用者签名;Binder 接口加权限校验
Broadcast Receiver 使用 signature 权限;本地广播 LocalBroadcastManager;验证广播发送者
Content Provider 使用参数化查询防 SQL 注入;严格校验文件路径;android:permission 限制访问
Intent 处理 验证所有 Intent 输入;白名单校验 action/data;对 Extra 做强类型检查

九、小结

🔑 本篇要点
  • Android 四大组件:Activity / Service / Broadcast Receiver / Content Provider
  • exported 属性是第一道防线,未导出的组件外部无法直接调用
  • Activity 风险:越权访问、Intent 注入、WebView 加载钓鱼页面
  • Service 风险:未授权调用、Binder 接口泄露、拒绝服务
  • Broadcast Receiver 风险:广播劫持、伪造广播、敏感数据泄露
  • Content Provider 风险最高:SQL 注入、路径遍历、数据泄露
  • Drozer 是 Android 组件安全审计利器:攻击面扫描 + 自动化注入/遍历测试
  • 防御核心:最小权限 + 输入校验 + 自定义权限 + 签名级保护
下一篇预告
第 57 篇:固件提取与分析
从移动安全转向 IoT:固件解包与漏洞分析
网络安全Kali学习系列 · 第56篇 · Android组件安全与Drozer