【安全测试工具】Drozer介绍及使用

【安全测试工具】Drozer介绍及使用

一、前言:

项目测试间隙调研了下移动APP安全测试,发现不少文档都提到了Drozer这款安全测试工具,遂拿来学习并投入项目中实践下。

二、Drozer介绍:

Drozer是一款针对Android的安全测试框架,分为安装在PC端的控制台、安装在终端上的代理APP两部分。可以利用APP的IPC通信,动态的发现被测试APP的安全风险。

贴一张网上的图片,Drozer的功能点:

三、安装

1、官方下载地址

https://labs.mwrinfosecurity.com/tools/drozer/

2、安装比较简单,不介绍了。

中间有个java环境变量的小插曲说明下,如果运行drozer console connect后,报“ Could not find java. Please ensure that it is install ed and on your PATH. ”检查下自己本地的java环境变量是否有问题,如果设置正确,但是drozer还是找不到的话,Windows用户在“c:\users\用户名”文件夹下新建.drozer_config文件,文件内容为:

[executables]

java=C:\Program Files\Java\jdk1.7.0_79\bin\java.exe

javac=C:\Program Files\Java\jdk1.7.0_79\bin\javac.exe

(路径为自己的jdk目录)

Windows文件名不能为空,导致不能新建.drozer_config文件的话,cmd下用命令rename 1.drozer_config .drozer_config改文件名为空。

四、界面介绍及连接设备

1、页面展示:

PC上的控制台,用的是免费社区版,所以控制台没有UI界面。

手机上的代理APP页面展示:

2、连接设备:

首先运行设备上的Drozer代理并启动守护服务,然后运行下面的命令做端口转发:

adb forward tcp:31415 tcp:31415

使用下面的命令建立链接:

drozer console connect

连接成功后,控制台显示dz>

五、常用命令介绍:

1、查找所有的攻击面:

dz> run app.package.attacksurface com.example

输出结果:

Attack Surface:

6 activities exported 暴露的控件接口

17 broadcast receivers exported 暴露的广播接收器

0 content providers exported 数据提供接口,数据泄漏

3 services exported service服务接口

is debuggable

解释:

应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据

BroadcastReceive广播接收器:应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

content providers exported:android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式, 其他应用可以通过ContentResolver类(见ContentProviderAccessApp例子)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳), 只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。

service服务接口,一般常驻,连接上公开的service后,可通过service提供的接口调起其他activity等。

检测到攻击面,可进行的攻击:

activities exported 越权攻击,发送伪造消息等;

broadcast receivers exported 发送恶意广播,伪造广播消息,越权攻击等;

content providers exported 数据泄漏,SQL注入等;

services exported 越权攻击,服务拒绝,权限提升等;

2.1、intent介绍:

可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts。

Intent有以下几个属性: 动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。其中最常用的是Action属性和Data属性。通过Drozer完整的发送intent消息命令格式为:

run app.activity.start [-h] [–action ACTION] [–category CATEGORY [CATEGORY …]] [–component PACKAGE COMPONENT] [–data-uri DATA_URI][–extra TYPE KEY VALUE] [–flags FLAGS [FLAGS …]] [–mimetype MIMETYPE]

2.2、对activity尝试进行攻击:

来一把越权攻击:绕过登录页直接拉activity,看到有activity启动不需要权限,尝试用drozer直接拉起这些activity看看。

run app.activity.start --component com.example com.example.activity.WelcomeActivity

发送伪造的残缺消息,刻意制造不完整的intent,发送给对应的activity。

run app.activity.start --action android.intent.action.SEND --component com.example com.example.activity.share.ShareToSessionActivity

intent中缺少extra部分

3、查看暴露的广播组件接口

run app.broadcast.info -a com.example -i 获取暴露的广播组件信息

尝试拒绝服务攻击,向广播组件发送不完整intent(空action或空extras)

run app.broadcast.send --component com.example com.example.sdk.communication.AppRegisterReceiver --extra string TEXT "hahahaha"

传递空的action

4、查看数据接口

如果有暴露的content组件接口,可能存在:

数据泄漏问题;

--直接访问URI获取敏感信息;--目录遍历;

构造特殊的URI进行SQL注入;

获取content provider的信息

dz> run app.provider.info -a com.example -i

使用drozer的scanner模块去猜测可能存在的URIs

dz> run scanner.provider.finduris -a com.example

检测可注入的URI的注入点

dz> run scanner.provider.injection -a com.example

SQL注入的方式,如果上一步有拿到可注入的URI

获取某个表(如Key)中的数据:run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"

5、查找service服务接口

获取公开的service服务接口信息

dz> run app.service.info -a com.example -i

直接启动服务看下

run app.service.start --action com.example.plugin.game.service.GameDownloadService --component com.example com.example.plugin.game.service.GameDownloadService

6、文件操作

安装minimal来可以获取暂时的root权限

run tools.setup.minimalsu

进入shell模式,查看/data/data/com.example下是否有明文存储敏感信息

在AndroidManifest.xml中android:allowBackup字段是否为true。当这个标志被设置为true或不设置该标志时应用程序数据可以备份和恢复,adb调试备份允许恶意攻击者复制应用程序数据。有名的栗子新浪微博android客户端越权泄密事件。

六、总结:

使用Drozer在项目中实践后,有发现多处不校验导出组件(activity,broadcast,service等)传递参数导致的安全漏洞,反馈给开发后进行排查,现已经全部修复。

本文来自网易实践者社区,经作者yixin.shenhui授权发布。

相关推荐

非遗里的闽人智慧|跨山过水、见证巨变的木拱廊桥
大数据中常用图像处理库都有哪些
365bet在线娱乐场

大数据中常用图像处理库都有哪些

📅 08-22 👁️ 7163
3、dnf哪些职业要堆独立
365bet在线娱乐场

3、dnf哪些职业要堆独立

📅 07-05 👁️ 8223