项目最近做邀请好友送代币的活动,招来了一堆薅羊毛的,总结一下用到的风控反欺诈方案。
业务场景:
1、用户在钱包APP中邀请好友注册成功后,会赠送一定数量的Token。
2、用户注册可以使用邮箱或手机号,通过发送验证码方式验证
攻击情况:
1、薅羊毛使用接码平台,因此有无限量的手机号可用
2、薅羊毛应该通过自动化方式,疯狂调用注册、验证接口
3、对注册、验证等主要接口服务CC攻击
策略原则:
1、尽量采用低成本或免费方案,避免不必要的投入
2、尽量避免对现有产品做大幅调整,快速响应目前市场推广活动
策略方案
策略总体方案:CloudFlare CDN+Token Authentication+Fail2Ban+fingerprint2
策略主要思路:
1、使用CloudFlare CDN(免费版)来做第一层防护,隐藏服务器IP,应对可能的DDOS攻击
2、使用CloudFlare Token Authentication来对URL做鉴权,防止CC攻击
由于 Firewall Rules 需要开通Business或Enterprise account,为收费服务。因此采用了Worker免费版。
Token Authentication国内一般叫URL鉴权,可以用于防止CC攻击、防盗链等场景,核心思路:
a、APP端在调用接口服务前,先生成本次请求的签名,参与签名的要素包括:token有效期、对称密钥、URL地址。签名采用HMAC加密,此步可以在本地完成
b、APP在接口请求头、或请求参数中带上签名sign1
c、服务器端根据token有效期、对称密钥、URL地址,计算出对应签名sign2,比较sign1和sign是否相等,以及当前时间是否小于token有效期(在有效期内)
3、使用Haproxy/Nginx的流量控制功能,对单一IP同时并发调用注册、验证接口的并发数做限制
Haproxy主要使用stick-table、acl、path_end来做限制。
结合URL鉴权或cookie机制,可以对用户并发数做限制,避免IP限制粒度过粗缺陷。
4、使用Fail2Ban对Haproxy/Nginx日志解析,对注册、验证接口失败次数超过限制次数的IP直接在iptables封杀
5、使用fingerprint2获取用户终端信息的fingerprint,避免同一台终端反复中注册,提高攻击成本
原本可以在APP端获取终端标识信息方案,但需要升级APP。由于注册、验证页面用的是HTML5页面,因此采用fingerprint2方案。
转载请注明:出家如初,成佛有余 » 低成本防CC攻击、薅羊毛风控反欺诈方案