论文部分内容阅读
一、引言
互联网金融是互联网行业一个重要的分支,但互联网金融不是互联网和金融业的简单结合,而是在实现安全、移动等网络技术水平上,被用户熟悉接受后,适应新的需求而产生的新模式及新业务,目前除了常见的网上银行、第三方支付,这两年很多的民间融资贷款平台也逐步兴起,像P2P网贷、众筹等。越直接涉及到金钱的业务就越敏感,这是众所周知的,平台的运作除了建立在强大的资金链之外,平台自身的公信力也是很关键的,在一些金融平台陆陆续续出现过安全问题后,越来越多的此类平台也逐步意識到安全的重要性。我们曾经受邀请检测过一些互联网金融交易平台,在检测的过程中发现部分平台存在着严重的安全问题,在本文中我们将针对所发现过的一些常见的安全问题进行总结,同时提出相应的解决办法,希望对开发人员的代码安全能力有所提高。
二、安全漏洞剖析
我们对曾测试的多家金融交易平台进行过一次漏洞统计,除了常见的一些如注入、跨站、CSRF、恶意上传等Web漏洞外,部分金融平台在业务功能上存在着严重的风险,如任意用户密码重置、交易参数恶意篡改等,与常见的注入、恶意上传不同,这些业务逻辑的漏洞不会直接影响服务器的安全,但却会直接影响用户的资金、账号的安全,其风险程度有过之而无不及,若被攻击者所利用或被曝光,将严重影响平台公信力。在对常见的漏洞进行统计后发现,越权操作的占比最高,在我们所测试过的平台中基本都有发现,包括任意查询用户信息、任意删除等行为;最严重的漏洞出现在账号安全,包括重置任意用户密码、验证码暴力破解等。下面将以举例的方式介绍一些常见的安全问题以及其解决方法。
1.越权操作。漏洞描述。平行权限越权操作其实是一种较为常见的安全漏洞,在OWASPTop10中也有所提及,分别为不安全对象引用和功能级别访问控制缺失。在金融交易平台中,该类型的安全漏洞主要出现在账号余额查询,账号个人资料篡改等功能上。其中不安全对象引用指的是平行权限的访问控制缺失,比方说,A和B两个同为一个网站的普通用户,他们之间的个人资料是相互保密的,A用户的个人资料可以被B用户利用程序访问控制的缺失恶意查看,由于A用户和B用户之间是一个同级的账号,因此称为平行权限的访问控制缺失。功能级别访问控制缺失指的是垂直权限的访问控制缺失,比方说,A账号为普通账号、B账号为管理员账号,B账号在管理页面时必须是以管理员权限登录后方可查看,但A账号可通过直接输入管理页面URL的方式绕过管理员登录限制查看管理页面,由于A用户和B用户的权限是垂直关系,因此称为垂直权限的访问控制缺失。该类型属于业务设计缺陷的安全问题,因此传统的扫描器是无法发现的,只能通过手工的渗透测试去进行检查。在金融平台中以平行权限的访问控制缺失较为常见。案例如下:
1.1任意修改用户资料,某交易平台的用户可以通过该系统的个人资料修改页面修改个人的昵称和头像。截取发送修改请求的数据包抓取进行分析。我们发现在提交的过程中,其实请求自带了一个隐藏的参数investor.loginName,investor.loginName为登录的手机号码(或用户名),investor.Name为重置的用户名,通过直接修改掉参数investor.loginName为任意注册的用户名或者手机号码,即可成功篡改重置该用户的用户名。
1.2任意查询用户信息,在对金融交易平台测试的过程中,我们发现大部分平台并未对查询功能进行优化,使用用户的uid之类的账号标志参数作为查询的关键字,并且未对查询范围进行控制,导致出现任意信息查询的安全漏洞。该类型漏洞在手机客户端较为常见,如在某交易平台手机商城就发现了任意查询其他用户信息的安全问题。解决方案:针对平行权限的访问控制缺失,建议使用基于用户或者会话的间接对象引用进行防护,比方说,某个选项包含6个授权给当前用户的资源,它可以使用一串特殊的数字或者字符串来指示哪个是用户选择的值,而不是使用资源的数据库关键字来表示,数字和字符串的生成可以结合账号信息进行生成,使得攻击者难以猜测生成的方式。
1.3任意重置用户密码。漏洞描述。在众多的交易平台中,我们发现任意重置用户密码这类型的问题也较为普遍,主要是出现在密码找回、邮箱验证等方面,部分漏洞从技术原理上来说它与越权操作时相似的,即用户越权去修改其他用户的信息,如密保电话、密保邮箱等,由于它敏感性所以我们将它归纳成一类进行探讨。案例如下:(1)绕过短信验证码。基本所有的金融交易平台都有短信找回密码的功能,但部分短信验证的功能较为不完善导致可被利用重置任意用户的账号,同样某金融平台的实际案例:在已知对方用户名和手机号码的情况下,通过站点的密码找回功能可绕过短信验证码直接重置该账号密码。第40页右下角图为密码重置页面。进入密码重置页面,填入已知可用的会员名和手机号码,并请求“获取手机验证码”,随后任意填入手机验证码并提交。此时对返回数据包进行拦截,并将“IsSuccess”修改为true,即可直接绕过短信验证码的校验直接进入修改密码的页面。(2)短信验证码暴力破解。某证券交易平台就曾出现过该安全问题。该平台使用6位数字随机验证码进行登录,但并未对登录错误次数和验证码失效时间进行限制,导致可以暴力破解该验证码强制登录账号。解决方案:代码防护针对案例一中的漏洞,建议在第二步修改密码时服务端再次验证手机验证码,部分平台所采用的做法是,第一步验证码提交成功后,将验证码隐藏在一个“hidden”表单中,并在第二步修改密码中进行提交,服务端再次验证短信验证码,保证准确性,同时对验证码的错误次数进行限制,当验证错误超过特定次数,当前验证码无效。
1.4恶意注册。漏洞描述恶意注册,是指攻击者利用网站注册功能的安全漏洞,注册大量的垃圾账号,导致系统增多大量无用数据。一般网站开发者为了防止恶意注册的行为,在注册页面均会在加入一些需要人工输入的步骤,比方说短信验证码,邮箱验证等。但是在对金融平台测试的过程中,同样也发现了部分验证功能可被绕过的问题。案例如下:注册数据包重放绕过验证码。解决方案:目前遇到的大部分恶意注册类的安全漏洞均为验证码可被多次使用造成,建议后台对验证码的使用进行限制,任何的验证码应为一次性,防止验证码被多次使用。
1.5恶意短信。漏洞描述恶意短信是一种类似于DDoS的攻击方式,它是利用网站的短信相关的功能,对用户的手机进行长时间的短信轰炸,导致手机瘫痪。除了单纯的短信轰炸之外,我们在测试过程中也发现,部分金融交易平台对所发送的短信内容也并没有进行限制,导致可被利用进行短信欺诈。示例如下:(1)短信轰炸。我们发现众多的金融交易平台仅在前端通过JS校验时间来控制短信发送按钮,但后台并未对发送做任何限制,导致可通过重放包的方式大量发送恶意短信。(2)任意短信内容编辑。在某平台的修改绑定手机功能就曾出现过可编辑短信内容的问题。点击“获取短信验证码”,并抓取数据包内容。通过分析数据包,可以发现参数sendData/insrotxt的内容有客户端控制,可以修改为攻击者想要发送的内容。解决方案:针对恶意短信类的安全问题,建议可以通过以下两种方式进行防护:(1)从服务端限制每个号码的发送频率和每天的发送次数,防止攻击者利用短信接口进行恶意轰炸。(2)发送短信的内容应直接由系统内部进行定义,客户端可通过数字或字符的方式,对所需要发送的内容进行选择,如messagetype=1为密码找回,messtype=2为注册,然后通过数字来索引要发送的内容。
三、结语
随着社会的进步,互联网金融交易平台将会越来越流行,平台涉及用户信息、资金等敏感信息,因此平台安全性更应受到重视,开发商必须加强开发人员的代码安全意识,建立代码安全开发规范,同时结合第三方渗透测试和代码审计的方式对即将上线的系统进行测试,提高平台的安全性。
互联网金融是互联网行业一个重要的分支,但互联网金融不是互联网和金融业的简单结合,而是在实现安全、移动等网络技术水平上,被用户熟悉接受后,适应新的需求而产生的新模式及新业务,目前除了常见的网上银行、第三方支付,这两年很多的民间融资贷款平台也逐步兴起,像P2P网贷、众筹等。越直接涉及到金钱的业务就越敏感,这是众所周知的,平台的运作除了建立在强大的资金链之外,平台自身的公信力也是很关键的,在一些金融平台陆陆续续出现过安全问题后,越来越多的此类平台也逐步意識到安全的重要性。我们曾经受邀请检测过一些互联网金融交易平台,在检测的过程中发现部分平台存在着严重的安全问题,在本文中我们将针对所发现过的一些常见的安全问题进行总结,同时提出相应的解决办法,希望对开发人员的代码安全能力有所提高。
二、安全漏洞剖析
我们对曾测试的多家金融交易平台进行过一次漏洞统计,除了常见的一些如注入、跨站、CSRF、恶意上传等Web漏洞外,部分金融平台在业务功能上存在着严重的风险,如任意用户密码重置、交易参数恶意篡改等,与常见的注入、恶意上传不同,这些业务逻辑的漏洞不会直接影响服务器的安全,但却会直接影响用户的资金、账号的安全,其风险程度有过之而无不及,若被攻击者所利用或被曝光,将严重影响平台公信力。在对常见的漏洞进行统计后发现,越权操作的占比最高,在我们所测试过的平台中基本都有发现,包括任意查询用户信息、任意删除等行为;最严重的漏洞出现在账号安全,包括重置任意用户密码、验证码暴力破解等。下面将以举例的方式介绍一些常见的安全问题以及其解决方法。
1.越权操作。漏洞描述。平行权限越权操作其实是一种较为常见的安全漏洞,在OWASPTop10中也有所提及,分别为不安全对象引用和功能级别访问控制缺失。在金融交易平台中,该类型的安全漏洞主要出现在账号余额查询,账号个人资料篡改等功能上。其中不安全对象引用指的是平行权限的访问控制缺失,比方说,A和B两个同为一个网站的普通用户,他们之间的个人资料是相互保密的,A用户的个人资料可以被B用户利用程序访问控制的缺失恶意查看,由于A用户和B用户之间是一个同级的账号,因此称为平行权限的访问控制缺失。功能级别访问控制缺失指的是垂直权限的访问控制缺失,比方说,A账号为普通账号、B账号为管理员账号,B账号在管理页面时必须是以管理员权限登录后方可查看,但A账号可通过直接输入管理页面URL的方式绕过管理员登录限制查看管理页面,由于A用户和B用户的权限是垂直关系,因此称为垂直权限的访问控制缺失。该类型属于业务设计缺陷的安全问题,因此传统的扫描器是无法发现的,只能通过手工的渗透测试去进行检查。在金融平台中以平行权限的访问控制缺失较为常见。案例如下:
1.1任意修改用户资料,某交易平台的用户可以通过该系统的个人资料修改页面修改个人的昵称和头像。截取发送修改请求的数据包抓取进行分析。我们发现在提交的过程中,其实请求自带了一个隐藏的参数investor.loginName,investor.loginName为登录的手机号码(或用户名),investor.Name为重置的用户名,通过直接修改掉参数investor.loginName为任意注册的用户名或者手机号码,即可成功篡改重置该用户的用户名。
1.2任意查询用户信息,在对金融交易平台测试的过程中,我们发现大部分平台并未对查询功能进行优化,使用用户的uid之类的账号标志参数作为查询的关键字,并且未对查询范围进行控制,导致出现任意信息查询的安全漏洞。该类型漏洞在手机客户端较为常见,如在某交易平台手机商城就发现了任意查询其他用户信息的安全问题。解决方案:针对平行权限的访问控制缺失,建议使用基于用户或者会话的间接对象引用进行防护,比方说,某个选项包含6个授权给当前用户的资源,它可以使用一串特殊的数字或者字符串来指示哪个是用户选择的值,而不是使用资源的数据库关键字来表示,数字和字符串的生成可以结合账号信息进行生成,使得攻击者难以猜测生成的方式。
1.3任意重置用户密码。漏洞描述。在众多的交易平台中,我们发现任意重置用户密码这类型的问题也较为普遍,主要是出现在密码找回、邮箱验证等方面,部分漏洞从技术原理上来说它与越权操作时相似的,即用户越权去修改其他用户的信息,如密保电话、密保邮箱等,由于它敏感性所以我们将它归纳成一类进行探讨。案例如下:(1)绕过短信验证码。基本所有的金融交易平台都有短信找回密码的功能,但部分短信验证的功能较为不完善导致可被利用重置任意用户的账号,同样某金融平台的实际案例:在已知对方用户名和手机号码的情况下,通过站点的密码找回功能可绕过短信验证码直接重置该账号密码。第40页右下角图为密码重置页面。进入密码重置页面,填入已知可用的会员名和手机号码,并请求“获取手机验证码”,随后任意填入手机验证码并提交。此时对返回数据包进行拦截,并将“IsSuccess”修改为true,即可直接绕过短信验证码的校验直接进入修改密码的页面。(2)短信验证码暴力破解。某证券交易平台就曾出现过该安全问题。该平台使用6位数字随机验证码进行登录,但并未对登录错误次数和验证码失效时间进行限制,导致可以暴力破解该验证码强制登录账号。解决方案:代码防护针对案例一中的漏洞,建议在第二步修改密码时服务端再次验证手机验证码,部分平台所采用的做法是,第一步验证码提交成功后,将验证码隐藏在一个“hidden”表单中,并在第二步修改密码中进行提交,服务端再次验证短信验证码,保证准确性,同时对验证码的错误次数进行限制,当验证错误超过特定次数,当前验证码无效。
1.4恶意注册。漏洞描述恶意注册,是指攻击者利用网站注册功能的安全漏洞,注册大量的垃圾账号,导致系统增多大量无用数据。一般网站开发者为了防止恶意注册的行为,在注册页面均会在加入一些需要人工输入的步骤,比方说短信验证码,邮箱验证等。但是在对金融平台测试的过程中,同样也发现了部分验证功能可被绕过的问题。案例如下:注册数据包重放绕过验证码。解决方案:目前遇到的大部分恶意注册类的安全漏洞均为验证码可被多次使用造成,建议后台对验证码的使用进行限制,任何的验证码应为一次性,防止验证码被多次使用。
1.5恶意短信。漏洞描述恶意短信是一种类似于DDoS的攻击方式,它是利用网站的短信相关的功能,对用户的手机进行长时间的短信轰炸,导致手机瘫痪。除了单纯的短信轰炸之外,我们在测试过程中也发现,部分金融交易平台对所发送的短信内容也并没有进行限制,导致可被利用进行短信欺诈。示例如下:(1)短信轰炸。我们发现众多的金融交易平台仅在前端通过JS校验时间来控制短信发送按钮,但后台并未对发送做任何限制,导致可通过重放包的方式大量发送恶意短信。(2)任意短信内容编辑。在某平台的修改绑定手机功能就曾出现过可编辑短信内容的问题。点击“获取短信验证码”,并抓取数据包内容。通过分析数据包,可以发现参数sendData/insrotxt的内容有客户端控制,可以修改为攻击者想要发送的内容。解决方案:针对恶意短信类的安全问题,建议可以通过以下两种方式进行防护:(1)从服务端限制每个号码的发送频率和每天的发送次数,防止攻击者利用短信接口进行恶意轰炸。(2)发送短信的内容应直接由系统内部进行定义,客户端可通过数字或字符的方式,对所需要发送的内容进行选择,如messagetype=1为密码找回,messtype=2为注册,然后通过数字来索引要发送的内容。
三、结语
随着社会的进步,互联网金融交易平台将会越来越流行,平台涉及用户信息、资金等敏感信息,因此平台安全性更应受到重视,开发商必须加强开发人员的代码安全意识,建立代码安全开发规范,同时结合第三方渗透测试和代码审计的方式对即将上线的系统进行测试,提高平台的安全性。