• Android App安全渗透测试(一)


    一、            实验环境搭建

    1.      安装JDK

    2.      安装Android Studio

    3.      模拟器或真机

    我的是夜神模拟器和nexus

    工具

    Apktool

    下载地址:https://ibotpeaches.github.io/Apktool/

    下载完成直接保存打开,启动apktool,使用下面命令查看选项帮助

     

    Dex2jar/JD-GUI

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

    下载地址:http:// sourceforge.net/projects/dex2jar/     http://jd.benow.ca

     下载后无需安装直接可以打开。

     

    Burp suite

    下载地址:http://portswigger.net/burp/download.html

    手机端设置bp代理,进行APP流量抓取分析。

    Drozer

    下载地址:https://labs.mwrinfosecurity.com/tools/drozer/

    agent

    下载地址:https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk

    电脑安装drozer,安装完测试

     

    接下来安装前面下载的agent.apk,安装到模拟器或者真机上。可以使用adb命令进行安装.apk文件。

    在使用drozer进行评估之前,我们首先要将工作站中的drozer控制台连接到模拟器的代理上。所以我们先要在模拟器上启动代理,并使用命令进行端口转发。

     

    端口转发并启动连接到手机

     

     

    Advanced REST Client

    谷歌扩展程序,直接从谷歌商店下载

    adb基础

    adb是一款对安卓应用进行渗透测试的必备工具,Android SDK默认自带adb,它位于Android SDK的platform-tools目录中。

    adb基础命令

    adb connect 127.0.0.1:62001 链接夜神模拟器

    adb devices 查看连接

    adb logcat  打印logcat

    adb install  安装,覆盖安装是-r

    adb uninstall卸载

    adb push   推送本地文件至 Android 设备

    adb pull    推送Android文件至本地

    adb shell mount -o remount rw / 修改系统读写权限

    adb root  获得root权限

    adb kill-server  重启

    二、            安卓ROOT

    1.      什么是root

    Android 是基于Linux内核的系统,Linux有两种用户系统:一种是普通用户账户,一种是root账户。普通用户账户的权限通常比较低,在进行软件安装、操作系统设置更改等特权操作之前需要获得root权限。而root账户享有诸如更新应用、安装软件、执行命令等权限。root用户能对整个系统进行更精细化的控制,通过对设备进行完全控制的行为被称为root。

    检测你是否拥有设备root权限的一个简单方法是,在adb shell中执行su命令。

    在root过的设备上,通常我们的UID等于0,root shell中使用”#”而不是”$”来表示root。

     

    2.      为什么要root设备

    由于硬件制造商和运营商的限制,我们不能完全控制安卓设备。通过ROOT设备,我们能够突破这些限制,从而获得额外的权限。

    root的好处

    l  完全控制设备:在默认情况下,普通用户不能完全访问设备,但在ROOT之后,用户可以完全控制安卓设备

    l  安装其他应用:拥有root权限的用户可以安装一些具有特殊功能的应用,这些应用被称为root应用

    l  更多的特性和个性化功能:在安卓设备上安装第三方的recovery和ROM之后,可以获得更好的特性和个性化功能

    root的坏处

       ROOT降低设备的安全性:一旦设备被ROOT之后,它的安全性就会降低。

      让设备变砖:设备变砖的意思是,它可能会变得毫无 用处,你需要找到修复的方法。

      使保修失效:ROOT过的设备会使保修失效。

    3.      锁定和已解锁的boot loader

    boot loader是设备启动后先运行的程序。它负责维护和启动硬件和安卓内核,若没有它, 设备将无法启动。

    三、            安卓应用的基本构造

    1.      安卓应用基础知识

    1.1     安卓应用结构

     

    解压APK文件的步骤如下。

    (1) 把文件扩展名.apk改成.zip。

    (2) 在Linux或Mac系统中,使用下面的命令解压文件:

    Unzip filename.zip 在Windows系统中,可以使用7-Zip、WinRAR或者其他类似的工具来解压文件。

    文件或文件夹包含的内容

       AndroidManifest.xml:包含应用的大部分配置信息、包名、应用组件、组件安全设置、应 用所需权限,等等。

      classes.dex:包含由开发人员编写的源代码生成的Dalvik字节码,以及应用在设备上运行 时所执行的内容。

      resources.arsc:包含编译过的资源。

      Res:包含应用所需的原始资源,比如应用图标等图片。

      Assets:用于存放开发人员感兴趣的音乐、视频、预置的数据库等文件,这些文件会与应 用绑定。

      META-INF:用于存放应用签名和应用所用到的所有文件的SHA1摘要。

    1.2     APK文件存储位置

      /data/app/   用户安装应用的存放位置,全局可读可复制

      /system/app/   存放系统自带的应用程序,全局可读可复制

      /data/app-private/   存放禁止复制的应用,有root权限便可提取。

    提取过程:

    (1) 找到应用包名;

    (2) 找到APK文件在设备上的存储路径;

    (3) 从设备上拉取APK文件

    2.      安卓应用组件

    安卓基本组件:activity、service、connect provider、broadcastreceive

    2.1     activity

    activity为用户提供了一个可以通过与之交互来完成某些操作的界面。有时,activity会包含多 个fragment。fragment表示activity中的一个行为或用户界面的一部分。用户可以在activity中进行 打电话、发短信等操作。

    2.2     service

    服务可以在后台长时间运行,而且不提供用户界面。以音乐应用为例,当选好歌曲后,你可 以关闭它的所有界面,它能在后台正常播放歌曲

    2.3     内容提供程序

    内容提供程序以一个或多个表格的形式为外部应用提供数据。如果应用需要与其他应用共享 数据,内容提供程序就是一种方法,它可以充当应用间的数据共享接口。内容提供程序使用标准 的insert()、query()、update()、delete()等方法来获取应用数据。所有的内容提供程序 都使用content://开头的特殊格式的URI。只要知道这个URI并拥有合适的权限,任何应用都可以 从内容提供程序的数据库中进行数据插入、更新、删除和查询等操作。

    2.4     广播接收器

    广播接收器是一个能在设备系统中接收广播通知的组件。它能接收诸如低电量、启动完成、 耳机连接等消息。虽然大部分广播事件都是由系统发起的,但是应用也可以发出广播。从开发人 员的角度来说,当应用需要针对特定的事件做出反应时,就可以使用广播接收器。

    1.      应用运行时都发生了什么

    安卓系统启动后,Zygote进程也会随之启动,它会监听新应用的启动请求。当用户点击一个 应用时,会通过Zygote启动该应用。Zygote收到启动新应用的请求后,会使用fork系统调用来创 建一个自身的副本。这种启动新应用的方法效率更高,速度更快。新启动的应用进程会加载运行应用所需的所有代码。classes.dex文件包含能够兼容Dalvik虚拟机的所有字 节码。在使用安卓5.0及以上系统的最新版安卓设备中,默认的运行时环境是ART。在这个新的 运行时环境中,dex2oat工具会把classes.dex文件转换成OAT文件。

    ART---新的安卓运行时

    作为一个可选的运行时环境,ART在安卓4.4系统中被首次使用,终端用户可以从设备的开 发者选项中选择ART。从安卓5.0(Lollipop)开始,谷歌把ART当作默认的运行时环境。用户在 设备上安装应用时,ART可以将应用的字节码转换为原生机器码,这就是提前编译。在引入ART 之前,Dalvik会在应用运行时将字节码转换为原生机器码,这就是即时编译。ART的优点是,无 需在每次启动应用时都将字节码转换为机器码,因为在应用安装的过程中就已经完成了转换。这 虽然会导致应用在第一次启动时稍有延迟,但是从下一次运行开始,应用的性能就会得到大幅度 提升,耗电量也会下降。

    2.      理解应用沙盒

    一个应用对应一个UID

    安卓系统是基于Linux内核的,Linux的用户分离模式同样适用于安卓,但又和传统的Linux 略有不同。

    Linux如果以root身份运行两个不同的进程时,查看UID会发现他们都在同一个UID下运行。但安卓应用却并非如此,每一个安装在设备上的应用都会有自己的UID。这使得每个应用及 其资源都被沙盒化了,任何其他的应用都不能访问。

    注:使用了同一签名的应用(如果两个应用是由同一个开发人员开发的,就有可 能出现这种情况)可以互相访问数据。

    应用沙盒

    每一个应用在/data/data/文件夹中都有各自存储数据的入口,每一个应用都对其 拥有特定的所有权。

    下面的代码显示了/data/data/文件夹中的每个应用的数据是如何独立存储在各自的沙盒环境 中的。由于受限的用户无法访问/data/data/文件夹,所以我们需要一个已经ROOT过的设备或者模 拟器来进行观察。

    (1)     使用adb在ROOT过的设备上获取一个shell;

    (2)     使用cd data/data/命令进入/data/data文件夹;

    (3)     输入ls -l命令

     

    观察上述输出结果中的文件权限,你会发现每个应用的目录都归它自己所有,其他应用不能 读写这些目录。

    是否有方法打破沙盒限制

    应用沙盒并不是牢不可破,但是想要在一台配置正常的设备上打破应用沙盒的限制,就必须牺牲Linux内核的安全性。这样就会用到安卓root技术,让用户拥有root权限,能够满足用户对安卓系统的大部分需求。

    在使用Linux(以及UNIX)系统的计算机上,root是最高级的用户,它拥有最高的权限来执 行任何任务。安卓系统默认只有Linux内核和少量的核心应用能够以root身份运行。但是如果你 ROOT了设备,那么root用户就会对设备上的所有应用开放。所以,拥有root权限的用户或者应用 都可以突破沙盒环境的限制,进而修改安卓系统(包括内核)中的其他任意部分,包括应用及其 数据。

    _______________________________________________________________________________________________________________________________________________________

    内容来源于《Android App安全攻防实践》,记录一下自己的学习笔记

  • 相关阅读:
    SetupFactory7使用经验
    中值滤波C语言优化
    回归直线方程
    图像倾斜矫正方程基本的图像变换
    关于相机的一些概念
    VS如何自动创建函数头 函数说明
    自动打开虚拟机
    一些笔记jexcel
    linux 重启mysql redis等服务器
    handsontable 随记
  • 原文地址:https://www.cnblogs.com/qswz/p/12777263.html
Copyright © 2020-2023  润新知