2.8.2 案例分析
1.数值精度测试
笔者对某交易所进行测试时发现,其默认小数点精度为小数点后3位小数,多于3位时会四舍五入,比如0.999 9,系统会默认为1,此精度问题可能会导致被攻击者薅羊毛。
攻击者可以注册两个账号,一个挂单(无须认证即可挂单),一个出售,配合无限薅羊毛。虽然单次获取的收益很小,但是无限制的话,造成的损失还是不小的,攻击者可以套取系统中心账号代币,并出售代币套现。
如图2.45所示,批量下单0.999 9个代币,当15分钟后,系统默认取消交易,然后钱包中心将返回1个代币给卖家,获取额外代币。
图 2.45
建议严格按照3位小数精度进行算术运算,并对下单频率以及数量进行限制。
2.接口频率限制测试
(1)邮箱验证接口
在进行身份甄别时,邮箱验证码因免费而被广泛使用。但是在开发过程中如果没有正确地限制接口频率,验证码就可能被用来进行电子邮箱炸弹攻击。电子邮件炸弹是最古老的匿名攻击之一,通过设置一台机器不断地大量向同一地址发送电子邮件,攻击者能够耗尽接收者的网络资源,如图2.46所示。
图 2.46
(2)短信验证接口
与上述邮箱验证相同,短信验证方式因方便快捷以及安全性较高也被广泛用于身份验证中(见图2.47)。与邮箱验证不同的是,短信验证码的条数是需要按照数量付费的。如果未进行合理频率限制,则会导致:
·持续给手机号发送垃圾短信,造成极差的用户体验。
·对于公司来说,发送短信一般需要第三方运营商,每条短信需要支付费用,如果一天被刷几十万条,会造成上万元的亏损。
图 2.47
3.批量刷单
我们团队在对某交易所进行安全测试时发现,可不停购买数量为负数的代币,然后确认付款,在商家后台无法进行确认收款,可以批量生产垃圾订单,而且会导致短信炸弹。请求如图2.48所示。
图 2.48
此漏洞是因接受非法参数以及未做频率限制而造成的,不仅影响到业务流程的正常运转,而且耗费了大量的短信资源。这种操作单次进行时看起来危害较小,所以经常会被忽略,但如果被无限制地利用,造成的损失将非常巨大。