Android漏洞挖掘三板斧——drozer+Inspeckage(Xposed)+MobSF

本文为看雪论坛优秀文章看雪论坛作者ID:随风而行aa

简介

最近在学习Android APP客户端漏洞挖掘过程中,对Android APP端漏洞挖掘做了一个基本的梳理总结本节主要是在介绍Android APP漏洞挖掘过程中,使用常见的Android漏洞挖掘工具的安装和使用办法,帮助Android漏洞挖掘人员提供便利。本文里面一部分的介绍采摘与网络博客,大家可以点击对应的网址进行查看。

 

为什么选择drozer+Inspeckage+Mobsf三个工具呢,这是因为在我进行Android APP漏洞挖掘的过程中,这三个工具很好的提供了自动化的分析和一些对应的hook技术,极大的方便了Android APP漏洞挖掘工作。下面将依次介绍每一种工具的安装和使用,后续继续会用一些案例来实际操作。

Android APP漏洞介绍

根据中国互联网协会APP数据安全测评服务工作组在2020年发布的《移动应用安全形势研究报告》中显示,2020 年度收录存在安全漏洞威胁的 APK 860 万余个,同 一 App 普遍存在多个漏洞。其中存在的 Janus 漏洞风险 App 数量最多,占监测总量的 78.13%;其次是 Java 代码加壳检 测,占总量的 62.45%;排在第三位的是动态注册 Receiver 风险,占总量的 61.16%。

根据爱加密的Android客户端常见漏洞调研显示,Android方向的漏洞总共可以分为三个方面:组件安全、业务安全、数据安全。

 

我们可以看出针对不同的安全问题,我们在进行Android APP漏洞挖掘的过程中,也应该有针对性的进行漏洞挖掘。我们更加具体的组件分类,可以大致查看一些Android APP常见安全漏洞:https://ayesawyer.github.io/2019/08/21/Android-App%E5%B8%B8%E8%A7%81%E5%AE%89%E5%85%A8%E6%BC%8F%E6%B4%9E/

 

 

根据Android 安全分析平台的Android APP审计系统显示,这也为我们进行Android APP客户端的漏洞挖掘提供了详细的方案:

 

 

综上,我们对Android APP漏洞挖掘和Android安全测试就有了一个初步的认识,接下来我们来看这三个神器具体是怎么安装和使用,帮助我们移动安全分析人员提供便利。

工具的安装和使用

1.drozer

(1)drozer介绍drozer是一款针对Android系统的安全测试框架,可以分成两个部分:其一是“console”,它运行在本地计算机上;其二是“server”,它是一个安装在目标Android设备上的app,当使用console与Android设备交互时,就是把Java代码输入到运行在实际设备上的drozer代理(agent)中。根据drozer官方的描述,drozer主要是有助于Android研究人员去测试一些共享的Android漏洞,对于远程攻击,可以生成shellcode来帮助开发人员将drozer Agent 部署为远程管理员工具,从而最大程度利用设备。drozer是一个全面的安全审计和攻击框架,可以进行更快的Android安全评估,通过自动化繁琐和耗时的工作,帮助减少Android安全评估所花费的时间。还可以针对真实的Android设备进行测试,drozer不需要启用USB调试或其他开发功能,还可以自动化和扩展,测试公共漏洞的暴露程度。(2)安装准备(1)drozer官方地址:https://labs.f-secure.com/tools/drozer/(2)drozer github:https://github.com/mwrlabs/drozer(3)下载及drozer用户手册:https://labs.mwrinfosecurity.com/tools/drozer/(3)安装

我们在这里主要列举Windows端和Linux端的安装:

 

①Windows端:

 

我们在Windows安装时,首先需要配置环境:

jdk1.8python 2.7android sdk其中python的版本必须为2.7版本,因为drozer现在只支持python2.7版本

我们先从官网上下载drozer(RPM)和agent.apk。

服务端安装:

 

我们下载drozer(RPM)后解压,然后点击setup安装,一路默认安装就可以了,它会自动安装到C:\drozer文件夹下。

 

我们检测是否成功安装,进入bin目录下,在cmd中执行drozer.bat,出现下面的图就说明成功安装了。

客户端安装:

 

我们将agent.apk 安装到手机上:

adb install agent.apk

安装完成后手机启动drozer,点击右下角开启端口转发按钮。

然后我们在电脑的终端中输入命令转发端口:

adb forward tcp:31415 tcp:31415

最后我们在终端中进入drozer的安装目录下,输入命令运行:

drozer console connect

此时我们就可以正常使用drozer框架,来进行我们的测试工作了。

 

②Linux端安装(Kali)

 

Linux上的安装因为需要的库比较多,所以很容易出错,大家最好按照这个步骤一步步来。

首先,我们需要将python环境配置成python 2.7.0wget##下载drozerapt-get --assume-yes install python-pippip2 install wheelpip2 install pyyamlpip2 install pyhamcrestpip2 install protobufpip2 install pyopensslpip2 install twistedpip2 install service_identitypip2 install drozer-2.4.4-py2-none-any.whl安装jdk8: apt-get install --assume-yes openjdk-8-jdk-headless安装adb: apt-get --assume-yes install adb ##已经有adb不需要再次安装下载客户端并安装:在客户端中打开31415端口,然后进行端口转发:adb forward tcp:31415 tcp:31415最后启动drozer:drozer console connect参考网址:https://blog.csdn.net/LoopherBear/article/details/84030567https://github.com/FSecureLABS/drozer/issues/350https://github.com/FSecureLABS/drozer/issues/357#issuecomment-

一些drozer安装常规问题解决方案:

(4)基本使用

drozer的一些常用指令:

> list//列出目前可用的模块,也可以使用ls> help app.activity.forintent //查看指定模块的帮助信息> run app.package.list//列出android设备中安装的app> run app.package.info -a com.android.browser //查看指定app的基本信息> run app.activity.info -a com.android.browser//列出app中的activity组件> run app.activity.start --action android.intent.action.VIEW --data-urihttp://www.google.com//开启一个activity,例如运行浏览器打开谷歌页面> run scanner.provider.finduris -a com.sina.weibo //查找可以读取的Content Provider> runapp.provider.query content://settings/secure --selection "name=adb_enabled"//读取指定Content Provider内容> run scanner.misc.writablefiles --privileged /data/data/com.sina.weibo //列出指定文件路径里全局可写/可读的文件> run shell.start //shell操作> run tools.setup.busybox //安装busybox> list auxiliary//通过web的方式查看content provider组件的相关内容> help auxiliary.webcontentresolver //webcontentresolver帮助> run auxiliary.webcontentresolver//执行在浏览器中以:8080即可访问以sieve示例> run app.package.list -f sieve //查找sieve应用程序> run app.package.info -a com.mwr.example.sieve //显示app.package.info命令包的基本信息> run app.package.attacksurface com.mwr.example.sieve //确定攻击面> run app.activity.info -a com.mwr.example.sieve //获取activity信息> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList //启动pwlist> run app.provider.info -a com.mwr.example.sieve//提供商信息> run scanner.provider.finduris -a com.mwr.example.sieve//扫描所有能访问地址> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/--vertical//查看DBContentProvider/Passwords这条可执行地址> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "" //检测注入> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts//查看读权限数据> run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db /home/user/database.db //下载数据> run scanner.provider.injection -a com.mwr.example.sieve //扫描注入地址> run scanner.provider.traversal -a com.mwr.example.sieve> run app.service.info -a com.mwr.example.sieve //查看服务

我们在测试过程中,常用测试指令:

1.连接drozer:drozer.bat console connect 2.列出详细APP信息:run app.package.info -a com.xxx.xxxx 3.查看APP的配置信息run app.package.manifest com.xxx.xxxx 3.分析是否存在攻击攻击点run app.package.attacksurface com.xxx.xxxx 4.查看暴露的provider权限run app.provider.info -a com.xxx.xxxx 5.获取Activity信息命令 run app.activity.info -a示例 run app.activity.info -a com.xxx.xxxx 6.检测SQL注入命令 run scanner.provider.injection -a示例 run scanner.provider.injection -a com.xxx.xxxx 7.检测目录遍历命令 run scanner.provider.traversal -a示例 run scanner.provider.traversal -a com.xxx.xxxx 8.获取所有可访问的Uri命令 run scanner.provider.finduris -a示例 run scanner.provider.finduris -a com.xxx.xxxx 9.SQL注入命令 run app.provider.query [--projection] [--selection]示例 run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ 列出所有表 run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM SQLITE_MASTER WHERE type=table;--"获取单表(如Key)的数据 run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--" 10.读取文件系统下的文件示例 run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts 11.下载数据库文件到本地示例 run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db d:/database.db

2、Inspeckage(xposed)

(1)Inspeckage介绍Inspeckage是一个用来动态分析安卓app的xposed模块。Inspeckage对动态分析很多常用的功能进行了汇总并且内建一个webserver。整个分析操作可以在友好的界面环境中进行。(2)安装准备Xposed框架安装Inspeckage模块网址:http://repo.xposed.info/module/mobi.acpm.inspeckage//也可以直接到Xposed模块库中搜索Xposed框架安装:(1)4.4以下Android版本安装比较简单,只需要两步即可1.对需要安装Xposed的手机进行root2.下载并安装xposedInstaller,之后授权其root权限,进入app点击安装即可但是由于官网不在维护,导致无法直接通过xposedinstaller下载补丁包(2)Android 5.0-8.0 由于5.0后出现ART,所以安装步骤分成两个部分:xposed.zip 和XposedInstaller.apk,zip文件是框架主体,需要进入Recovery后刷入,apk文件用于Xposed管理1.完成对手机的root,并刷入reconvery(比如twrp),使用Superroot2.下载你对应的zip补丁包,并进入recovery刷入3.重启手机,安装xposedInstaller并授予root权限即可官网地址:https://dl-xda.xposed.info/framework/(3)由于Android 8.0后,Xposed官方作者没有再对其更新,我们一般就使用国内大佬riyu的Edxposed框架Magisk + riyu + Edxposed具体安装过程,大家百度搜索(3)安装

我们先下载安装Inspeckage模块,在xposed中勾选:

 

 

然后手机重启,激活Xposed中该模块,就完成正常的安装了。

(4)基本使用

客户端:

 

我们进入Inspeckage应用程序,可以配置其相关的信息:

 

(1)序号1 Only user app : 默认只显示用户安装的APP,关闭可以显示系统自带的APP(2)序号2 选择准备要测试的APP列表,这里是我们测试的目标APP(3)序号3 表示我们的Inspeckage模块是否启动,如果这里为红色,说明可能没有安装Xposed框架,或者没有启动Inspeckage模块(4)序号4 上面为我们手机的局域网地址,下面为我们USB访问的地址,也是我们电脑上主界面访问地址(5)序号5 我们在访问主界面前,需要进行端口转发(6)序号6 启动对应APP 我们可以在主界面查看其相关信息

我们查看APP的配置界面:

(1)序号1 我们连接的地址,我们可以全选,也可以设置成手机局域网或主机地址,这样我们在主界面访问时就需要输入对应ip地址(2)序号2 服务端端口号 序号3 Web套接字端口号  我们对端口号可以自定义

客户端使用步骤:

(1)我们首先在choose target中选择目标应用程序,然后我们点击Launch,启动该目标程序(2)然后我们进行端口转发,转发手机的8008端口到本地:adb forward tcp:8008 tcp:8008(3)接着我们在电脑上访问 http://127.0.0.1:8008 就可以看到Inspeckage的web界面。(如果web也买你没有输出结果,查看APP is running是否为true,Logcat左边分那个自动刷新按钮是否开启)

服务端:

 

我们在电脑上访问 :8008,就可以进入服务端的web界面。

 

首先我们来介绍Tag界面:

 

 

Data dir:数据文件树

主要提供我们APP运行过程中一些数据存储的位置。

 

主界面的各字段含义依次为:

Logcat 实时查看该app的logcat输出Tree View 可以实时浏览app的数据目录并直接下载文件到本地Package Information 应用基本信息(组件信息、权限信息、共享库信息)Shared Preferences LOG:app XML文件读写记录;Files:具体XML写入内容Serialization 反序列化记录Crypto常见加解密记录(KEY、IV值)Hash 常见的哈希算法记录SQLite SQLite数据库操作记录HTTP HTTP网络请求记录File System文件读写记录Misc.调用Clipboard,URL.Parse()记录WebView调用webview内容 IPC 进程之间通信记录+Hooks 运行过程中用户自定义Hook记录参考网址:https://blog.csdn.net/tom__chen/article/details/78216732

我们进入设置界面:

Replace界面:

 

Replace界面主要是用来替换hook的方法参数和返回值的,所以我们顺便看一下hook界面。

点击新建hook界面:

 

点击替换界面:

Location界面:

这里官方是指可以替换GPS位置信息,不过平时在使用过程中用的并不多

 

Fingerprint(指纹信息)界面:

 

这个功能界面还是十分强大的,我们可以在这里替换一些我们设备常见的参数值,这样可以在我们进行一些测试工作的时候,可以绕过一些检测,比如我们可以更改IMEI、IMSI等等。

 

Tip界面:

这里主要是介绍我们在Android分析操作过程中的一些检测方法,一些例子。

 

Logcat界面:

这里主要提供我们在程序运行过程中的一些日志信息,和我们ddms的作用一致。

总结:Inspeckage是一款功能强大的Android安全测试工具,为用户提供了可视化的UI界面,很大程度上帮助用户去进行测试工作,可以对APP应用的基本配置信息进行检测,而且还可以提供用户简单的hook操作,用户可以很方便并且可视化的进行一些hook操作,还可以去修改设备和设备上应用程序的很多基本属性,还可以添加代理,绕过一些证书的固定。参考网址:官方网址:https://github.com/ac-pm/Inspeckage#information-gatheringhttps://repo.xposed.info/module/mobi.acpm.inspeckage博客网址:https://blog.csdn.net/tom__chen/article/details/78216732

3、MobSF

(1)MobSF基本介绍移动安全框架(MobSF)是一种自动化的移动应用程序(Android / iOS / Windows)测试框架,能够执行静态,动态和恶意软件分析。它可用于 Android,iOS 和 Windows 移动应用程序的有效和快速安全分析,并支持二进制文件(APK,IPA 和 APPX)和压缩源代码。MobSF 可以在运行时为 Android 应用程序进行动态应用程序测试,并具有由 CapFuzz(一种特定于 Web API 的安全扫描程序)提供支持的 Web API 模糊测试。(2)安装准备

安装MobSF一般有两种方式,一种是使用drozer安装,另外是使用源码安装,我们这里仅显示源码安装案例。

官方地址:

(3)安装

Windows安装:

 

安装环境:

Windows10Python 3.7jdk 1.8.0

安装要求

安装 Git:https://git-scm.com/download/win安装 Python3.7(3.8会出现错误):https://www.python.org/ftp/python/3.7.9/python-3.7.9-amd64.exe安装 JDK 8+:https://www3.ntu.edu.sg/home/ehchua/programming/howto/JDK_Howto.html安装Microsoft Visual C++ Build Tools: https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16安装OpenSSL: https://slproweb.com/products/Win32OpenSSL.html安装wkhtmltopdf: https://wkhtmltopdf.org/downloads.html //wkhtmltopdf主要是为了将生成的报告转换成pdf版本wkhtmltopdf 操作指南:https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf将包含 wkhtmltopdf 二进制文件的文件夹添加到环境变量PATH

安装步骤:

步骤1:下载好项目之后,可以重命名项目文件夹名称MobSf,打开cmd窗口进入该项目目录。将项目内的requirements.txt打开,最后一行libsast==1.2.2改为libsast==1.3.4。

步骤2:安装OpenSSL和wkhtmltopdf,并配置好wkhtmltopdf环境后,我们在终端进入文件夹,然后运行run.bat。

步骤3:我们打开浏览器,在输入网址:127.0.0.1:8000,如果需要修改默认端口,可以在run.bat中修改SET conf="0.0.0.0:8000"中的端口号。

 

 

一般我们在运行的时候,会出现一些报错,例如:

原因解析:由于众所周知的网络原因,导致无法访问一些域名如raw.githubusercontent.com这个域名解决办法:步骤1:通过IPAddress.com首页,输入raw.githubusercontent.com查询到真实IP地址如:185.199.108.133步骤2:在本地电脑host文件中添加记录185.199.108.133 raw.githubusercontent.com即可

例如:IPAddress.com首页

然后我们进入C:\WINDOWS\system32\drivers\etc,修改hosts文件并保存。

然后我们重新启动run.bat,再输入127.0.0.1,就可以发现正常的进入不报错误。

同理在后面访问过程中,出现类似错误按照此解决方案就可以解决。

但是由于这一般是由于网络受限原因导致,所以可能改了仍然会存在报错,但是一般不会影响正常使用,要彻底解决可以修改代码,大家可以尝试一下。

 

docker安装:

(1)下载镜像:docker pull opensecurity/mobile-security-framework-mobsf

(2)启动容器:docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

参考网址:

#0x01-%E5%BC%80%E5%A7%8B%E5%AE%89%E8%A3%85

Linux安装:

参考网址:https://blog.csdn.net/Alexhcf/article/details/107438583

Mac安装:

安装环境:Mac OS 10.14Python 3.8java 12.0.2MobSF v3.1 beta安装步骤:参考网址:http://www.51ste.com/share/det-5952.html(4)基本使用

 

我们直接拖入一个APP开始分析:

我们可以看见APP正在进行逆向分析:

 

 

静态分析:

 

我们点击最近扫描就可以看见我们最近扫描的一些APP情况:

我们随便点击一个应用的静态报告,就可以看见详细的静态分析结果。

 

 

动态分析:

 

我们需要安装Genymotion并注册账号,创建一个模拟器,这里我创建的是7.0模拟器。

Genymotion官方地址:

我们启动创建的模拟器:

然后重新启动MobSF,在平台上点击Dynamic Analyzer发现新的内容,点击MobSFy Android Runtime给模拟器安装插件。

 

 

然后我们点击动态分析,开始进行动态分析。

 

在这个过程中,我们可能会遇到各种错误,这里我们依次来解决:

问题1:Genymotion模拟器无法联网问题:我们需要去检测Genymotion模拟器的相关配置,具体解决方案参考:https://www.jianshu.com/p/ecb88d6bd815问题2:废话不多说、电脑上的360管家等最好关闭,虽然这里不一定是这个导致,不过作为一名逆向人员,最好不要打开这些管家问题3:安装Genymotion时,需要将VirusBox安装到默认路径下,不然会报错,安装后重启电脑

 

 

点击start Instrumentation 开始自动化的遍历扫描。

 

我们还可以实时查看API监测情况:

 

 

然后我们产生动态分析报告。

 

总结

本文针对Android APP漏洞做了一个初步的介绍,先调研了当下的一些主流漏洞,以及常见的Android APP端漏洞挖掘方式,还结合APP漏洞审计系统,详细的列出了当下Android APP端漏洞挖掘的初步思路,为漏洞挖掘安全人员提供一个参考。

 

本文还介绍了Android APP漏洞挖掘过程中的三种常用的工具drozer+Inspeckage(Xposed)+MobSF,详细介绍了三种工具的安装和具体使用教程,能很好的帮助Android 漏洞挖掘和渗透测试人员的工作。

 

本文的知识总结来自个人学习总结和网络上大量博客的收集,所有的博客都会列在参考列表中,可能还有一些总结不足,后续逐步完善以及欢迎各位大佬指正。

参考网址

Android APP漏洞:

《移动应用安全形势报告》(2020):https://www.isc.org.cn/zxzx/xhdt/listinfo-40058.htmlhttps://ayesawyer.github.io/2019/08/21/Android-App%E5%B8%B8%E8%A7%81%E5%AE%89%E5%85%A8%E6%BC%8F%E6%B4%9E/https://xuanxuanblingbling.github.io/ctf/android/2018/02/12/Android_app_part1/

drozer:

https://labs.f-secure.com/tools/drozer/http://rui0.cn/archives/30

Inspeckage:

https://www.e-learn.cn/topic/3470422https://blog.csdn.net/tom__chen/article/details/78216732https://repo.xposed.info/module/mobi.acpm.inspeckage

MobSF:

https://www.codeleading.com/article/13073244765/https://blog.csdn.net/Alexhcf/article/details/107438583https://github.com/MobSF/Mobile-Security-Framework-MobSFhttp://www.51ste.com/share/det-5952-3.htmlhttps://bbs.pediy.com/thread-218973.htm

 

看雪ID:随风而行aa

https://bbs.pediy.com/user-home-905443.htm

*本文由看雪论坛 随风而行aa 原创,转载请注明来自看雪社区

# 往期推荐

1. CVE-2017-17215(华为HG532远程命令执行漏洞)复现学习

2. 高Glibc版本下的堆骚操作解析

3.新人PWN堆Heap总结off-by-null专场

4. CVE-2012-3569 VMware OVF Tool格式化字符串漏洞分析

5. DASCTF八月挑战赛 re

6. 对使用系统调用进行收发包的frida hook抓包

ID:ikanxue官方微博:看雪安全商务合作:[email protected]

球分享

球点赞

球在看

点击“阅读原文”,了解更多!