宋士涛
(1.国家网络软件产品质量监督检验中心(济南),济南 250014;2.山东政法学院,济南 250014)
随着移动电商的迅速发展,移动支付在人们的生活中越来越普及,逐渐从网络购物延伸到了生活的方方面面,包括线下购物,乘坐出租车、公交车,租用共享单车等。巨大的移动支付市场,吸引了各大互联网巨头的目光。目前,中国主流的移动支付APP主要有支付宝、微信支付、银联“云闪付”等,此外还有中国电信“翼支付”及各大银行推出的移动端支付APP。
移动支付无疑方便了人们的生活,但它是一把双刃剑,在给人们提供便利的同时,也带来了各种风险,使网络骗局有了新的形式。本文以移动支付的安全性测试作为研究对象,提出了一套移动支付安全性测试策略,并总结出移动支付安全性测试需要关注的测试点,通过测试防范移动支付的安全风险,提高移动支付软件的质量。
目前,我国移动支付的风险主要有运营主体的技术风险、非法活动对用户造成的风险、标准规范及监管缺失风险等[1]。基于本文的研究方向,仅从运营主体的技术风险及非法活动对用户造成的风险来研究移动支付安全性测试。运营主体的技术风险主要有数据通信时信息被窃取、密码被破解及用户信息泄漏等;非法活动对用户造成的风险主要有黑客借助漏洞骗取用户资金等。
移动支付安全性测试策略是移动支付安全的有力保障,主要包括代码安全、数据安全、通信安全、用户认证安全、支付认证安全五个方面。
移动支付软件有很多安全漏洞是由编码过程中产生的缺陷引起的。目前,代码审计是代码安全性测试的主要方法[2]。代码审计是对软件源代码进行逐条检查、分析,查找源代码级别的安全缺陷,可以人工审查,也可以通过成熟的自动化工具进行审查。目前比较流行的代码审计遵循的标准是开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)标准,依据该标准,可以测试诸如SQL注入、跨站脚本攻击等主流攻击漏洞[3]。
数据作为核心资产,具有非常大的价值,因此数据安全就变得十分重要。数据安全测试的目标是测试移动支付系统中,涉密数据是否得到有效保护,是否能够保证数据的完整性,是否能够防止数据丢失。数据安全测试主要针对数据库安全、本地数据、数据处理过程等进行测试[4]。
移动支付APP的通信安全主要分为访问控制和通信保密性两类。访问控制主要测试用户是否只能访问权限允许内的页面或数据,而不能访问未经授权的页面或数据;通信保密性测试主要采用抓包工具wireshark、fiddler等截获网络传输的数据包,验证其是否进行了加密。
用户认证是系统安全的第一道大门,在移动支付领域,通常还需要在支付过程中对支付行为进行支付认证。目前针对用户认证和支付认证,普遍采用的认证方式有动态密码、USB key、数字证书、生物特征认证等。通过测试移动支付APP采用的认证方式,评估该APP的安全级别。
根据移动APP安全性测试的经验,结合移动支付的特点,本文总结了移动支付APP的代码安全性和数据安全性测试项目,用以指导测试过程。
目前代码审计遵循的多是OWASP安全标准,本文以OWASP发布的安全风险为出发点,结合代码安全测试能够发现的风险,阐述代码安全性测试时需要重点关注的测试项目。
3.1.1 注入攻击测试
注入攻击经常发生在没有对输入进行安全性检查的程序中。常见的注入包括SQL注入、LDAP(轻量目录访问协议)注入、OS注入等。注入攻击的危害主要有数据库信息泄漏、服务器被远程操控等,会威胁到用户的资金安全。
在代码安全测试过程中,主要通过检查以下项目来测试是否存在注入攻击:(1)程序中使用的API是否安全;(2)是否使用解释器,一般认为使用了解释器的程序是不安全的;(3)是否对用户的输入进行了净化处理,是否过滤掉了敏感、特殊字符;(4)是否对用户输入的长度进行了限制;(5)是否采用了动态拼接方式构造查询语句。
3.1.2 失效的身份认证和会话管理测试
在移动支付APP中,身份认证主要有登录认证和支付认证两种方式。会话管理可实现HTTP的身份认证,用户登录时会获得一个授权令牌并放在cookie中,之后只需读取令牌信息进行身份识别,不必进行二次认证。
失效的身份认证和会话管理造成的危害主要有页面和资源被未授权访问,甚至攻击者可执行管理员用户权限内的操作,造成不可估计的损失。对于失效的身份认证和会话管理方面的安全性问题,主要测试项目有:(1)是否对用户密码的有效期进行了限制,间隔一定时间是否提醒用户修改密码;(2)对密码连续输入错误的用户是否限制其登录;(3)是否要求用户设置数字、大小写字母组合的强密码;(4)密码是否以明文进行传输、存储;(5)是否限制会话寿命,超时自动退出;(6)是否对cookie进行加密操作;(7)URL中是否存在会话ID。
3.1.3 跨站脚本攻击测试
攻击者在程序客户端的Web页面中插入恶意脚本,当页面被下载时,该脚本解释执行,实现跨站攻击。对于移动支付APP,跨站脚本攻击的主要危害是盗取用户账号实现非法转账等。对于跨站脚本攻击,主要测试项目有:(1)是否对用户输入进行了检查,对特殊字符进行转义操作,Web页面中被插入的脚本应被视为用户输入进行检查;(2)是否允许用户输入作为html被解析,如果允许,则存在跨站脚本攻击风险;(3)是否设置了标签事件的白名单或黑名单,拦截黑名单中的事件,允许白名单中的事件。
3.1.4 不安全的对象直接引用测试
不安全的对象直接引用,指一个被授权某对象的用户通过更改访问时的参数,访问原本没有访问权限的对象。对于这种安全漏洞,主要测试项目有:(1)检查URL中是否直接引用了内部文件名或数据库关键字;(2)服务器上的所有目录和文件夹是否设置了访问权限,并且对访问进行了权限验证;(3)是否对用户输入和URL请求进行了验证,是否拒绝包含./../的请求。
3.1.5 伪造跨站请求(CSRF)测试
伪造跨站请求是指攻击者在第三方站点制造HTTP请求并以用户在目标站点的登录态发送到目标站点,而目标站点未校验请求来源使第三方成功伪造请求。对于伪造跨站请求的安全测试,主要测试项目有:(1)测试发出转账请求时该请求是否来源于自己的网站;(2)测试发出转账请求时,是否重新对用户进行认证。
3.1.6 未验证的重定向和转发测试
重定向和转发是很普遍的。攻击者可通过重定向窃取密码或安装恶意程序等,转发则可绕过访问限制对资源进行访问。其主要测试项目有:(1)代码中是否有重定向和转发的内容;(2)重定向和转发的内容中,是否涉及用户参数;(3)用户参数是否在可信任的列表或白名单中。
3.1.7 敏感信息暴露测试
敏感信息暴露测试主要的测试项目有:(1)代码中是否存储敏感数据;(2)密码是否以明文形式存储;(3)隐藏域中是否有敏感数据;(4)使用的加密算法是否可靠;(5)日志是否输出敏感数据。
数据安全性测试主要包含数据库安全性、本地数据安全性、数据处理过程安全性的测试。
3.2.1 数据库安全性测试项目
对于数据库安全性,主要测试项目有:(1)数据库系统的安全设置及管理情况,包括密码策略、账号策略、数据库日志管理等;(2)数据库的访问控制管理是否科学有效;(3)是否对用户对数据资源的访问进行了有效管理;(4)数据库安全审计是否科学有效;(5)机密数据是否与普通数据相隔离;(6)数据是否进行了加密存储。
3.2.2 本地数据安全性测试项目
对于本地数据安全性,主要测试项目有:(1)移动支付APP所在目录的文件权限设置情况,文件是否允许非root用户进行读、写;(2)敏感数据在移动支付APP客户端使用完毕后,是否进行清除[4];(3)移动支付APP客户端日志是否输出了敏感信息;(4)是否将敏感信息存储在移动支付APP的外部存储设备。
3.2.3 数据处理过程安全性测试项目
对于数据处理过程安全性,主要测试项目有:(1)密码输入时是否可见;(2)密码等敏感信息是否保存在本地;(3)移动支付APP用户的密码、账户明细等敏感信息,是否以明文形式传输;(4)输入密码等敏感信息时,移动支付APP是否具有反屏幕劫持、反屏幕录像等功能;(5)支付过程如遇到网络中断,再次支付时是否进行用户验证。
3.2.4 通信安全性测试项目
对于通信安全性,主要测试项目有:(1)移动支付APP客户端与服务器进行连接时是否有超时设置[5];(2)数据传输时是否使用了可靠的安全通信协议[3];(3)采用代理方式截取通信数据包,检查移动支付APP是否自动退出;(4)通信过程是否加密;(5)移动支付APP是否可以非法连接。
3.2.5 用户认证与支付认证安全性测试项目
对于用户认证与支付认证安全性,主要测试项目有:(1)移动支付APP是否限制登录、支付密码输入尝试次数;(2)移动支付APP是否允许同一用户在多台设备上同时处于登录状态;(3)移动支付APP在登录、支付时是否验证用户的常用登录地址;(4)在常用地以外支付时,是否向移动支付APP相关联手机号发送提示信息;(5)移动支付APP切换到后台运行,再重新切换到前台时,是否重新认证;(6)支付时是否采用短信等动态码进行验证。
本文从移动支付安全性的角度,提出了移动支付安全性的测试策略及测试项目,以指导测试人员有效提高移动支付安全性测试效率,增强移动支付软件的安全性,并进一步保障移动支付的环境安全。