抽奖活动中的黑灰产对抗

有羊毛的地方,必有薅羊毛者。近日破站为了预热 98E 手办,推出了个抽奖活动,需要通过用户互赞达成抽奖条件,并且以先到先得,无限抽奖的方式清空奖池。

显然这种活动很容易被羊毛党攻击,可利用点有:

  • 将养好羊毛号拿出来批量相互点赞
  • 即将开始抽奖时,控制羊毛号批量无限抽奖

攻击者只需要写个简单脚本就能完成上述攻击,攻击成本低。这时候防御方则需要考虑如何用尽量低的成本进行防护,而且若稍有不慎,服务还可能被攻击者打挂,下面将从四个方面介绍攻防对抗手段:

  1. 增加参与门槛
  2. 应用层的防御
  3. 业务风险控制模型
  4. 切断利益链

增加参与门槛

黑产常常会操控大量僵尸账号,他们最喜欢利用账号体系里一些产品给正常用户的便利,如果仅通过账号名和密码就能注册的账号,这个门槛是非常低的,注册机都十分泛滥。然而这些账号都有着明显的特征,无手机绑定,无邮箱绑定,等级低。只要稍微增加参与抽奖的门槛就能挡住大一批僵尸账号,如要求绑定手机或邮箱,等级大于x级。

应用层的防御

增加了参与门槛往往是不够的,还需要更细致的规则加以限制

  • 限制用户抽奖次数
  • 限制用户抽奖频率
  • 限制 IP 的访问频率

为了增加模拟抽奖脚本的开发成本,还需要对 API 添加一些 HTTP 协议相关的限制

  • 限制抽奖 API 的 User-Agent
  • 限制抽奖 API 的 Referer
  • 校验抽奖流程 API 请求链路的完整性
  • 为抽奖 API 接入高强度的验证码

为了防止奖池秒空,还可以隐藏一些 API 的关键参数和加密

  • 在每次开始抽奖前隐藏一个随机的 Key,作为抽奖的检验参数之一
  • 前端代码混淆,对所有参数使用一些加密算法组合加密
  • 抽奖接口加入需要数秒的工作量证明算法,增加攻击者的批量控制硬件成本

业务风险控制模型

即使增加了足够多的限制和门槛,如果有足够的利益,黑产依然能够通过各种手段突破。账号方面伪造账号的真实性,为了绑定手机依然持有大量绑定手机号的账号,通过手机号接码平台或者购置硬件猫池。IP 地址方面会通过购买代理池、秒拨宽带切换 IP 地址。于是我们可以自建或集成第三方的真实性评分数据库,来判定是否为虚假或恶意:

  • 手机号真实性评分
  • IP 地址真实性评分

再与账号相结合,形成一套账号-手机号-IP地址的用户画像、关系网,可以将黑产集团聚合在一起,也可轻易地可视化展示出来。

下一步可以将各业务联系在一起,形成用户的真实性评分。业务方通过校验统一的真实分,来限制用户的行为和用户中奖的概率。

切断利益链

从黑产的目的出发,切断利益链是最有效,但又是最难的。薅到了奖品都要卖出去,可以增加变现的成本:

  • 奖品绑定账号
  • 奖品绑定用户身份(手机号、身份证)
  • 奖品使用条件限制

Leave a Reply

Your email address will not be published. Required fields are marked *