导读:随着流量由量向质的转变,业务场景的反作弊攻防逐渐白热化。为了应对黑产在客户端环境伪造, 设备指纹篡改等客户端反侦察博弈日益严峻的复杂形势,极验总结了多年的对抗经验, 认为“语义”是请求流程是打击黑产及其自动化工具的最佳实践。我们将这个理念融入了验证码, 对业务场景的流量分而治之,制定分类和处理策略,取得了很好的成果。今天我将结合多年的实践经验,分享如何通过验证码对流量分类识别以及如何进行反作弊的方法和思路。
全文会围绕下面四点展开:
可信流量治理简介
不可信流量的对抗
验证码与流量识别
流量识别、分类与处理
01可信流量治理的简介
1. 流量趋势
所有的流量都可信吗?据统计,2021年不可信流量占比61.5%,也就是说仅38.5%的全网流量为可信流量,而不可信流量的产生是因为黑产的存在。一旦我们风控所保护的资源对于黑产有巨大的利益,那么黑产就会动用巨大的力量来突破各种防御规则。
过去十年,我们更关心流量的数量,而未来十年我们更关心流量的质量,这是我们经过多年运营所总结的客户诉求。越来越多的客户提出厘清各类流量的需求,从而来对业务进行更好的指导和分析。为了达到这个目的,我们需要对流量分而治之,制定分类和处理策略。
2. 流量识别效果
验证码作为第一道肉盾防御在业务接口之前,那么必然成为被黑产突破的第一步。流量识别的方式是通过主动式的改变某些点,进而设计一个可观测、可测度的系统,在多次主动观测之后可以评估出异常流量。
举一个例子,下图是我们的验证码3.0的流量识别的效果。因为验证码分为问和答以及最后的校验,我们可以看到图表左边部分的初始状态,上方深蓝色是验证请求量,绿色是验证成功量。当我们在15点51分左右更新验资源, 进行随机质询的瞬间,会发现有大量的问的请求,却没有回答请求,并且会发现红色的失败请求和拦截请求也在下降。
这就引出我今天分享的核心——由一个相对被动的防御方转至主动进攻方对黑产进行质询。
02攻与防:不可信流量的对抗
在实际的业务场景中,一旦某种交互场景或按钮点击背后存在网络资源和利益,让黑产觉得有利可图,那么必然会存在持续的被攻击和被利用的风险,因此需要引入中间的防御机制。
1. 验证面积场景
简单介绍一下极验的验证码场景交互。在用户访问服务资源前创造一个基于场景的问答校验,利用验证码的问答特性,拦截机器请求。这少不了对验证流量的客户端和整体体系的建设。今天另辟蹊径, 呈现极验在业务安全领域上独有的特色。
为了让大家更好地理解如何制定与不可信流量对抗的方法和手段,我们首先描述一个大家都见过的题目:两人相向而行,一只狗在两人之间往返跑,问两人相遇时小狗跑了多少千米?
解决这个问题一般是两个思路:
一个是把小狗每次往返遇到人的路程都算出来,由于速度是一定的,因此最后是一个等差数列求和问题。
另一种方法是直接用狗的速度乘以两人相遇的时间(也就是狗运动的时间)来得出答案。
通过对比,不难看出两种方法的特点,第一种是局部视角,类似于构造法和演绎法,厘清每一个过程然后计算相应结果;而第二个是全局视角,不关注细节,只抓住最后的特点来进行计算。之所以举这个例子是因为我们在做风控时,也分为局部和整体的视角。
在验证码业务中,局部视角是获取请求发生的端、设备、时间、是否模拟器等,以及为了保护这些逻辑,要进行代码混淆和环境检测。通过长时间的运营,总结出风险行为的趋势,这是用于验证风控的局部视角。
而整体视角看,验证码相较于其他的风控业务,有一个主动的过程,这就是答案上进行博弈,避免穷举和自动化的答案破解。
从客户的业务场景的安全角度来看, 因为客户的资源有潜在的交易价值, 所以黑产会尝试以最高的效率来进行业务上的操作. 为了增大攫取资源的概率和效率, 自动化的操作是黑产演进的必经之路. 加入业务安全的限制, 无论是各种账号风控、设备风控, 验证码拦截都是对黑产进行不同程度的干扰和打击。只要资源有潜在的市场, 黑产就会把对业务的流程的破解转移到对账号、设备、验证码上。
从正常的客户端来进行操作会有相应的限制, 黑产会破解协议或者使用模拟器,对账号的风控使用很多新注册的号码, 更换设备或者破解设备生成逻辑来伪造新设备, 验证码作为唯一在业务场景事件前拦截异常的业务安全工具, 也会面临别人的破解。
于是在运营一段时间之后, 针对验证码的破解比比皆是,怎么维持这种动态平衡安全就是验证码的核心课题。
即使在验证码中引入了ip、设备及其相关环境检测, 模拟器检测等相关用户信息的判断, 会很容造成一定程度的误判。各种情报库在验证码这里的效果也难以测度, 或者即使测度出来, 黑产又更换了新的ip和设备, 让验证码团队运营防御疲于招架。
相对来说, 这种局部细节视角的防御比较被动,由于客户业务的性质不同,我们很难第一时间通过请求量发现客户业务的异常,即使有流量上的激增也难以获知是由于业务性质、活动场景导致的,还是异常情况导致的。如果要做成通用型产品,需要寻找更适合的方案。
所以, 对黑产的打击需要更具针对性, 从他们对验证码破解手段上进行分类。一种是模拟器破解,模拟器的好处是只要进行拖拽到相应的点即可;另外一种是接口破解,业界又称协议破解, 对于大部分黑客而言会通过各种调试,找到接口协议的传参格式。即使协议中参数进行了相关编码和加密, 黑产也会找到加密前的逻辑,然后模拟加密伪造参数即可。这种接口破解面临着除了破解答案之外,还需要对客户端侧逻辑的破解。
这里先给出结论: 无论是模拟器破解还是接口破解,都需要知道验证码问题的答案。在答案识别这里做防御是一夫当关, 万夫莫开的事情。在答案上博弈可以比较完美地平衡好误封和漏过这两种bad case, 增强验证码安全运营的稳定性和效果。
接口破解需要对前端JS做逆向还原,同时要理清参数生成的逻辑,因此成本相对较高,但破解效率非常高。
模拟器破解的原理类似于自动化测试,其技术门槛低且成本低,但受限于UI交互的需要,破解效率低于接口破解。
从流程上看,无论是接口还是模拟器,最后实质上都会通过构建答案彩虹表来穷举图片破解验证码。
这就面临着如何获取答案: 一种是人工打码标注,另一种会使用人工智能模型来识别涉及到分类的验证码问题。从实际破解效率来讲,95%以上的黑客都会构建彩虹表,通过对参数协议的破解就可以进行相关验证码回答。
整体的破解流程是通过主网站获取相应的资源,然后将验证码数据导入打码平台,再通过人工或是分布式训练系统来识别相应的请求,最后构建彩虹表用于通过验证。
另外,为了保证验证码的服务稳定和前端稳定,当UI形式越多、越复杂,那么客户端将面临更多的兼容性风险。因此对于验证码业务来说,潜在的成本就在于兼容性的处理。为了兼顾稳定性和安全性,验证码面临着的巨大运营成本。
验证码的课题就是如何在成本可控的情况下打击这种对答案的破解和自动化的使用。
03一夫当关:验证码与流量识别
验证码本身有一层答案的语义,这是天然的区分人和自动程序的地方。对于黑客来说,可以通过穷举资源打码来建立答案的彩虹表,或使用cv、机器学习、深度学习等方法来标记样本训练模型,从而更快速地构建答案彩虹表。无论是哪种形式,获得答案都是第一要素。因此在答案上防御,可以起到四两拨千斤的效果。
第一种方法是保持更新的频率来反穷举。由于图片和音频需要提前缓存,为了避免接口负荷过重同时避免被穷举破解,我们会复用图片并保持一定频率的更新。每次黑客都需要重新搜集、标注相关答案。验证码的更新可以自动化, 但是黑客需要持续借助人工来标注答案, 如果我们的更新时机和客户业务配合得当, 等黑客拿到答案加速自动化时, 客户的业务活动已经被正常用户活动消化完毕。
保持一定频率的更新,这是后续被验证最有效的措施。
第二个种方法是通过对抗-干扰的方法阻止对方使用模型去自动化破解。目前有破解效果的模型都是有监督学习,其特点是需要预设类别。针对这个特点有两个思路:
① 第一个思路是在对抗样本上持续做干扰。大家可以对比图一与图三,加入干扰后图片上的纸飞机就识别不到了(图四)。这个方法的效果不甚稳定,原因是大家并不知道人看到的和机器看到的是否真的不一样,但我们会用到它来做非对称防御(因为不能自动化识别, 又需要引入人工来进行数据标注、训练, 这就迫使黑客投入更多的资源)。
② 第二个思路是增加新类别。我们知道有监督学习模型和预训练模型,其学习的类别都是固定的,当加入新类别后便超出模型学习的范围,从而出现排序错误和未识别的情况(图六)。因此只要有监督机器学习的理论没有此方面的突破,那么加入新类别对他们来说就是无解的。这也是我们的托底方案。
针对有些客户做活动时被刷得很厉害的情况,我们会在做活动之前更新图集。这就是依据主动式的防御策略,有针对地打击那些事先准备好接口参数、协议并做好调度设计的爬虫。因为他们破解的是已有的验证码资源,一旦更新,这种图集的变化使得黑客每次都需要花费巨大的成本来重新搜集、打标签和训练。这样我们就从被动的防御方转变成主动进攻方,化守为攻, 反客为主。
04攻防转换:流量分类
回到开篇的请求走势图,在15点51分时我们对验证码图集进行了更新,因为出现之前没有见过新图集,此时请求量上升了但是通过量减少了。按道理来说,拦截量和失败量也应该上升,其实初期做对抗时确实是下降的,但后期当黑客发现面临新资源时,他们会为了在攻防博弈中隐藏自己而驻足不前,仅爬取资源等待人工打码完成后再进行破解, 所以他们不会发出验证码的回答请求。
据我们了解,对客户伤害最大的1%的黑客贡献了90%的杀伤,而他们中90-95%都使用穷举的方法,因为他们爬取资源的价值能够覆盖其高昂的破解成本。因此在和黑客进行攻防转换的间隙,可以对流量进行分类,并为客户争取时间上的机会。
接下来为大家做一个控制变量的实验,可以继续参考下图。
当我们更新一个全新新图集时可以看到请求量上升、通过量下降、防御量也下降。作为对照组,我们切回原图集,交互量回归到了之前的状态,这说明黑客已经破解了相关协议;再做下一个实验,我们将图集回滚到更早批次的图集,可以看到他们的通过量仍然在下降,但似乎没有新图集下降得多。作为对照组,我们切回原图集,交互量又变回去了。为什么会这样呢?用控制变量的思想,最新制作的图集市面上没有见过,而较早批次的图集之前已经使用过,说明这批请求中至少有两类爬虫, 一类是搜集过较早批次图集的旧爬虫, 另一类是没有见过较早批次图集的新爬虫。由此可知,如果我们可以随时发起更新图集或增加新类别,那我们就由被动的监控防守变为主动测度的监控方。我们可以通过多次对流量进行分类,来帮助客户理清参与活动的流量类别。
现在可以对我们整体的思路做一个总结:
目前所有的api安全都会对“发起请求”的客户端进行标记(设备指纹), 会对交互逻辑进行保护(协议加密, 客户端代码加固), 但我们会假设黑客比我们聪明, 比我们能调动更多的资源来破解验证码。在这种情况下, 为了避免和黑产在客户端这里的博弈导致难以兼顾客户端的稳定性(兼容性)和安全性, 我们利用验证码答案进行防御, 从整体的视角来对抗破解, 避免细节上的拉锯。
针对穷举验证答案的, 我们选择定期更新图集(目前两个小时)。
针对使用模型来识别类别确定答案的, 我们根据有监督学习的特点, 加入新的类别, 以及使用对抗样本来让破解程序面临“新的不能识别的样本”, 让黑客陷入耗时的搜集、标记、训练的过程, 从而为客户提供动态的安全保护。这里的本质就是根据机器视觉和人类视觉的差异来设计防御体系。
同理, 我们也可以使用定期新加入类别来检测是否有黑客完全破解了协议,进而厘清以前难以找到的漏过的黑产, 这在以前是不可想象的。
最后我要用蒸馏系统分离石油的例子来类比我们的流量识别机制。我们通过主动的变化验证码,再根据不同的流量性质,对流量进行分层和识别。这也为异常流量识别提供了一定的理论和依据,可以作为判断的事后佐证。这就是验证码由工具向风控服务上的转变。
这套系统的核心就是利用验证码的语义。通过这套体系可以降低误封,测度哪些流量已经破解了交互协议, 进而降低了我们的运营成本,有机会为客户提供更精致、更细粒度的服务。它在验证码的调度上更加灵活,降低了验证码弹出打扰的几率,并能够更好地将验证码业务与其他业务集成。另外,兼容性和稳定性是我们考虑的第一要素,这是为客户做更好的流量识别的大前提。例如我们在设计上避免了因为新设备类型触发的兼容问题而对客户造成打扰,使得客户的使用更加稳定。
我们来看一下验证风控的整体流程,如下图所示,首先进行用户环境检测,接着逐层通过图像视觉模型、规则策略和风险库,其中每一层资源都可以单独更新。
善守者藏于九地之下,善攻者动于九天之上。当我们通过实验了解到对手的主力在哪里后,我们就可以制定针对性的打击策略,从而化守为攻。
对抗样本参考:
https://github.com/Harry24k/adversarial-attacks-pytorch
https://github.com/bethgelab/foolbox
http://adversarial.io/
https://en.wikipedia.org/wiki/Adversarial_machine_learning
今天的分享就到这里,谢谢大家。
分享嘉宾: