问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

APP安全测试汇总【网络安全】

创作时间:
作者:
@小白创作中心

APP安全测试汇总【网络安全】

引用
CSDN
1.
https://blog.csdn.net/2401_84466325/article/details/139211607

随着移动互联网的快速发展,APP安全已成为一个不容忽视的重要议题。本文将从多个维度深入探讨APP安全测试的关键方面,包括安装包签名、应用完整性、组件安全性、数据存储与备份、日志管理、以及针对潜在攻击的防护措施。通过详细的测试方法和工具使用说明,帮助开发者和安全专家构建更安全的移动应用环境。

一. 安装包签名和证书

问题说明

检测 APP 移动客户端是否经过了正确签名,通过检测签名,可以检测出安装包在签名后是否被修改过。如果 APP 使用了 debug 进行证书签名,那么 APP 中一部分 signature 级别的权限控制就会失效,导致攻击者可以编写安装恶意 APP 直接替换掉原来的客户端。

测试

使用 jadx 工具,可以直接反编译 apk 包(将 apk 工具拖入 jadx 即可),查看 APK signature 文件。主题中显示是 Debug 签名,则说明该签名不安全。

结论

不安全

二. 应用完整性校验

问题说明

APK 应用完整性即移动客户端程序安装后,在每次启动时都会对自身文件进行完整性进行校验。防止攻击者通过反编译的方法在客户端程序中植入自己的木马,客户端程序如果没有自校验机制的话,攻击者可能会通过篡改客户端程序窃取手机用户隐私信息。

测试

使用 Android Killer 工具可以对 apk 的完整性进行校验,以更改 apk 的图标为例,使用 Android Killer 工具反编译 apk 之后,打开 AndroidMainfest.xml 文件,找到 android:icon,该项所对应的值就是图标存储的位置。所有 apk 的图标都在 res 目录下,andriod:icon 所对应的值为 @mipmap,则 res 目录下以 mipmap 开头的目录存放的都是 apk 图标,该 apk 下有五个相关目录,故需要将该五个目录的图标都需要更改为要变更的 apk 图标,名字需要与原来一致。将原来 apk 的图标保存,然后涂鸦,然后将 5 个目录下的图标都更改为该涂鸦图标,此时已经将五个图标全部替换。(替换方法:右击图片选择打开方式,然后点击打开文件路径,然后直接使用涂鸦图片替换原图片即可,名字需要与原图片一致)替换完成之后,重新编译 apk。编译完成之后会输出编译路径。使用手机或者模拟器进行安装该 apk,如果可以安装并且图标被更改的话,则说明应用完整性不安全。

可以看到该 apk 图标已经被更改。

结论

不安全

三. 组件导出安全

Activity 组件

问题说明

Android 中的每个程序都是由基本组件如 Activity、Service、content Provider 和 Broadcast Receiver 等所组成,而作为实现应用程序的主体的 Activity 承担着大量的显示和交互工作,甚至我们可以理解为一个「界面」就是一个 Activity。既然 Activity 这么重要,如果 Activity 组件存在问题那么就可能会被系统或者第三方的应用程序直接调出并使用。而组件导出可能导致登录界面被绕过、信息泄露、数据库 SQL 注入、DOS、恶意调用等风险。

测试

测试组件导出安全使用 drozer 工具进行测试。虚拟器安装 agent.apk,主机连接 drozer 命令 adb forward tcp:31415 tcp:31415 drozer.bat console connect 出现下图所示标志代表主机已经连接到 drozer 客户端。使用 jadx 查看 apk 的包名。得到包名为 jakhar.aseem.diva。run app.activity.info -a jakhar.aseem.diva(包名):查看该 apk 所有可以导出的组件 run app.activity.start --component jakhar.aseem.diva jakhar.aseem.diva.APICreds2Activity 导出 jakhar.aseem.diva.APICreds2Activity 组件,可以看到该 apk 已经自动打开该界面。run app.activity.info -a jakhar.aseem.diva(包名) 导出组件 run app.activity.start --component jakhar.aseem.diva jakhar.aseem.diva.APICreds2Activity 导出组件中对应的界面如果 Activity 中只有第一个主界面可以导出,说明该组件是安全的,因为主界面导不出的话,apk 就打不开,主界面就是 apk 打开时显示的界面。

结论

不安全

Service 组件

问题说明

Service 是没有界面且能长时间运行于后台的应用组件,应用的组件可以启动一个服务运行于后台无论用户是否切换到其他应用。一个组件还可以绑定到一个 Service 来进行交互,即使进程间通讯间的交互也是可以的。例如,一个 Service 可能是执行文件 I/O,处理网络事物,或与一个内容提供者交互等等,所有这些服务都在后台进行。如果 Service 出现问题,则可能会被系统或者第三方的应用程序直接调出并使用。组件导出可能导致登录界面被绕过、信息泄露、数据库 SQL 注入、DOS、恶意调用等风险。

测试

run app.service.info -a com.package 导出所有组件,可以看到该 apk 没有 service 组件可以导出。如果有 service 组件可以到处,则使用下面命令导出组件对应的界面 run app.service.start --component com.package xxx.xxx.xxx run app.service.info -a com.package run app.service.start --component com.package xxx.xxx.xxx

结论

安全

Content Provider 组件

问题说明

Android 中 Content Provider 可能存在文件目录遍历安全漏洞,该漏洞源于对外暴露 Content Provider 组件的应用没有对 Content Provider 组件的访问进行权限控制和对访问的目标文件的 Content Query Uri 进行有效判断,攻击者利用该应用暴露的 Content Provider 的 openFile() 接口进行文件目录遍历以达到访问任意可读文件的目的。在使用 Content Provider 时,将组件导出提供了 query 接口,由于 query 接口传入的参数直接或间接由接口调用者传入,攻击者构造 SQL Injection 语句,造成信息的泄漏甚至是应用私有数据的恶意改写和删除。攻击者利用文件目录遍历访问任意可读文件、查看本地数据库内容等。

测试

run scanner.provider.finduris -a jakhar.aseem.diva run scanner.provider.injection -a jakhar.aseem.diva 检测是否存在 sql 注入 run scanner.provider.traversal -a jakhar.aseem.diva 检测是否存在目录遍历 run scanner.provider.finduris -a app 包名 run scanner.provider.injection -a APP 包名 检测是否存在 sql 注入 run scanner.provider.traversal -a APP 包名 检测是否存在目录遍历

结论

不安全

Broadcast Reeciever 组件

问题说明

广播接收器 (Broadcast Recevier) 是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播都是源自于系统代码,例如:电池电量低、通知时区改变、拍摄了一张照片或者用户改变了语言选项等等。当然应用程序也可以进行广播,例如,应用程序通知其它应用程序下载完成一些数据并处于可用状态。应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应,所有的接收器均继承自 BroadcastReceiver 基类。广播接收器是没有用户界面的,但是它们可以启动一个 activity 来响应它们收到的信息,或者用 NotificationManager 来通知用户。如果 Broadcast Recevier 存在问题则可能被系统或者第三方的应用程序直接调出并使用。组件导出可能导致登录界面被绕过、信息泄露、数据库 SQL 注入、DOS、恶意调用等风险。

测试

run app.broadcast.info -a jakhar.aseem.diva run app.broadcast.info -a com.packagename run app.broadcast.send --component com.packagename --action xxx.xxx.xxx 存在拒绝服务风险 run app.broadcast.send --action xxx.xxx.push.PenddingIntent 数字签名校验

结论

安全

四. 应用程序数据可备份

问题说明

在 Android 2.1 以上的系统中可以为 App 提供应用程序数据的备份和恢复功能,这些功能由 AndroidMainfest.xml 文件中的 allowBackup 属性值进行控制,其默认的值为 true。当 allowBackup 的值设置为 true 时,就可通过 adb backup 和 adb restore 来进行备份和恢复应用程序数据,这样是可能获取到明文存储的用户敏感信息。

测试

使用 jadx 查看 allowBackup 对应的值。值为 true,故可备份。adb backup -nosystem -noshared -apk -f com.xingming.test.ab jakhar.aseem.diva.MainActivity 备份为 com.xingming.test.ab 输入锁屏密码,即可备份该 apk 数据,并且备份的包命名为 com.xingming.test.ab 最后即可在该目录下生成备份文件。adb backup -nosystem -noshared -apk -f com.xingming.test.ab jakhar.aseem.diva.MainActivity 备份为 com.xingming.test.ab java -jar abe.jar unpack com.xingming.test.ab xm.tar 解密备份文件 adb devices //显示已连接的设备列表,测试手机是否正常连接 adb backup -nosystem -noshared -apk -f com.sina.weibo.ab com.sina.weibo //-nosystem 表示不备份系统应用 -noshared 表示不备份应用存储在 SD 中的数据 -apk 表示备份应用 APK 安装包 -f 表示备份的 .ab 文件路径和文件名 最后是要备份应用的 packageName adb kill-server //关闭 ADB adb devices //重新启动 ADB,检测手机 2 是否成功连接 adb restore com.sina.weibo.ab 将备份数据恢复到另一个手机

结论

不安全

五. Debug 模式

问题说明

APP 软件 AndroidManifest.xml 中的属性值 android:debuggable 如果为 true,那么 APP 可以被 Java 调试工具例如 JDB 等进行调试。当 APP 被调试工具进行调试后可以获取和篡改用户敏感信息,甚至可以分析然后修改代码以实现恶意的业务逻辑,我们经常使用 android.util.Log 来打印日志,而 APP 发布后调试日志能被其他开发者看到,APP 就容易被反编译破解。

测试

检查 AndroidManifest.xml 文件中的 debuggable 属性 (MobSF),检查其是否能被调试。如果没有设置 debuggable 属性,该属性默认为 false。该 apk 被设置为 true,故可调式,不安全。

结论

不安全

六. 不安全的数据存储

问题说明

检查移动客户端 APP 私有目录下的文件及 APP 自身代码中是否存在敏感信息泄露的情况,如果有该类情况,则可能泄露 APP 自身中的服务端接口信息以及用户信息(如密码、私钥)等。

测试

查看路径 /data/data/包名/ 下是否有敏感文件存放。可以看到 databases 下存放着数据库文件。

结论

不安全

七. 日志

问题说明

如果 APP 中有调试日志函数,那么可能输出重要的日志文件,其中包含的信息可能导致客户端用户信息泄露,暴露客户端代码逻辑等。

测试

先查看 apk 运行的 pid,最后进行日志筛选,不然的话日志太多不好查看。ps | grep jakhar.aseem.diva 查看到该 apk 的运行 pid 为 3953。

adb logcat | findstr 3953 筛选出该 apk 的日志文件,在该日志文件中查看到登陆的账户与密码值。

结论

不安全

八. 移动客户端程序保护

问题说明

如果移动客户端的代码没有被相应加固保护,则很容易被攻击者破解进行反编译,通过反编译攻击者可以获取到移动客户端的源代码。

测试

使用查壳工具查看该 apk 是否被加壳。未查到壳,然后使用 jadx 查看该 apk 是否可以被反编译,是否可以看到明文代码。可以看到代码没有被既没混淆,也没加壳。

结论

不安全

九. 键盘劫持测试

问题说明

检查移动客户端 APP 在输入密码等敏感信息时是否使用了自定义软键盘。Android 应用中的输入框默认使用系统软键盘,如果目标手机被安装了木马,木马可以通过替换系统软键盘,记录应用的敏感信息输入。

测试

首先我们需要进入 adb 使用 logcat 调出日志。然后安装键盘记录工具 ns_keylogger.apk,该 APK 文件安装后桌面不会有显示,需要我们到「设置」->「语言和输入法」-> 选择「NSFOCUS test Keyboard」adb logcat -s Keylogger 指定查看键盘输入的日志,打开测试的 apk 随机输入字符,可以看到日志中已经输出了用户输入的字符串。

结论

不安全

十. 屏幕录像保护

问题说明

攻击者可能在用户输入密码的时候去截屏,如果输入密码没有做截屏保护,就可能被攻击者截图到输入的密码。

测试

adb shell /system/bin/screencap -p 输入 png 路径(安卓设备中) /data/local/tmp 普通用户可写将该图片导入到电脑,然后查看。adb pull /data/local/tmp/1.png .\ 将虚拟机的图片导入到电脑的当前目录。查看该图片。可以看到泄露了输入的账户。

结论

不安全

特别声明

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号