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个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先 ...
随机推荐
- DDD/CQRS模式,微服务,容器
DDD/CQRS模式,微服务,容器 https://docs.microsoft.com/zh-cn/previous-versions/msp-n-p/ee658109(v=pandp.10) We ...
- ThinkPHP3创建Model模型--对表的操作
创建Model模型 把"Home/Model"文件夹剪切到Application文件夹下,让Home和Admin共同使用. 第一种实例化模型的方法 第二种实例化模型的方法 第三种实 ...
- 在ensp中的acl控制
原理 实验模拟 实验拓扑 相关参数 我们在每一台路由器上设置ospf服务,使其互相能通 下面我们配置基本ACL控制访问 配置完成后,尝试在R1上建立telent连接 但是这样设置是不安全的,只要是直连 ...
- 使用 Java 移除字符串中的前导零
给定一串数字,从中删除前导零. public class Test { public static void main(String[] args) { String str = "0000 ...
- [转帖]很遗憾,没有一篇文章能讲清楚ZooKeeper
很遗憾,没有一篇文章能讲清楚ZooKeeper https://os.51cto.com/art/201911/606571.htm [51CTO.com原创稿件]互联网时代是信息爆发的时代,信息的高 ...
- 如何修改通过Anaconda安装的jupyter notebook的工作目录
通过Anaconda安装jupyter notebook,对新手来说是一个非常明智的选择,可以避免很多不必要的麻烦! jupyter notbook默认情况下的工作目录是c:\user\...,接下来 ...
- checkbox之全选和反选
先导入jquery组件 <input type="checkbox" id="checkall">全选<input type="ch ...
- WPS生成多级编号
需求: 目前标题是标题1,想要 string 是二级标题,并且编号是 2.1 方案: (1)设置string是二级标题 (2)设置多级编号 选中,右击,选择[项目符号和编号] 选择[多级编号],点击[ ...
- springcolud 的学习(二).微服务架构的介绍
什么是微服务微服务架是从SOA架构演变过来,比SOA架构粒度会更加精细,让专业的人去做专业的事情(专注),目的提高效率,每个服务于服务之间互不影响,微服务架构中,每个服务必须独立部署,互不影响,微服务 ...
- SQLite介绍和使用
SQLite特点: (1)轻量级,跨平台的关系型数据库,所以支持视图,事务,触发器等. (2)零配置-无需安装和管理配置,存储在单一磁盘文件中的完整的数据库 (3)数据库文件可共享,支持多种开发语言. ...