自己动手开发Drozer插件之AutoAttack

1、Drozer是什么

Drozer是MWR Labs开发的一款针对Android系统的安全测试框架。Drozer可以通过与Dalivik 虚拟机,以及其它应用程序的IPC端点以及底层操作系统的交互,避免正处于开发阶段,或者部署于你的组织的android应用程序和设备暴露出不可接受的安全风险。

2、Drozer的插件

关于drozer的使用这里不再赘述,网上已有文档教程,这里我们重点学习Drozer的插件模式。众所周知,Drozer不仅本身功能强大,而且提供了插件接口方便开发者自己写插件增强功能,官方也自带了几个插件,https://github.com/mwrlabs/drozer/tree/develop/src/drozer/modules,并且还提供了第三方开发者的插件https://github.com/mwrlabs/drozer-modules

3、插件的开发格式

我们先来看一个插件的代码片段:

这是MWR官方的搜索app可读文件的插件。一般来说,一个app以单独用户进程运行,其他进程是没有权限读写data目录下的文件的,但是如果编码不当,导致data目录下的文件可读写,如果是比较重要的配置文件将会导致信息泄漏等安全问题。

我们来逐行解释代码,第1行,首先导入需要用到的drozer的模块类common和Module;第3行,定义类名继承至多个类;接下来是插件的固定格式,先看几个常量:

{

‘name’:’插件名’,

‘description’:’插件描述,详细介绍插件用途’,

‘examples’:’插件使用例子说明’,

‘author’:’作者’,

‘date’:’日期’,

‘licence’:’许可’,

‘path’:’插件路径’  #重要

}

其中重要常量path决定了你添加插件时的路径,如果没有按照你设计的路径添加将会找不到插件;再接下来是方法add_arguments:添加你插件的参数和帮助说明或默认值、execute可以理解为插件的入口方法。至于execute的详细代码内容不在本篇文章讨论之列,大家可自行阅读看看drozer是怎么扫描可读文件的。

4、编写一个自己的插件

明白了插件格式,接下来就可以自己写一个插件了。手头这个example是几个月前刚接触drozer时写的一个半自动化的插件,当时测试启动app的每个导出组件时都是手动的命令一条条输入,所以之后想改善一下就在官方代码上稍微加工了一下。

大致思路是这样的:获取每个被导出的组件名,以及它的intent-filter,然后封装一个intent发送给这个组件尝试启动它,目的是测试app是否会产生拒绝服务。插件代码片段如下:

首先获取被导出的activity,然后获得这个activity的action。因为启动组件,比如activity和service都有两种启动方式,一种通过设置component的显式启动,另一种是通过设置action的隐式启动,所以方法attack里我覆盖了这两种方法,一是直接启动组件名,不带action测试;另外是只发送action测试无组件的情况。

5、安装插件

安装drozer插件的命令为 module install 插件的绝对路径 比如我的就是“module install /home/hg/_module/hg.test.test”,文件名与插件中的path变量有关,比如path是[‘hg’,’test’],我们的文件就要命名为hg.test.xxx,xxx是可以自定义的;另外一种方式就是目录形式的,建立目录hg,子目录test,里面文件名就可以是xxx.py了。安装与运行如图所示:

这里我只测试了导出的activity,像broadcast和service以及provider也是一样的原理,希望大家看后都能写出自己的强大的drozer插件。

转载自:http://appscan.360.cn/blog/?p=45   作者:Sniperhg

4 thoughts on “自己动手开发Drozer插件之AutoAttack

  1. 请问drozer **的信息该如何分析或则有没有分析的思路 例如
    Attack Surface:
    7 activities exported
    9 broadcast receivers exported
    1 content providers exported
    6 services exporte

    1. 在获取了可导出的组件信息后需后通过反编绎工具来分析相关组件的代码才能确定是否存在漏洞。

Comments are closed.