安卓APP渗透安全测试

1.移动安全测试点分析 

1.1主要测试  

客户端

数据传输

服务端

l反编译

l二次打包

l组件安全

lWebview漏洞

l数据安全

l界面劫持

l数据备份风险

lDebug调试风险

l安全策略

l数据窃听

l中间人攻击

l信息泄露

l任意修改数据包

lSQL注入

l上传漏洞

l暴力破解

l逻辑漏洞

lXSS

l任意文件读取

l越权漏洞

             

1.2Android测试思维导图  

图片

   

1.客户端反编译  

主要工具:Android killer、apktool、jd-gui、JADX、IDA pro等  

反编译测试方法:  

①.毫无加固的APK

直接用Android killer 或Apk tool 进行反编译,会反编译成功,并能看到Smail代码,通过代码逻辑来分析存在的漏洞。反编译后可对APK关键点代码审计安全问题,如登录、注册、付费、敏感信息等。如图1-1,对xx音乐APK用android killer反编译结果。

图片

图1-1

②.代码混淆

代码混淆后进行反编译,方法名称并不是原名称,代码逻辑混乱,不易阅读,反编译后无实际意义。

③.APK加壳

若客户端进行加壳保护,此时认为无风险。若大部分代码(包括核心代码)经过混淆,此时低风险。    

2.二次打包  

二次打包流程:  

对APK文件做反编译分析,反编译为smali代码,并对某些关键函数或者资源进行修改,再回编译为apk文件并重签名。

防止二次打包测试点:  

①自校验:校验修改前后的不同:

(1)文件大小

(2)APK文件的MD5(Hash值)

(3)Dex、xml、res、arsc文件不同,png/mp3/jpg等相同

所有具有反编译过程的文件重新打包后,Hash都是变化的:

Android killer 对apk反编译时,反编译的文件有(res/xml/classes.dex/)

png/mp3/jpg 等资源文件是不参与反编译和编译,如图1-2是编译失败过程    

图片

图1-2 二次打包失败案例

②签名校验:

签名文件:META-INF,二次打包后签名文件一定会变。

APK 必须进行签名后,方可安装和运行。如果开启了“允许未知来源的应 用”,那么 Debug 证书、自签名证书、过期证书的签名都是可以的,但是不可以不签名。

遇到签名校验的地方,搜索的关键词:

签名绕过:某些apk为了防止重打包,使用了签名校验。所以在绕过的时候的时候我们需要破解签名校验。在定位签名校验位置时常用的关键词有sign,signature,checkSign,signCheck,getPackageManager,getPackageInfo,verify,same等。

区分校验方式:区分APK是签名校验还是文件校验的方式,删除Apk META-INF 重签名校验。    

3.组件安全  

Android四大组件:  

安卓系统的组件共有四种,其主要用途分别为:

Activity:呈现可供用户交互的界面,是最常见的组件;甚至可以理解为一个“界面”就是一个 Activity。

Service:长时间执行后台作业,常见于监控类应用;

Content Provider:在多个 APP 间共享数据,比如通讯录数据;

Broadcast Receiver:注册特定事件,并在其发生时被激活;

组件导出的危害  

有些 APP 的功能需要提供一些接口给其它 APP 访问,就需要把相关的接口功能放在一个导出的组件上。因为权限声明是以组件为单位的,A 组件调用 B 组件的功能来访问操作系统 API 时,适 用于B 组件的权限声明。如果 B 作为导出组件,没有进行严格的访问控制,那么 A 就可以通过调用 B 来访问原本 没有声明权限的功能,构成本地权限提升。

主要测试点:组件的导出(高危)  

1.1AndroidManifest.xml,对其中声明的各个组件, 根据以下规则判断是否可导出:

1. 显式声明了 android:exported="true",则可导出;

2. 显示声明了 android:exported="false",则不可导出;    

3. 未显示声明 android:exported:

a) 若组件不是 Content Provider:i. 若组件包含则可导出,反之不可;

b) 若组件是 Content Provider:i. 若 SDK 版本<17,可以导出;

从测试的角度上,只能判断组件是否导出,但能否构成危害需要详细分析源代码后才能得出结论。一般来说,在测试时尽管写清所有的导出组件,由客户开发侧确认相关组件是否确实需要导出即可。如图2-1,AndroidManifest.xml部分截图。

         

图片

图2-1

         

图片

                                                图2-2 mobsf截图

1.2.执行 adb shell 获得一个 shell,使用 am start –n com.isi.testapp/.Welcome 来启动 Activity ,查看是否在未经登录的情况下,该 activity 被正常显示,且形成越权、信息泄露等风险

             

4.Webview漏洞  

Android 4.2 版本以下的 webview 组件存在安全漏洞(CVE-2012-6636)。检测客户端 是否采取措施避免漏洞被利用。检查应用 AndroidManifest.xml 中的 targetSdkVersion 是否大于等于 17。

5.数据安全(中危)  

APP评估中可在该文件夹中AndroidManifest.xml文件中检查的两项:

allowbackup备份权限,ture则存在备份数据泄露风险(未配置的情况下,默认为TRUE)

图片

图4-1

         

图片

图4-2 Mobsf扫描结果    

6.界面劫持  

   界面劫持是指在Android系统中,恶意软件通过监控目标软件的运行,当检测到当前运行界面为某个被监控应用的特定界面时(一般为登录或支付界面),弹出伪造的钓鱼页面,从而诱导用户输入信息,最终窃取用户的隐私(恶意盗取用户账号、卡号、密码等信息),或者利用假冒界面进行钓鱼欺诈。

7.Debug调试风险  

AndroidManifest.xml 中的 android:debuggable="true"标记如果开启,可被 Java 调试工具例如 jdb 进行调试,获取和篡改用户敏感信息,甚至分析并且修改代码实现 L-songxuliang 的业务逻辑,我们经常使用 android.util.Log 来打印日志,软件发布后调试日志被其他开发 者看到,容易被反编译破解。检查 AndroidManifest.xml 文件中的 debuggable 属性应为false。

图片

图7-1 dubuggable调试

8.安全策略测试  

密码复杂度策略  

问题描述 :如果系统缺少密码复杂度策略,攻击者将有机会通过暴力猜测、撞库等方式获取一些安全意识淡薄的合法用户的认证凭据。    

 测试步骤 :人工测试,尝试将密码修改为弱口令,如:123456,654321,121212,888888 等,查看客户端是否拒绝弱口令。

认证失败锁定策略  

 问题描述:如果系统不存在认证失败锁定策略,攻击者将有机会对认证凭据进行暴力猜测。测试步骤:测试客户端是否会限制密码输入错误次数,是否会进行锁定。

安全建议 以 IP 地址或用户账号为单位,如果用户连续进行若干次错误的认证尝试,则禁止其后续认证操作。

单点登录限制策略  

问题描述:如果系统允许同一个用户同时在多个会话中登录,那么用户就很难察觉到自身的账号已经被盗。

测试步骤:测试同一个帐号是否可以同时在多个设备上登录客户端,进行操作。

会话超时策略  

 问题描述:对于认证会话不会超时的 APP,如果用户在使用过程中将设备放置一旁并遗忘,攻击者将有可能通过物理接触的方式以用户身份进行操作。

测试步骤 测试客户端在一定时间内无操作后,是否能提示超时并要求重新登录。

安全建议:长时间不操作时,应当终止会话。    

UI敏感信息安全  

问题描述:视具体的泄露信息而定,敏感信息泄露可能会方便恶意程序窃取凭据,或者泄露一些原 本不希望被用户看到的内容。

 测试步骤:人工观察客户端的各个功能界面,未发现存在敏感信息泄露的问题。在登录界面输入错误的用户名会显示“连接失败”,密码错误时会显示“密码错误”:因此存在风险枚举存在用户名的风险。

安全建议在密码错误和用户名错误的情况应返回相同的信息,例如“用户名或密码错误” 。

 移动端漏扫工具—MobSF   

        0x01 MobSF介绍    

  移动安全框架(MobSF)是一种自动、一体化的移动应用(Android / iOS / Windows)静态和动态分析的测试,恶意软件分析和安全评估框架。

  MobSF框架还可以通过其API Fuzzer功能模块,对Web API的安全性进行检测,包括收集信息、分析安全头部信息、识别移动API的具体漏洞等

0x02 安装  

安装要求  

1.Python 3.8-3.9

2.Jdk 8+

3.安装Microsoft Visual C++ 构建工具

4.安装OpenSSL 1.1.1

5.安装Git 2.32.02

6.wkhtmltopdf(并且配置环境变量)

以上环境必须满足,版本注意保持一致或者最新,否则后面安装过程会报错    

官方文档有对应环境的最新下载链接  
安装过程  
1.前期环境准备好之后,开始安装Mobsf,从GitHub克隆,公司内网不能访问github,建议使用其他网络,也可以用码云上的资源克隆,注意选择版本要最新版  
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git

2.克隆完成过程  
正克隆到 'Mobile-Security-Framework-MobSF'...
remote: Enumerating objects: 16268, done.
remote: Counting objects: 100% (16268/16268), done.
remote: Compressing objects: 100% (8216/8216), done.
接收对象中34% (5691/16268), 540.95 MiB | 214.00 KiB/s
remote: Total 16268 (delta 7623), reused 16268 (delta 7623), pack-reused 0
接收对象中: 100% (16268/16268), 940.24 MiB | 219.00 KiB/s, 完成.
处理 delta : 100% (7623/7623), 完成.
正在更新文件: 100% (377/377), 完成.

3.安装过程,setup.bat会运行较长时间,安装依赖较多,如遇报错,可根据实际情况来解决  
    cd Mobile-Security-Framework-MobSF
    setup.bat
          

   

4.安装成功后会有提示,然后浏览器打开localhost:8000(默认监听8000端口)来测试,如果需要修改默认端口,可以在run.bat中进行修改SETconf="0.0.0.0:8000"中的端口号  
运行:  cd Mobile-Security-Framework-MobSF
        run.bat

5.在安装完成启动时遇见以下报错,经过分析由于网络问题导致无法访问一些域名如raw.githubusercontent.com这个域名,从而运行界面会出现报错提示,这里通过IPaddress查询到真实IP,修改本地host文件来访问。如网络正常访问没遇见报错,这步可省略  
Traceback (most recent call last):
  File "C:\Mobile-Security-Framework-MobSF\mobsf\MobSF\utils.py", line 114, in check_update
    response = requests.get(github_url, timeout=5,
  File "c:\mobile-security-framework-mobsf\venv\lib\site-packages\requests\api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "c:\mobile-security-framework-mobsf\venv\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "c:\mobile-security-framework-mobsf\venv\lib\site-packages\requests\sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "c:\mobile-security-framework-mobsf\venv\lib\site-packages\requests\sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "c:\mobile-security-framework-mobsf\venv\lib\site-packages\requests\adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='raw.githubusercontent.com', port=443): Max retries exceeded with url: /MobSF/Mobile-Security-Framework-MobSF/master/mobsf/MobSF/init.py (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000001CC9E49AFD0>: Failed to establish a new connection: [Errno 11004] getaddrinfo failed'))        

0x03 静态分析  

图片

静态分析仅需上传响应的APK/ios包即可,上传后需耐心等待

Android扫描内容  

APK基本信息:文件名、文件大小、MD5、SHA-1、SHA-256

APP信息:包名、Main Activity、版本号等

组件:Activity、Service、Broadcast Receiver、Content Provider

证书信息(Signer Certificate)

权限信息

Android API信息

Androidmanifest分析(标志位、组件配置等)

代码分析、文件分析

url、email、string等

报告查看  

结果分析报告    

图片

MobSF源码分析——静态分析原理  

0x04 动态分析  

图片

简介  

  动态分析MobSF支持Android(iOS 应用不支持),可以动态调试正在运行的应用。

  如果需要动态分析,请不要在Docker或虚拟机中部署MobSF,另外需要下载安装Genymotion模拟器。

设备系统版本  

设备系统版本 在启动MobSF之前,请运行Genymotion模拟器 。一切都会在运行时自动配置。建议使用Android 7.0及更高版本。    

Android 5.0-9.0-这些版本使用Frida(一款基于python + java 的hook框架),开箱即用。

Android 4.1-4.4- 这些版本使用Xposed Framework。

HTTPS代理  

对于Android的版本4.4 - 9.0,全局代理设置在运行时自动应用。

对于Android版本4.1-4.3,需要设置Dynamic Analyzer页面中显示的Android VM代理。

安装Genymotion  
1.安装界面  

2.选择一个Android设备名称  

3.不能为虚拟电脑打开新任务的问题,网络问题,通过启动网卡解决  

   

4.启动后,一直卡在starting virtual device,把Oracle VM VirtualBox 删除,重新安装了一次发现问题解决了,Android顺利运行了  

ARM转换  

  Genymotion是基于X86的,不支持ARM架构。所以有些应用(这里我测试了云上协同、抖音APK均是ARM架构)是基于ARM架构编译的就无法安装,出现如下提示:

An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to x86 or install an ARM translation tool in your device.

  下载安装转换工具Genymotion_ARM_Translation 根据自己的模拟器系统版本下载对应的zip包,然后将包直接拖入到模拟器安装,安装完成后重启模拟器即可。这里我使用的android 8的版本

因为较多应用是基于ARM架构的,所以这一步必须要安装,在Genymotion目录下找到adb.exe文件,复制路径在cmd中打开 

然后执行这个命令,成功之后就可以使用Genymotion了

adb shell flash-archive.sh /sdcard/Download/Genymotion-ARM-Translation_v1.1.zip        

动态分析实验  
1.开启mobsf和Genymotion的Android之后,mobsf会自动识别链接,IP地址与安卓的地址是一致的。  

2.测试动态分析环境是否正常,点击MobSFy Android Runtime,然后点击弹窗界面的MobSFy!  

3.测试正常之后就可以动态分析了  

动态分析功能主要如下:  

功能菜单

说明

Show/Stop Screen

开启/关闭屏幕

Install/Remove MobSF RootCA

安装卸载MobSF证书

Start Exported Activity Tester

测试导出类型的Activity

Start Activity Tester        

测试Activity

Take a Screenshot

截屏

Logcat Stream

日志流信息

Generate Report

生成报告

Show/Stop Screen  

1.点击Show Screen 可以实时同步设备屏幕,方便测试执行查看。在Dynamic Analyzer菜单可以查看实时动态分析日志,Errors菜单可以查看错误日志。

2.Frida Scripts 栏设置是设置Frida相关选项,Frida是个轻量级别的hook框架,核心是用C编写的,并将Google的V8引擎注入到目标进程中,在这些进程中,JS可以完全访问内存,Hook函数甚至调用进程内的本机函数来执行。

3.一般使用默认的配置选项即可,如果想进阶测试,可以勾选Auxiliary中的选项,甚至右侧Frida Code Editor编辑窗口,可以直接编写脚本进行调试。Fira使用教程请参考官方文档:https://frida.re/docs/home/    

Install/Remove MobSF RootCA  

Install/Remove MobSF RootCA用来安装卸载MobSF CA证书,方便对样本中HTTPS流量进行截获。

Start Exported Activity Tester  

遍历获取AndroidManifest.xml文件中的所有Exported Activity 测试流程如下:

1.依次启动activity,adb -s IP:PORT shell am start -n PACKAGE/ACTIVITY

2.获取当前activity运行时的屏幕截图,并保存截屏

3.强制关闭应用:adb -s IP:PORT shell am force-stop PACKAGE

Start Activity Tester  

遍历AndroidManifest.xml文件中的所有Activity,而不单单是Exported。

处理流程与Exported Activity一致。

Take a Screenshot  

截屏并保存到本地。

Generate Report  

生成动态分析报告 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/909399.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7 安装 ntp,自动校准系统时间

1、安装 ntp yum install ntp 安装好后&#xff0c;ntp 会自动注册成为服务&#xff0c;服务名称为 ntpd 2、查看当前 ntpd 服务的状态 systemctl status ntpd 3、启动 ntpd 服务、查看 ntpd 服务的状态 systemctl start ntpdsystemctl status ntpd 4、设置 ntpd 服务开机启…

ESP-HaloPanel:用 ESP32-C2 打造超低成本智能家居面板

项目简介 在生活品质日益提升的今天&#xff0c;智能家居系统已经走进了千家万户&#xff0c;并逐渐成为现代生活的一部份。与此同时&#xff0c;一款设计精致、体积轻盈、操作简便的全屋智能家居控制面板&#xff0c;已经成为众多家庭的新宠。这种高效、直观的智能化的解决方…

如何用ChatGPT结合Python处理遥感数据

在科技飞速发展的时代&#xff0c;遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究&#xff0c;空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而&#xff0c;对于许多专业人士而言&#xff0c;如何高效地处…

TCP Analysis Flags 之 TCP Keep-Alive

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

使用buildx构建多架构平台镜像

1. 查看buildx插件信息 比较新的docker-ce版本默认已经集成了buildx插件 [rootdocker ~]# docker buildx version github.com/docker/buildx v0.11.2 9872040 [rootdocker ~]#2. 增加多平台镜像构建支持 通过tonistiigi/binfmt:latest初始化一个基于容器的构建环境&#xff…

【Linux】编辑器vim 与 编译器gcc/g++

目录 一、编辑器vim&#xff1a; 1、对vim初步理解&#xff1a; 2、vim的模式&#xff1a; 3、进入与退出&#xff1a; 4、vim命令模式下的指令集&#xff1a; 移动光标&#xff1a; 删除&#xff1a; cv&#xff1a; 撤销&#xff1a; 其他&#xff1a; 5、vim底行模…

面试总结!

OSI七层模型&#xff1a; 什么是OSI七层模型&#xff1f; 我们需要了解互联网的本质是一系列的网络协议&#xff0c;这个协议就叫做OSI协议&#xff08;开放系统互联(Open System Interconnection&#xff09;&#xff09;&#xff0c;它是由ISO&#xff08;国际标准化组织&…

人工智能技术:未来生活的“魔法师”

想象一下&#xff0c;未来的某一天&#xff0c;你醒来时&#xff0c;智能助手已经为你准备好了早餐&#xff0c;你的智能家居系统根据你的心情和日程安排调整了室内的光线和音乐&#xff0c;而你的自动驾驶汽车已经在门口等你。这不是科幻小说&#xff0c;这是人工智能技术为我…

Multi Agents协作机制设计及实践

01 多智能体协作机制的背景概述 在前述博客中&#xff0c;我们利用LangChain、AutoGen等开发框架构建了一个数据多智能体的平台&#xff0c;并使用了LangChain的Multi-Agents框架。然而&#xff0c;在实施过程中&#xff0c;我们发现现有的框架存在一些局限性&#xff0c;这些…

100、Python并发编程:保护临界资源的最简单方式,加锁

引言 前面的文章中已经提到了并发编程中能够带来性能提升的同时&#xff0c;也带来了一些问题&#xff0c;比如对共享资源/临界资源的竞争&#xff0c;可能会导致状态的不一致。最终的结果是虽然性能提升了&#xff0c;但是结果却是错误的…… 所以&#xff0c;并发编程中一个…

PHP电商供应链ERP管理系统小程序源码

&#x1f680;电商供应链大揭秘&#xff01;ERP管理系统如何重塑你的商业版图✨ &#x1f50d; 什么是电商供应链ERP管理系统&#xff1f; 电商供应链ERP管理系统是一款基于FastAdminThinkPHP开发的系统。该系统可满足电商企业管理自身进销存&#xff0c;帮助中小型电商企业管…

python: Parent-child form operations using ttkbootstrap

# encoding: utf-8 # 版權所有 2024 ©塗聚文有限公司 # 許可資訊查看&#xff1a;言語成了邀功的功臣&#xff0c;還需要行爲每日來值班嗎&#xff1f; # 描述&#xff1a; 主、子表單 窗體傳值 Parent-child form operations # Author : geovindu,Geovin Du 塗聚文. …

跳表原理笔记

课程地址 跳表是一种基于随机化的有序数据结构&#xff0c;它提出是为了赋予有序单链表以 O(logn) 的快速查找和插入的能力 创建 首先在头部创建一个 sentinel 节点&#xff0c;然后在 L1 层采用“抛硬币”的方式来决定 L0 层的指针是否增长到 L1 层 例如上图中&#xff0c;L…

医院信息化与智能化系统(17)

医院信息化与智能化系统(17) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应…

selenium操作已开启的浏览器,方便调试

一、谷歌浏览器配置&#xff1a; 在所安装的谷歌下面&#xff0c;执行下面命令&#xff0c;打开谷歌浏览器&#xff0c;用来selenium的操作&#xff1a; 注意事项&#xff1a;端口需要不被占用&#xff0c;--user-data-dir"D:\workspace\chrome-data"这个路径需要有…

深度强化学习:从理论到应用

目录 1.引言 2.什么是强化学习&#xff1f; 3.深度学习和强化学习的结合 4.深度强化学习的主要方法 5.深度强化学习的应用领域 6.深度强化学习的挑战与未来 7.总结 1.引言 深度强化学习&#xff08;Deep Reinforcement Learning&#xff0c;DRL&#xff09;是近年来人工…

[Linux] 进程控制之创建和终止

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 每日吐槽 不得不说&a…

介绍一下rand函数生成随机数(c基础)

适合对象 c语言初学者 总结语言用色&#xff0c;个人强调用红色&#xff0c;注意为易错点&#xff0c;若有问题请告诉我谢谢。(建议通过目录观看)。一定要自己动手打代码。 rand函数 是生成随机数的函数&#xff0c;但实则是伪随机数。(即是同一个值) 格式 #include<st…

vue3入门知识(一)

vue3简介 性能的提升 打包大小减少41%初次渲染快55%&#xff0c;更新渲染快133%内存减少54% 源码的升级 使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking 新的特性 1. Composition API&#xff08;组合API&#xff09; setupref与reactivecomput…

FET113i-S核心板已支持RISC-V,打造国产化降本的更优解 -飞凌嵌入式

FET113i-S核心板是飞凌嵌入式基于全志T113-i处理器设计的国产工业级核心板&#xff0c;凭借卓越的稳定性和超高性价比&#xff0c;FET113i-S核心板得到了客户朋友们的广泛关注。作为一款拥有A7核RISC-V核DSP核的多核异构架构芯片&#xff0c;全志科技于近期释放了T113-i的RISC-…