【黑产攻防道03】利用JS参数更新检测黑产的协议破解

任何业务在运营一段时间之后都会面临黑产大量的破解。验证码和各种爬虫的关系就像猫和老鼠一样, 会永远持续地进行博弈。极验根据十一年和黑产博弈对抗的经验,将黑产的破解方式分为三类:

1.通过识别出验证码图片答案实现批量破解验证,即图片答案识别;

2.在了解通讯流程之后直接携带相关参数发请求进行交互,即协议破解;

3.使用各种客户端模拟器来模拟真人通过验证,即模拟器破解。

针对以上三种破解方式,极验一一总结了对应的验证码攻防点:图片答案博弈协议破解检测环境检测,用于保护极验客户相关场景和接口的安全。

前两期,我们已经分别从图片资源遍历、图片答案识别介绍了与黑产的第一大攻防点:图片答案博弈。

本期,我们继续来介绍与黑产的第二大攻防点:协议破解对抗。协议破解是黑产最常用的破解方式,我们先来聊聊如何检测协议破解。

一、道场

什么是协议破解

为了通过验证进而达到刷量的目的,所有黑产的爬虫都会去模拟真人的请求特点,通过伪造相应的请求及参数直接访问通信接口。这种攻击方式被我们称为协议破解。

为了更好地理解协议破解,我们来举个例子:在2023年6月的五月天演唱会异常订单事件中,就涉及了类似的伪造参数问题。

在五月天武汉、沈阳两场激情的抢票大战结束后,某票务平台F为了维护抢票的公平性,杜绝第三方代拍、第三方抢票及抓包软件和未使用官方APP/小程序下单等违规脚本行为,事后共对455笔异常订单(共计754张票)进行了退票退款,因此引发了众多歌迷的不满。

对于“无辜”被退票歌迷的投诉,该平台做出的回应是:通过官方APP/小程序正常下单,应包含如下完整的订单流参数,而异常订单缺乏部分核心参数。

简单来说,就是该票务平台提前在请求参数里设置了一个非必填的钓鱼参数,通过官方APP/小程序正常下单的请求都会自动携带上这个参数。而脚本抓包工具虽然会模拟正常请求,看似与正常请求无异,但会因为非必填而略过这个核心参数。

如上图所示,未正常使用官方APP/小程序的异常订单缺失了“119533”这个无实义的钓鱼参数。这就是该票务平台检测脚本破解的方法。

当黑产模拟真人请求时,只要我们设置一个新的钓鱼参数,那么黑产原来固定的脚本就会因为缺失这个新的参数而“露出马脚”。虽然缺失核心参数的黑产仍然能正常通过校验(同理于脚本运行的异常订单仍然能提交成功并付款),但我们已能很直观地将黑产账号与正常账号做出区分,从而实时掌握黑产行踪进行后续处置(同理于平台强制退票退款)。因此,新增参数来标记异常账号的方法能大大减少隐藏的黑产协议破解带来的损失,实现从防御到反制的诱捕打击。

二、攻击方视角(黑产)

站在攻击方视角,黑产具体是如何破解协议、伪造参数的呢?

攻击流程

验证码的所有请求都是HTTP请求。HTTP(Hypertext Transfer Protocol,超文本传输协议)是一个简单的请求-响应协议,用于客户端和服务器端的通信。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

而所有的爬虫都会模拟真人的协议,它是我们的影子,会去模拟我们真人所有的请求特点。黑产想要破解前后端通讯,通常是通过伪造HTTP协议请求的参数。

黑产具体的破解协议、伪造参数的流程如下:

Step 1: 浏览器F12打开开发者工具面板,进行网络抓包。

Step 2: 进入目标页面,观察网络请求列表,找到关键请求。(关键请求会因不同的业务而不同,要具体分析)

Step 3: 打开关键请求详情,观察请求协议,分析请求参数。

  1.主动输入的参数,例如 账号密码、邮箱、手机号、答案 等等。

  2.语义清晰的参数,例如 时间戳、客户端类型、业务id、业务流水号 等等,通常多次请求不发生变化,或是可以从前置请求中提取。

  3.请求头参数,例如 Referer、Ua、Cookies 等等。

  4.签名、加密参数。

Step 4: 逆向参数生成逻辑。

协议破解的关键就是最后一类 签名、加密参数。这类参数的生成伴随着单向散列、加密等逻辑,再配合上客户端代码混淆,参数生成逻辑会藏得较深,需要配合 断点、调用栈 进行调试分析。

Step 5: 脚本伪装客户端逻辑。

使用代码将 IP代理、参数伪造、HTTP请求 等逻辑固定下来形成脚本。脱离客户端,略过页面渲染和交互过程,使效率最大化。

牟利方式

站在黑产的视角,为什么协议破解是他们最常用的破解手段?

前面我们提到,图片答案识别需要经历批量爬取下载图库、人工打码、穷举识别/训练模型等一系列流程来获取验证答案,这需要黑产在前期投入很大的时间和精力成本。黑产下载一批30万张的验证图库需耗时8.33小时;而人工打码获取答案又需要花费数千元成本,耗时8~10天,效率相对较低。

而后面要讲的模拟器破解还受环境条件的限制,需要黑产对浏览器十分了解进而用各种自动化测试工具,例如 Selenium 操作 chromium 内核实现自动化的拖动、点击等操作,攻击流程更复杂,技术门槛更高。

相比之下,协议破解最大的优点就是成本低、效率高。黑产无需花费很多资金成本,只需要进入目标页面,模拟最核心的关键参数,就能实现对验证码的破解,整个过程的执行效率更高。当脚本写好固定下来后,就能以每次几百到上万元不等的价格出售给需要的人,在短时间内赚取巨额的利润,收益远远高于成本。因此,绝大部分黑产在攻击时都会选择协议破解。

当然,协议破解在效率高的同时也存在一个不可避免的缺点:伪造参数困难。协议破解需要黑产对验证码的前端源码进行解析,从而实现对前端发送的参数的伪造,因此也需要一定的技术门槛。

三、被攻方视角(客户)

站在客户视角,如果遭遇了协议破解攻击,数据又会发生哪些异常变化?

协议破解对客户的影响

某资讯行业客户G,在信息查询场景长期遭受爬虫攻击爬取信息。2023年8月22日,G公司后台的查询量级突然急剧上升,验证请求量大大上升,达到每小时7000左右交互。该时段内的存在大批次的异常数据攻击情况,给客户业务造成了巨大损失。

并且,从ip维度上分析,0点至9点时段的4万多次交互中,单个ip访问次数最大达到了28次,说明爬虫已经控制ip访问频率!这将给客户业务造成更大的威胁。

CT命中量:定位协议破解

遭到爬虫攻击后,G公司第一时间找到了极验寻求帮助。极验安全专家查看后台数据后发现:验证请求量、验证交互量和验证防御量都很高,说明黑产在验证失败后频繁请求验证进行重试,或者重新搜集验证资源信息进行打码攻击。单从这几个验证量来看,与之前图片答案识别攻击的数据并没有太大区别,无法准确辨别黑产的攻击方式。

遭遇图片答案识别攻击的后台数据

遭遇协议破解的后台数据

从这几个验证量辨别不出与图片答案识别攻击的明显区别后,极验安全专家单独打开了紫色的CT(captcha token)命中量,这是极验特有的“异常标记”功能,专门用于定位黑产的协议破解。其原理主要是针对前端 js 变化以及变换参数,检测出是否存在黑产破解了前端协议。

如果CT命中量很高,则说明黑产正在进行协议破解攻击,命中了我们的前端“异常标记”。

单独查看CT命中量,定位协议破解

发现CT命中量高达2万后,极验安全专家于8月23日11点开始打开对协议破解请求的封禁拦截,成功量开始下降,失败量和交互量开始上升,说明黑产此时确实正在进行协议破解。

在这期间,爬虫不断的组织逆向破解,拦截效果持续到9月5日,同日验证通过量和验证交互量不断上升,说明此时爬虫已针对该版本验证协议完成了破解。

四、防守方视角(极验)

前面我们了解到,既然黑产协议破解的原理是模拟真人请求、伪造真人协议,那么防守方如何从中进行防御?关键就在于:区分出这些伪造的危险请求。

防御思路

如何区分出伪装成正常用户的黑产?虽然黑产已经从行为、设备、IP等维度上模拟了真人,看上去拥有了真实身份,但有一点最明显的区别:黑产的出发点永远是获取利益最大化,因此会将流程自动化,把破解复用了的协议固化成一套自动化脚本。若脚本没有出现问题或没人反馈异常,就不会花成本更新。

因此,我们可以利用这一点去设计陷阱:黑产为了通过验证会模拟真人请求,那么我们只需要在请求中新增一个钓鱼参数。由于黑产破解协议后的脚本是已经固化好的,不会携带这个新的钓鱼参数,因此会缺失参数而暴露身份。 这一原理与本文开头提到的票务平台检测异常订单十分相似,脚本抓包工具发出的请求往往会缺失核心的钓鱼参数。

防御策略

针对黑产的协议破解,极验的应对策略就是基于已有的请求参数,在前端再加一个新的钓鱼参数。如果是来自于正常浏览器的用户,将会在更新后自动携带上这个新的参数;而已经破解了协议的黑产则会沿用原先固化的协议,不会携带新的参数。这能很有效地检测出黑产:如果请求中未携带新增的参数,只携带了旧的参数,那么就极有可能是之前破解了我们协议的黑产。

这一新增参数、区分黑产的过程就是我们协议破解检测中的“异常标记”功能,通过参数的变化比对,让我们得以区分异常的黑产。并且,被检测出来的黑产仍然能正常通过验证,但我们已能很直观地将黑产账号与正常账号做出区分,从而暗中实时地观察黑产行踪。

“异常标记”功能实现起来也非常简单:

Step 1:在极验后台轻轻一点,即可配置好新的参数(示例版本为v1.7.4-c6515a)。后台一般会提前储备50个左右的新参数,以便被破解后随时动态更新。

Step 2:在v1.7.4-c6515a版本下,正常通过客户端发出请求的用户会自动携带上"9pI3": "7k9E"这个新配置的参数。

而脚本发起的黑产请求则会缺失"9pI3": "7k9E" 这个新配置的参数,只携带上一批的旧参数,从而与正常请求不同。

破解永远是难以避免的。黑产一定会破解我们前端的协议,会不断变换IP,设备,修改行为参数,原因就在于前端代码已被透露公开,无论是我们还是任何其他竞品,包括谷歌的 recaptcha 都是如此,大家都会不可避免地遭到破解。

被动的防御永远会落后于黑产,“兵来将挡水来土掩”的方式反而使得防御方疲惫不堪,运营压力庞大。因此,我们必须跳出黑产模仿真人的各种数据参数维度,主动区分出黑产。

问题解决

目前,极验第四代验证码中的“异常标记”功能(captcha token,CT)能够通过前端 js 变化以及变换参数,检测出是否存在黑产破解了前端协议,是否需要重新调整验证的交互协议。只要是协议破解,必然会被极验的下一次更新所识别。

针对G客户遭遇的爬虫问题,极验通过协议破解检测以及参数动态更新,在爬虫逆向破解完成此前版本的验证协议后,于9月12日9点半开始更新新的验证协议,可以看到更新前后协议破解命中的变化。

此后,协议破解检测命中持续生效,即使爬虫再次破解,也可以随时更新参数来完成破解检测,客户的数据最终恢复了正常。

技术突破

除了帮助G客户解决爬虫问题以外,我们还将参数动态更新做成了一个相应的后台工具,能够帮助各类客户一出现问题,就能快速地响应解决。客户在日常运营中了解到的极验技术可能仅仅只是冰山一角,而我们在验证码背后真正的开发实力才是水面下更夯实的冰山。

在整个协议破解识别的过程中,极验做到了以下技术突破:

1)JS混淆

通过混淆js代码从而具有自我防御能力,将JavaScript代码转换为使用自动分析攻击、防止逆向工程的形式。

2)参数加密

前端参数进行了SHA256等复杂加密算法的加密,对轨迹和答案位置都进行了加密,根本无法对参数进行阅读,也无法知晓参数中传值的意义,不能通过参数的伪造进行破解。

3)参数混淆

极验还在前端参数中增加了部分混淆参数。有部分数据是真实采集的数据,有部分数据是蜜罐参数,破解者无法区分哪些是必须的参数,哪些是蜜罐参数。

4)协议更新

极验每日不定时更新协议,全网一键更新、秒级别生效。协议更新瞬间迅速标记黑产脚本请求,收集大量黑样本数据。

五、结语

数据信息永远具有滞后性。多数厂商区分黑产仍然是通过已有的数据库/黑白名单来识别出有问题的账户,但数据库往往都是过往的数据,对于最新的黑产,或者黑产更换设备、账号、IP后,便不能立即识别出来,所以依赖安全数据库并不能识别出全部的黑产,验证厂商长期以来都难以解决黑产账号漏封的问题。

而现在,通过协议破解检测,极验在行业内首次做到了对漏封的黑产也进行精准的识别处理。2022年,极验的CT“异常标记”功能正式上线,能通过前端参数的动态变化标记出黑产请求,为下一步的封禁处置提供有效的依据。截至目前,极验的CT“异常标记”功能已为服务客户标记出了810.74亿个黑产请求。

还是那句话,任何业务在运营一段时间之后都会面临黑产大量的破解,因为无论是环境还是行为,最终传回服务器的形式都是参数,黑产依旧可以通过破解正常校验的请求参数,来伪造真实用户。因此,部署验证码这个防御工具不可能是一劳永逸的。验证码和各种黑产会永远持续地进行博弈。

作为防守的一方,我们如何能在这场博弈中取胜?一是要足够的了解攻击方的技术;二是在知己知彼的基础上,比攻击方储备更多、更高效的防御手段。正如我们前面所提到的种种工具和技术,能帮助客户提供更多的防御方案,在防守时更早地发现,更快地反应。极验秉承着“为世所想,为世所用”的信念,并不避讳谈论破解,而是永远走在黑产前面,为了客户更好的体验去主动地和黑产抗衡。

极验专利墙

下一期,我们将继续介绍协议破解对抗的第二部分:Pow防暴力破解。协议破解追求的是"效率",黑产在协议破解过程中,为了完成大量的验证交互,就必须要完成大量的Pow计算,而Pow的计算的难度把握在极验手中。如果你对下一期也感兴趣,敬请关注我们~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/106676.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

区块链技术的未来:去中心化应用和NFT的崛起

区块链技术正在以前所未有的速度改变着金融和数字资产领域。它的演进为去中心化应用和非替代性代币(NFT)的崛起提供了坚实的基础。在本文中,我们将深入探讨这一数字革命的关键方面,从区块链的基本原理到它如何改变金融领域&#x…

使用Jetpack Compose构建Flappy Musketeer街机游戏

使用Jetpack Compose构建Flappy Musketeer街机游戏 一步一步创建沉浸式移动游戏的指南 引言 Flappy Musketeer不仅是又一个移动游戏;它将令人上瘾的“轻点飞行”游戏玩法和引人入胜的视觉效果融合在一起,吸引玩家进入埃隆马斯克(Elon Musk…

Transformer英语-法语机器翻译实例

依照Transformer结构来实例化编码器-解码器模型。在这里,指定Transformer编码器和解码器都是2层,都使用4头注意力。为了进行序列到序列的学习,我们在英语-法语机器翻译数据集上训练Transformer模型,如图11.2所示。 da…

网络协议--DNS:域名系统

14.1 引言 域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。这里提到的分布式是指在Internet上的单个站点不能拥有所有的信息。每个站点(如大学中的系、校园、…

工业4.0的安全挑战与解决方案

在当今数字化时代,工业4.0已经成为制造业的核心趋势。工业4.0的兴起为生产企业带来了前所未有的效率和灵活性,但与之伴随而来的是一系列的安全挑战。本文将深入探讨工业4.0的安全挑战,并提供一些解决方案,以确保制造业的数字化转型…

Typora(morkdown编辑器)的安装包和安装教程

Typora(morkdown编辑器)的安装包和安装教程 下载安装1、覆盖文件2、输入序列号①打开 typora ,点击“输入序列号”:②邮箱一栏中任意填写(但须保证邮箱地址格式正确),输入序列号,点击…

JS中面向对象的程序设计

面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。但在ECMAScript 中没有类的概念,因此它的对象也与基于类的语言中的对象有所不…

order by数据过多引起的cpu飙升

测试环境 1.目前数据库类型为pg数据库2.目前数据库业务为共享数据库,为减少其他业务对本次测试的影响,故选在业务空闲时间执行3.服务器性能为8C 32GB 500GB硬盘 原程序测试结果 优化后程序结果 出现原因 当数据量大时,order by排序操作会消耗大量的CPU资源&#…

数据结构之队列

什么是队列? 队列这个概念非常好理解。你可以把它想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进者先出,这就是典型的“队列”。 我们知道,栈只支持两个基本操作:入栈 push()…

Spring Session框架

Spring Session框架 前言 Spring Session是一个用于在分布式环境中管理会话的框架。它提供了一种无状态的方式来管理用户会话,使得应用程序可以在不同的服务器之间共享会话数据。Spring Session的设计目标是为了解决传统基于Servlet容器的会话管理的局限性&#xf…

【ARM 嵌入式 C 入门及渐进 10 -- 冒泡排序 选择排序 插入排序 快速排序 归并排序 堆排序 比较介绍】

文章目录 排序算法小结排序算法C实现 排序算法小结 C语言中常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序。下面我们来一一介绍: 冒泡排序(Bubble Sort):冒泡排序是通过比较相邻元素的大小进行排…

(el-Table)操作(不使用 ts):Element-plus 中 Table 多选框的样式等的调整

Ⅰ、Element-plus 提供的 Table 表格组件与想要目标情况的对比: 1、Element-plus 提供 Table 组件情况: 其一、Element-ui 自提供的 Table 代码情况为(示例的代码): // Element-plus 自提供的代码: // 此时是使用了 ts 语言环境…

大语言模型(LLM)综述(四):如何适应预训练后的大语言模型

A Survey of Large Language Models 前言5. ADAPTATION OF LLMS5.1 指导调优5.1.1 格式化实例构建5.1.2 指导调优策略5.1.3 指导调优的效果5.1.4 指导调优的实证分析 5.2 对齐调优5.2.1 Alignment的背景和标准5.2.2 收集人类反馈5.2.3 根据人类反馈进行强化学习5.2.4 无需 RLHF…

Leetcode. 2866.美丽塔II

要求O(N)复杂度内解决,考虑单调栈,这个题很像经典的美丽度的那个单调栈的模板题 对有每一个位置,考虑右边能扩展到哪来?不如直接从末尾来倒着看,发现从末尾需要维护一个单调增的单调栈&#xff…

前端实现打印功能Print.js

前端实现打印的方式有很多种,本人恰好经历了几个项目都涉及到了前端打印,目前较为推荐Print.js来实现前端打印 话不多说,直接上教程 官方链接: Print.js官网 在项目中如何下载Print.js 使用npm下载:npm install print-js --sav…

机器视觉3D项目评估的基本要素及测量案例分析

目录 一. 检测需求确认 1、产品名称:【了解是什么产品上的零件,功能是什么】 2、*产品尺寸:【最大兼容尺寸】 3、*测量项目:【确认清楚测量点位】 4、*精度要求:【若客户提出的精度值过大或者过小,可以和客…

【深度学习】使用Pytorch实现的用于时间序列预测的各种深度学习模型类

深度学习模型类 简介按滑动时间窗口切割数据集模型类CNNGRULSTMMLPRNNTCNTransformerSeq2Seq 简介 本文所定义模型类的输入数据的形状shape统一为 [batch_size, time_step,n_features],batch_size为批次大小,time_step为时间步长&#xff0c…

Project Costs

/*** 初始化象棋的棋子,正常情况加载双方所有棋子,残局演示加载剩余棋子,按坐标位置摆放* * 【费用】* 因甲方要求产生工作量计算费用;新增、修改、删除需求* 因乙方生产缺陷工作量不计费用;缺陷、延误* * 来说个一个栗…

电商时代,VR全景如何解决实体店难做没流量?

近日,电商和实体经济的对立成为了热门话题,尽管电商的兴起确实对线下实体店造成了一定的冲击,但实体店也不是没有办法挽救。VR全景助力线下实体店打造线上店铺,打通流量全域布局,还能实现打开产品、查看产品内部细节等…

机器学习实验一:KNN算法,手写数字数据集(使用汉明距离)

KNN-手写数字数据集: 使用sklearn中的KNN算法工具包( KNeighborsClassifier)替换实现分类器的构建,注意使用的是汉明距离; 分段解释代码: import os import pandas as pd from Levenshtein import hamming导入所需的库,包括os用于文件操作,pandas用于数据处理,以及hamm…