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
clonehttps
://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.95MiB |
214.00KiB/s
remote: Total
16268(delta
7623), reused
16268(delta
7623), pack-reused
0
接收对象中:
100% (
16268/
16268),
940.24MiB |
219.00KiB/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,
incheck_update
response = requests.get(github_url, timeout=
5,
File
"c:\mobile-security-framework-mobsf\venv\lib\site-packages\requests\api.py", line
76,
inget
return request('get', url, params=params, **kwargs)
File
"c:\mobile-security-framework-mobsf\venv\lib\site-packages\requests\api.py", line
61,
inrequest
return session.request(
method=
method, url=url, **kwargs)
File
"c:\mobile-security-framework-mobsf\venv\lib\site-packages\requests\sessions.py", line
542,
inrequest
resp = self.send(prep, **send_kwargs)
File
"c:\mobile-security-framework-mobsf\venv\lib\site-packages\requests\sessions.py", line
655,
insend
r = adapter.send(request, **kwargs)
File
"c:\mobile-security-framework-mobsf\venv\lib\site-packages\requests\adapters.py", line
516,
insend
raise
ConnectionError(e, request=request)
requests.exceptions.ConnectionError:
HTTPSConnectionPool(host='raw.githubusercontent.com', port=443): Max retries exceeded
withurl: /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
生成动态分析报告