第 1 章 实验环境搭建

第 1 章 实验环境搭建

在本章中,我们将搭建一个实验环境,其中包含后续章节所需的各种工具。对于不了解安卓安全技术的读者来说,本章属于基础入门部分。它将指导我们安装所需的一系列安卓安全工具。

下面是本章将要讨论的主要内容。

  • 设置安卓环境
  • 安装应用评估所需的工具
  • 安装评估移动设备后端安全所需的工具
  • 安装易受攻击的应用
  • Android Debug Bridge(adb)1介绍

1安卓操作系统与桌面计算机间沟通的一个命令行工具。——译者注

1.1 安装工具

本节将介绍后续章节会用到的各种工具。首先,安装用于开发安卓应用的Android Studio;然后,创建一个安卓虚拟机(AVD);最后,安装用于评估安卓应用和设备安全性的必要工具。本节介绍的大部分安装步骤都是针对Windows平台的,如果是针对其他平台的工具,会特别指出。

Java

像Android Studio和Burp Suite这样的工具都离不开Java。因此,先从下面的链接下载并安装Java:https://java.com/zh_CN/download/

下面是安装Java的步骤。

(1) 运行安装程序。

{%}

(2) 如果需要修改安装路径,勾选Change按钮,选择目标文件夹。否则,保留默认设置即可。点击Next按钮,会出现如下图所示的界面。

{%}

(3) 点击Next按钮,进入安装界面。

{%}

(4) 出现如下图所示的界面表示安装完成。

{%}

(5) 点击Close按钮,完成安装。打开新的命令提示符并运行下面的命令,可检查Java的安装情况。到这里,就完成了本书第一个工具的安装。

{%}

1.2 Android Studio

下一个要安装的工具是Android Studio。Android Studio基于IntelliJ IDEA,是安卓应用开发的官方IDE。在Android Studio出现之前,Eclipse曾是安卓应用开发的IDE。Android Studio于2013年5月发布了0.1版,从此进入了早期预览阶段;2014年6月发布了0.8版,进入Beta测试阶段;2014年12月发布第一个稳定版:1.0版。

请从下面的网址中下载并安装Android Studio:https://developer.android.com/sdk/index.html

(1) 下载Android Studio并运行安装程序。

{%}

(2) 点击Next直到出现下图中的界面。

{%}

这个窗口展示了可安装的工具选项。建议全选,并安装Android SDK、Android Virtual Device和Intel@HAXM。Intel@HAXM能为Android Studio中的x86模拟器提供硬件加速和必需的支持。

(3) 点击I Agree同意许可协议,并继续安装。

{%}

(4) 选择Android Studio和Android SDK的安装路径。如果没有特定的选择,保留默认路径即可。记录Android SDK的安装位置,并将其添加到系统环境变量中,这样就可以在任何地方使用命令提示符访问adb、sqlite3客户端以及其他工具。

{%}

(5) 根据系统内存分配RAM,建议不低于2 GB。

{%}

(6) 选择Android Studio在开始菜单中的名称。同样,如果没有特定的选择,保留默认设置即可。

{%}

(7) 点击Next按钮,继续安装,直到出现如下界面。至此,就完成了Android Studio的安装。

{%}

(8) 点击上图窗口中的Finish按钮,会出现如下图所示的窗口。如果你曾安装过旧版的Android Studio,选择其安装路径可导入先前的设置。如果是首次在本机安装,选择“I do not have a previous version of Studio or I do not want to import my settings”。

{%}

(9) 点击OK按钮,启动Android Studio,如下图所示。

{%}

(10) 加载完成后,将会出现一个UI主题选择窗口。选择一个主题,然后点击Next按钮。

{%}

(11) 在上图的窗口中点击Next后,将会下载最新版的SDK组件和模拟器,如下图所示。

{%}

(12) 最后,点击Finish按钮,会出现如下界面,这样就完成了安装。

{%}

(13) 点击Start a new Android Studio project,创建一个新的示例应用。

{%}

(14) 在Application name中输入应用名称,比如HelloWorld。同时选择一个示例公司域名,比如test.com。其他选项保持默认设置,然后点击Next按钮。

(15) 下面的窗口显示了应用的最低SDK版本。选择API 级别15,因为它能支持更多的设备。

{%}

(16) 选择Blank Activity,然后点击Next按钮,如下图所示。

(17) 给activity起个名字,也可以保持默认设置,这里我们选择默认设置。

{%}

(18) 最后,点击Finish按钮完成设置。初始化模拟器和编译Hello World应用需要一些时间。

等待上图窗口中所有的初始化结束即可。后续章节将介绍这个应用是如何编译以及在模拟器中运行的。

1.3 安装安卓虚拟机

为了获得本书中大部分概念的实际操作体验,你必须有一个能正常运行的模拟器或真实的安卓设备(最好是ROOT过的设备)。接下来,我们将利用前面安装好的工具创建一个模拟器。

(1) 点击Android Studio界面顶端的AVD Manager图标,如下图所示。

{%}

(2) 随后会出现如下图所示的窗口,你能看到一个默认模拟器,这个模拟器是在安装Android Studio的过程中创建的。

(3) 点击上图界面左下角的Create Virtual Device按钮,出现如下图所示的界面。

(4) 选择设备。本书选择一个如下规格的设备,创建一个小屏模拟器。

{%}

(5) 点击Next按钮,将出现如下图所示的窗口。如果选择Show downloadable system Images,你会看到更多的系统镜像选项。我们暂时选择默认的x86。

 SDK Manager帮助我们管理系统中安装的所有系统镜像和SDK。

{%}

(6) 最后给安卓虚拟机起一个名字,然后点击Finish按钮。在本例中,我们将它命名为Lab Device。

{%}

(7) 完成上述步骤后,将会看到另一个如下图所示的虚拟设备。

(8) 选择想要的模拟器,点击Play按钮,启动模拟器。

{%}

一切准备就绪之后,你会看到一个模拟器,如下图所示。

{%}

1.3.1 真实设备

建议你准备一个真实设备,与模拟器一起用于学习本书中的一些概念。

我曾经使用已经ROOT过的索尼Xperia C1504手机来展示一些真机效果。

{%}

1.3.2 Apktool

Apktool是安卓渗透测试人员必备的工具之一。后面我们将利用它来进行安卓应用逆向工程,以及通过感染合法应用来创建恶意软件。

从下面的链接中下载最新版的Apktool(请下载Apktool 2.0.2或2.0.2以后的版本,以避免旧版本中存在的一些问题):http://ibotpeaches.github.io/Apktool/

下载Apktool并保存在C:\APKTOOL中,如下图所示。

{%}

启动Apktool,使用下面的命令查看可用的选项。

java –jar apktool_2.0.2.jar –help

{%}

这样就完成了Apktool的设置,在后续章节中,我们将进一步研究Apktool的功能。

1.3.3 Dex2jar/JD-GUI

Dex2jar和JD-GUI是安卓应用逆向工程中经常用到的两个工具。Dex2jar能将.dex文件转换为.jar文件。JD-GUI则是一个Java反编译工具,可以将.jar文件还原为原始的Java源代码。

从下面的链接中下载这两个工具。由于它们是可执行文件,所以下载后无需安装:http://sourceforge.net/projects/dex2jar/http://jd.benow.ca

{%}

1.3.4 Burp Suite

毋庸置疑,Burp Suite是渗透测试中最重要的工具之一,安卓应用也不例外。本节将介绍如何设置Burp Suite,并查看模拟器的HTTP流量。

(1) 从官方网站下载最新版本的Burp Suite:http://portswigger.net/burp/download.html

(2) 双击下载后的文件,启动Burp Suite。如果下载的文件在当前工作目录中,也可以通过运行下面的命令启动Burp Suite。

{%}

(3) 运行上述命令启动Burp Suite后,将出现如下图所示的界面。

(4) 导航至Proxy | Options,配置Burp。默认配置如下图所示。

(5) 点击Edit按钮,选择Invisible选项。具体操作步骤如下:点击Edit按钮,选择Request handling选项,然后选择Support invisible proxying (enable only if needed),如下图所示。

(6) 启动模拟器,并完成配置,使其通过Burp Suite发送流量。

1.4 配置安卓虚拟机

现在,按照下面的步骤对安卓虚拟机进行配置,使设备的流量通过代理进行传输。

(1) 导航到Home(主屏幕) | Menu(菜单) | Settings(设置) | Wirless & networks(无线和网络) | Mobile Networks(移动网络) | Access Point Names(接入点名称)。

(2) 配置以下代理设置:

  • 代理
  • 端口

下图显示了工作站的IP地址,在后面配置安卓虚拟机时会用到。

{%}

(3) 输入系统的IP地址。

{%}

(4) 输入端口号8080,如下图所示。

{%}

完成上述操作后,设备的所有HTTP流量将通过计算机中的Burp代理进行传输。这个设置会在我们讨论弱服务器端控制时派上大用场。

1.4.1 Drozer

Drozer是一种用于安卓应用自动化评估的工具。下面是正常运行Drozer的步骤。

必备条件

设置Drozer时需具备下列条件。

  • 一个安装了下列工具的工作站(我使用的是Windows 7)。
    • JRE或JDK
    • Android SDK
  • 一个运行安卓2.1或更新版本系统的安卓设备或模拟器。

(1) 首先,从下面的链接中下载Drozer的安装文件和Agent.apk:https://labs.mwrinfosecurity.com/tools/drozer/

(2) 如果你的安装环境和本书的不同,请下载适合自己安装环境的Drozer版本。

(3) 下载完成后,运行Drozer安装文件。安装过程使用了常见的Windows安装向导,如下图所示。

{%}

(4) 点击Next按钮,选择Drozer的安装路径。

{%}

(5) 如上图所示,默认安装路径为C:\drozer。如果你想将自己的系统环境配置成与本书一样,建议选择默认安装路径。接下来,跟着安装向导完成安装。安装界面如下图所示。

{%}

(6) 点击Finish按钮,完成安装。

{%}

在上述安装过程中,自动安装了所需的全部Python依赖,并设置了一个完整的Python环境。

按照以下步骤检查Drozer是否安装正确。

(1) 打开新的命令提示符并运行drozer.bat文件,如下图所示。

{%}

(2) 下面将前面下载好的agent.apk安装到你的模拟器上。我们可以使用adb命令来安装.apk文件。

adb install  agent.apk

{%}

(3) 在开始使用Drozer进行评估之前,我们需要将工作站中的Drozer控制台连接到模拟器的代理上。为此,我们要在模拟器上启动代理,并运行下面的命令进行端口转发。在启动代理前,要确保系统在运行嵌入式服务器。

{%}

adb forward tcp:31415 tcp:31415

如下图所示,命令执行成功,没有任何错误提示。

{%}

(4) 接下来,只需运行下列命令,将工作站连接到代理上。

[path to drozer dir]\drozer.bat console connect

现在我们将看到Drozer控制台,如下图所示。

1.4.2 QARK(不支持Windows)

据GitHub上的官方页面介绍,QARK是一款方便易用的工具,能发现安卓应用中常见的安全漏洞。不同于商业产品,它是完全免费的。QARK突出教育信息,使得安全评估人员能精确查找漏洞,并对漏洞进行深入说明。QARK会自动利用多种反编译器对APK文件进行反编译,综合利用它们的输出,编译出较好的文件。

QARK使用静态分析技术来查找安卓应用和源代码中的漏洞。

准备工作

在撰写本书时,QARK只支持Linux和Mac系统。

(1) 可以通过下面的链接下载QARK:https://github.com/linkedin/qark/

(2) 解压QARK,如下图所示。

{%}

 确保你安装了GitHub页面中提到的所有QARK依赖项。

(3) 导航到QARK目录,并输入如下命令。

python qark.py

它会启动QARK的交互控制台,如下图所示。

{%}

1.4.3 Chrome浏览器的Advanced REST Client扩展程序

Advanced REST Client是Chrome浏览器的一个扩展程序,在REST API(通常是移动应用的一部分)的渗透测试中有着重要作用。

(1) 安装谷歌Chrome浏览器。

(2) 打开链接:https://chrome.google.com/webstore/category/apps

(3) 搜索Advanced REST client,会出现下面的Chrome扩展程序。点击ADD TO CHROME按钮,将其添加到浏览器中。

{%}

(4) 然后,会弹出确认信息,如下图所示。

{%}

(5) 将这个扩展程序添加到Chorme浏览器后就可以使用了,如下图所示。

{%}

1.4.4 Droid Explorer

在本书中,大部分时候都会使用命令行工具来浏览安卓文件系统,从设备中提取数据或者推送数据到设备上。如果你偏爱GUI界面,你将会乐于使用Droid Explorer。它是一款在ROOT过的设备上浏览安卓文件系统的GUI工具。

可以从下面的链接下载Droid Explorer:http://de.codeplex.com

1.4.5 Cydia Substrate和Introspy

Introspy是一个黑盒工具,不仅有助于我们了解安卓应用在运行时所执行的操作,还有助于我们发现潜在的安全问题。

安卓版的Instropy包含两个模块。

  • Tracer:它是一个GUI界面,有助于我们选择一个或多个目标应用以及想要运行的测试项目。
    • Cydia Substrate扩展(核心):它是Instropy的核心引擎,用于hook2应用。它能帮助我们在运行时分析应用并查找漏洞。
  • Analyser:它通过分析Tarcer保存的数据库,并生成报告来帮助我们进行更深入的分析。

2一种通过拦截函数回调、消息传递、事件等来改变应用行为的技术。——译者注

按照下面的步骤设置Introspy。

(1) 通过下面的链接下载Intospy Tracer:https://github.com/iSECPartners/Introspy-Android

(2) 通过下面的链接下载Intospy Analyzer:https://github.com/iSECPartners/Introspy-Analyzer

(3) 想要成功安装Introspy,需要先安装安卓版的Cydia Substrate。我们可以从安卓Play 商店中下载并安装Cydia Substrate。

{%}

(4) 安装第一步中下载的Introspy-Android Config.apk 和Introspy-Android Core.apk,下面是使用adb安装这两个个应用的命令。

adb install Introspy-Android Config.apk
adb install Introspy-Android Core.apk

安装成功后,会出现如下图所示的两个图标。

{%}

1.4.6 SQLite browser

我们在处理安卓应用时经常会遇到SQLite数据库。

SQLite browser是一款用于连接SQLite数据库的工具,让我们可以通过简单易用的界面来进行数据库操作。

(1) 通过下面的链接下载SQLite browser:http://sqlitebrowser.org

(2) 运行安装文件,并根据提示完成安装(安装过程很简单)。

{%}

(3) 安装完成后,将会出现如下图所示的界面。

{%}

1.4.7 Frida

Frida是一个对应用进行动态插桩的框架,支持安卓、iOS、Windows和Mac等多个平台。它能帮助我们hook应用,并对其进行运行时操纵。

下面是相关的重要链接:https://github.com/frida/fridahttp://www.frida.re/docs/android/

下面介绍如何设置Frida,本例使用的是Mac。

必备条件

  • Frida客户端:在工作站上运行。
  • Frida服务器:在设备上运行。

  • 设置Frida服务器

    (1) 使用下面的命令将Frida服务器下载到本地计算机上。

    curl -O http://build.frida.re/frida/android/arm/bin/frida-server
     
     
     
    $ curl -O http://build.frida.re/frida/android/arm/bin/frida-server 
      % Total    % Received % Xferd  Average Speed   Time    Time
    Time  Current
                                     Dload  Upload   Total   Spent
    Left Speed
    100 12.0M 100 12.0M     0     0   232k      0  0:00:53  0:00:53
    --:--:-- 166k
    $
    

    以上代码会把Frida服务器二进制文件下载到工作站的当前路径中。

    (2) 使用下面的命令赋予Frida服务器运行权限。

    chmod +x frida-server
    

    (3) 使用adb push命令将Frida服务器二进制文件推送到设备,如下所示。

    $ adb push frida-server /data/local/tmp/
    

    (4) 接下来启动设备shell获取root权限,并运行Frida服务器,如下所示。

    $ adb shell
    shell@android:/ $ su
    root@android:/ # cd /data/local/tmp
    root@android:/data/local/tmp # ./frida-server &
    [1] 5376
    root@android:/data/local/tmp #
    
  • 设置Frida客户端

    运行下面的命令安装Frida客户端。

    $ sudo pip install frida
    Password:
    Downloading/unpacking frida 
      Downloading frida-5.0.10.zip
      Running setup.py (path:/private/tmp/pip_build_root/frida/setup.py) egg_
    info for package frida
     
    Downloading/unpacking colorama>=0.2.7 (from frida)
      Downloading colorama-0.3.3.tar.gz
      Running setup.py (path:/private/tmp/pip_build_root/colorama/setup.py)
    egg_info for package colorama
     
    Downloading/unpacking prompt-toolkit>=0.38 (from frida)
      Downloading prompt_toolkit-0.53-py2-none-any.whl (188kB): 188kB
    downloaded
    Downloading/unpacking pygments>=2.0.2 (from frida)
      Downloading Pygments-2.0.2-py2-none-any.whl (672kB): 672kB downloaded
    Requirement already satisfied (use --upgrade to upgrade): six>=1.9.0
    in /Library/Python/2.7/site-packages/six-1.9.0-py2.7.egg (from prompt-toolkit>=0.38->frida)
    Downloading/unpacking wcwidth (from prompt-toolkit>=0.38->frida)
      Downloading wcwidth-0.1.5-py2.py3-none-any.whl
    Installing collected packages: frida, colorama, prompt-toolkit, pygments,
    wcwidth
      Running setup.py install for frida
        downloading prebuilt extension from https://pypi.python.org/
    packages/2.7/f/frida/frida-5.0.10-py2.7-macosx-10.11-intel.egg
        extracting prebuilt extension
     
        Installing frida-ls-devices script to /usr/local/bin
        Installing frida script to /usr/local/bin
        Installing frida-ps script to /usr/local/bin
        Installing frida-trace script to /usr/local/bin
        Installing frida-discover script to /usr/local/bin
      Running setup.py install for colorama
     
    Successfully installed frida colorama prompt-toolkit pygments wcwidth
    Cleaning up...
    $
    

    检查设置

    现在服务器和客户端都准备好了,在开始使用它们之前,我们需要使用adb配置端口转发。使用下面的命令开启端口转发。

    $ adb forward tcp:27042 tcp:27042
    $ adb forward tcp:27043 tcp:27043
    

    输入--help查看Frida客户端选项:

    $ frida-ps --help
    Usage: frida-ps [options]
     
    Options: 
      --version            show program's version number and exit
      -h, --help           show this help message and exit
      -D ID, --device=ID   connect to device with the given ID
      -U, --usb            connect to USB device
      -R, --remote         connect to remote device
      -a, --applications   list only applications
      -i, --installed      include all installed applications
    $
    

    从上面的输出中可以看出,我们可以使用-R命令来连接远程设备。这个命令可以作为基本测试,用来测试我们的设置。

    $ frida-ps –R 
      PID Name
    ----- ----------------------------------------
      177 ATFWD-daemon
      233 adbd
     4722 android.process.media
      174 cnd
      663 com.android.phone
     4430 com.android.settings
      757 com.android.smspush
      512 com.android.systemui
      .
      .
      .
      .
      .
      .
      138 vold
      2533 wpa_supplicant
      158 zygote
    $
    

    如上所示,运行过程以列表的形式呈现出来。

1.4.8 易受攻击的应用

我们将以几种易受攻击的安卓应用为例,介绍一些针对安卓应用的典型攻击。下列应用为读者学习安卓安全提供了一个安全且合法的环境。

1.4.9 Kali Linux

Kali Linux是用来进行渗透测试的Linux发行版,安全专家经常用它来进行各种安全测试。

建议读者在VirtualBox或VMware上安装Kali Linux,以便从网络层对安卓设备进行攻击。可以从下面的链接下载Kali Linux:https://www.kali.org/downloads/

1.5 adb入门

adb是一款对安卓应用进行渗透测试的必备工具,本书还有多处会用到这个工具。Android SDK默认自带adb,它位于Android SDK的platform-tools目录中。在安装SDK的过程中,我们已经将其路径添加到系统环境变量中。下面介绍这款工具的一些应用。

1.5.1 检查已连接的设备

我们可以通过下面的命令来使用adb列出已连接到工作站的设备。

adb devices

{%}

如上图所示,笔记本电脑中运行了一个模拟器。

 如果你把手机连接到了工作站,但是adb没有列出你的手机,请检查是否做到了以下两点:

  • 手机USB调试已打开;
  • 工作站安装了适合该手机的驱动。

1.5.2 启动shell

可以通过下面的命令使用adb启动模拟器或设备上的shell。

adb shell

{%}

上面的命令将为已连接的设备打开一个shell。

当真机和模拟器同时连接时,可以通过下面的命令打开模拟器的shell。

adb –e shell

当真机和模拟器同时连接时,可以通过下面的命令打开真机的shell。

adb –d shell

当有多个设备或模拟器连接时,可以通过下面的命令打开指定目标的shell。

adb –s [设备名称]

1.5.3 列出软件包

当使用adb连接到安卓设备的shell时,可以使用shell中的工具与设备进行交互。使用pm(package manager的缩写,即包管理器)“列出已安装的软件包”就是其中一例。

我们可以使用下面的命令列出设备中已安装的所有软件包。

pm list packages

{%}

1.5.4 推送文件到设备

我们可以使用下面的语法将工作站的数据推送到设备上。

adb push [本地计算机上的文件路径] [设备上的路径]

我们来实际操作一下。现在,在我的当前目录下有一个test.txt文件。

{%}

输入以下命令,将这个文件移动到模拟器中。

adb push test.txt /data/local/tmp

{%}

 提示:/data/local/tmp是安卓设备上的一个可写目录。

1.5.5 从设备中拉取文件

同样,我们也可以通过adb使用下面的语法将文件或数据从设备拉取到工作站上。

adb pull [设备上的文件]

首先,删除当前目录下的test.txt文件。

{%}

然后,输入下面的命令,将位于设备/data/local/tmp目录下的文件拉取出来。

adb pull /data/local/tmp/test.txt

{%}

1.5.6 通过adb安装应用

如前文所述,可以通过下面的语法来安装应用。

adb install [文件名.apk]

接下来,使用下面的命令安装Drozer代理应用。

{%}

如图所示,应用已安装成功。

 如果尝试安装一个已经存在在目标设备或模拟器上的应用,adb将弹出如下图所示的安装失败的提示。重新安装之前需要先删除已存在的应用。

{%}

1.5.7 adb连接故障排除

adb经常无法识别模拟器,即使模拟器运行正常。要排除这个故障,可以运行下面的命令列出已连接到机器上的设备。

adb devices

下面的命令将会结束设备上的adb daemon,并将它重启。

adb kill-server

{%}

1.6 小结

在本章中,我们安装了对安卓移动应用和设备进行安全评估所需的工具。其中包括一些静态工具,比如JD-GUI和dex2jar,便于在不运行应用的情况下进行静态分析。此外,还包括一些动态分析工具,比如Frida和模拟器,有助于我们在应用运行时进行动态分析。

下一章将讨论安卓ROOT的概念。

目录

  • 版权声明
  • 前言
  • 致谢
  • 第 1 章 实验环境搭建
  • 第 2 章 安卓ROOT
  • 第 3 章 安卓应用的基本构造
  • 第 4 章 安卓应用攻击概览
  • 第 5 章 数据存储与数据安全
  • 第 6 章 服务器端攻击
  • 第 7 章 客户端攻击——静态分析技术
  • 第 8 章 客户端攻击——动态分析技术
  • 第 9 章 安卓恶意软件
  • 第 10 章 针对安卓设备的攻击