APP安全测评checklist
leader不要打我啊,我要借用一下我组app的安全测评检查方案,这些最基本的安全防范措施应该是每个app都要注意的吧:
对了,首先,你的app得先混淆啊~:AndroidStudio 混淆打包
先来个checklist:
| 编号 | 检查项目 | 测评结果 | 
| 1 | 明文传输用户名、密码和验证码等敏感信息。 | |
| 2 | 不安全的本地存储。 | |
| 3 | 泄漏后台服务器地址,导致服务器可控 | |
| 4 | 边信道信息泄漏 | |
| 5 | 未使用有效的token机制,导致可以绕过鉴权 | |
| 6 | 传输数据可修改,造成越权访问 | |
| 7 | 登录设计缺陷,存在被暴力破解风险 | |
| 8 | 利用业务逻辑缺陷制作短信炸弹 | |
| 9 | 关键页面存在钓鱼劫持风险,导致用户信息泄露 | |
| 10 | 可以重新编译打包 | |
| 11 | WebView漏洞 | |
| 12 | Web表单设计缺陷,存在SQL注入漏洞 | |
| 13 | 组件Content Provider配置错误,导致数据泄漏 | |
| 14 | 组件Activity配置错误,导致登录页面被绕过 | |
| 15 | 组件Service配置错误,导致非法权限提升 | |
| 16 | 组件Broadcast Receiver配置错误,导致拒绝服务、非法越权 | |
| 17 | 开启allowbackup备份权限,存在备份数据泄露风险 | |
| 18 | 开启Debuggable属性,存在应用信息篡改泄露风险 | |
| 19 | 下载非官方开发工具,导致IOS版本APP被植入恶意代码 | |
| 20 | 开发者证书不规范,导致开发者身份信息不明 | 
具体的解释:
1、明文传输用户名、密码和验证码等敏感信息
问题描述:用户登录过程中,在与服务器端交互时明文传输用户名、密码或者验证码等,可导致用户敏感信息泄露。
检测结果:手机连接Fiddler代理,在Fiddler代理中抓包测试。APP登录操作: 账号、登录凭证不安全传输。
密码虽然是MD5散列后的数值,但是传输使用的是http协议,存在被嗅探窃取的可能性,一旦泄漏,黑客能够直接通过该用户名和Password登录。
整改建议:登录凭证信息需加密传输,建议使用自定义加密协议或使用https方式传输。
2、 不安全本地存储
问题描述:安卓开发者使用多种方法将数据存储在安卓应用中,而存储在本地的数据文件如果未加密,易造成敏感信息泄漏。
检测结果:Shared Preferences用户名和登录凭证明文存储在healthConfig.xml文件中。
SQLite 未发现敏感数据存储
SD卡敏感数据存储 未发现数据写入。
整改建议:对存储在本地的敏感数据进行加密。
3、泄漏后台服务器地址,导致服务器可控
问题描述:在使用BurpSuite等工具对应用进行监听的过程中,发现后台服务器地址。对后台服务器进行测试,若后台服务器存在漏洞,则可控制后台服务器。
检测结果:后台服务器地址为**********,未发现可导致服务器可控的安全漏洞。
4、边信道信息泄漏
问题描述:当APP处理用户或其它数据源输入的数据时,可能会把数据放在不安全的位置,容易导致边信道被攻击者利用造成信息泄露。
检查结果:用户登录凭证、设备ID等敏感数据出现在log中。
整改建议:对logcat的打印数据进行过滤,敏感数据不能出现在log中。
5、未使用有效的token机制,导致可以绕过鉴权
问题描述:如果被测应用没有使用有效的token机制,对登陆响应中的服务器返回的鉴权信息进行修改,即可绕过服务器鉴权,直接访问系统内部信息。
检测结果:从代理抓包分析,APP登录是会将一个deviceid和用户凭证一起提交,用户登录成功后,该deviceid将作为后续接口调用的凭证,即Token。
经查,该deviceid为设备中某些公开信息(IMEI、设备型号、操作系统版本等)的Base64编码结果,不具备隐私性,黑客可以通过获取这些公开信息伪造用户身份。
整改建议:在deviceid中加入随机数据。
6、传输数据可修改,造成越权访问
问题描述:利用已有的用户名密码登录应用,当应用访问某一模块时,使用BurpSuite等代理工具进行监听,对访问该模块时的关键信息进行替换,则可越权访问他人的应用模块。
检测结果:同第5条。
7、登录设计缺陷,存在被暴力破解风险
问题描述:用户登录过程中,未对同一用户的登录失败次数做限制,导致存在被暴力破解的风险。
问题详情:对登录接口进行暴力破解,错误50次后,输入正确用户名和密码仍然成功登录,表明没有对登录接口做暴力破解防护。
整改建议:限制账号登录错误次数,超过阀值时需要提供验证码机制。
8、利用业务逻辑缺陷制作短信炸弹
问题描述:如果在用户注册过程中存在逻辑设计缺陷,可对指定手机号码随意发送短信,造成短信炸弹攻击,可能造成用户投诉或恶意软件传播等。
测试结果:用户选择注册或忘记密码功能时,会触发短信验证码发送,多次调用验证码发送接口,每分钟能收到多条短消息,且没有发现总量限制。
整改建议:如果已经限制了每个用户每分钟的短信条数(如果没有限制,请做限制处理),建议进一步限制每个用户每天的短信条数。
9、关键页面存在钓鱼劫持风险,导致用户信息泄露
问题描述:劫持钓鱼,指恶意应用针对正常应用的特定界面进行仿冒替换,诱骗用户在仿冒界面操作,达到钓鱼目的。此类攻击,多针对APP的鉴权或支付场景,诱骗用户输入关键隐私信息,如账号、登陆密码和支付密码等,达到隐私窃取的目的。
检测结果:恶意应用可以通过监测进程机制实现对APP的劫持,当APP启动时,弹出伪造的登录Activity,实现钓鱼劫持。
整改建议:
- 建议在登录Activity的onpause方法中实现钓鱼劫持防护功能,如提示用户当前登录也已切换等。
- 使用HTML5架构或android+HTML5混合开发,实现登陆、支付等关键页面,降低被劫持的风险。
10、可以重新编译打包
问题描述:破解者通过反编译后得到程序源代码,修改后重新编译、签名并安装。在重新打包的过程中,破解者可能注入恶意代码,或者修改软件逻辑绕过鉴权等。
检测结果:通过反编译工具对APP进行反编译后,修改部分源代码后,可以重新打包安装,并成功安装在手机中运行。
整改建议:通过检查程序安装后classes.dex文件的Hash值,判断软件是否被重打包并进行提示。(这个具体使用时判断了打包keystore的SHA1值,不过前提是这个jks文件没被劫持啊)
11、WebView漏洞
问题描述:在WebView下有一个非常特殊的接口函数addJavascriptInterface,能实现本地java和js的交互。被测应用中存在WebView漏洞,没有对注册JAVA类的方法调用进行限制,导致攻击者利用addJavascriptInterface这个接口函数穿透webkit控制android本机。
检测结果:通过反编译源码发现BrowserActivity中存在WebView组件,并使用了addJavascriptInterface接口,但是对该接口使用@JavascriptInterface进行了保护,无需整改。(说实话这个不太熟悉)
12、Web表单设计缺陷,存在SQL注入漏洞
问题描述:开发过程中未对特殊字符进行过滤,攻击者可以通过把SQL命令插入到Web表单提交或者输入域名或者页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令的目的,这样攻击者就能够对内部数据库进行增删改操作。
检测结果:未发现SQL注入漏洞
13、组件Content Provider配置错误,导致数据泄漏
问题描述: Content Provider是安卓应用组件,以表格的形式把数据展现给外部的应用。每个Content Provider都对应一个以”content://”开头的特定URI,任何应用都可以通过这个URI操作Content Provider 应用的数据库。如果应用对权限控制不当就会造成信息泄露。
检测结果:使用drozer工具检测,未发现可被非法访问的URI。
14、组件Activity配置错误,导致登录页面被绕过
问题描述:Activity是安卓应用组件,提供与用户进行交互的界面。如果应用对权限控制不当,可以绕过登录界面直接显示该界面。
检测结果:使用drozer工具检测,发现多个可被外部应用直接调用的Activity组件,其中有的Activity可以跳过登录直接启动,存在安全风险。
整改建议:对风险Activity显式设置android:exported=false权限。
命令:dz> run app.activity.info -a <packageName>
15、组件Service配置错误,导致非法权限提升
问题描述:Service是Android中四大组件进行后台作业的主要组件,如果被测应用对权限控制不当,导致其他应用可以启动被测应用的Service。
检查结果:使用drozer工具检测,发现可被外部应用直接调用的Service组件,但未发现非法调用风险。
整改建议:请自确认暴露出来的两个Service是否存在非法调用风险,对风险Service显式设置android:exported=false权限。
命令:dz> run app.service.info -a <packageName>
16、组件Broadcast Receiver配置错误,导致拒绝服务、非法越权
问题描述:Broadcast Receiver是Android中四大组件用于处理广播事件的组件,若存在配置不当则其他应用可以伪装发送广播从而可造成信息泄露,拒绝服务攻击等。
检查结果:使用drozer工具检测,发现多个暴露的Broadcast组件,通过drozer发送这些自定义的Receiver对应的广播分别会造成系统弹框和程序奔溃,可能会被恶意应用利用,造成拒绝服务攻击。
整改建议:对外暴露的Broadcast组件显式设置android:exported=false权限。
命令:dz> run app.broadcast.send --component <packageName> <Customer Receiver Name>
17、开启allowbackup备份权限,存在备份数据泄露风险
问题描述: 被测应用的AndroidManifest.xml文件中allowBackup属性值被设置为true,可通过adb backup对应用数据进行备份,在无root的情况下可以导出应用中存储的所有数据,造成用户数据泄露。
检测结果:反编译查看AndroidManifest.xml,发现allowBackup属性被设置为true
整改建议:如无特殊需求,将allowBackup设置为false
18、开启Debuggable属性,存在应用信息篡改泄露风险
问题描述:被测应用的AndroidManifest.xml文件中Debuggable属性值被设置为true,可以设置断点来控制程序的执行流程,在应用程序运行时修改其行为。
检测结果:未发现开启Debuggable属性
19、下载非官方开发工具,导致IOS版本APP被植入恶意代码
检查结果:此项仅针对IOS客户端。请项目组自检,确保开发工具为官方下载。
(Xcode后门事件影响不小啊)
20、开发者证书开发者证书不规范,导致开发者身份信息不明
问题描述: 被测应用的开发者证书不规范,导致被测应用的开发者身份信息不是与本公司相关的信息。
(这个在生成jks或者keystore的时候要填写公司或者个人合理的信息)
APP安全测评checklist的更多相关文章
- Thunder——爱阅app(测评人:方铭)
		B.Thunder——爱阅app(测评人:方铭) 一.基于NABCD评论作品,及改进建议 每个小组评论其他小组Alpha发布的作品: 1.根据(不限于)NABCD评论作品的选题: 2.评论作品对选题的 ... 
- APP安全测评checklist---Android
		首先,你的app得先混淆:AndroidStudio 混淆打包 先来个checklist: 编号 检查项目 测评结果 1 明文传输用户名.密码和验证码等敏感信息. 2 不安全的本地存储. 3 泄漏后台 ... 
- 移动App性能测评与优化1.4.4 多进程应用
		1.4.4 多进程应用 根据上一节中的描述,当一个进程结束后,它所占用的共享库内存将会被其他仍然使用该共享库的进程所分担,共享库消耗的物理内存并不会减少.实际上,对于所有共享使用了这个库的应用,Pss ... 
- Android面试必备
		好吧,说实话是自己面试被问到的和自己整理的别人的一些问题,很多问题的回答可能根据水平不同层次和深度不同,如果经常忘的话可能是还没明白原理,学习就是对对抗遗忘,现在开始复习吧: 每个面试的问题都极大的贴 ... 
- softwareTesting_work1
		1.12306手机APP软件测评 首先是软件界面,iPhone版本和android版本长得是一模一样,虽然是注重功能的软件,但是一样样的界面让人完全感受不到软件设计者的诚意啊. 还有就是软件图片和图标 ... 
- Awesome Swift
		Awesome Swift https://github.com/matteocrippa/awesome-swift A collaborative list of awesome Swift re ... 
- 小组互评Alpha版本
		Thunder——爱阅app(测评人:任思佳) 一.基于NABCD评论作品,及改进建议 每个小组评论其他小组Alpha发布的作品:1.根据(不限于)NABCD评论作品的选题:2.评论作品对选题的实现效 ... 
- 2017年软件工程作业-“Hello World!”团队互评beta版本
		A.欢迎来怼——博客园安卓APP(测评人:刘淑霞) 博客地址:http://www.cnblogs.com/liusx0303/p/7905928.html B.Thunder——爱阅app(测评人: ... 
- 2017年软件工程第八次作业-互评Alpha版本
		B.Thunder——爱阅app(测评人:方铭) 一.基于NABCD评论作品,及改进建议 每个小组评论其他小组Alpha发布的作品:1.根据(不限于)NABCD评论作品的选题:2.评论作品对选题的实现 ... 
随机推荐
- css直接写出小三角
			在开发移动端项目时,总是遇到很多小三角,之前一直用图片,感觉好麻烦,今天尝试了直接用CSS写出小三角!先看看如何写出各种小三角! /*箭头向上*/ .arrow-up { ; ; border-lef ... 
- JQ each
			<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
- Xcode中插件的安装以及Xcode升级后插件实效的解决方法
			插件的安装 下载好插件,直接运行,然后将Xcode关闭,再次打开Xcode会弹出一个提醒框. 这时候选择 Load Bundle 即可,这时候插件就安装到了Xcode上. Xcode所有的插件都安装在 ... 
- 设置启动页面-Launch Image
			一.添加启动图 二.拖入相应尺寸的图片 图片必须是png格式的.不同机型需要的图片的尺寸: iPhone4.4s-@2x 3.5寸 640*960 iPhone5.5s.5c-@2x 4.0寸 640 ... 
- Java内存模型(转载)
			1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题 ... 
- Lua编译
			编译lua包含3部分内容:lua库文件(lua*.lib),lua解释器(lua.exe),lua编译器(luac.exe) 首先: 下载源代码,编译批处理(以5.2.3为例): cd srccl / ... 
- 动态链接库的生成(dll)和 动态链接库隐式and显式调用
			一.构建动态链接库(dll.dll dll.lib dll.h) 说明: .dll 是在执行程序是调用 .lib 是在连接程序是调用 .h是在编译程序时调用 1.头文件(声明导入函数):_decl ... 
- AJAX防重复提交的办法总结
			最近的维护公司的一个代理商平台的时候,客服人员一直反映说的统计信息的时候有重复数据,平台一直都很正常,这个功能是最近新进的一个实习生同事写的功能,然后就排查问题人所在,发现新的这个模块的AJAX提交数 ... 
- 记glide框架使用中所遇到的问题
			最近实在是太忙,每有时间写博客.记得之前写过一篇关于glide加载图片不显示的博客,但是给出最终的解决方法.这次我将把在项目中使用glide所遇到的问题总结一下. 1.使用glide最好对glide进 ... 
- Mongo客户端
			http://www.linuxidc.com/Linux/2012-07/64233.htm http://www.oschina.net/p/rockmongo http://www.cnblog ... 
