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

APP安全测试汇总

一.安装包签名和证书

1.问题说明

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

2.测试

使用jadx工具,可以直接反编译apk包(将apk工具拖入jadx即可),查看APK signature文件。

image-20221203130242025.png

主题中显示是Debug签名,则说明该签名不安全。

3.结论

不安全

二.应用完整性校验

1.问题说明

APK 应⽤完整性即移动客户端程序安装后,在每次启动时都会对⾃身⽂件进⾏完整性进⾏校验。防⽌攻击 者通过反编译的⽅法在客户端程序中植⼊⾃⼰的⽊⻢,客户端程序如果没有⾃校验机制的话,攻击者可能 会通过篡改客户端程序窃取⼿机⽤户的隐私信息。

2.测试

使用Android Killer工具可以对apk的完整性进行校验,以更改apk的图标为例,使用Android Killer工具反编译apk之后,打开AndroidMainfest.xml文件,找到android:icon,该项所对应的值就是图标存储的位置。
 

image-20221203131043756.png


所有apk的图标都在res目录下,
 

image-20221203131417002.png


andriod:icon所对应的值为@mipmap,则res目录下以mipmap开头的目录存放的都是apk图标,该apk下有五个相关目录,故需要将该五个目录的图标都需要更改为要变更的apk图标,名字需要与原来一致。
 

image-20221203131438938.png


将原来apk的图标保存,然后涂鸦,
 

image-20221203132340347.png


然后将5个目录下的图标都更改为该涂鸦图标,此时已经将五个图标全部替换。(替换方法:右击图片选择打开方式,然后点击打开文件路径,然后直接使用涂鸦图片替换原图片即可,名字需要与原图片一致)
 

image-20221203132542869.png


替换完成之后,重新编译apk。
 

image-20221203132856271.png


编译完成之后会输出编译路径。
 

image-20221203132928533.png


使用手机或者模拟器进行安装该apk,如果可以安装并且图标被更改的话,则说明应用完整性不安全。
 

image-20221203133304770.png


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

3.结论

不安全

三.组件导出安全

1.Activity组件
1.1问题说明

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

1.2测试

测试组件导出安全使用drozer工具进行测试。

虚拟器安装agent.apk,主机连接drozer命令

adb forward tcp:31415 tcp:31415

drozer.bat console connect

出现下图所示标志代表主机已经连接到drozer客户端。
 

image-20221205110918358.png


使用jadx查看apk的包名。
 

image-20221205111050245.png


得到包名为jakhar.aseem.diva。
run app.activity.info -a jakhar.aseem.diva(包名) :查看该apk所有可以导出的组件
 

image-20221205111457731.png


run app.activity.start --component jakhar.aseem.diva jakhar.aseem.diva.APICreds2Activity
导出jakhar.aseem.diva.APICreds2Activity组件,可以看到该apk已经自动打开该界面。
 

image-20221205111603141.png


run app.activity.info -a jakhar.aseem.diva(包名) 导出组件
run app.activity.start --component jakhar.aseem.diva jakhar.aseem.diva.APICreds2Activity 导出组件中对应的界面

如果Activity中只有第一个主界面可以导出,说明该组件是安全的,因为主界面导不出的话,apk就打不开,主界面就是apk打开时显示的界面。

2.3结论

不安全

2.Service组件
2.1问题说明

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

2.2测试

run app.service.info -a com.package 导出所有组件,

可以看到该apk没有service组件可以导出。
 

image-20221205112258097.png


如果有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

2.3结论

安全

3.Content Provider组件
3.1问题说明

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

3.2测试

run scanner.provider.finduris -a jakhar.aseem.diva
 

image-20221205112807386.png


run scanner.provider.injection -a jakhar.aseem.diva 检测是否存在sql注入
 

image-20221205112845956.png


run scanner.provider.traversal -a jakhar.aseem.diva 检测是否存在目录遍历
 

image-20221205112926483.png


run scanner.provider.finduris -a app包名

run scanner.provider.injection -a APP包名 检测是否存在sql注入

run scanner.provider.traversal -a APP包名 检测是否存在目录遍历

3.3结论

不安全

4.Broadcast Reeciever组件
4.1问题说明

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

4.2测试

run app.broadcast.info -a jakhar.aseem.diva
 

image-20221205113353977.png


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 数字签名校验

4.3结论

安全

四.应用程序数据可备份

1.问题说明

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

2.测试

使用jadx查看allowBackup对应的值。值为true,故可备份。
 

image-20221205113849249.png


adb backup -nosystem -noshared -apk -f com.xingming.test.ab jakhar.aseem.diva.MainActivity 备份为com.xingming.test.ab

输入锁屏密码,即可备份该apk数据,并且备份的包命名为com.xingming.test.ab
 

image-20221205114112284.png


最后即可在该目录下生成备份文件。

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,故可调式,不安全。

image-20221205114957508.png

3.结论

不安全

六.不安全的数据存储

1.问题说明

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

2.测试

查看路径/data/data/包名/下是否有敏感文件存放。
 

image-20221205115428901.png


可以看到databases下存放着数据库文件。

image-20221205115445108.png

3.结论

不安全

七.日志

1.问题说明

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

2.测试

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

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

image.png


 

image-20221205115906164.png


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

image-20221205120728033.png

3.结论

不安全

八.移动客户端程序保护

1.问题说明

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

2.测试

使用查壳工具查看该apk是否被加壳。
 

image-20221205121159469.png


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

image-20221205121259942.png

3.结论

不安全

九.键盘劫持测试

1.问题说明

检查移动客户端 APP 在输⼊密码等敏感信息时是否使⽤了⾃定义软键盘。Android 应⽤中的输⼊框默认使 ⽤系统软键盘,如果⽬标⼿机被安装了⽊⻢,⽊⻢可以通过替换系统软键盘,记录应⽤的敏感信息输⼊。

2.测试

⾸先我们需要进⼊ adb 使⽤ logcat 调出⽇志。
 

image-20221205121709888.png


然后安装键盘记录工具ns_keylogger.apk,该 APK ⽂件安装后桌⾯不会有显示,需要我们到「设置」->「语⾔和输⼊法」-> 选择「NSFOCUS test Keyboard」
 

image-20221205122815351.png


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

image-20221205122951703.png

3.结论

不安全

十.屏幕录像保护

1.问题说明

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

2.测试

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

image-20221205122217250.png


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

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

image-20221205122339651.png


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

image-20221205122424188.png

3.结论

不安全

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

 读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

大厂面试题

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~ 

 读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

特别声明:

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 生成物体的几种方式

系列文章目录 unity工具 文章目录 系列文章目录前言👉一、直接new的方式创建生成1-1.代码如下1-2. 效果图 👉二、使用Instantiate创建生成(GameObject)2-1.代码如下2-2.效果如下图 👉三.系统CreatePrimitive创建生成3…

Java 18 的应用

Java 18的发布时间是2022年3月22日。这个版本带来了许多新的特性和改进,包括模式匹配增强、协程支持、SIMD指令支持等,这些功能为开发人员提供了更多的灵活性和控制力,有助于他们构建出更高效、可靠的应用程序。 Java 18 的新功能为多种应用…

nodejs设置强制缓存,协商缓存

协商缓存(Conditional Requests) 协商缓存指的是浏览器每次请求时携带上次请求标识(如 Last-Modified 或 ETag),服务器通过这些标识判断资源是否修改,如果没有修改,则返回 304 Not Modified 响…

数据结构之栈和队列(超详解

目录 一.栈 1.栈的基本概念 2.栈的基本操作 3.栈的储存结构 ①栈的顺序储存 (1)基本概念 (2)代码实现 ②栈的链式储存 (1)基本概念 (2)代码实现 二.队列 1.队列的基本概念 2.队列的基本操作 3.队列的储存结构 ①队列的链式储存 (1)基本概念 ​编辑 (2)代码实现 ②…

关于回调函数Callback()

今天在写异步通信时发现少写了一个callback()回调函数,因此一直无法执行,callback其实可以返回该函数的处理结果,返回的是true值,目前理解是这样,,对于需要验证的值要加上&#xff0…

Spring MVC+mybatis 项目入门:旅游网(一)项目创建与准备

个人博客:Spring MVCmybatis 项目入门:旅游网(一)项目创建与准备 | iwtss blog 先看这个! 这是18年的文章,回收站里恢复的,现阶段看基本是没有参考意义的,技术老旧脱离时代(2024年辣…

从0开始学统计-卡方检验

1.什么是卡方检验? 卡方检验是一种用于检验观察频数与期望频数之间差异的统计方法。它通常用于分析分类变量之间的关联性或独立性。在卡方检验中,我们将观察到的频数与期望频数进行比较,从而确定它们之间的差异是否显著。 卡方检验的基本思…

2024-05-23_结构体概念等作业

1.如有以下代码: struct student {int num;char name[32];float score; }stu;则下面的叙述不正确的是:( ) A.struct 是结构体类型的关键字 B.struct student 是用户定义的结构体类型 C.num, score 都是结构体成员名 D.stu 是用户定义的结构体类型名 解析…

【机器学习与大模型】驱动下的应用图像识别与处理

摘要: 本文深入探讨了机器学习在图像识别与处理领域的应用,特别是在大模型的推动下所取得的巨大进展。详细阐述了图像识别与处理的基本原理、关键技术,以及机器学习算法和大模型如何提升其性能和准确性。通过实际案例分析了其在多个领域的广泛…

Flink报错Checkpoint expired before completing

Flink报错Checkpoint expired before completing 报错日志: Failed to trigger or complete checkpoint 42 for job b5d4045c3f466fa91b29d74c5b123c25. (0 consecutive failed attempts so far) org.apache.flink.runtime.checkpoint.CheckpointException: Check…

uniapp实现下拉过滤查询列表

<picker bindchange"bindPickerChanges" value"{{selectedIndex}}"range"{{pickerArray}}"range-key"name"><view class"area-select">在线状态&#xff1a;<label for"">{{pickerArray[select…

虚机配置USB CDROM设备热迁移crash

虚机配置USB CDROM设备热迁移crash 问题现象定位过程堆栈分析日志分析打开trace异常日志上下文分析SpecificationCBWCSW 命令执行发送读命令读取数据 正常日志异常堆栈 修复方案结论 基础原理设备模型数据结构设备实例化 UHCIFrame ListTDQH SCSI 问题现象 dogfood环境一台虚机…

Haskell 的 自定义类型(data、type)

在 Haskell 中&#xff0c;type 和 data 关键字都用于定义新的数据类型&#xff0c;但它们有着不同的作用和语法。 一、type 关键字&#xff1a; 作用&#xff1a;type 关键字用于为已有类型创建别名&#xff0c;使得代码更易读和更具可读性。 语法&#xff1a;其语法为 type…

verilog中的task语句

task语句在Verilog和SystemVerilog中都能使用&#xff0c;但在SystemVerilog中它的功能更加强大&#xff0c;并且添加了一些新的特性。 module ExampleTask;// 定义任务task myTask;input [7:0] a, b;output [15:0] result;beginresult a b;endendtask// 主模块initial begin…

夏日炎炎,手机如何避免变成热源?这些降温技巧分享给你

夏日炎炎&#xff0c;手机也容易“中暑”。 高温不仅会让手机性能大打折扣&#xff0c;还可能引发安全隐患。因此&#xff0c;如何让手机在高温下“冷静”下来&#xff0c;成为了许多手机用户关心的问题。 本文将为你提供一些实用的降温技巧&#xff0c;帮助你的手机安全度过…

小猪APP分发:一站式免费应用推广解决方案

在竞争激烈的移动应用市场中&#xff0c;寻找一个高效且成本友好的方式来推广自己的应用程序&#xff0c;成为了众多开发者面临的共同挑战。幸运的是&#xff0c;像"小猪APP分发www.appzhu.cn"这样的平台应运而生&#xff0c;为开发者提供了一个全面、免费的应用分发…

(优作)风力摆控制系统

本系统由瑞萨 100LGA 单片机控制模块&#xff0c; 6050 三轴陀螺仪加速度模块&#xff0c;直流风机及其驱 动模块&#xff0c;显示模块&#xff0c;键盘模块&#xff0c;蜂鸣器模块以及风力摆机械结构组成&#xff0c; MPU6050 采集风摆姿 态&#xff0c;单片机处理姿态数…

RHCSA —— 第一节 (简介)

目录 一、红帽 RedHat Linux 二、计算机 三、操作系统 四、Linux 入门 一、红帽 RedHat Linux RHCSA英文全称&#xff1a;Red Hat Certified System Administrator &#xff0c;中文全称&#xff1a;红帽认证系统管理员 RHCE英文全称&#xff1a;Red Hat Certified Engi…

TypeScript 的基础类型

1. 布尔类型&#xff08;Boolean&#xff09; 布尔类型表示逻辑上的真或假。在 TypeScript 中&#xff0c;布尔类型只有两个可能的值&#xff1a;true 和 false。例如&#xff1a;typescriptlet isDone: boolean false;### 2. 数字类型&#xff08;Number&#xff09;数字类型…

软件系统部署方案(Word原版文件)

一、 引言 &#xff08;一&#xff09; 编写目的 二、 外部设计 &#xff08;一&#xff09; 标识符和状态 &#xff08;二&#xff09; 约定 1&#xff0e; 数据库涉及字符规范 2&#xff0e; 字段命名规范 &#xff08;三&#xff09; 专门指导 &#xff08;四&#…