一、前言
互联网金融是这两年来在金融界的新兴名词,也是互联网行业一个重要的分支,但互联网金融不是互联网和金融业的简单结合,而是在实现安全、移动等网络技术水平上,被用户熟悉接受后,适应新的需求而产生的新模式及新业务,目前除了常见的网上银行、第三方支付,这两年很多的民间融资贷款平台也逐步兴起,像P2P网贷、众筹等。越直接涉及到金钱的业务就越敏感,这是众所周知的,平台的运作除了建立在强大的资金链之外,平台自身的公信力也是很关键的,在陆陆续续的一些金融平台出现过安全问题后,越来越多的此类平台也逐步意识到安全的重要性。
我们曾经受邀请检测过网上一些互联网金融交易平台,在检测的过程曾发现部分平台存在着严重的安全问题,在本期的技术专题中我们将针对所发现过的一些常见的安全问题进行总结,同时提出相应的解决办法,希望对开发的人员代码安全能力有所提高。
二、安全漏洞剖析
2.1统计
我们对曾测试对约多家金融交易平台进行过一次漏洞统计,除了常见的一些如注入、跨站、CSRF、恶意上传等Web漏洞外,部分金融平台在业务功能上存在着严重的风险,如任意用户密码重置、交易参数恶意篡改等,与常见的注入、恶意上传不同,这些业务逻辑的漏洞不会直接影响服务器的安全,但却会直接影响用户的资金、账号的安全,其风险程度有过之而无不及,若被黑客所利用或被曝光,将严重影响平台公信力。
我们对常见的漏洞进行过统计,发现其中越权操作的占比最高,在我们所测试过的平台中基本都有发现,包括任意查询用户信息、任意删除等行为;最严重的漏洞出现在账号安全,包括重置任意用户密码、验证码暴力破解等。下面我们将以举例的方式给介绍一些常见的安全问题以及其解决方法。
2.2越权操作
漏洞描述
平行权限越权操作其实是一种较为常见的安全漏洞,在OWASP Top 10中也有所提及,分别为不安全对象引用和功能级别访问控制缺失。
其中不安全对象引用指的是平行权限的访问控制缺失,比方说,A和B两个同为一个网站的普通用户,他们之间的个人资料是相互保密的,A用户的个人资料可以被B用户利用程序访问控制的缺失恶意查看,由于A用户和B用户之间是一个同级的账号,因此称为平行权限的访问控制缺失。功能级别访问控制缺失指的是垂直权限的访问控制缺失,比方说,A账号为普通账号、B账号为管理员账号,B账号的管理页面时必须是以管理员权限登录后方可查看,但A账号可通过直接输入管理页面URL的方式绕过管理员登录限制查看管理页面,由于A用户和B用户的权限是垂直关系,因此称为垂直权限的访问控制缺失。该类型属于业务设计缺陷的安全问题,因此传统的扫描器是无法发现的,只能通过手工的渗透测试去进行检查。在金融平台中以平行权限的访问控制缺失较为常见。
案例
在金融交易平台中,该类型的安全漏洞主要出现在账号余额查询,账号个人资料篡改等功能上。下面我们通过几个简单的案例给大家进行说明
⑴ 任意修改用户资料
某交易平台的用户可以通过该系统的个人资料修改页面修改个人的昵称和头像。
截取发送修改请求的数据包抓取进行分析。我们发现在提交的过程中,其实请求自带了一个隐藏的参数investor.loginName,其实investor.loginName为登录的手机号码(或用户名),investor.Name为重置的用户名,通过直接修改掉参数investor.loginName为任意注册的用户名或者手机号码,即可成功篡改重置该用户的用户名。
⑵ 任意查询用户信息
在对金融交易平台测试的过程中,我们发现大部分平台并未对查询功能进行优化,使用用户的uid之类的账号标志参数作为查询的关键字,并且未对查询范围进行控制,导致出现任意信息查询的安全漏洞。该类型漏洞在手机客户端较为常见,如在某交易平台手机商城就发现了任意查询其他用户信息的安全问题。
当点击商城的个人资料修改处,系统会通过将当前用户的phone_client_uuid提交到服务器进行查询,调出个人资料的内容
但由于系统并未对该功能进行访问控制,导致可通过遍历uuid的方式查询平台中任意用户的资料,通过工具对phone_client_uuid的后5位进行爆破尝试,如下图:
通过对返回值的length进行筛选,发现成功爆破部分phone_client_uuid所对应的用户信息。
代码防护
针对平行权限的访问控制缺失,我们建议使用基于用户或者会话的间接对象引用进行防护,比方说,一个某个选项包含6个授权给当前用户的资源,它可以使用一串特殊的数字或者字符串来指示哪个是用户选择的值,而不是使用资源的数据库关键字来表示,数字和字符串的生成可以结合账号信息进行生成,使得攻击者难以猜测生成的方式。
针对垂直权限的访问控制缺失,我们建议可以使用缺省拒绝所有的访问机制,然后对于每个功能的访问,可以明确授予特定角色的访问权限,同时用户在使用该功能时,系统应该对该用户的权限与访问控制机制进行校对。
转载请注明:安全专题