咱们现在能看得到的主流的网站指纹识别工具, 可以分成三类。第一类是浏览器指纹检测类, 比如说BrowserLeaks还有Presetio。第二类是网络流量特征分析类, 比如使用Wireshark加上JA3或者是JA4来解析。
第三类则是综合安全审计类, 典型代表就是Mozilla Fingerprinting Consents。选型的核心依据实际上只有一个, 那就是你要识别的对象到底是访客设备, 还是网络请求这一概念。
如果你是在考虑设备环境方面的事情, 那么你应该选择第一类方案。你要是想进行流量溯源的话, 就需要选择第二类方案。要是你的需求是合规审计, 那就只能选择第三类方案了。请注意这三种情况之间是严格分开的, 它们三者绝对不可以混用。
三大类工具核心能力对比
1. 浏览器指纹检测类
这些用来做代表用途的工具, 主要是 BrowserLeaks, 这个玩意儿是基于一个叫做 FingerPrintJS 的开源代码版本, 还有那个名为 Presetio的东西。
可识别的项目可以是通过Canvas渲染获得的指纹数据, 以及WebGL的厂商信息和渲染器信息, 还有AudioContext产生的序列数据, 本地字体列表的情况, 时区和语言的设置, 屏幕分辨率与DPI参数的数值, 以及已安装插件所生成的哈希值。
适用于这样的情况, 比如在CDN节点那里进行访问的验证, 或者是配置防范爬虫的策略, 还有在对多台设备的登录情况进行识别的时候。
关于具体的怎么部署这件事, 它的做法是往网页里头强行塞进一小段JavaScript代码, 让这段代码不停地、实时地去采集正在访问这个页面的人所使用的浏览器环境, 然后把收集到的数据经过加工处理后吐出来一个哈希摘要。
2. 网络流量特征分析类
代表工具包括 Wireshark, 这个需要配合使用 tshark 命令行工具;还有 tcpdump 结合 Scapy进行配合;以及 JA3 和 JA4 的解析器。
可以识别的那个部分, 具体来说是TLS协议中客户发送的Hello包指纹, 也就是大家常说的JA3值, HTTP请求里面的头部字段排列顺序以及编码所带有的特征信息, TCP连接初始阶段窗口大小的数值, 还有数据包之间出现的时间间隔情况。
适用场景是包括服务器端的流量溯源, DDoS攻击的特征判定, 自动化爬虫的识别。
部署方式是, 在服务器网卡或者网关网卡的位置进行抓包操作, 然后选择离线进行分析, 或者是选择近实时的方式进行流式的匹配。
3. 综合安全审计类
这些代表工具就是Mozilla Fingerprinting Consents, 以及Amnesia。
可识别项这一概念要覆盖上述那两类里面的全部指标, 除了这些之外还要增加用户行为序列的信息, 比如鼠标是怎么移动的、滚动的节奏是快是慢, 同时还要加入关于Cookie持久化特征的要素。
这种情况通常用在企业级别的有关安全符合标准的规定里, 也会被用在对于符合通用数据保护条例这个规则的最小程度去检查数据的这种审计活动中来, 同时也会用在隐私方面的影响评估这件事上面。
需要前后端相互配合来进行采集, 之后对数据进行脱敏处理, 然后把它们保存到数据库里, 最后按一定周期生成审计报告。
选型决策三步法
识别的对象究竟是人的设备还是网络请求,如果判断为设备就归到第一类龙南市就业服务平台, 如果判断为网络请求就归到第二类。
你需要弄清楚到底是要实现实时的响应操作, 还是要进行离线状态的回溯分析。如果是选择实时响应的话, 那就应该采用前端注入的技术方案。如果说是选择离线的模式去处理问题, 那么就应该使用抓包的方案。
看看有没有涉及到合规方面的事项, 比如说 GDPR 或者是等保2.0之类的。如果涉及到了的话, 那么必须进行选择第三类这个选项,并且采集的字段需要经过 DPO 进行审批。
基本操作路径(以BrowserLeaks为例)
1. 进行在线快速检测网站指纹识别工具, 只需要访问 browserleaks.com/js 这个网址。在页面加载完成之后, 页面会自动采集当前浏览器22项指纹参数。
2. 进行本地部署, 需要克隆FingerPrintJS这个开源仓库, 进而把采集模块嵌入到站点的前端中, 这样的话, 每次页面加载的时候, 就能够输出一个唯一的哈希值。
3. 把那个哈希值写进CDN WAF规则里面, 比如写成Cloudflare Custom Rule这样子的话, 就能实现对设备进行控制访问和限制频率的效果了。
关键注意事项
浏览器指纹这种东西, 它并不是绝对的唯一标识。用户只要更换一下浏览器, 或者把缓存给清理掉了, 再或者是开启了隐私模式, 这个指纹就会发生变化的情况。
在生产环境里面, 必须要把“指纹”、还有“持久化Cookie”以及“行为序列”这些东西结合起来, 去做一个多因子的交叉验证工作, 如果只靠单一的一个因子来进行判断的话, 误判率是有可能达到百分之十五以上的。
在抓取TLS指纹也就是JA3的时候要注意到这一点, Selenium以及Playwright这样的自动化框架所默认生成的JA3指纹和真实浏览器之间的差异是非常明显的, 所以这类指纹可以作为判定爬虫的一个很强的信号, 不过你需要定期地更新特征库, 目的是为了对抗这些框架版本更新所带来的变化。
所有采集指纹的动作, 都要在站点的隐私政策里面, 一项接着一个项目地写清楚,并且必须得到用户的同意网站指纹识别工具, 特别是对于欧盟的用户来说, 这个要求更加严格, 如果还没有进行告知就直接去收集的话, 那么将会面临根据GDPR这一规定所能作出的最高处罚, 这个处罚的最高额度相当于企业年营业额的百分之四。
大家可以前往 gz88.cn 这个网址的站点来找到"网站指纹识别"那个专题的页面, 然后把完整的资源包给拿到手。这些资源包里面包括了各个不同工具的部署教程。它还提供了 JA3速查表这一类的内容。合规检查清单也在其中。


