家乐福618安全与性能保卫战(一)-安全高地保卫战

引子


从2010年第一次被DDOS了一下后从此把安全以及性能这2样东西放到了我设计工作中几乎占据了一半的时间与修练。

安全与性能是密不可分的。尤其是IT中的安全,安全等于技术技术不等于安全,因为安全説开了可以是另一个领域但是技术又离不开安全。因为一旦事关“安全”要么不出事,一出事就是致命的。

那么安全与性能为什么又会联合的这么紧密呢?

这事需要从2017年我进入上家公司后开始説起,虽然在2014年以及2016年和“黑产”有过几次交手,但是真的从来没有像在2019年5月到6月28号这段时间和“黑产”打的这么苦过。

这么説吧,完全可以拿一战与二战中最惨烈的“凡尔登绞肉机”以及“硫磺岛”这样的场战役来作比拟。。。。。。

被黑产打到差点全军覆灭

家乐福618安全与性能保卫战(一)-安全高地保卫战_第1张图片 618保卫战全局战役图
​​​

 

整个战役分成2块高地,1#高地和黑产对打,2#高地为“性能保卫战”。大家可以看到安全战高地与性能战高地间其实是有“交通壕”相连接的,这就是为什么我説这2个高地都是有相关的牵连的。

一旦某个高地失守那么整个“战役”将会全盘输掉。

这场战役打得那叫一个惊心动魄,各个战地死伤惨重,多少次的宕机,多少人员“鲜血”的付出,有进有退,你占了我10块地盘我用原子弹炸掉你的后方。一时间,硝烟弥漫,喊杀声四起。

你听,那是运维们的惨叫:“宕机啦 ”!

你听,那是开发们痛苦的呻吟:“100多条慢SQL啊”!

你听,那是PM们的哭嚎:“怎么搞的,又卡了”!

你再听,那是电商业务部门的咆哮:“你们到底懂不懂电商啊”

用一些数据可以说明我们当时是如何被人吊打的:

家乐福618安全与性能保卫战(一)-安全高地保卫战_第2张图片

通过几个例子来看一下我们受到了哪些攻击

我们自己总结过,差不多市面上的所有类型的攻击都跑到我们公司来了。

短信接口泛滥-危险程度(5星)

家乐福618安全与性能保卫战(一)-安全高地保卫战_第3张图片

只是一条小小的短信,它就能造成巨大的危害。往往这种危险在发生时损失同时也已经产生了,这就是我前面提到的“安全要么不出事,一出事都是大事”。

而我经历的几个企业,真正意识到这种问题的基本都是在事后,这再次为我们敲响了警钟。很多东西是在一开始设计时就需要明确和敲定下来的。

大家都知道目前的APP架构走的是API调用,那么很多人説APP做成原生的不就好了?我明确告诉你,只需要5分钟就可以明确你手机里有多少个和后台间通讯的API。

第1种手段,我装 一个Fiddler然后我的手机装载一下某个APP通过这个Fiddler暴露出来的代理端口上网,那么你手机里的API会被一览无遗。

第2种手段,对于高价值的一些APP,黑产们是可以完全反编译你的手机代码的,一旦反编译后那么你就算在“前端”加入一堆的所谓的前端加密或者是把一些信息都变成token化,那也是没有任何用的。

5分钟,只要5分钟就可以获取你和后台间传了什么值。

因此,我们都需要在服务端做“逻辑控制”,我在前一篇“双12使用腾讯云WAF反羊毛党、黄牛党战纪全记录”中提到过,你可以用WAF去杀,但是WAF是“一刀切”它对业务的伤害很大,因此我们需要的是“温柔的杀戮”,这就需要我们使用逻辑去防。

爬虫攻击-危险程度(5星)

家乐福618安全与性能保卫战(一)-安全高地保卫战_第4张图片

  • 仁道爬虫,这种算好的,其实每个网站上都有N多个“仁道爬虫”,为什么叫仁道呢?因为它不会影响你系统的性能、不会造成太多危险,它以悠闲自得的速度以“友好协商”的态度,只做爬你的图片啦、商品价格啦之类的信息,对你的系统不会有任何影响,比如説:收集网站PV UV的也是一种仁道爬虫;
  • Low智商快爬虫,为什么Low智商呢?因为它很容易发觉,比如説一个广告爬虫或者是你的网站登录没有设“登录失败次数限制”,那么这种爬虫会以每秒钟200、300、400多次的这种频率来登录你的网站,如果你有WAF,把WAF打开用最最基本的规则一搜就能轻易搜出一大堆这样的明显爬虫,因为它太容易被网站管理员发觉了,因此我们把它称之为“Low智商”就是这个道理;
  • 恶意快爬虫,这种爬虫和Low智商很像,但是它不仅仅是爬信息这么简单,因为它会带有一定的目的性,比如説利用你网站一些抽奖页面不设限或者没有相关业务逻辑防护的场景,在1-2秒内完成数千次的如:点击大转盘、点击翻牌、点击用户抽奖一类的按钮或者是相应的API调用,这种爬虫其实还是属于容易被发觉的;
  • 高级爬虫(AI)类,这种爬虫利害了,它不是不易发觉而是不易封干净;比如説某一个爬虫,它先开始以每秒300次来访问,你去封它了,它几乎是在下一秒就变换一个IP然后对着同样的URL以每秒290次来访问,你再封,它再变换一个频率,你不可能无限把访问频率下压,因为这对真实访问就会造成伤害。更甚有爬虫它不仅换IP、换频率,它还能够换着UA,Reference甚至换着URL来搞你,对于这一类爬虫你的WAF以及防火墙其实是失效的;
  • 无限纠缠爬虫,碰到这个真不容易,我们碰到了。如果你説某个行为纠缠你个1周2周那不叫纠缠,纠缠你个把月而且每秒钟都在根据你的策略它也在变化攻击的策略的纠缠那才叫真正的纠缠,你可能真的想像不到当你封掉了1万个IP后还能有来自于同一地域的同样的而且一定是同样的就是不换它要攻击的那个url以这样的方式来搞你,它似乎就在向你炫耀:看,我的IP池有多少多!呵呵!
  • 羊毛党/黑产,这个就是危害最大了。我们和黑产打到现在还在打,黑产对网站的危害可以做到既不影响你的网站性能又不让你有所查觉就把你当天发的券、或者是可以秒杀的物品做到秒光,不过它用的也是基本的“爬虫”手段,只不过黑产使用的爬虫是一种混合体、可以自我进化、自我适应、甚至变种,类似异形,基本无敌;

综合上述来説,爬虫除了给你的网站造成经济损失外也足以让一家中大型网站在倾刻间瘫痪。

比如説,有一些网站喜欢做成“逻辑删”以及“记日志”,那么爬虫调集1000万个IP给你来一个一秒内一齐注册,啊呀。。。你再看看你的网站,不是前端流量被堵死就是后台数据库或者nosql存储区域被挤爆,这就叫外爆、内爆。

反弹弧式攻击-危险程度(5星)

 

家乐福618安全与性能保卫战(一)-安全高地保卫战_第5张图片

这个反弹弧式攻击很好玩,前面説过,有一种AI类的BOT或者是很高级的BOT,它会不断的来试你的水,什么叫试水呢?就是这种黑产手握大量IP,然后先以易发觉的高频率来访问你某个URL一下。而当你发觉后,它马上就变换IP再来搞一下同样的那个URL,那么很多网管或者是运维团队在前期业务压力大、网站迫切需要“释压”的情况下会被不断被迫降低这个用户的访问频率。那么降到有多低呢?

你表面看其实也不低,比如説一分钟300次注册,你説这个频率低吗?不低,你説这个频率高吗?也不高。既不高也高,既不低也低,这话听了怎么这么别扭!

比如説,在零售场景中有一种活动叫注册送小礼品。你看商场门口经常会有“靓女”让你扫一下二维码同时你注册成会员后给你一个“奥特曼”,或者是“基斯拉”一类的小公仔。而这种活动做的好的时候会造成一种这样的假像:即平时同一个IP每分钟注册绝对超不过50次,而某一段时间来自同一个IP的注册行为却超过了300次。很多人误以为这是一次异常行为,其实它是一个正常行为。好,认为是异常行为了,封!这一封,其实封的是很多真实访问用户的IP。

这,就叫反弹弧式攻击!

打响保卫战

要练武前先要学会挨打、先要学会扎马步、冲拳。被人打了个鼻青脸肿、体无完肤后我们IT技术部决定反击。

“专家”不靠谱、外部供应商只想要money money而往往有时给了money money不一定收获得了全部期望,“白白付出”也是时有发生。那一阵我经常一个人在家反思,内部问题外部问题,归根到底还是没有类似于“原子弹”这么一个打出去可以杀敌、放在家可以震慑敌人的东西。

不打无准备的仗

上面对于一些典型黑产的攻击,有些读者或许已经能够感受到了我们面临的攻击是职业攻击,这不是“玩家”或者是“散客闲人”一类的攻击,它是有组织、有计划甚至有规模的针对我们公司的攻击。

对于这样的“仗”从将要发生的时间、规模、投入上决定了它势必是一场“战役”而不仅仅只是那么一两场局部战争。要打战役那么就必须做好充足的调研、前期的物质准备、战场情报收集以及“精神动员”。

家乐福618安全与性能保卫战(一)-安全高地保卫战_第6张图片

当然,必要的物质还是需要提前准备的,对于这种有规模的攻击,我们做了一系列的调研。发觉如果仅仅是在WAF层、防火墙层面它根本是起不到效果的,对付这样的“黑产”攻击,我们必须先通过“黑产”手机号下手,要能对手机号的行为做出判断同时配合着WAF才能做到相应的攻防,那么要分析手机号行为它肯定是一个智能的基于大数据架构的分析引擎,因此我们选用了和我们的WAF同一家厂商-腾讯,我们使用了腾讯的天御系统,它的好处在于拥有中国最大的手机库,光微信就超过6亿手机信用的积累了,更不要説鹅厂在其它各渠道的积累了。这就好比现在的支付宝的芝麻分成了互金领域用于给客户打金融信用分的重要依据之一,那么腾讯的用户手机信用也一定是最值得信赖的依据之一一个道理。

同时这种战役级别的大仗不是上手就开打的,光战场情报收集、分析就要花不少时间。收集和分析什么呢?就是把我们受到的攻击给分类,并且把每种类别的特征提炼出来。

那么我们是怎么提炼的呢?下面给出一个我们公司分析和提练的攻击类型,这个类型我在2019年CSS安全峰会上展示过,被业界称为“全渠道攻击中台”模型。

好么。。。我们分析出来的攻击类型都够的上一个“中台”了,大家就知道我们当时遭了多少罪了,呵呵,是不是够得上一个攻击大中台呢?我们下面来看。

家乐福618安全与性能保卫战(一)-安全高地保卫战_第7张图片

家乐福618安全与性能保卫战(一)-安全高地保卫战_第8张图片

确实看了是要流鼻血了,确实我们也受到了这么齐种类的攻击。

有几种攻击前面已经提到过了,我们这边着重提一下这么几个攻击,因为这种攻击太高级了。

CC流氓

这种CC明显就是绕开了手机端用来和后端作一些数据验证时用的Token机制,甚至它能模拟你产生的Token。不要问我这么长的Token黑产如何绕开、如何模拟产生出来的,如果你碰到了这样有规模的黑产利益集团决定攻击你那么分分钟破解你的Token不在话下。

CC IP

这一块比较好理解,对于一些第三方对接如:支付、物流它们都属于B2B间的对接,那么都会有固定IP,那么把这样的API调用指定、绑定、固化它的访问地址即可,即IP相关绑定式访问。

那么不是在双方事先的IP范围内一切访问全部无效,但是这种防护的前提一定是对接双方的IP或者是外部的IP必须为“永久固定IP”。

还有一种,就是现在的网站很多使用的都是企业级微服务,那么微服务做多了,API过去API过来,很多人忘了一点。一些内部模块间的调用要走内网,再説白了拿一个例子来举例说明:同一个应用的Tomcat和MongoDb间是不是一定走的是内网调用?如果把Tomcat和MongoDb间的调用都跑到外网绕一圈。。。你不要笑我还真看过这样的设计。。。源于“图项目快,图方便”这个恶习。

违反正常点击顺序与不经页面访问接口

当然,这种BOT还可以识别,因为它是违反正常的界面点击顺序的。如果是一个人,它的点击一定是带有正常页面/界面访问路径进入的,而有一些点击通过在API层拦截分析后,我们马上可以发觉他们是直奔主题直接不经过一系列的页面直接访问你后台的API接口这么进入的。

对于这种攻击,仅仅有前台的Token是不够用的,因为Token可以被破解的、Token可以被模拟的。此时要在后台设以入库(DB)前的再校验往往可以拦掉50%这样的攻击,或者在一开始设计时前端应用就应该辅以“混淆代码”装置。如果你的网站是以赢利为目的,千万不要舍不得那每年那点该花的用于加固APP的钱。商业版的混淆器在一开始就纳入使用是很有必要的,好比我举个例子来説:你是愿意穿着凯芙拉防弹衣被54式手枪打一枪呢还是拿三夹板挡在胸口去被打一枪?

必要的投入还是需要的!

Token是我们用来做前后端动作校验这个行为是否一定是先经过一条什么路径再到什么路径的必要手段,那么这个Token肯定不能轻意可以被人模拟和识破,大家要知道现在的安桌应用如果不加专业的混淆器被人反编译是在分分钟的事,不要惊讶,我们就碰到了。

同时,对于每一个页面点击做好相应的业务逻辑梳理,在后台接受到API请求时再做双重逻辑校验,是可以有效避免这一类攻击的。

脉冲式Bot

什么叫脉冲式Bot呢?这个Bot很好玩,它属于可自调节频率Bot的一种。比如説,你有一条Bot防护规则为每分钟超过120次连续1小时就会被触发,那么这个Bot被拦了第一次以后它就会变频率,变成每分钟119次,但也是连续1小时。亦或者每分钟120次但是它的访问周期只有5分钟-10分钟,由于这两种攻击都没有触及你的防护规则,因此它不会被拦截甚至被侦测到,而且它会长时间“吊”在你的网站上,时有时无但再怎么样它也是有它规律的“周期”的,因此我们把它称为脉冲式Bot。

含有业务逻辑的Bot

这也是很智能的一种Bot,它通过一定时间的“自适应”,知道你们在后台用相应的逻辑来封它,那么好吧,这个Bot它进化了,它就会“顺着你的逻辑”来访问你。

这就很难发现了,但是通过一段时间的侦测我们还是可以发觉Bot必竟是Bot,它不是个人。它再怎么模拟这个业务逻辑它总会有“重复频率”,而一般这种高级Bot它总是带有明显的“偷盗目的”的,它们和一般的广告类或者DDOS类的目的不一样,它们盯着的是可以长期薅你的羊毛。

因此我们经常通过“访问重复指数”来计算一个IP对于一些特定的URL如:订货,拿积分。或者是:加车->下单->退单会有周期性的重复,当这个重复到达一定的频次之合时,它就不可能是一个人了。

进击的Bot

这种Bot我在上述篇幅中已经提及过了,这种Bot纠缠不止,手上又握有大量的IP,不断变化着攻击你相同的一个地址,比如説我们有一个在登录时用来初始化页面的接口被人纠缠了15天,最后统计了一下,竟然累计有6位数IP来搞这一个Url且都来自于江苏。

AI类Bot

这种Bot是真要了命了的,它还会拟人化,还会变。。。

什么意思呢,比如説我前面提到的“带有合理业务逻辑”访问的Bot,那么好这种AI类Bot呢它把一堆的各种业务逻辑事先组合在一起。举例来説:

路径1:先看首页->看到宣转轮播里新注册拿50积分的页->点击注册->领取积分

路径2:先看首页->看到宣转轮播里可以领春节礼券->点击领券

路径3:先看首页->看到宣转轮播里下单即领50积分->跑到分类页->点选几个分类页面->点选单品->加车->提交->还没得到支付成功消息立刻退货->获得积分->完蛋喽,你的网站积分被人刷走了

把这些个路径组合着和你来玩,而且还不重复,每天搞那么15、20下就收手,你还发现不了。这个超级恶心因此我们称这种拟人化基础上进化出来不断变化多种业务逻辑组合的Bot又叫作“孙悟空Bot”也正是这个道理。

黑产

这个説起来可都是血泪,我这边先説一下我们遭遇的黑产狠到什么程度吧,因为我后面会讲解防护,针对这种有规模有组织的攻击防护不是单个Case、单个战场的防护,那已经没有意义了,我们需要的是体系化的防护。

破解Token直攻接口

手机端被人反编译,然后知道你要带着一个32位的Token来访问接口,好!黑产使用工具Fiddler先把手机访问拦截一下然后用模拟器工具截获这个接口、破解这个Token然后用“机”带着Token直接访问你的接口

数以千万计真手机号

这样的东西大家看到过没?

家乐福618安全与性能保卫战(一)-安全高地保卫战_第9张图片

这叫“手机墙”,其实它也是一个机柜,只是上面插着几十甚至上百部手机,然后有一个“中控端”统一来控制这些手机一起来访问你的网站而己。

要知道现在一个手机号那是相当的好搞的,不信?你去淘宝,15块钱买个号可以匿名接收短信验证码。。。有号这不就成了么!

1000个号*15块钱不过1万5,每天搞你1000块券连着搞你一个月不就全回来了,更不要説有这样的“手机墙”的“客户”何止只搞你一家,人家同时一天搞上百个网站。。。吼吼!这个投入产出比。。。真值了哈!

变换地理位置

这种还好分辩一些,这个手机注册在A城,登录在B城。。。或者是注册登录在A城,下单也在A城,拿券时跑到了B城。对于这种手机号呢你可以先知先觉,先知先觉容易误伤。那么后知后觉,后知后觉你要有大数据实施计算能力结合设置业务阀值,一旦触发了就“杀”。当然这也是一种博弈,因为你想“零”损耗,那是不可能地,只能指望着“尽量减损”这才是正确思路。

AI智能过防伪码/滑块

这个也是用“手机墙”去实施的,这一招很利害。

大家都知道一些网站为了故意放缓抢无门槛券的速度,在领券点击动作时会先出一个图形滑块

家乐福618安全与性能保卫战(一)-安全高地保卫战_第10张图片

在手机墙面前这种滑块完全无效,黑产由于使用的是中央“中控”端控制着这上百、上千台手机,因此它可以在抢券活动前1毫秒先唤起滑块,然后在抢券活动开始时统一用“划屏机”把上千个手机上已经显示的滑块统一的去滑一下即可完成上千次领券。

很多公司放券放出来1秒内几千张空,你不要为此而感到开心,因为你不是淘宝,你不是苏宁易购,你只是一个nobody,不可能你的券有这火,那么领你券的一定是黑产,它们领了你的券只是为了去闲鱼卖而无法在后期再被激活鸟!

联网模拟器狼群攻击

我们也碰到了,因为你再牛逼的手机墙不可能牛逼到上百万个手机吧?那么这批黑产。。。很有默契的在他们内部其实是有一个类似于迅雷、电驴一类的通讯协议,使得几十几百个黑产之间可以互通信息、互相联网组成“群狼”式的薅羊毛。。。大家一起来抢娘,抢了娘卖了去换粮喽!

混合逻辑炸弹攻击

逻辑炸弹不是把你给“爆”了,爆你没有任何意义!黑产图这种乐子。。。何必呢?那怎么个逻辑炸弹呢?它会混合着拟人化Bot、孙悟空Bot不断的来探你,探啊探,探到了你的逻辑上的Bug,什么样的Bug呢?我来举一例 :

你要搞跨一个竞争对手,让它在某一天的大促活动时“丢人现眼”,于是你去探到了它网站有一个这样的漏洞,那就是加购物车锁库存。

好,我调动10万个手机排着队每个手机来下你某些商品的“单”,把它们加到购物车。。。加一个锁一个库存,加一个锁一个库存,一锁有些还锁半天,然后正当此时,当真实用户看到你网站的推广广告后上来买东西,发觉都是“缺货”。。。

要知道,现今中国社会用户都已经很宝贵了,线上获取用户成本很高,有哪些APP真正可以让一个用户“留足超过30分钟”呢?很少有吧。现在,有用户上你的APP看一眼结果是“缺货”,你再想形成这个用户的“回头率”那几乎已经是不可能了。

这种逻辑炸弹很可恶吧?嘿嘿!

对各种攻击作一个总结

现在的攻击已经不是5年前,10年前的那种简单的攻击了。这些攻击都是基于大数据、人工智能甚至有深度自学习、自建模然后自适应的能力,且规模庞大、数量众多并形成了一条产业链。

做TO C的朋友们注意了,千万不要不重视IT安全(我指的是IT安全技术领域不是停留在嘴上只会BBB的那种)要不出了事,你连哭的机会都找不着。

这种黑产的产业链极其强大,我拿几个环节来和你们説你们就知道黑产的人为什么比你企业还有资金、比你公司首席架构师的技术都要高的原因了。

  1. 黑产拥有大量手机与号码,它们会“应邀”做水军,给网站灌水,这个应邀一定是收费的;
  2. 黑产会和一些网红谈好,几点几分你播出?好,我来,给你灌水军、灌流量同时收取你所在平台的“劳务费”;
  3. 甚至“捧红”一个网红

爬券。。。薅羊毛,真的只是黑产的“副业”,人家的主业是这种“大目标”,呵呵!

反击战

WAF整体攻防策略

家乐福618安全与性能保卫战(一)-安全高地保卫战_第11张图片

 

 

先从WAF这一阵防御説吧,这个属于硬杀伤,对于一些非常明确的攻击以及减少网站恶意流量来説还是很有效的。

科学合理的封禁

从上图我们可以看到,按照非正常频率我们假设线下零售场景中的“线下推广”做了特别的好,那么这个好翻译成互联网语言就是并发用户高,我们就设一个最高阀值吧,这个最高阀值怎么设呢?这是有讲究的:

  • 你不能设太高,太高等于失去防护;
  • 你不能设太低,太低杀的都是真实客户;
  • 根据采样、分析、预测,这都要用到数据报表大数据分析等技术来定;
  • 惩罚措施不能太严、时间不能太长,因为目前我们手机里获得的IP都为非固定IP,有时一个区域一个基站的IP一共只有5位数,而你的网站太“惹人嫌”了,那么黑产会在短时间内如:10分钟内发起5位数攻击,你封也封对了,但是封的时间太长,那么黑产很聪明发觉自己用的IP一旦被封,它就会把这些IP还出去,当这些IP漂移到了真实用户手中后由于你的封禁时间太长那么就会导致当这些被封的IP漂到真实用户手里时它的状态还是“被封禁”,这就会把真实用户损害到;

用99%的时间去做分析和观察用1%的时间去做实施

多放探测器、探针一类的东西去捕捉数据,比如説我们使用的是腾讯云,平时大部分时间或者可以説绝大部分时间我们开启的是“monitor”模式,当monitor采样到足够的样本并且提练出了通用模式、规则后,真的要去写一条封禁规则也只需要1分钟时间。

故意抛一些无价值低价值的“饵”

有时我们会欲擒故纵,放任一段时间或者故意抛一些假的“饵”,只是为了在观察和分析的基础上进一步去做“确定”,一旦黑产上钩,这时这条规则会变得极其精准而带来的“反攻”会是持续的、汹涌不断的,我们把这种反攻模式称为“远程火炮群”。

建立米格空中走廊

对于第三方、外部以及模块间的接入一定做到“合理”接口,能走内网的走内网接口,能绑白名单的要绑白名单。这样的点对点信任通道内的数据交换我们就把它称为“米格空中走廊”,因为在抗美援朝时志愿军用“苏联老大哥”支援的米格战斗机打到美国的空军不敢进入三八线一带的空域,这块空域就叫“米格空中走廊”,那是一条绝对可控制的空中通道

围点打援

什么是围点打援呢?就是我上文提过的,一定一定要多使用合理的业务逻辑、后台的双重校验去对抗黑产的行为,那么配置精良的WAF上一般是可以去做组合业务逻辑的编织工作的,使用这种业务逻辑编织出来的“网”其实是具有很强杀伤力的。基本上是来一个“有违逻辑”的请求就杀一个。

举2个典型的攻防例子

WAF攻防案例- CC + BOT防脉冲式攻击
 

家乐福618安全与性能保卫战(一)-安全高地保卫战_第12张图片

同样还是使用相关的案例,这个Bot在被第二层Bot拦截后它会“变种”。

WAF攻防案例- CC+BOT被反弹
 

家乐福618安全与性能保卫战(一)-安全高地保卫战_第13张图片

在这个被反弹的案例中,我们就不能使用Bot再作基于频次的“杀”了,而是要使用Bot的特性对于Ref头或者是UA(User Agent)来进行封。

我举一例来説,我们有一个URL,它的频次阀值为每分钟允许值在3,000次。有些人会问,你怎么会设这么高的值?我反问这个人,为什么不能允许这个值?

首先,我们来考虑这个值会对业务造成什么影响吗?不会,因为真的如果线下推广做的好,的确是会在短时内带来如此大的流量。

其次,作为一个网站,对于某一些个URL你连一分钟3,000次这样的访问都撑不住,你还做什么网站呢?

使用性能+业务逻辑组织你的“第三道防线”

这就是前文曾提到过一个叫“博弈”的词,与黑产间的攻防很多时候是一种博弈,它追求的不是在于“除净”而在于让对手不断付出“高昂的代价”即提升对方攻击的成本以达到“减损”,你做不到“止损”,那是不可能的,如果你一味追求止损那么最后损失的其实是真实用户。

因此,对于一些无损害只是频次高的访问,你需要使用“第三道防线”,这个第三道防线就是你的系统性能和完善的业务逻辑,比如説有用户频繁的调用注册接口,你不可能不去控制当然也不可能控制的太紧,我举一例来説,同一个用户手机号它注册连续超过15次你觉得这是一件正常的事吗?如果你放任他可以无限“失败”下去,它连续泛滥你的注册接口100万次你的网站也吃不消。一个就能泛滥你100万次,调动10万个IP并发的来调用你你试试看呢?

这种情况就需要使用“温柔的杀戮”,比如説,你至少可以挺并发10万的量每个访问允许他们一天最多使用15次注册接口,这就是你的系统性能+业务逻辑组合的“第三道防线”。

打啊。。。杀啊。。。这个打的那叫一个热闹。

来个快频次的Low逼Bot,我Ban...

来个Ref不对头的伪装Bot,我Ban...

来个User Agent看着不顺眼的Bot,我Ban...

我Ban...我Ban! Ban! Ban!

下面我们讲一下如何去防薅羊毛,这一块内容我相信绝对是干货,可能在业界还没有公开讲了这么透的,因为我完全是结合着我们碰到的案例的实战来讲这个反羊毛党的设计方案的。

遇到拥有千万个手机号的黑产
 

家乐福618安全与性能保卫战(一)-安全高地保卫战_第14张图片

一开始我们以为这只是一场“局部战争”,结果一交手,好家伙,给打成了一场世界大战了。

我们碰到的黑产牛逼啊。。。就是搞某大厂的那批人,千万个手机号,一天注册你个上百万次,历年来养的小号,僵尸号,什么拟人化Bot、孙悟空Bot而且还是基于大数据自建模具有AI能力的攻击这么组合着搞我们哈!

券,被秒光,真的是秒光,连1秒都不到,把发的那些个无门槛券抢光光!

而且这些领券动作都是慢Bot,慢Bot是最最头疼的事,它一点不快,也没有任何的异常高频次,也没有规律可言。因为它手上有千万个手机号,随便调动几万个,一秒内每一个手机只需要访问一次,你的券就没了。

所以事前封不了,事后更加很难判断。

因此这不是一场“局部战争”而是一场旷日持久的“世界大战”,我们一开始就是因为把它也当作一场“局部战争”去对待所以在一开始就吃了亏。

不能够拿WAF、防BOT这种思路或者是来一个Case想一个策略的思路和设计去对待这种攻击了。正如现在我们一直在説的:小国间的战争那叫互殴,而大国间的战争那是“体系化的对抗”。

什么叫体系化的对抗呢?我这边举几个例子来说明:

  1. 当你觉得可以使用活动还未开始点击无效来防机器人领券时,你会发觉封掉一个手机号它会变出10个手机号直到你活动开始黑产它情愿损失掉上万个手机号但他还有1千万个手机号,只要把你的券抢了就得了,你怎么和他斗?
  2. 当你觉得你可以和第三方数据平台进行联合甄别手机号是否“有效”而不是那种15块、20块就可以买到一个号的那种手机时,黑产会调用它在各个微信群、微博、其它各大网站一直养着的具有良好行为的小号来攻击你,你怎么和他斗?
  3. 你刚在早上10:00的一场活动防掉一批黑产,在紧接着12:00的那场活动中你昨晚刚刚一通宵上线的防护逻辑又被攻破了;

这场战斗我们足足打了有1个月时间,在这1个月时间互有攻防。

516-610黑产压着我们打。

610-618我们连胜了9天。

战斗直到现在还在继续,正如上文中所説,516-610这段时间我们以为这是一场“局部战争”,采用的是兵来将挡、水来土掩的方针。因此很被动,每天都在上线、每天都在被攻破、每天都在“流血”。

但这也正如我们中国的两弹一星建设过程一样,我们没有死那么我就能总结出不少经验来,于是我们把我们的经验整理成了一个“圆盘”。

家乐福618安全与性能保卫战(一)-安全高地保卫战_第15张图片

这个“圆盘”它其实是一个“闭环”,即我説的“体系化对抗”的一个完整“闭环”,这个闭环就是做的好的BAT那几家大厂在用的“风控”模型,只是它的实现细节各有千秋,但是这个过程一定一定都是一样的。

但是,因为国内并不透明的技术氛围以及不太喜欢往opensource做contribution的精神,这个体系几乎无人去做真正意义上的讲解和公开那么在这边我首次把它完整展现在了各位面前,因为这个风控体系是经过了论证的,大家可以放心的去使用。

好,现在我们把这个“圆盘”给它“拉直”了来看,它其实就是这么一个业务流。

家乐福618安全与性能保卫战(一)-安全高地保卫战_第16张图片

下面直接给出干货一类的解释:

  • 只是单单的WAF,CC防御根本无法对抗薅羊毛,必须我们把焦点关注在用户的手机号上;
  • 手机号它其实是有“信用”的,和人的消费金融行为一样,它也有类似“蚂蚁征信”那种信用分。对于绝对的黑户手机那是肯定不让通过的,比如説一个黑户手机来领券直接你系统可以提示“亲,活动已经做好”,“亲,优惠券已经被领空”,“亲,我骗你你又准备咋地,谁让你是个黑户”,对于“白户”手机,那肯定是没有问题的。难的是对待那些个“灰80%”,“灰70%”,“50度灰”这种中间状态的手机,此时就需要业务逻辑的配合,比如説发觉一个“80度灰”手机本来我应该给他100元券的我现在给他5块钱的券,如果是一个“50度灰”那么我可以考虑折中点给他一个30块的券,这就是我们説的“减损”,这实际上是一种“对抗手段”;
  • 前文提过,我们碰到的是一个顶级黑产,它把“白户”手机放在机器里面然后用模拟器的速度来超过你真实用户抢券的速度,照样可以让你的网站里发的券被秒光,这就很难对付了,要知道当你碰到这种来访问你网站的手机号都是“白户”的时候那才是一场真正的战斗,于是我们会有一种手段,这种手段叫人机识别SDK。这种SDK它会埋入你的APP应用内,当用户打开这个APP时,它会自动识别,装有它的容器是一个真实的用户手机还是一个模拟器,它的原理如下:

家乐福618安全与性能保卫战(一)-安全高地保卫战_第17张图片

大家可以看看JD、永辉、苏宁的一些APP,现在的做法是在用户注册之前即用户还没有到达注册页面开始填手机号拿验证码之前先会给你弹一个“滑块”或者是一个“点选文字”的“人机对抗”过程,为什么会弹这个东东出来呢?就是因为APP已经发觉你打开该APP的行为有疑似人机,那么为了判断你是人还是机,它会让你来一次“图形对抗”。这一步一般的中大型网站我看了一下,还真没有。所以很多黑产的“白户”其实这些白户都是黑产养在我们网站里的小号,大量的小号就是这么被养成的。要知道,防范黑产一定先从“源头”防起,那就是登录注册。当然,前面还提到一点就是你的手机APP端一定要做混淆,要打足系统补丁,以增加黑产攻击的成本

  • 对抗过了才到登录注册步骤。登录注册时此时再对手机号的“信用”进行判定,有两种做法,一种为对于信用不好的让其登录注册但是在后台数据库层会对该会员进行一个企业自有信用分的打分。另一种为干脆不让第三分信用分低的用户手机进行登录或者注册,那么它的做法就是不断的去弹图形验证码让用户去试以此来做到“温柔的杀戮”;
  • 在抢券、下单、秒杀这些场景依据之前登录注册用户的情况来进行减损,比如説:让信用分低的会员“过”,那么对于这些信用分低的会员会进行判定给予其小面额券或者柔性的提示“忽悠”他。或者对于信用分低过一定层次的用户直接就不让其领券了;
  • 数据清洗,这一步其实也是很有必要的。因为它是构成整个闭环至关重要的一步,它的作用在于把一些非正常行为的用户给事后洗出来,比如説:登录注册和下单不在同一个城市的会员是哪些?或者登录注册和领券不在同一个城市的会员又有哪些,要知道我们前面的步骤势必会有“漏网之鱼”,到了数据清洗这一步那么我们就开始洗这些漏网之鱼了。洗出来这些“鱼”后反过来把这些会员做“标记”就是:要么拉低它们的企业自有信用分值,要么就标上“黑户”的标记,于是在这些“鱼”下一次再进行登录注册时就会被“扔”到他们本应该被“对抗掉”的那些步骤中了。因此,数据清洗是一个“承上启下”、“接漏补全”的过程,它就像一个齿轮一样,不断的驱动着这根数据流程“皮带”永远的转下去,把个企业的会员来来回回、回回来来的洗来洗去的这么一个作用;

这一套体系,它势必是建立在大数据的基础上的。大家想一下,黑产都已经大数据化、AI化了,你还不大数据这不是等死吗?因此我在这个闭环的流程上特别强调这个企业的大数据能力。

大数据,它不是报表功能很多企业和团队把它做成了一个"Reporting”,那么你根本没有发觉起大数据本来有的属命,你想,几千万的会员的购买历史、登录、注册过程,结合起来要在分钟级或者是小时级清洗,传统的数据库怎么可能做得到?一定要大数据去洗,洗洗么更健康,对吧!呵呵!

过程、方法论讲完了战斗并未完

体系讲完了,战斗并未完,战斗还在持续!

我们到现在还在战斗,因为还有很多细节需要处理还有许多分析正在精细、甚至也在往AI和建模上靠拢。

战斗从宏观上説这不仅是IT的战斗,业务、领导层更要高度重视;

战斗从微观层面上説催生每个团队甚至每个个人的技能,我们需要更精准的分析、更多的数据、更快速度、更高效、更敏捷的应用群;

战斗的忠旨在于提高黑产的攻击成本,战斗的原则一定是“不能建立在零损耗上,而是要建立在减损上”,千万要抛弃“蚊子再小也有几毫克肉”的思想,一定记得不要做“捡了芝麻毛西瓜”的蠢事。

因为这是一场持续的、永远不会消失的战斗,它需要我们斗智斗勇同时把安全上升到和赢利一样重要的层面上来。

下一篇我们将详细讲述“性能高地保卫战”。

 

你可能感兴趣的:(架构师修练之道,618,薅羊毛,安全,黑产,零售)