【安装体验】MobSF,一款开源移动安全测试框架

前言

本系列前面的文章说过,为了某信息安全比赛,我选了一个APK行为分析的题目。之前一直在研究安卓的编程,然后看了一下关于apk分析方面的书,觉得完全没有目标,不知道如何下手,偶然间在freebuf闲逛的时候,随手搜了一下这方面的资料,还真找到了两篇文章:

第一篇文章介绍的就是我选择的一个C/S架构的工具MobSF,用django+python写的。作者是Ajin Abraham,这个项目他发布在了github上面https://github.com/ajinabraham/Mobile-Security-Framework-MobSF,一直在更新,所以如果提交issue的话他很快就会回。
自己看书完全不知道如何做,所以我决定用C++/Qt重写这个项目。后续的文章会同步开发过程。

安装MobSF

怎么安装MobSF在FreeBuf的文章中已经说的很清楚了,将源码、虚拟机、java、依赖项下载安装好后,应该是这样:
这里写图片描述
进入终端输入
python manage.py runserver
显然,错误是不可避免的:
这里写图片描述
直接根据错误提示打开java.py,解决第一个错误(应该是java路径的问题)
这里写图片描述
问题出在第65行:
proc = subprocess.Popen(args,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,)
subprocess.Popen函数的详细用法与作用可百度,这里以args为参数打开了一个新的进程,既然问题出在这里,而且args参数是传递进来的,回溯到调用RunProcess(args)的地方:
这里写图片描述
可以看到:

MAC_LINUX_JAVA="/usr/bin/"
args=[MAC_LINUX_JAVA+"java"]

也就是说,subprocess.Popen()在这里实际上执行了一个命令:/usr/bin/java
和我们在命令行下输入这条命令是一样的。那么我们尝试在命令行下输入这条命令:
这里写图片描述
显然,路径是错误的。我的java 并没有直接装在/usr/bin目录下:
这里写图片描述
而是在/usr/bin/jdk1.8.0_91下。
找到可执行文件java,在/usr/bin/jdk1.8.0_91/bin/下:
这里写图片描述
在命令行下输入
/usr/bin/jdk1.8.0_91/bin/java
这里写图片描述
看完终端的输出结果,就可以明白作者在java.py中这一段代码的含义:
这里写图片描述
这里写图片描述
就是检测在运行java可执行文件后,检测终端的输出中有没有“oracle”字段,从而判断有没有安装java。
既然如此,我们就有两个选择:
1. 修改源码
2. 修改java安装地址
显然,修改源码更方便:
修改java.py第43行为:
MAC_LINUX_JAVA="/usr/bin/jdk1.8.0_91/bin/"
再次运行manage.py:
这里写图片描述
OK.
打开网站127.0.0.1:8000
这里写图片描述
随便上传一个apk进行分析,结果又有报错:
这里写图片描述
这里写图片描述
第一个错误应该是python的一个第三方包xhtml2pdf安装出了问题导致无法导入,这个问题在ubuntu16.04LTS上没有得到解决,忽略不计,关注第二个错误。应该是编码错误,将源码的文件夹复制到home中,使得文件夹路径中不包含中文,再次执行,ok了:
这里写图片描述

其他

关于MobSF的使用方法就需要自己研究了,下一节将从MobSF的静态分析部分的源码分析开始,并开始第一步:使用zlib解压apk文件夹。

其他安装报错(Update 2016.5.24)

最近在安装的时候发现,除了前面提到的java路径错误外,在使用pip安装pyOpenSSL时,会报一系列错误,在ubuntu16.04和ubuntu15.10中都存在。
解决方法:
sudo apt-get install build-essential libssl-dev libffi-dev python-dev libjpeg-dev
主要原因是因为缺少上面这些包的原因。

动态分析模块安装错误

virtual box

由于vmbox对各个ubuntu版本都有不同的版本支持,所以建议下载系统版本相对应的deb包

virtual box的Host-Only模式网卡

安装动态分析模块,需要开启一个虚拟的网卡,但是vmbox在linux系统下默认是不自动生成的。所以需要手动添加
1. 打开vmbox,ctrl+G进入全局设置:
这里写图片描述
2. 选择【网络】这一项,添加一个host-only虚拟网卡
这里写图片描述
顺便吐槽下由于学校的网络限制,我只能在断网的情况下才能开启这个虚拟网卡

adb工具

在动态分析的过程中,几乎所有的测试都依赖adb工具(Android Debug Bridge)这个工具。但是mobsf中给的那个工具,我并不能成功调用,直接在命令行下使用也不行,所以还是手动安装一个。
记得把mobsf的源代码中获取adb工具的函数修改一下,当然,作者也考虑到了这种情况,不修改也ok,只要你的adb在环境变量中就行。
函数位于./DynamicAnalyzer/views.py中
具体如下:
这里写图片描述

一些没解决的问题

不知道为什么,作者给的那个安卓虚拟环境在ubuntu下导入后,第一次启动才能看到那个IP地址192.168.56.101
假如你第一次启动没有做好系统快照的话,第二次启动就会报错,虽然系统能够正常启动,但是查看网卡的ip地址的话,就不在是192.168.56.101,而是ip全为空。
这样的话就会导致adb连接不上,后续的动态分析也就无从谈起
我也试过在安卓虚拟机的terminal下手动配置ip:192.168.56.101/24.
配置好后,能够ping通了,adb也能够连上了,但是webproxy出了问题,抓不到任何web请求
因为我在用C++重写,但是找不到合适的web代理,我又不想自己写一个,所以我就把作者用tornado模块写的pyWebproxy全部拿下来,自己用python写了一个执行脚本,然后在C++中调用。
在这个过程中,我自己作死把虚拟机删除了,然后重新导入一次之后,手动配置了ip,结果web代理的脚本无法退出了,即使退出也拿不到任何数据。
所以,强烈建议在第一次启动这个玩意的时候,及时做个系统快照。不然,你就回跟我一样,重新装一次系统(不要问我怎么知道在ubuntu15.10和16.04下pip安装第三方包的那些错误的,满满都是泪)。
这个问题我觉得突破口就在如何在安卓的终端内正确配置ip,有时间再研究下。

猜你喜欢

转载自blog.csdn.net/leehdsniper/article/details/51317900