app安全测试怎么测(安全性测试应该从哪些方面考虑)

通常我们队APP所进行的安全性测试包含以下几个模块:安装包安全性、数据安全性、软键盘劫持、账户安全性、通信安全性、备份检查等。下面针对每个模块我们详细说明具体的测试方法。


安装包安全性

1、反编译

目的是为了保护公司的知识产权和安全方面的考虑等,一些程序开发人员会在源码中硬编码一些敏感信息,如密码。而且若程序内部一些设计欠佳的逻辑,也可能隐含漏洞,一旦源码泄漏,安全隐患巨大。

为了避免这些问题,除了代码审核外,通常开发的做法是对代码进行混淆,混淆后源代码通过反软件生成的源代码是很难读懂的。

测试中,我们可以直接使用反编译工具(Android端使用dex2jar和jd-gui工具,iOS端使用Hopper Disassembler、otool、ida pro等)查看源代码,判断是否进行了代码混淆,包括显而易见的敏感信息。

2、签名

这点IOS可以不用考虑,因为APP stroe都会校验。但Android没有此类权威检查,我们要在发布前校验一下签名使用的key是否正确,以防被恶意第三方应用覆盖安装等。可使用下列命令检查:

jarsigner -verify -verbose -certs apk包路径

若结果为“jar 已验证”,说明签名校验成功。

3、完整性校验

为确保安装包不会在测试完成到最终交付过程中因为某些原因发生文件损坏,需要对安装包进行完整性校验,通常做法是检查文件的md5值。


数据安全性

1、数据库

数据库是否存储敏感信息,某些应用会把cookie类数据保存在数据库中,一旦此数据被他人获取,可能造成用户账户被盗用等严重问题,测试中在跑完一个包含数据库操作的测试用例后,我们可以直接查看数据库里的数据,观察是否有敏感信息存储在内。一般来说这些敏感信息需要用户进行注销操作后删除。如果是cookie类数据,建议设置合理的过期时间。

2、日志

日志是否存在敏感信息,一般开发在写程序的过程中会加入日志帮助高度,所有可能会写入一些敏感信息,通常APP的发布版不会使用日志,但也不排除特殊情况。

3、配置文件

配置文件是否存在敏感信息,与日志类似,我们需要检查配置文件中是否包含敏感信息。


软键盘劫持

如果用户安装了第三方键盘,可能存在劫持情况,对此,我们在一些特别敏感的输入地方可以做检查,例如金融类APP登录界面的用户名密码输入框等,看是否支持第三方输入法,一般建议使用应用内的软键盘。


账户安全性

1、秘钥存储

密码是否明文存储在后台数据库。

2、秘钥传输

密码传输是否加密,测试中我们需要查看密码是否被明文传输,如果是HTTPS接口,我们可以使用Fiddler等工具直接查看。

3、防暴力破解

账户锁定策略。对于用户输入错误密码次数过多的情况,是否会将账户临时锁定,避免被暴力破解。

4、多端登录

同时会话情况。一些应用对同时会话会有通知功能,这样至少可以让用户知识他的账户可能已经被泄漏了。在一定程度上能免提升用户体验。

5、注销机制

在客户端注销后,我们需要验证任何的来自该用户的,需要身份验证的接口调用都不能成功。


通信安全性

1、安全连接

关键连接是否使用安全通信,例如HTTPS。在获知接口设计后我们需要评估是否其中内容包含敏感信息,如果未使用安全通信,需要知会开发修改。

2、数字证书

是否对数字证书合法性进行验证。即便使用了安全通信,例如HTTPS,我们也需要在客户端代码中对服务端证书进行合法性校验。测试中可以使用Fiddler工具模拟中间人攻击方法。如果客户端对于Fiddler证书没有校验而能正常调用,则存在安全隐患。


备份检查

只需在Android端检查,使用adb backup命令检查应用是否允许备份数据。

以上是笔者总结的APP安全性测试的相关关注点,而实际上APP逆向是一个专项性的课题,往往会交给专职的逆向工程师进行更深入的安全性相关的把控,这里就不再深入,欢迎感兴趣的朋友们交流

(0)

相关推荐