问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
Andorid安全测试思路及环境搭建
移动安全
针对Android安全测试过程中需要到的一些工具环境的安装和测试思路。
### 一、前言 随着移动端使用的越来越广泛,针对安全测试的工作也是由之前的以web为主到目前大量的移动端的安全测试工作。那么针对Android端的安全测试一些测试人员都是有自己的一些思路和规范流程,这里也是结合平时工作将自己在做Android端的一些测试思路以及工具环境进行了梳理。 针对Android端的安全测试个人一般从两大方面进行,第一就是自动化检测,会使用到一些框架及平台,包括drozer、Mobsf等平台,对apk的一些信息和风险问题进行自动识别发现,针对发现的问题进行验证和测试。第二就是手动测试,包括本地敏感数据的检测、apk的反编译以及重编译、frida hook以及抓包改包等操作进行测试。当然这一块测试还需要我们对反编译后的一些代码进行分析,以及动态调试过程中对一些arm汇编代码熟练掌握。 本次主要介绍一下Android测试过程中的本地敏感数据检测、apk反编译和重编译、Drozer、Mobsf、frida hook以及Fiddler抓包工具等一系列环境的安装和对应的一些测试思路。 ### 二、测试思路及环境搭建 #### 1、本地敏感数据检测 Android APP本地存储方式四种,分别为:文件存储数据、SQLite数据库存储数据、使用ContentProvider存储数据、使用SharedPreferences存储数据。App会将一些私有的数据存储再本地,私有目录通常位于“/data/data/应用名称/”。从安全的角度出发,对本地信息存储进行安全测试需要安装对应的环境和工具。 Android SDK 指的是Android专属的软件开发工具包,其中包括adb以及ddms等一些列调试工具,可以用于安全测试过程中针对app的调试检测。官网:[https://www.androiddevtools.cn/,下载SDK](https://www.androiddevtools.cn/%EF%BC%8C%E4%B8%8B%E8%BD%BDSDK) Tools,并下载platform-tools和tools的文件复制到sdk目录下,并配置全局环境变量。 ](https://shs3.b.qianxin.com/attack_forum/2022/01/attach-0b0acb7ff4da1a34ccde640bb9b3b5c041646ffc.png)   执行adb和ddms能够打开环境则安装完成。   至此,对应sdk的环境安装和配置完成。 ##### 1)Xml等文件敏感信息查看 打开ddms,同时打开运行app的安卓模拟器或者真机,选择Device下的File Explore,  选择data/data/app包名目录下  选择需要查看的配置文件进行导出查看  导出后可以利用sublime等应用程序进行查看是否存在敏感信息的存放。  ##### 2)SQLite数据库存储敏感数据查看 在该app包目录下找到database目录,找到程序运行生成的\*.db文件进行导出。  将导出的db文件利用Sqlite进行数据查看  ##### 3)SharedPreferences存储敏感数据查看 SharedPreferences通常用来存储应用的配置信息,保存方式基于XML文件存储的key-value键值对数据,一般作为数据存储的一种补充。存储路径为:/data/data/<package name>/shared\_prefs目录下。  利用sublime打开查看  以上便是文件存储数据、SQLite数据库存储数据、使用SharedPreferences存储数据三种本地存储数据的查看测试方法,至于使用ContentProvider存储数据将在后边利用drozer工具进行测试。 ##### 4)数字签名检测 数字签名用来防止要保护的内容被篡改,用的是非对称加密算法,通过签名信息可以确定APP和其开发者的关系,检测签名的字段是否正确标示客户端程序的来源和发布者身份。所用到的工具是jarsigner.jar,jdk的安装目录下的bin目录中便有。 进入jdk目录,打开cmd窗体:  执行一下检测命令进行检测 jarsigner.exe -verify -verbose –certs apk路径   #### 2、APK反编译和重编译检测 Apk安装包在反编译之后可以进行一些资源以及代码的查看分析和修改,修改完成重编译签名之后可以安装使用修改后的app程序。APK的反编译分别有apktool、dex2jar以及jd-gui等工具。 ##### 1)apktool进行反编译和重编译 Apktool可以对app资源文件获取,提取出图片文件和布局文件进行使用查看。下载地址:<https://bitbucket.org/iBotPeaches/apktool/downloads/> 反编译: java -jar apktool\_2.5.0.jar d -f apk apk名称 -o 反编译后的文件名  重编译 java -jar apktool.jar b -f 需重编译的文件夹名称 -o apk名称  Apk反编译过程中如果有资源文件提示错误找不到等信息,或者混淆问题,在反编译时可以尝试使用–only-main-classes和-r参数。 Apk重编译完成想要正常使用或者安装运行,则必须对该apk进行签名。可以使用SignApk,工具下载地址:[https://github.com/techexpertize/SignApk,并使用以下命令进行签名](https://github.com/techexpertize/SignApk%EF%BC%8C%E5%B9%B6%E4%BD%BF%E7%94%A8%E4%BB%A5%E4%B8%8B%E5%91%BD%E4%BB%A4%E8%BF%9B%E8%A1%8C%E7%AD%BE%E5%90%8D) java -jar signapk.jar certificate.pem key.pk8 待签名apk 签名后输出apk  当然如果想利用工具直接进行反编译和重编译,可以使用AndroidKiller,工具可以配置不同版本的apktool以及签名文件供安全人员进行自动化编译。  ##### 2)dex反编译 d2j-dex2jar将APK反编译成Java源码(classes.dex转化成jar文件)工具下载地址:<https://sourceforge.net/p/dex2jar>  将apk文件后缀修改为.zip,并进行解压  进入文件夹可以看到classes.dex  利用反编译命令如下: d2j-dex2jar.bat classes.dex  可以看到成功反编译成.jar后缀文件  如果是多个dex文件时则需要使用dex2.1 ,命令如下: d2j-dex2jar.bat apk文件  成功反编译成.jar后缀文件。  ##### 3)jd\_gui查看.jar文件 将.jar文件拖入jd\_gui中便可以查看java代码,进行逻辑关系的分析。  当然,利用androidKiller反编译后可以直接查看java代码   同时,在反编译完成后也可以进行一些敏感关键词的搜索,包括一些手机号、pass、user等需要的字段。  #### 3、Drozer安全测试框架 Drozer是MWR Labs开发的一款Android安全测试框架。利用该测试框架可以测试app四大组件安全。下载地址:<https://github.com/FSecureLABS/drozer/releases> 运行Drozer需要java环境、python27环境,因此需要提前安装需要的环境。本地PC端安装完成后需要下载apk文件在android端也进行安装。  完成安装后利用adb命令查看连接的andorid终端  利用命令进行端口转发:adb forward tcp:31415 tcp:31415,同时利用命令启动drozer:drozer console connect  在android端启动drozer终端  都启动之后运行以下命令可以查看android终端上所有的app包 run app.package.list  利用以下命令可以查看需要测试app的包名 run app.package.list -f app名称  也可以在androidkiller中直接查看app包名  利用以下查看可导出的组件 run app.package.attacksurface app包名  ##### 1)Activity组件安全检测 利用以下命令查看activity组件 run app.activity.info -a app包名  如果是一些第三方的或者其他组件可以使用drozer中的activity调用模块尝试启动查看是否可以获取一些敏感数据等,这边以MainActivity进行演示,命令如下 run app.activity.start --component app包名 调用的activity  成功启动该activity  ##### 2)Broadcast Receiver组件安全 利用以下命令进行查看,存在可导出的Receiver组件,可以导致Receiver被劫持、绕过、本地认证,造成拒绝服务,导致程序崩溃等。 run app.broadcast.info -a app包名  ##### 3)ContentProvider组件安全检测 在前面的本地存储数据中介绍ContentProvider存储数据便是其中的一种方法,因此需要针对性的检测,利用以下命令进行检测。 run scanner.provider.finduris -a app包名  如果存在可访问的content,可能导致应用数据的泄露。利用以下命令可以检测是否存在sql注入: run scanner.provider.injection -a \[包名\]  利用以下命令可以检测是否存在遍历文件的漏洞 run scanner.provider.traversal -a \[包名\]  ##### 4)Service组件安全检测 利用以下命令进行检测: run app.service.info -a app包名  如果存在可以导出的service。可能被恶意应用提供获取重要信息。 #### 4、Mobsf MobSF(Mobile-Security-Framework)是一种开源自动化的移动应用程序(Android / iOS / Windows)安全测试框架,能够执行静态,动态和恶意软件分析。它可用于Android/iOS和Windows移动应用程序的有效和快速安全分析,并支持二进制文件分析。辅助安全人员进行安全测试以及分析。针对MobSF在kali linux的安装进行介绍 系统更新 apt-get update  安装https协议、CA证书 apt-get install -y apt-transport-https ca-certificates   安装dirmngr apt-get install dirmngr  添加GPG密钥并添加更新源 curl -fsSL <https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg> | sudo apt-key add -  echo 'deb <https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/> buster stable' | sudo tee /etc/apt/sources.list.d/docker.list  系统更新 apt-get update  安装docker apt install docker-ce  启动docker服务器 service docker start  安装compose apt install docker-compose  docker快速进行安装 docker pull opensecurity/mobile-security-framework-mobsf  执行启动命令 docker run -it -p 8008:8000 opensecurity/mobile-security-framework-mobsf:latest   本地浏览器访问8008端口, <http://localhost:8008/>  可以上传apk文件进行检测,检测完成后便可以查看结果。  MobSF不仅支持静态分析,还支持Android应用动态分析,可以动态调试正在运行的应用。如果需要动态分析,请不要在Docker或虚拟机中部署MobSF,另外需要下载安装Genymotion模拟器。 #### 5、Frida Hook frida是一款基于python + javascript 的hook框架,可运行android、ios、linux、windows等各平台,主要使用动态二进制插桩技术。本次主要介绍在kali linux进行安装。 在针对android app的测试过程中,需要对一些输出的数据进行加密方式的分析或者修改邓操作,如果通过动态调试可能需要绕过反调试检测等一系列操作,是比较麻烦的,因此通过hook进行查看和修改相对就比较简单方便。 pip命令安装frida pip install frida   查看frida版本 frida --version  访问github下载对应版本的server文件,选择android环境下的进行下载。 <https://github.com/frida/frida/releases>  利用adb命令将对应版本的frida文件push到android中的/data/local/tmp/目录下 adb push /root/Desktop/frida-server-15.1.14-android-arm /data/local/tmp/frida-server 利用adb命令进入android命令行切换为root账号 adb shell su root  进入/data/local/tmp/目录 cd /data/local/tmp  修改权限为777 chmod 777 frida-server  转发android TCP端口到本地: adb forward tcp:27042 tcp:27042 adb forward tcp:27043 tcp:27043 运行push商量的frida文件 ./frida-server 在kali linux下运行该命令进行查看,出现android手机的进程列表说明搭建成功。接下来就可以分析app代码并编写hook脚本进行测试了。 frida-ps -U  #### 6、Fiddler Fiddler是位于客户端和服务器端之间的代理。它能够记录客户端和服务器之间的所有 请求,可以针对特定的请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大。工具下载地址:<https://www.telerik.com/download/fiddler>。 下载安装完成后点击Tools菜单下的Options菜单,进入弹出的配置界面,选择HTTPS下的Actions进行证书的导出。  导出之后上传到android终端,通过设置-安全-从SD卡安装证书进行证书的安装,可以分别选择VPN和应用以及WLAN都安装  安装完成之后可以查看监听端口,并在android中设置代理进行抓包。  当然也可以为他设置代理和burpsuite进行联动。  剩下的就是一些功能和api的测试了,当然大家也可以直接使用burpsuite进行抓包测试。 ### 三、总结 以上就是本次针对Android安全测试过程中需要到的一些工具环境的安装和测试思路,当然Android安全测试过程中还涉及很多的知识点和内容,每一块都需要不断的练习和实操,如果对Android攻防感兴趣的可以深入研究。
发表于 2022-01-28 09:45:06
阅读 ( 7115 )
分类:
漏洞分析
1 推荐
收藏
0 条评论
请先
登录
后评论
阿蓝
7 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!