爬虫&反爬&反反爬&风控


基于反爬系统和浏览安全体系

相比逆向更加有亲和力,逆向只有最后一刻才能得到成就感

所有反爬的手段只有两个

  1. 鉴权阻止进入(开发端拦截)
  2. 高频组织数据大面积泄露 / 防止服务器崩溃(风控层面)

app 和 web 整体的思想和逻辑是不变的

  1. 最开始的本质只是采集数据 >>> 因为我们在获取数据的时候 人为采集太费时间

  2. 采集数据 (招投标 工商信息。外卖 等等) 转变>>>> 采购 | 抢票 | 模拟登录 | 自动渗透| 刷票| 黄牛| >>> 转变鉴权时期 (没有意识到数据的价值)

  3. 协议采集 逆向成本高 资源低 性能好 >让采集成本高 第一优先级 鉴权 高频拦截

  4. 真机采集 逆向成本低 资源高 性能低 > 高频拦截

  5. web自动化 指纹浏览器 rpc rpa

  6. app 真机 改机 沙箱 群控 rpc

所谓的反爬的原理 就是利用 浏览器和协议爬虫脚本之间的区别去拦截流量

密码学

明文 ——> 加密——> 密文——> 解密——> 明文

密码学的研究领域可分为密码编码学(cryptography)和密码分析学(cryptanalysis)两个分支

类似于反爬与爬虫 前者负责加密 后者负责加密

举个例子

1
2
3
4
5
6
7
8
9
10
11
code_book = {
"a": "1",
"b": "2",
"c": "3",
}

def encrypt(t):
return ''.join([code_book[i] for i in t])

name = "bccba"
print(encrypt(name))

这就完成了 bccba 到 23321的过程

常用加密算法

  1. 对称加密算法: AES 、DES、 3DES、
  2. 国密 SM1234
  3. 非对称加密算法:RSA、DCC、DSA
  4. 哈希摘要算法:MD5、Sha系列、

基于GRPC的反爬虫

PB的技术实现。序列化和反序列化

https://github.com/protocolbuffers/protobuf

原理就是读取 proto文件从而解析 获取里面的pack 和 message

进而创建一个数据载荷。然后把这个数据载荷去发送

要明白攻击者的方式。这很重要。没有攻击何谈防御?

一、鉴权绕过

以web为例 常见的鉴权绕过有以下几种

  1. 攻击者以鉴权去猜测实现逻辑和原理
    1. 适用场景:鉴权很容易,基本一眼或者是hook一下就能搞出来的逆向,常见:base64 md5 hash等
    2. 对抗方法:提升加密的强度,把简单的加密更换掉(des)
  2. 攻击者通过JS逆向,复现前端的加密,改写为爬虫程序能够运行加密方法(即,纯算,在爬虫圈使用纯算绕过强校验鉴权)
    1. 适用场景:防御者使用的加密简单且标准,通常为标准的AES等算法,或者虽然是防御自设算法,但是算法长度很短(纯逻辑仅几百或者几十行)
    2. 对抗方式:提升鉴权的加密强度,使用魔改标准算法或者更强的自研算法
  3. 攻击者通过JS逆向,将前端的核心加密代码剥离出来,利用Node 或者其他引擎模拟执行JS
    1. 适用场景:防御者的加密较为复杂,但是代码相对来说容易读懂,能够大致或者相对容易找到核心代码,并且扣除玻璃代码部分相对容易。
    2. 对抗方式:增加反渗透能力(包括但不局限于:控制台检测,JS代码混淆,逻辑VMP,wasm,鼠标指纹融合)
  4. 攻击者通过JS逆向和开发能力,将前端的大部分核心函数全部获取,利用Node去模拟执行——补环境。
    1. 适用场景:JS执行引擎的时候,不管难度如何,只要锁定核心代码,直接执行即可。
    2. 对抗方式:在鉴权的时候,加入设备指纹,环境指纹(1.可以对抗补环境,2. 可以为后续流量风控收集数据)
  5. 攻击者使用RPA/RPC/指纹浏览器/自动化/真机/进行实时采集。指纹与真实浏览器相差无几。
    1. 适用场景:逆向难度高,破解鉴权难度大,数据量小,且需求为一次性需求。
    2. 对抗方式:利用大数据风控与业务侧相结合。增加对方采集成本,比如账号 IP 、

整个Web主流的手段路径就是这些 冷门的暂时不记录了。逆向是挖洞绕过门,反爬是造门。防止大部分进入就行了。永远记住,反爬只是拦截流量 而不是锁死流量。

少部分进入 再通过风控分析 逐步封死

APP端:算法方面能精通且能稳定爬取已经是人中龙凤。更多的还是针对设备指纹方面的对抗,大部分都是基于对端的hook以及防护检测。

二、鉴权引入方式

Cookie Header params-get params-post
持久性 自由设置 仅支持一次请求 仅支持一次请求 仅支持一次请求
兼容性 良好 优秀 优秀 优秀
自由度
长度限制 4k 64k 2k 理论上无限制
业务对接 方便 一般 一般 较差

某些引入方式很简单 不同公司和业务选型不同 可以同时选择多种

某些头部尤其是国外设计。会多种整合到一起。

三、设备指纹挖掘和设计

  1. 挖掘路线

    1. 工作量大 推进难度大 也是最能体现价值的地方对于特性的挖掘越深入,兼容性就会处理的越好。最后的 结果就越好,整体难度防守就高。
  2. 在鉴权检测中渗入设备指纹的主要目的

    1. 对抗补环境(主要功能)
    2. 为大数据流量风控提供数据基础(主要功能 )
    3. 为加密提供更多的原始数据,增加破解难度
  3. 植入设备指纹的注意事项

    1. 多版本浏览器的兼容性
    2. 低端 配置客户端的执行效率与兼容性
    3. 需要对指纹进行合理的分配(即合理搭配植入的方式)
  4. 植入常见方式(通常下面几个方式会综合出现)

    1. 将植入的指纹以明文加密形式传输给解密服务器
    2. 将植入的指纹以映射压缩的形式传输给解密服务器
    3. 将植入的指纹以破坏性压缩(hash 等摘要算法)再加密或者直接传输给解密服务器
    4. 将指纹合法性提前计算,并传输给解密服务器
  5. 关于语言特性问题

    这部分严格来说,不算设备指纹,但是一般情况下,在攻击者视角与设备指纹的拦截成都是类似的,所以勉强可以划分进来。在某些不同浏览器 中有众多神奇的特性,可以用来判断段明文来源是否符合浏览器特征

四、TLS检测的具体设计

  1. tls检测设计

    1. 不同网络环境下,不同的浏览器/系统,都对应着不同的tls指纹,但是 所有的请求库在没有进行过魔改过下 即改底层请求的逻辑与监测点,几乎都是一致的。
  2. 黑名单检测

    1. 通过简单实验,将市面上大部分常用的请求库的特征都测试出来,然后封禁入黑名单即可。检测到黑名单就直接杀掉
  3. 白名单检测(web)

    难度MAX级别

    目前为止没有产品能实现,但是海外防火墙对此方向的识别的精度就非常高。改检测方案的实现难度与工作量非常大。从三个步骤来说

    1. 进行大量的的人工测试,将大部分系统(主流系统)/浏览器(大版本即可)/网络环境(含不同运营商)/ 平台(微信浏览器等) 指定拦截规则。
    2. 进行灰度测试,结合现有风控系统/ 设备指纹(UA,显卡,机器性能,网络状态..)进行策略分析,判断误杀率
    3. 调整拦截方案,重复进行灰度测试,直到误杀率降低至可接受范围。进而上线
    4. 紧盯各个版本浏览器的状态,随时判断误杀情况,避免造成生产事故。
  4. 白名单检测 (APP)

    由于IOS/ 安卓 发送请求时。Tls指纹不会发生改变,所以白名单很好设置。只需要把开发时设置的请求库Tls指纹设置为白名单。一般就不会出现明显异常。但是移动端爬虫还是谨慎点。策略非必要不上

五、请求拦截引入设计

  1. 特点

    1. 有点类似于无感验证码引入的感觉(其实就是无交互式的验证码 即无感验证码)
  2. 优与劣

    优势

    • 易于集成,可以通过简单的配置和嵌入代码块快速集成到现有代码中,无需参与业务代码
    • 维护方便,可由专人维护,减少业务
    • 维护成本低,只需要维护单JS即可
    • 低耦合,符合代码规范
    • 灵活性良好,业务修改与拦截无关

    劣势

    • 与业务代码难以绑定,安全性 会在一定程度大打折扣,可以结合验证码
    • 可操作内容有限,无法与页面元素与其他参数鉴权所融合。
  3. 适用范围

    1. 业务范围广
    2. 所有业务均有安全性规范
    3. 安全性要求不高

六、关于鉴权总结

  1. 概念明晰

    描述反爬领域实现异常拦截的一种形式, 所谓鉴权就是鉴定权限。通过客户端传输过来的密文进行分析,确定本次请求是否合理的一种防止,而这个方式的整个过程被称之鉴权检测过程。换言之,鉴权是一个动词,针对于密文进行但请求合法性检测的整个过程。他是一个整体概念

  2. 关于数据流量风控与鉴权的关系

    不再是单一请求,而是整体请求。 在鉴权没有办法拦截的情况而采集的一种更加强力的措施(真机对抗),所以通过鉴权过程,虽然是合法的内容,但是会留下很多设备指纹。利用这种痕迹,从宏观再去进行身份识别,确定哪些请求是同一个身份。再去拦截这个身份的过程。所以她和鉴权还是有一点差距的。反爬的目的不是拦截所有请求,而是过滤乃至增加对方的成本。彻底拦截是不显示的一件事。

  3. 一个正常的鉴权系统的要求

    1. 兼容性(业务要求满足)
    2. 加密方案(魔改算法/自研算法/实验室算法)
    3. 反渗透方案(混淆,测试拦截,格式化检测)
    4. 性能
    5. 设备指纹 环境的挖掘
    6. 鉴权检测系统
    7. 蜜罐埋点设计
    8. 格式与传值内容规范
    9. 传值多样性 接口多样性

爬虫&反爬&反反爬&风控
https://hybpjx.cn/2024/08/23/爬虫&反爬&反反爬&风控/
作者
hybpjx
发布于
2024年8月23日
许可协议