安卓渗透框架-Drozer架构浅析--架构组成和自定义模块

569 查看

安卓渗透框架-Drozer架构浅析--架构组成和自定义模块

标签(空格分隔): Drozer Android Security


1. Drozer 简介

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


2. Drozer的使用

网上关于Drozer如何使用的文章很多,这里贴出来一两篇比较好的:
中文版:http://www.freebuf.com/tools/26503.html
英文版:https://www.mwrinfosecurity.com/system/assets/937/original/mwri_drozer-user-guide_2015-03-23.pdf


3. Drozer 组成

Drozer 总共由以下几个部分组成:

  1. Drozer Console ---- Drozer 的pc端用户操作接口

  2. Drozer agent ---- 安装在安卓手机上的Drozer代理应用

  3. Drozer Modules ---- Drozer所包含的可以被利用的模块,Exploit,Payload

  4. Drozer API ---- Drozer提供的 customize module 接口,用来编写自定义module或者exploit,payload

  5. Drozer Common ---- 在console和agent之间传输和共享数据的一些组件

  6. Other: (optional)
    ----------Rogue agent:提供了远程管理工具的代理
    ----------JAR agent:对Rogue agent进行了jar打包
    ----------Weasel: 可以理解为提供的和Rogue agent配套的高级payload


4. Drozer Console

Drozer Console 是用python编写而成的一个命令行工具,使用者可以通过console连接到agent上对Dalvik VM 进行操作。

接口是通过python的官方模块cmdreadline等模块实现,通过shlex解析命令,通过argparse解析参数。感兴趣的可以阅读Drzer Console的相关源码:

github地址:https://github.com/mwrlabs/drozer


5. agent

agent 是一个安装在测试安卓机上轻量级app,并且只申请一个权限,是为了用来和pc进行连接的。这个agent应用要求 Android API leven 7,兼容于Andriod 2.1以及以上的版本

(1) agent和console的连接方式

1. 直连方式(Direct Mode):

这一种链接方式,是需要在pc机上安装adb工具,并且使用数据线将测试机链接在pc机上实现的,agent会在测试机上开启一个服务器,然后通过adb开启一个本地tcp通路:
adb forward tcp:31415 tcp:31415
这样就可以连接上agent的服务器了。具体操作请看使用教程。

2. 网络链接方式(Infrastructure Mode):

这种方式是用过局域网去链接的,pc机开启一个server,然后在agent上配置和server建立tcp链接,再使用终端链接上去。具体请查看使用教程。

(2) 具体连接形式(connections)

drozer 的connections是通过一种通用的二进制消息传输形式(protobuf,具体请查看google的protobuf开源项目)来传输Frame信息,在console端是一个python的线程,在agent端是java的一个线程,他们传输的消息有以下几种:

1. 如果是SYSTEM_REQUEST,就传输的是SystemMessageHandler消息,SYSTEM_REQUEST指的是agent和console之间进行连接,交换状态的消息,她可以分为两种,SystemRequestSystemResponse

2. 如果是REFLECTION_REQUEST,就传输的是 ReflectionRequestHandler消息,REFLECTION_REQUEST指的是用户在使用相关的exploit或者payload命令的时候传输的消息,也有两种:ReflectionRequestReflectionResponse

agent源码:https://github.com/mwrlabs/drozer-agent
传输消息格式和类型:https://github.com/mwrlabs/mercury-common

(3) 消息传输session

和http一样,drozer的console和agent之间的传输也有session,当console和angent链接成功的时候,agent便会生成一个session,它是一个256位的hash字符串,后面的每一次通信都必须带上该session id


Drozer Modules

drozer拥有很多可以直接利用的Module, Exploit, Payload.这些你可以在drozer console中使用list命令查看相关module,也可以在bash下使用drozer exploit list查看相关exploit,也可以使用drozer payload list 来查看相关payload。具体使用方式请查看相关帮助。

所有的module源码可以在这里查看:
https://github.com/mwrlabs/drozer-modules


Drozer API

Drozer 提供了module编写接口,在安装好drozer之后,就可以使用python来用相关的库了.
相关可以查看官方文档和相关博客:

  1. https://github.com/mwrlabs/drozer/wiki/Writing-a-Module

  2. http://appscan.360.cn/blog/?p=45