0x01 成本对抗vs态势转换
有人说反爬的核心是成本对抗,通过分析爬虫的进攻路径,在每个环节增加爬虫的成本。这个对也不对,成本是相对的,针对土豪对手,成本不是问题。终局仍然是攻防态势转换。是算法+安全结合的领域。
0x02 爬虫的一般进攻路径
1、逆向分析(人工)
包括web端分析,移动端分析,爬虫工程师通过前端寻找对应的请求接口或者通过流量监听的方式找到需要用的接口。有时候需要去破解签名逻辑。就需要对代码进行分析,而代码也是加密的,需要逆向去获得内部的签名逻辑。
签名的逻辑包括对账号,设备,端上采集数据进行加密后随着请求带上来,在服务端对这些进行校验。如果你没破解对应的逻辑,很容易在这一层被拦截掉。
由于这部分工作主要是人工进行,所有很多反爬的方案都是在这一步进行不断加固,不断攻防,主要就是不断更新加密的逻辑,导致攻防两方疲于奔命。
2、接口测试
逆向分析完毕后,需要进行接口的测试,走通整个逻辑。调用接口的时候一般会需要对应的资源,资源包括手机号,账号,设备号等等,同时在测试的时候你会碰到服务端的挑战,比如手机短信验证码,比如滑动验证码等。就像过五关斩六将一样,需要对中间遇到的每个挑战进行突破。
3、获取资源(准备物料)
比如滑块,到底是用无头浏览器还是其他方式伪造特征。比如短信验证码,有没有对应的服务商或者卡商平台。比如设备号,能不能批量产生,比如IP,有没有大量的秒拨池子,比如账号,能不能大量注册,不能大量注册能不能其他方式搞到等价物。总之这些都是资源,资源的获取需要成本。
资源的获取过程中,有时候出于解密成本的原因,那就直接上真机,一切按照防御方的要求来,你检测我底层的各种设备特征,不断更新sdk,那我懒得去破解你,我上真机,一切都是真的。通过群控软件来控制机器的各项行为。
4、自动化规模化部署
当各方面资源获取都不是问题,所有加密逻辑都得到解密,过程中遇到的挑战都能得到解决,剩下的就是如果协同这些资源完成任务,做到自动化,规模化。前面的2步一般是安全部门同学去趟路,这一步是专业的爬虫工程师上场。爬虫就像受到管理一样,分批次协同出发,抓到数据后解析落库一条龙。后面的数据应用、处理源源不断的为业务提供信息和价值。
上面大概的讲了一般爬虫的套路,这当然还意味着还有其他的套路的爬虫,比如有些直接找到不设防的接口去大量爆破,这种一般属于漏洞的范畴。比如有些通过“中间代理”的方式,这种一般是通过某种方式“劫持”用户的设备,获得用户授权,以用户的名义获取平台信息,比如一些贷款公司,金融中间商。
0x03 如何防御
1、如何识别、感知
爬虫分低级爬虫高级爬虫,低级爬虫往往不讲武德,不知道隐藏自己,啥参数都往上写,前后顾头不顾尾,这种通过简单的统计特征+业务预判的经验就能分析就能搞出来。这里讲业务预判的经验是指在端上埋的一些采集点,低级爬虫往往考虑不够周全,就暴露了。或者是资源用错了地方,比如我一个c端的场景,你来那么多云IP是几个意思?我针对不同的场景设置了不同cookie,你不分青红皂白都加上是几个意思?很多隐藏的坑,低级爬虫不会注意。
高级爬虫就比较有意思,他们一切都尽可能按照真实用户的访问来,由于协同的存在,爬虫各自都有分工,每个爬虫出现少数几次就隐藏起来。所以反爬的识别主要是针对这部分。同样的,代码比较都是人写的,写爬虫的人跟反爬虫的人总有些信息差,况且协同有时候也会出问题,比如某公司爬取信息都是通过其他渠道获得的大量token,一旦渠道暴露了,可能因为其他原因暴露了,这部分资源就失效了。大量账号访问时间排序上明显的分布差异,成本价值差异、渠道差异等等都会暴露。这时候防守方,最核心的信息优势是能看到全局,通过各个纬度看到真实用户的各项分布。而进攻方不知道这个,只能看到单点,凭借想象去进行探测工作。
这里要提下很多的异常检测算法,比如孤立森林,pca,t-sne等等,这些算法有用,可以找到一些奇葩的模式,跟正常群组不一致的点,但是输入给这些算法的数据还是要靠业务经验,靠特征工程产生。我一直感觉,传统机器学习中,你在做特征的时候本身就在做分类判断。特征做的好,模型跑的好。
2、感知到了如何拦截
在上一步中,假设我识别到了各种爬虫,那我该怎么处理?识别的准确率多少,召回率多少?假设准确率99%,召回率80%。我能直接拒绝吗?1%的GMV是多少,1%的客户是多少,能拒绝吗?拦截带来的客诉是多少?这些都能承受吗?
这其实是反爬领域最核心的一个问题:用户挑战技术。很多人不理解,你明明不是爬虫感知拦截,为啥用户挑战技术就成了核心了呢?
当我们缺乏有效的用户挑战技术的时候,比如滑块被破解了,我们检测到爬虫然后去拦截,弹出滑块,但是发现滑块通过了???这时候我应该相信谁?是我们检测不准,还是滑块被破解了。这个破解是大规模破解还是小黑点的问题还是其他的?此时所有攻防的压力都转到滑块上了,对方突破了滑块就突破了一切。
好,我退一步,我们的滑块不会被破解,我们的用户挑战技术非常NB,出门左拐看打码平台。
我再退一步,我们不去挑战用户,我们假设所有的挑战用户的技术都会失效。是的,面对对方人肉应对,确实都会失效。我不挑战了,我直接拒绝。那我面临的是拒绝的这部分UV/PV的覆盖度,精度的问题。我为了减少误杀,一定会放过一部分,为了保证覆盖,一定会引来误杀。
此时,攻防两方会进入到一个狭窄的巷子里,防守方能感知到,检测到大量爬虫,但是不敢100%拒绝,毕竟不敢保证精度100%。拒绝太硬了,容易引起客诉,我可不可以用比较软的方式,比如信息的裁剪,就是对不同等级实体的透出不同等级、不同数量的信息。这算是一个比较好的权衡,此处将搜索推荐的技术可以融入进来,解决用户-信息之间的安全匹配。推荐+安全,解决反爬问题,将攻防优势地带转给防守方。引入信贷风控中的量化风险方法,通过在格子上去度量反爬带来的损失(GMV、转化率等指标)+收益(蓝军检测+竞对)不断去优化。
3、如何根本提升对方的进攻成本
对于进攻方而言,优势是单向透明,题目都是白盒,只需要去解就行了,一次不行来两次。况且探测成本很低。
进攻成本=探测成本+资源成本+逻辑破解成本+法律成本。
针对大型集团军来说,资源成本可以忽略,破解成本可以忽略,这两个都养得起。法律成本很大,这里就涉及到爬虫的溯源。除此之外,提升对方的探测成本也是可行的办法,转变攻防角色才是真正的要做的。让对方无法探测或者探测成本非常高。
针对散兵游勇,去提升他们的资源成本+逻辑破解成本就够了。
探测成本=逆向成本+自动化部署成本。通过不断更新服务端的接口校验逻辑,客户端上的加密逻辑,让进攻方的逆向+自动化部署结果只能维持很少一段时间,这也是一种思路。难度是防守方如何保证频繁的更新过程中的工程上的稳定性和有效性,最大化减少业务层的风险。
0x04 由反爬扩展到业务安全
一般互联网的业务安全,比如盗号、垃圾注册、薅羊毛,其进攻方都是黑灰产,而黑灰产是分散的,讲究成本的。这意味着他们的技术水平层次不齐,目标是赚钱。所以这种情况下通过技术对抗,成本对抗,是可以大部分解决问题的。如果线上解决不了,还有线下打击可以办。(划重点,此处特别需要对黑灰产进行溯源,监控,适当的时候进行抓捕)
业务安全的另外一个特征,风险相比爬虫而言是可以明确感知的,比如盗号之后,用户会来投诉,薅羊毛的特征和正常用户还是有明显的差异,账号垃圾注册之后会去干很多不良行为(滥发广告,虚假交易,发布不良信息等),各种黑灰产群里,论坛上会交流各类平台的业务漏洞,甚至相关的资源交易,比如买卖优惠券啊,通过这些感知的度量,回溯,是可以找到这些业务风险的根源。这种根源可能千差万别,业务安全需要去根据这些问题的根源去制定体系化的,根本性的技术方案,业务方案进行修正,在业务和安全之间取得平衡。
感知是业务安全的基石,case分析研判是业务安全的关键路径,对业务、数据、安全的综合理解是做好业务安全的必要条件。