互联网金融交易系统测试方法

一、    背景
近年来,互联网金融的迅速崛起,其交易次数和交易总量呈指数增长,在给人们日常生活带来便利的同时,安全性也不容忽视。我司所谓互联网金融公司,应最大限度的确保用户的资金安全,保证用户在使用公司产品时安全、高效、便捷的完成交易。
然而,由于渗透测试工作不确定性强,测试点众多,大部分情况下需要测试人员的测试经验等特点,行业内并没有一套成型的标准和测试方法。所以,我们结合我司的实际情况,拟定本文。
二、    互联网金融的潜在风险
1、    客户端安全
native:
1)    客户端敏感信息存储
app可将用户信息诸如:用户账号、密码、手机号、身份证号等存储于手机本地的数据库中,攻击者如获取到用户手机或用户手机被植入木马,则可获取用户个人信息,危害用户隐私。
2)    客户端木马
app可能已被攻击者攻击,并植入屏幕记录软件,可获取用户手势操作进而推断出用户输入的用户名、密码、交易密码等信息,进而登录用户账户完成转账交易等。
3)    客户端是否root
在手机被越狱或root情况下,任意app即可获得手机的最高权限,可对手机进行任意操作,致使app在不安全的环境下运行。
4)    客户端是否存在其他已知安全漏洞
在老版的手机操作系统中均存在不同程度的安全问题,在开发中不应使用存在问题的接口,致使手机暴露在危险之中。
H5:
1)    浏览器用户提交方式
浏览器在提交链接时如果使用Get请求,浏览器的历史记录中会存留用户的请求数据,如果攻击者控制用户电脑后可能获取用户的信息。
2)    浏览器敏感信息存储
浏览器可以持久化存储绑定到域的键值对,每个域可存放5Mb的信息,如果此功能被用来存储用户敏感信息,则存在用户信息泄露风险。
3)    浏览器安全控制措施
浏览器在与服务器通信时,服务器可返回特定头部,限制某些特定功能或防止某些漏洞的触发,如:httponly、X-XSS-Protection等,如果没有有效返回,可能存在安全漏洞利用风险。
4)    前端代码注入
用户在填写或提交数据的内容时,部分内容并未传给服务器端而是前端js或flash自行处理,如果这部分数据处理不当可能存在xss漏洞。
5)    重定向攻击
本地重定向时,如果重定向链接在url中且代码未限制跳转范围,可能存在重定向漏洞。
2、    网络流量安全
1)    网络流量监听
如果网络流量可被监听,攻击者可获取用户流量内未加密信息和用户操作信息。
2)    网络流量重放
如果网络流量可被重放,攻击者可截获并重放用户数据包,重复此前用户操作。
3)    网络流量篡改
如果网络流量可被篡改,攻击者可截获并篡改用户数据包,造成所做操作非用户预期,攻击者也可以通过修改参数,进行其他漏洞攻击。
4)    网络流量加密传输
集团要求,用户敏感信息必须加密传输,不可直接返回明文。
5)    https传输的正书校验
如果https证书校验不正确,攻击者可伪造ca证书,只要替换证书,攻击者就可以看到全部网络流量,致使用户信息暴露,攻击者也可以通过修改提交参数,进行其他漏洞攻击。
6)    其他已知安全漏洞

3、    服务端潜在安全问题
1)    服务端输入验证
服务端应秉着所有用户输入均不可信原则,如果对用户输入数据过滤不完全,则可能存在诸如:SQL注入、XSS漏洞、XML注入、命令注入等安全问题。
2)    服务端会话管理
HTTP是一个无状态协议,通常使用”会话ID“或cookie的识别标志来进行身份保持。如果“会话ID”或cookie设计不当,攻击者可获取他人身份标识,登录或诱使用户执行关键操作,造成安全隐患。
3)    服务端逻辑错误
目前我公司业务众多,业务逻辑复杂,所以在编写代码时经常出现诸如绕过关键步骤、绕过某些限制等逻辑错误情况,攻击者可根据业务逻辑挖掘相关漏洞,对公司和用户造成损失。
4)    服务端权限管理
权限管理的目的是让受许可使用资源的用户获得相应的资源的访问权限,如果权限管理不严格可能存在垂直越权和平行越权漏洞,攻击者可使用或访问不属于自己的功能或信息,造成业务安全或用户数据泄露。
5)    服务端用户身份及认证
认证是企图验证通信发起者数字身份的过程,通俗来讲就是登陆过程,目前互联网使用的登录方案众多,如:账号密码登录、手机号登录、第三方登录等,如果实现方式存在问题,则会对用户账户安全造成威胁。
6)    服务端可用性保障
服务可用性是服务端的基本要求,攻击者可挖掘服务器漏洞或业务逻辑缺陷,致使服务器宕机或返回错误信息,则会对公司造成严重经济损失。
三、    测试方法
用户可控侧:
1、    客户端
native:
1)    客户端敏感信息存储
在已root的Android测试机或已越狱的IPhone测试机中安装app,完成各项app提供功能的操作后,查看本地数据库和错误日志,如果存在用户信息,说明存在安全问题。
2)    客户端木马

3)    客户端是否root
在已root的Android测试机或已越狱的IPhone测试机中安装app,如果没有安全提示说明存在安全问题。
4)    客户端是否存在其他已知安全漏洞
使用app安装包扫描器扫描app,生成扫描报告,查看报告看是否存在已知漏洞。
H5:
1)    浏览器用户提交方式
使用中间人代理工具查看所有Get请求是否存在用户敏感信息,如果存在说明存在安全问题。
2)    浏览器敏感信息存储
使用Firefox浏览器的firebug插件,在DOM标签下查看localStrage/sessionStrage对象,如存在用户敏感信息则存在安全问题。
3)    浏览器安全控制措施
使用中间人代理工具,再返回包中查看是否存在如下头部参数:httponly、X-XSS-Protection、X-Content-Type-Options、Strict-Transport-Security、X-Frame-Options、Access-Control-Allow-Origin、Public-Key-Pins,由于部分功能是前端必须开启的,所以以上参数仅供参考。
4)    前端代码注入
此漏洞需人工做代码审计,了解用户输入在哪里被写入页面的什么地方,DOM在哪里被修改,在哪里直接执行脚本。
5)    重定向攻击
搜索前端代码的window.location对象,看其是否有用户参数被传入,如果用户参数可被传入且此段代码可被执行,则存在重定向漏洞。
2、    网络流量安全
1)    网络流量监听
由于http协议在网络中以明文传输,如果关键功能使用http传输则存在安全问题。
2)    网络流量重放
使用中间人代理工具截获登录、购买、转账等发送的数据包并重放,如果依然成功则存在安全问题。
3)    网络流量篡改
使用中间人代理工具截获发送的数据包并篡改,如果依然成功则存在安全问题。
4)    网络流量加密传输
使用中间人代理工具截获发送及返回的数据包并篡改,如果存在用户的敏感信息如:手机号、银行卡号、姓名等,则存在安全问题。
5)    https传输的正书校验
如使用中间人代理工具截获发送及返回的数据,如果可以正常看到请求和返回数据则存在安全问题。
3、    服务端潜在安全问题
1)    服务端输入验证
反射型XSS:
确定所用web应用中每个页面中的用户定义变量和如何输入数据,包括隐藏输入,分析每个输入数据在返回时是否进行了参数过滤或转码,再尝试XSS绕过技巧,如果成功执行前端代码,则存在安全问题。
存储型XSS:
同反射型XSS,只是其输入内容不能立即返回,需要结合业务功能寻找输入内容所在页,并查看前端代码是否执行。
SQL注入:
理解当需要访问数据时,应用程序如何同数据库交互的并制定一份可能用来产生SQL查询的输入表,然后针对每一项进行单独测试,找出可以干预数据库操作并生成错误的地方。同时需要关注http头和cookie。
XML注入:
如果发现使用xml的页面,修改页面提交的xml数据,可让服务器引用本地文件或网络文件,如果现实文件内容则说明存在拿权问题。
SSI注入:
如果发现服务器支持SSI指令,尝试在用户输入参数、http请求头、cookie中添加服务器端文件包含指令,如果成功包含文件则存在安全问题。
本地文件包含:
当页面把包含文件的路径作为输入时,修改文件路径及文件名尝试读取服务器文件或网站配置文件,如果可以读取成功则存在安全问题。
命令注入:
利用各种调用系统命令的web应用, 在用户输入参数时,通过命令拼接、绕过黑名单等方式实现在服务端实现想要实现的系统命令,如果命令成功执行则存在安全问题。
文件上传漏洞:
如果发现网页存在上传功能,尝试上传asp、php、jsp等可执行文件,并尝试各种绕过方式,如果成功上传并执行,则存在安全问题。
http拆分攻击:
如果发现用户输入数据在返回的响应头中被返回,须尝试在输入数据中添加crlf换行符,如果成功换行,则存在安全问题。
2)    服务端会话管理
cookie生成算法:
重复登录几次系统,查看产生的cookie是否存在某些规则,如果可以推断出cookie的生成算法并可以仿造则存在安全问题。
会话固定:
查看系统登录前和登陆后cookie是否重置,如果未重置则存在会话固定漏洞。
CSRF漏洞:
查看系统关键步骤是否存在Token,如果不存在说明存在csrf漏洞。
3)    服务端逻辑错误
业务逻辑数据校验:
使用中间人代理工具绕过前端限制,修改关键参数,如:价格、数量、状态等,查看前端传到服务端的参数是否进行后端校验,如果未校验且成功,则存在安全问题。
业务逻辑完整性测试:
如果测试中发现一个完整的操作需要两步以上操作,须尝试绕过前边步骤,直接执行后边步骤操作,如果操作成功则存在安全问题。
业务逻辑次数限制测试:
如果业务逻辑中某个功能存在次数限制,使用中间人代理工具重放该步骤或退回重复该步骤,如果可以突破限制,则存在安全问题。
业务逻辑工作流程逃逸:
如果某项功能可以事后修改前次内容,且前次内容存在安全校验,则在事后编辑时尝试修改看是否可以绕过校验,如果可以绕过则存在安全问题。
防御应用程序滥用:
尝试进行如下测试:
λ    更改响应
λ    阻止请求
λ    注销用户或锁定他们账户
λ    拒绝含有某些字符的输入
λ    多项认证失败后暂时锁定账户
λ    强制浏览
λ    绕过展示层输入验证
λ    多重访问控制错误
λ    额外的重复或丢失参数名
4)    服务端权限管理
平行越权:
尝试使用一个用户访问属于另一个用户信息和功能,以验证是否可以使用,如果可以则存在平行越权漏洞。
垂直越权:
尝试用低权限用户访问高权限用户的页面并操作,如果可以成功访问并操作则存在垂直越权漏洞。
5)    服务端用户身份认证
锁定机制:
同一账号尝试多次登录认证,经过一定次数后账号未被锁定,则存在安全问题,测试时注意次数统计逻辑,尝试绕过次数限制。
弱密码测试:
尝试使用123456、admin等弱密码登录系统,如果登录成功则存在安全问题。
第三方认证测试:
参看第三方登录接口文档,了解登录逻辑,测试登录机制是否符合文档要求,如果不符合思考可能存在哪些攻击场景和攻击方法。
6)    服务端可用性保障

参考:《安全测试指南V4.0》电子工业出版社

发表评论