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

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

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

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

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

随着移动应用的普及,APP的安全问题日益凸显。本文将从多个维度对APP的安全性进行测试,包括安装包签名、应用完整性、组件安全性、数据存储、日志记录等多个方面。通过具体的测试步骤和工具使用,帮助开发者和安全研究人员发现潜在的安全隐患。

APP安全测试汇总

一. 安装包签名和证书

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

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

  3. 结论
    不安全

二. 应用完整性校验

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

  2. 测试
    使用 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 图标已经被更改。

  3. 结论
    不安全

三. 组件导出安全

Activity 组件

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

  2. 测试
    测试组件导出安全使用 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 打开时显示的界面。

  3. 结论
    不安全

Service 组件

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

  2. 测试

    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
    
  3. 结论
    安全

Content Provider 组件

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

  2. 测试

    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包名 检测是否存在目录遍历
    
  3. 结论
    不安全

Broadcast Reeciever 组件

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

  2. 测试

    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 数字签名校验
    
  3. 结论
    安全

四. 应用程序数据可备份

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

  2. 测试
    使用 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 将备份数据恢复到另一个手机
    
  3. 结论
    不安全

五. Debug 模式

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

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

  3. 结论
    不安全

六. 不安全的数据存储

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

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

  3. 结论
    不安全

七. 日志

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

  2. 测试
    先查看 apk 运行的 pid,最后进行日志筛选,不然的话日志太多不好查看。

    ps | grep jakhar.aseem.diva 查看到该apk的运行pid为3953。
    

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

八. 移动客户端程序保护

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

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

  3. 结论
    不安全

九. 键盘劫持测试

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

  2. 测试
    首先我们需要进入 adb 使用 logcat 调出日志。
    然后安装键盘记录工具 ns_keylogger.apk,该 APK 文件安装后桌⾯不会有显示,需要我们到「设置」->「语言和输入法」-> 选择「NSFOCUS test Keyboard」

    adb logcat -s Keylogger 指定查看键盘输入的日志,打开测试的apk随机输入字符,可以看到日志中已经输出了用户输入的字符串。
    
  3. 结论
    不安全

十. 屏幕录像保护

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

  2. 测试

    adb shell /system/bin/screencap -p 输入png路径(安卓设备中) /data/local/tmp 普通用户可写
    

    将该图片导入到电脑,然后查看。

    adb pull /data/local/tmp/1.png .\ 将虚拟机的图片导入到电脑的当前目录。
    

    查看该图片。可以看到泄露了输入的账户。

  3. 结论
    不安全

特别声明:

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

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