有任何问题可留言评论,另有Excel版提供

https://github.com/laoel/testing-guide/blob/master/02-Android%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%AE%89%E5%85%A8%E6%B5%8B%E8%AF%95%E6%8C%87%E5%8D%97.xlsx

客户端程序安全

Classes.dex文件代码加密混淆保护

漏洞级别
高/中
漏洞描述
对客户端程序反编译文件DEX进行转换,查看客户端是否对JAVA源生代码进 行加密混淆,是否能看到清晰的JAVA代码。

漏洞危害
程序代码可以被轻松反编译,攻击者可逆向工程分析程序运行原理、漏洞挖掘。
修复建议
1、对关键代码进行加密混淆。
2、使用第三方平台对APK进行加固。

So文件代码加密混淆保护

漏洞级别

漏洞描述
利用工具反编译 so 文件,查看客户端是否对 C/C++源生代码进行加密混淆。
漏洞危害
应用程序关键代码明文暴露降低了攻击者入侵和利用的门槛,攻击者或恶意程序可通过修改代码获取关键信息或绕过部分逻辑直接操作。
修复建议
1、对关键代码进行加密混淆。
2、使用第三方平台对APK进行加固。

敏感文件加密保护

漏洞级别
高/中/低
漏洞描述
查看客户端中的敏感文件是否加密保存,包括但不限于JavaScript、Lua、Python等脚本代码,xml、ini等关键配置文件,证书文件及开发残留文件。
漏洞危害
攻击者容易根据明文的敏感文件对APP进行逆向工作,从而还原出APP通信内容、APP的私钥等关键数据。
修复建议
1、对敏感数据进行加密处理。
2、对于不必要的数据不要在本地客户端。

文件完整性校验

漏洞级别

漏洞描述
检测客户端程序是否对自身完整性进行校验。
漏洞危害
攻击者能够通过反编译的方法在客户端程序中植入自己的木马,客户端程序如果没有自校验机制的话,攻击者可能会通过篡改客户端程序窃取手机用户的隐私信息。
修复建议
1、建议使用CRC、MD5或者SHA1等算法方式对APK文件进行完整性校验。
2、使用第三方平台对APK进行加固。

硬编码安全

漏洞级别

漏洞描述
在计算机程序或文本编辑中,硬编码是指将可变变量用一个固定值来代替的方法。密钥硬编码在代码中,而根据密钥的用途不同,这导致了不同的安全风险,有的导致加密数据被破解,数据不再保密,有的导致和服务器通信的加签被破解,引发各种血案。
漏洞危害
导致加密数据被破解。
修复建议
1、不要使用硬编码。
2、应对密码加密存储,并且在外部资源文件中进行处理。

使用不安全的加密算法

漏洞级别

漏洞描述
检测客户端程序使用的加密算法是否安全可靠。
漏洞危害
导致加密数据被破解。
修复建议
使用安全且不易被破解的加密算法。

debug调试属性未关闭

漏洞级别

漏洞描述
检测客户端程序是否开启debug调试属性。
漏洞危害
APP可被Java调试工具进行调试,进而获取和篡改用户敏感信息,甚至分析并且修改代码实现的业务逻辑。
修复建议
将AndroidManifest.xml文件中android:debuggable属性值设为false。

allowBackup备份安全

漏洞级别

漏洞描述
检测客户端程序是否开启allowBackup备份属性。
漏洞危害
攻击者可通过adb backup和adb restore对APP的应用数据进行备份和恢复,从而可能获取明文存储的用户敏感信息。
修复建议
将AndroidManifest.xml文件中android:allowBakup属性值设为false。

应用权限测试

漏洞级别

漏洞描述
检测客户端程序是否存在敏感权限。
漏洞危害
APP应用应只拥有所需功能的最小行为权限,多余的行为权限对APP的安全造成危害,同时容易被安全检测工具认定为恶意APP。
修复建议
请确认APP应用是否需要这些权限,如果不需要,请删除多余的权限。

Activity 界面劫持

漏洞级别

漏洞描述
检查是否存在Activity界面劫持风险,确认客户端是否能够发现并提示用户存在劫持。
漏洞危害
Activity界面劫持可以获取用户输入的敏感信息,如账号、密码。
修复建议
当主activity退到后台后,推送Toast弹框消息提示用户,程序已经进入后台运行。

组件安全

Activity组件安全

漏洞级别

漏洞描述
检测Activity组件是否允许非授权的第三方调用。
漏洞危害
Activity组件允许非授权的第三方调用可能会引发权限绕过漏洞,攻击者可以未授权获取敏感信息或者进行非法操作。
修复建议
建议在AndroidManifest.xml中设置所有不允许导出的Activity组件exported属性为false。

Service组件安全

漏洞级别

漏洞描述
检测Service组件是否允许非授权的第三方调用。
漏洞危害
Service组件允许非授权的第三方调用可能会引发权限绕过漏洞,攻击者可以未授权获取敏感信息或者进行非法操作。
修复建议
建议在AndroidManifest.xml中设置所有不允许导出的Service组件exported属性为false。

Broadcast Receiver组件安全

漏洞级别

漏洞描述
检测Broadcast Receiver组件是否允许非授权的第三方调用。
漏洞危害
Broadcast Receiver组件允许非授权的第三方调用可能会引发权限绕过漏洞,攻击者可以未授权获取敏感信息或者进行非法操作。
修复建议
建议在AndroidManifest.xml中设置所有不允许导出的Broadcast Receiver组件exported属性为false。

Content Provider组件安全

漏洞级别

漏洞描述
检测Content Provider组件是否允许非授权的第三方调用。
漏洞危害
Content Provider组件允许非授权的第三方调用可能会引发权限绕过漏洞,攻击者可以未授权获取敏感信息或者进行非法操作。
修复建议
建议在AndroidManifest.xml中设置所有不允许导出的Content Provider组件exported属性为false。

数据安全

Shared_Prefs敏感信息保护

漏洞级别
高/中
漏洞描述
APP在处理运行时产生的敏感数据(如账号、密码、手机号、Cookie、Token等业务相关敏感信息)时,将未经加密的敏感信息以明文的形式保存在文件或者本地数据库中。
漏洞危害
当用户手机失窃或者连接到电脑等情况时,这些明文的敏感数据可能被第三方程序获取,导致用户的账号、密码、手势密码、手机号等个人敏感信息容易泄露。
修复建议
1、使用安全有效的加密算法对敏感信息进行加密保护。
2、根据业务需求确定必需在本地存储的数据,不存储非必要的数据。

本地数据库明文存储敏感信息

漏洞级别
高/中
漏洞描述
APP在处理运行时产生的敏感数据(如账号、密码、手机号、Cookie、Token等业务相关敏感信息)时,将未经加密的敏感信息以明文的形式保存在本地数据库中。
漏洞危害
当用户手机失窃或者连接到电脑等情况时,这些明文的敏感数据可能被第三方程序获取,导致用户的账号、密码、手势密码、手机号等个人敏感信息容易泄露。
修复建议
1、使用安全有效的加密算法对敏感信息进行加密保护。
2、根据业务需求确定必需在本地存储的数据,不存储非必要的数据。

Log日志打印敏感信息

漏洞级别
高/中
漏洞描述
检测Logcat日志安全性。
漏洞危害
存在用户个人敏感信息泄露的风险。
修复建议
在发布程序之前屏蔽掉敏感的Log日志信息,或者使用统一的Log控制类,屏蔽掉所有敏感信息的输出。

应用安全规范

使用自带安全软键盘完成敏感输入

漏洞级别

漏洞描述
检测客户端程序在输入敏感数据时是否使用自带安全软键盘。
漏洞危害
安卓应用中的输入框默认使用系统软键盘,手机安装木马后,木马可以通过替换系统软键盘,记录手机键盘输过的密码。
修复建议
使用APP自定义的安全软键盘(而非系统输入法)来输入敏感信息。

敏感界面截屏和录屏保护

漏洞级别

漏洞描述
检测客户端程序的敏感界面是否可防止屏幕截屏和录屏。
漏洞危害
录屏和截屏是黑客窃取用户隐私的又一手段,通过对用户敏感界面的截取而窃取用户的登录、支付的信息从而造成客户的损失。
修复建议
对于APP的业务敏感界面,禁止系统进行截屏和录屏。

应用后台运行模糊处理保护

漏洞级别

漏洞描述
检测客户端程序后台运行的APP界面是否进行了模糊处理。
漏洞危害
可能产生一定的信息泄露风险。
修复建议
后台运行APP时,界面增加模糊处理。

ROOT环境检测

漏洞级别

漏洞描述
检测客户端程序是否可以在ROOT设备上运行。
漏洞危害
APP应用应禁止安装在已ROOT的移动设备中,已ROOT的移动设备会对APP应用的安全性造成巨大的影响。
修复建议
1、禁止APP在ROOT设备上运行。
2、若确实需要在ROOT环境中运行,应对用户提出安全警告。

模拟器环境检测

漏洞级别

漏洞描述
检测客户端程序是否可以在模拟器中运行。
漏洞危害
攻击者可以通过自己修改定制特定的模拟器来达到监控应用关键函数、获取应用敏感数据,破解应用的目的。
修复建议
防止APP在模拟机中运行,当监听到处于模拟器时,禁止启动。检测内容,设备 IDS、imsi id,硬件信息,模拟器特有的文件等。

账号安全

密码复杂度检测

漏洞级别

漏洞描述
检测客户端程序是否允许使用弱密码。
漏洞危害
攻击者可爆破口令,从而可得出正确的口令,冒用其身份进行登录。
修复建议
建议设置密码复杂度,密码长度8-20位并且由数字、字母或字符组成,至少两种。

单点登录限制

漏洞级别

漏洞描述
测试一个账号是否可以同时在多个设备上登录APP应用进行操作。
漏洞危害
攻击者可冒用用户账号登录APP。
修复建议
若无业务需求,应当限制单点登录。

账号锁定策略检测

漏洞级别

漏洞描述
检测客户端程序是否限制登录尝试次数。
漏洞危害
攻击者可以使用穷举法暴力破解账号密码。
修复建议
设置账号登录失败锁定策略,如登录失败5次锁定账号10分钟。

UI信息泄露

漏洞级别

漏洞描述
检测客户端程序是否存在敏感信息泄露问题。
漏洞危害
若用户的手机号、身份证号等敏感信息全部明文显示,易造成用户信息泄露。
修复建议
1、对用户敏感数据进行脱敏处理。
2、统一登录界面的错误回显信息。

验证码安全

漏洞级别

漏洞描述
检测客户端程序在注册/登录/找回密码等操作时是否使用验证码校验技术。
漏洞危害
容易造成攻击者暴力破解账号密码。
修复建议
1、对于一些敏感操作,使用安全有效的验证码机制。
2、在服务器端实时刷新与校验验证码,确保验证码不能被重复使用或置空验证码参数和值。

安全注销

漏洞级别

漏洞描述
测试APP应用会话注销是否能正常终止会话。
漏洞危害
不安全的注销机制可能允许应用退出后再次启用上次会话。
修复建议
在服务器端实时校验用户登录状态。用户退出后,用户凭证应立即失效,用户第二次登录后的用户凭证应当与先前登录时的用户凭证不同。

双因子认证检测

漏洞级别
中/低
漏洞描述
检测客户端程序是否对账户进行双因子认证。
漏洞危害
采用单因子认证容易出现凭证被窃取冒用的风险。
修复建议
建议APP提供多因子认证功能,如采用短信验证码、PIN码、手势密码、指纹解锁、人脸识别等鉴别技术。

手势密码绕过

漏洞级别

漏洞描述
检测客户端程序的手势密码可否被绕过。
漏洞危害
APP的手势密码可能会存在绕过等问题。
修复建议
根据漏洞情况给出对应的建议。

手势密码本地信息保存

漏洞级别

漏洞描述
检测在输入手势密码以后客户端是否会在本地记录一些相关信息,例如明文或加密过的手势密码,包括运行日志中是否会泄露手势密码。
漏洞危害
明文存储的手势密码会导致信息泄露。
修复建议
本地存储的手势密码一定要使用安全有效的加密算法进行加密保护。

通信安全

通信协议检测

漏洞级别

漏洞描述
检测客户端和服务端通信采用什么协议进行传输。
漏洞危害
业务敏感信息明文传输,采用HTTP协议传输,易造成信息泄露。
修复建议
部署HTTPS、SSL/TLS协议。

证书有效性检测

漏洞级别

漏洞描述
检查服务端证书是否是CA签发,客户端程序和服务器端的SSL通信是否严格检查服务器端证书的有效性。
漏洞危害
业务敏感信息明文传输,易被中间人劫持,造成信息泄露。
修复建议
采用SSL/TLS双向验证,防止抓包等操作。

关键数据加密和校验

漏洞级别

漏洞描述
测试客户端程序提交数据给服务端时,密码等关键字段是否进行了加密,防止恶意用户嗅探到用户数据包中的密码等敏感信息。
漏洞危害
业务敏感信息明文传输,易被中间人劫持,造成信息泄露。
修复建议
1、使用较为安全的加密算法,诸如非对称加密算法等对传输过程中的用户名、密码、银行卡号等业务敏感信息进行加密处理。
2、部署HTTPS协议。

业务安全

SQL注入

漏洞级别

漏洞描述
SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。
漏洞危害
恶意攻击者可能会利用SQL注入漏洞获取、篡改数据库数据,执行系统命令,甚至获取系统控制权限。
修复建议
1、使用全局过滤器,过滤特殊字符,正确处理数据类型。包括但不限于以下字符及字符串:select and or like regxpfrom where update exec order by having drop delete ( ) [ ] < > , . ; : ‘“ # % + - _ = / * @。
2、预编译SQL语句,而不要动态组装SQL语句,否则必须确保在使用输入的数据组装成SQL语句之前,对特殊字符进行预处理。
3、以最小权限执行SQL语句,限制远程连接数据库的IP地址范围。
4、屏蔽错误回显,必要时,限制长度。

XSS跨站脚本攻击

漏洞级别

漏洞描述
跨站脚本攻击,是目前最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
漏洞危害
攻击者利用XSS,不仅能够进行钓鱼,窃取用户会话,网站挂马,甚至能够直接控制浏览器,或者引发蠕虫攻击。
修复建议
1、检查所有用户输入数据的地方是否有进行过滤或转义处理。包括但不限于这些字符:Javascript script src img onerror { } ( ) < > = , . ; : “ ‘ # ! / * \。
2、根据页面的输出背景环境,对输出进行编码或使用一个统一的规则和库做输出编码,使用安全框架进行安全编码。
3、对于富文本框,尽量使用白名单控制输入,而不是黑名单。
4、配置httpOnly,必要时,限制输入字符的长度。

任意文件上传

漏洞级别

漏洞描述
文件上传漏洞是指由于系统未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。
漏洞危害
上传恶意脚本,获取信息、控制网站,甚至控制服务器。
修复建议
1、在服务器上使用白名单对上传的文件进行严格的验证,只允许上传特定的文件类型。验证包括文件扩展名校验、文件类型(Content-Type)校验、MIME类型校验、文件头校验等等。
2、文件上传的存储目录禁用执行权限。
3、使用随机数改写文件名和文件路径,让用户不能轻易访问自己上传的文件。

弱口令漏洞

漏洞级别

漏洞描述
应用存在默认口令或口令较简单易被猜到。
漏洞危害
攻击者可以通过暴力破解等方法得到正确的账号,从而冒用他人身份进入系统。
修复建议
1、统一错误回显,如只提示用户名或密码错误。
2、使用安全有效的验证码校验机制。
3、配置账号锁定策略,如错误登录3次以上锁定该账号10分钟。

越权访问

漏洞级别

漏洞描述
网站的页面权限控制不当,用户可访问不属于自己的页面并可修改数据。
漏洞危害
权限控制不当,会造成网站数据非法篡改等危害。
修复建议
1、验证一切来自客户端的参数,重点是和权限相关的参数,比如用户ID或者角色权限ID等。
2、Session ID 和认证的Token做绑定,放在服务器的会话里,不发送给客户端。
3、对于用户登录后涉及用户唯一信息的请求,每次都要验证检查所有权,敏感信息页面加随机数的参数,防止浏览器缓存内容。

短信轰炸

漏洞级别

漏洞描述
攻击者可以对指定手机号码进行短信轰炸,对用户造成骚扰的同时,也消耗了服务器资源。
漏洞危害
对用户造成短信骚扰,同时消耗服务器资源。
修复建议
1、在服务器端限制发送短信的时间间隔至少为60秒以上。
2、发送短信验证码之前添加图形验证码校验。
3、限制24小时内,针对同一手机号码发送验证码的总次数。
4、限制单个IP地址24小时内请求验证码的次数。