Drozer-Android安全测试

Drozer简介

drozer是一款针对Android系统的安全测试框架。drozer可以帮助App和设备变得更安全,其提供了很多Android平台下的渗透测试exploit供你使用和分享。对于远程的exploit,它可以生成shellcode帮助你进行远程设备管理。

特点

  • 更快的Android安全评估: drozer可以大大缩减Android安全评估的耗时,通过攻击测试暴露Android APP的漏洞。

  • 基于真机的测试:drozer运行在Android模拟器和真实设备上,它不需要USB调试或其他开发即可使用。

  • 自动化和扩展: drozer有很多扩展模块,你可以找到他们进行测试以发现Android安全问题。

安装配置

环境要求

  • jdk1.6以上
  • python2.7
  • Android SDK环境

安装步骤

安装drozer

  1. 下载地址:https://labs.mwrinfosecurity.com/tools/drozer/ 下载对应的系统版本即可,
  2. 安装时Python依赖路径选择,如果安装了python3需要切换到Python2路径

安装依赖库

  1. 安装 VCForPython27.msi,由于Twisted对此文件有依赖,所以需要安装。

  2. 安装protobuf pyOpenSSL

1
pip2 install protobuf pyOpenSSL
  1. 安装Twisted service_identity
1
pip2 install Twisted service_identity

设备安装agent

  • 下载安装agent:下载地址

  • 到手机打开启agent,如下图右下角按钮显示为开启状态(如果显示为关闭,在其上点击将其切换为开启即可)

image

  • 点击底部 Embedded Server 然后点击顶部开关Disabled 使其变为 Enabled

image

连接设备

打开cmd命令窗口,依次执行如下命令

  • 设置端口转发

    1
    adb forward tcp:31415 tcp:31415
  • 连接设备

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    λ drozer console connect
    Selecting 51f681da4fb98aad (vivo vivo X21A 8.1.0)

    .. ..:.
    ..o.. .r..
    ..a.. . ....... . ..nd
    ro..idsnemesisand..pr
    .otectorandroidsneme.
    .,sisandprotectorandroids+.
    ..nemesisandprotectorandroidsn:.
    .emesisandprotectorandroidsnemes..
    ..isandp,..,rotectorandro,..,idsnem.
    .isisandp..rotectorandroid..snemisis.
    ,andprotectorandroidsnemisisandprotec.
    .torandroidsnemesisandprotectorandroid.
    .snemisisandprotectorandroidsnemesisan:
    .dprotectorandroidsnemesisandprotector.

    drozer Console (v2.4.4)
    dz>

看到如上显示,说明启动成功,下一步则可以进行测试

安全测试

APP攻击面分析

分析Android四大组件是否能被其他的的应用程序调用

1
2
3
4
5
6
7
8
dz> run app.package.attacksurface com.xxx.xxxx
Attack Surface:
5 activities exported
0 broadcast receivers exported
0 content providers exported
0 services exported
is debuggable
dz>

结果显示了潜在可以利用的组件个数: exported表示组件可以被其他App使用。 services is debuggable表示我们可以用adb绑定一个调试器到进程。

Activity组件暴露

  • 风险描述

Activity组件的属性exported被设置为true或是未设置exported值但IntentFilter不为空时,activity被认为是导出的,可通过设置相应的Intent唤起activity。

  • 危害描述

    黑客可能构造恶意数据针对导出activity组件实施越权攻击。

  • 修复建议

    如果组件不需要与其他app共享数据或交互,请将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 请对组件进行权限控制和参数校验。

  • 检测命令

1
2
3
4
5
6
7
8
9
10
11
12
13
dz> run app.activity.info -a com.xxx.xxxx
Package: com.xxxx.xxxx
com.xxxxx.xxx.xSinaWeiboActivity
Permission: null
com.tencent.tauth.AuthActivity
Permission: null
com.xxx.xxxx.xxxx.WXEntryActivity
Permission: null
com.xxx.xxx.ContainerActivity
Permission: null
com.xxxxx.xxxx.MainActivity
Permission: null
dz>

我们可以通过命令run app.activity.start –component 包名 包名.类名启动Activity

1
2
3
dz#> run app.activity.start --component 包名  Activity名

dz#> run app.activity.start --component com.xxxx.sample com.xxx.xxxxx.WXEntryActivity

BroadcastReceiver组件暴露

  • 风险描述

    BroadcastReceiver组件的属性exported被设置为true或是未设置exported值但IntentFilter不为空时,BroadcastReceiver被认为是导出的。

  • 危害描述

    导出的广播可以导致数据泄漏或者是越权。

  • 修复建议

    如果组件不需要与其他app共享数据或交互,请将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 请对组件进行权限控制和参数校验。

  • 检测命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dz> run app.broadcast.info -a com.xxx.xxxx.activity
Package: com.hunantv.imgo.activity
com.xxxx.notification.receiver.DownloadReceiver
Permission: null
com.xxxx.offline.cache.MountReceiver
Permission: null
com.igexin.sdk.PushReceiver
Permission: null
com.igexin.download.DownloadReceiver
Permission: null
com.xxxxx.receiver.ImgoHmsPushMessageReceiver
Permission: null
com.huawei.hms.support.api.push.PushEventReceiver
Permission: null

ContentProvider组件暴露

  • 风险描述

    Content Provider组件的属性exported被设置为true或是Android API<=16时,Content Provider被认为是导出的。

  • 危害描述

    黑客可能访问到应用本身不想共享的数据或文件。

  • 修复建议

    如果组件不需要与其他app共享数据或交互,请将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 请对组件进行权限控制和参数校验。

  • 检测命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dz> run app.provider.info -a com.xxxx.activity
Package: com.xxxxx.activity
Authority: com.facebook.app.FacebookContentProvider2231360520424256
Read Permission: null
Write Permission: null
Content Provider: com.facebook.FacebookContentProvider
Multiprocess Allowed: False
Grant Uri Permissions: False
Authority: downloads.com.xxxxx.activity
Read Permission: null
Write Permission: null
Content Provider: com.igexin.download.DownloadProvider
Multiprocess Allowed: False
Grant Uri Permissions: False

检查是否有sql注入

同样content可能导致注入问题,使用以下语句进行测试发现报错,说明存在SQL注入漏洞

1
dz> run scanner.provider.injection -a com.xxxxx.sample

检查是否存在遍历文件的漏洞

1
dz> run scanner.provider.traversal -a com.xxxxx.sample

Service组件暴露

  • 风险描述

    Service组件的属性exported被设置为true或是未设置exported值但IntentFilter不为空时,Service被认为是导出的,可通过设置相应的Intent唤起Service。

  • 危害描述

    黑客可能构造恶意数据针对导出Service组件实施越权攻击。

  • 修复建议

    如果组件不需要与其他app共享数据或交互,请将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 请对组件进行权限控制和参数校验。

  • 检测命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dz> run app.service.info -a com.xxxxx.activity
Package: com.xxxxx.activity
com.hunantv.imgo.service.GetuiPushService
Permission: null
com.meizu.cloud.pushsdk.NotificationService
Permission: null
com.xiaomi.mipush.sdk.PushMessageHandler
Permission: null
com.getui.gtc.GtcService
Permission: null
com.xxxxxx.service.OppoPushService
Permission: com.coloros.mcs.permission.SEND_MCS_MESSAGE
com.mangogamehall.download.GHDownloadService
Permission: null

参考资料

  • 本文作者:Sutune
  • 本文链接: 2018/11/29/drozer/
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!