app安全测试初级
分析方法:
静态分析
主要是利用apktool、dex2jar、jd-gui、smali2dex等静态分析工具对应用进行反编译,并对反编译后的java文件、xml文件等文件进行静态扫描分析,
通过关键词搜索等静态方式将具有安全隐患的代码进行摘录并存入到检测平台后台,为后续的安全检测报告提供数据依据。
动态分析
动态分析技术是对应用软件安装、运行过程的行为监测和分析。检测的方式包括沙箱模型和虚拟机方式。
(1)沙箱模型方式通过建立安全的沙箱模型,使得移动应用的执行环境是封闭的一个沙箱,不受到沙箱外环境的干扰,结合传统PC机上的沙箱模型原理的分析和研究,得到合适于手机上的沙箱模型。
(2)虚拟机方式通过建立与Android手机终端软件运行环境几乎一样的虚拟执行环境,手机应用软件在其中独立运行,从外界观察应用程序的执行过程和动态,进而记录应用程序可能表现出来的恶意行为。
人工分析
人工分析技术是专业安全人员接收到用户提交的待检测应用后,先对其进行安装、运行和试用,通过在试用过程中,逐步掌握该应用的特点,并通过自己的专业经验,来圈定检测重点。
人工专业检测在涵盖基础检测和深度检测的全部检测项的同时,兼顾侧重点检测,给予应用更全面、更专业、更贴合应用的量身打造的检测服务。 初级测试点:
1. 用户隐私
- 检查是否在本地保存用户密码,无论加密与否
- 检查敏感的隐私信息,如聊天记录、关系链、银行账号等是否进行加密
- 检查是否将系统文件、配置文件明文保存在外部设备上
- 部分需要存储到外部设备的信息,需要每次使用前都判断信息是否被篡改
2. 文件权限
- 检查App所在的目录,其权限必须为不允许其他组成员读写
3 . 网络通讯
- 检查敏感信息在网络传输中是否做了加密处理,重要数据要采用TLS或者SSL
4 . 运行时解释保护
- 对于嵌有解释器的软件,检查是否存在XSS、SQL注入漏洞
- 使用webiew的App,检查是否存在URL欺骗漏洞
5. Android组件权限保护
- 禁止App内部组件被任意第三方程序调用。
- 若需要供外部调用的组件,应检查对调用者是否做了签名限制
6 . 升级
- 检查是否对升级包的完整性、合法性进行了校验,避免升级包被劫持
7. 3rd库
- 如果使用了第三方库,需要跟进第三方库的更新
初级测试方法:
1.接口测试:
测试的是联网的android应用程序,即内部封装了一系列web应用操作接口,实际测试跟常规的web安全测试没有区别。
只不过由于实际的不安全wifi环境,对于移动app调用web接口,涉及到敏感的用户信息,包括用户名,密码,微博的gisd等使用http明文传输,都会造成比较严重的信息泄露。
2.组件测试:
对于android组件测试,就涉及到了apk反汇编的一些知识了,我主要使用的工具有小米人apk改之理以及drozer,通过这两个小工具来反编译apk是很方便滴。我们安全测试的会涉及的组件包括WebView,
和android四大组件Activity、Service、Broadcast Receiver、Content Provider;
测试WebView的方法用的是乌云知识库里面发表的那种方法,反编译apk文件,使用小米人apk改之理或者apktool都可以反编译成smali汇编,然后查找addJavascriptInterface,对导出接口进行测试,一般情况下,
可以直接使用黑盒测试的方法,即让app访问:黑盒测试;关于webview的一个典型的漏洞细节你也可以查看乌云知识库。
测试四大组件就可以使用drozer这款工具,drozer列举的apk的组件都是获取AndroidManifest.xml里面声明的,所以不是很全面,对于程序代码里面动态创建滴,
还是需要反编译查看smali代码,或者还原smali成java代码,当然还原的java代码是也是jd-gui根据生成的smali自动生成的,存在一定的区别。
3.测试Broadcast Receiver:
首先查看一下手机百度使用的Receiver组件,如下:
这里测试的是com.baidu.searchbox.story.DownloadStoryReceiver 这个receiver组件,这里列举的receive主要是因为AndroidManifest.xml存在如下这段代码
<receiver android:name=".story.DownloadStoryReceiver" android:exported="true">
android:exported="true"表示能接收外部广播因为一看就是下载,然后跟进这个类里面,查看onReceive处理方法,直接查看还原的java代码,有如下片断:
public void onReceive(Context paramContext, Intent paramIntent) { this.b = paramContext; this.d = paramIntent.getStringExtra("download_url"); this.c = paramIntent.getStringExtra("display_url"); if ((TextUtils.isEmpty(this.d)) || (TextUtils.isEmpty(this.c))) if (g) Log.e(h, "Invalid param! download_url or display_url cannot be empty."); while (true) { return; String str1 = paramIntent.getStringExtra("filename"); this.f = ("Content-Disposition","attachment; filename="" + str1 + """); ……………………
所以可以直接发广播测试:
然后就可以看到手机百度会跳转到 http://tea504.sinaapp.com 这个地址,并且后台下载http://tea504.sinaapp.com/xss.js地址的xss.js文件,本地保存为test.xxx
4.测试Content Provider:
这个是负责数据存储,使用的是sqlite数据库,基本上都存在sql注入,一般能够被外界调用都很危险,查看AndroidManifest.xml存在代码:
<provider android:name=".bookmark.BookmarkProvider" android:writePermission="com.baidu.permission.write_bookmark" android:exported="true" android:authorities="baidusearch_bookmark" />
又是android:exported=”true”,并且只限制了writePemission权限,所以可以恶意app还是可以获取这个读取这个数据库的信息,baidusearch_bookmark记录的是用户浏览历史记录和书签,如下:
这是我手机上的 /data/data/com.baidu.searchbox/databases/SearchBox.db 数据库里面的数据,
然后就可以访问这个uri获取数据测试,如下:
如上 第一次sql语句写错了,提示报错。第二次可以成功查询
当然对于这种组件安全,需要使用恶意app进行攻击。
app安全测试初级的更多相关文章
- Android APP压力测试(三)之Monkey日志自动分析脚本
Android APP压力测试(三) 之Monkey日志自动分析脚本 前言 上次说要分享Monkey日志的分析脚本,这次贴出来分享一下,废话不多说,请看正文. [目录] 1.Monkey日志分析脚本 ...
- Android APP压力测试(二)之Monkey信息自动收集脚本
Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...
- 初识App安全性测试
目前手机App测试还是以发现bug为主,主要测试流程就是服务器接口测试,客户端功能性覆盖,以及自动化配合的性能,适配,压测等,对于App安全性测试貌似没有系统全面统一的标准和流程,其实安全性bug也可 ...
- Android APP压力测试(一)之Monkey工具介绍
Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...
- shellKali Linux Web 渗透测试— 初级教程(第三课)
shellKali Linux Web 渗透测试— 初级教程(第三课) 文/玄魂 目录 shellKali Linux Web 渗透测试—初级教程(第三课) 课程目录 通过google hack寻找测 ...
- 移动app安全测试
安全方面逐渐转向app安全,服务端app安全测试基本上跟常规的web方面挖掘差不多,只是增加了一个反编译或抓包的过程. 参考文献: http://drops.wooyun.org/tips/749 h ...
- 深圳尚学堂:Android APP的测试流程
每一个新开发的软件都避免不了测试,我在这里总结了一些Android系统的移动端APP测试的一些测试流程,希望可以给大家一些帮助. 1. UI 测试App主要核ui与实际设计的效果图是否一致:交互方面的 ...
- app专项测试自动化测试方法思路与实现
秉着个人意愿打算把python+rf接口自动进行彻底结束再做些其它方面的输出~但事与愿违,但领导目前注重先把专项测试方面完成,借此,先暂停python+rf(主要是与Jenkins集成+导入DB+微信 ...
- 移动应用/APP的测试流程及方法
1. APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先 ...
随机推荐
- c#之break和continue的区别
break:跳出循环,执行循环外的语句: continue:跳出此次循环,进入下一次循环:
- Zero-shot User Intent Detection via Capsule Neural Networks
Architecture SemanticCaps 通过Bi-LSTM表征得到的隐层向量经过multi-head后可以得到R个表征 Detect ...
- 【问题】Could not locate PropertySource and the fail fast property is set, failing
这是我遇到的问题 Could not locate PropertySource and the fail fast property is set, failing springcloud的其他服务 ...
- ClickHouse中的循环复制集群拓扑
关系型数据库,但千万级表关联数据库基本上不太可能做到秒出:考虑过Sharding,但数据量大, 各种成本都很高:热数据存储到ElasticSearch,但无法跨索引关联,导致不得不做宽表, 因为权限, ...
- oracle 在列名后的 (+)是什么意思,如何转换为mysql
外连接的意思select *from a,bwhere a.id=b.id(+)意思就是返回a,b中匹配的行 和 a中有但是b中没有的行. 参考https://www.cnblogs.com/Aaro ...
- PAT(B) 1030 完美数列 - C语言 - 滑动窗口 & 双指针
题目链接:1030 完美数列 (25 point(s)) 给定一个正整数数列,和正整数 \(p\),设这个数列中的最大值是 \(M\),最小值是 \(m\),如果 \(M≤mp\),则称这个数列是完美 ...
- Go基础编程实践(六)—— 文件
检查文件是否存在 在此程序同目录下创建log.txt文件,以检测. package main import ( "os" "fmt" ) func main() ...
- stone [期望]
也许更好的阅读体验 \(\mathcal{Description}\) 有 \(n\) 堆石子,依次编号为 \(1, 2,\ldots , n\),其中第 \(i\) 堆有 \(a_i\) 颗石子 你 ...
- C# 获取特殊日期
//1.当前时间DateTime dt = DateTime.Now; //2.本周周一DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.D ...
- MySQL数据库基本规范整理
此篇文章是学习MySQL技术整理的,不足之处还望指教,不胜感激. 数据库基本规范涉及数据库命名规范.数据库索引设计规范.数据库基本设计规范.数据库字段设计规范.数据库SQL开发规范.数据库操作行为规范 ...