盗刷环境,或CVV环境,指的是在实施盗刷之前,对使用的设备、系统、网络等信息进行的一系列伪装。搭建CVV环境的目的,在于避免被网站的风控系统,从自身的设备、网络等信息中识别出风险。这篇文章初步介绍CVV环境搭建中的重点之一:浏览器指纹。
当几年前互联网巨头们因隐私权争议,对cookie技术的态度转向负面后,浏览器指纹技术便注定了,要成为新的、追踪用户的主要手段。如果对此感兴趣,并想测试一下自己的指纹,可以使用经典的 EFF工具,或者使用近年来流行的 AMIUNIQUE? 进行测试。从测试结果中便可以看出,网站生成指纹需要利用你的哪些信息。
如果想要详细了解浏览器指纹如何生成的,可以参考2010年Eckersley的文章,这篇论文里其选取了 HTTP Header 中的 UA 和 Accept 参数,以及屏幕分辨率、 浏览器插件信息等 8 项特征生成指纹,这便是最初的基础指纹。后续又逐渐出现了其他的高级指纹,如Canvas指纹,详见此文;硬件指纹,可参考此文;以及其他的诸如WebGL指纹、AudioContext指纹、WebRTC指纹。
基础指纹和高级指纹中所包含的信息,多是零散的,难以用来代表用户的唯一网络身份,因此后来产生了综合指纹,即将基础指纹与高级指纹,以及用户的地理区域、SSL证书、网络ip与DNS等多方面信息相结合,识别用户的准确率可以从基础指纹85%上下,提升至99%以上。这也是目前绝大多数主流平台,所使用的指纹技术。对安全性要求更高的机构,如银行等金融机构,还尝试使用其他技术,作为综合指纹的补充,如用户当前电池信息 追踪用户、HSTS 与 CSP 推测用户访问记录等等。
浏览器指纹存在的目的,是为了识别用户的身份,即将某个指纹与特定的用户关联起来。具体到反欺诈工作中,常见于三种场景:(1)将用户的指纹同黑名单中的指纹进行对比,以判断这新用户是否与之前的某个风险用户为同一人;(2)对用户多次登录的指纹进行对比,判断用户是否使用了新设备,并从中判断是否存在 ATO(account takeover attack)的风险;(3)将不同的指纹进行对比,以识别出掌握多个账户的可疑用户。
从以上不难看出,浏览器指纹想要发挥总用,需要同时具有唯一性和稳定性。我们可以将浏览器指纹的对比识别,看作一场警察与小偷的游戏,警察如果想要通过指纹抓住小偷,就需要保证:(1)小偷的指纹具有唯一性,即世界上不存在其他人,同小偷有着一样的指纹,否则警察只能通过指纹定位到一群人,而不是一个人;(2)小偷的指纹具有稳定性,不同时间、不同地点留下的指纹相同,否则警察也无法将多个迥异的指纹关联起来。
在 CVV 环境搭建过程中,为避免自己的浏览器指纹被识别、被关联,进行盗刷之前,刷手们会想方设法修改、混淆自己的浏览器指纹,而这一步也是CVV环境的重点之一。最简单的方法便是更换浏览器,原因很简单:生成浏览器指纹时,所收集并利用、熵最高的几个特征中,UA 和 Canvas 指纹等特征同浏览器本身高度相关。UA 本身便包含了当前用户浏览器品牌及版本的信息,更换了浏览器UA自然会随之变化;而 Canvas 指纹与浏览器及系统高度相关,不同的浏览器所使用的图像处理引擎、压缩等级等都不相同,变更浏览器品牌自然会影响 Canvas 的输出。类似的做法还有设置浏览器多实例, 伪造UA (具体的UA设置可以参考此网站)等等。
以上几种方法,针对的是浏览器的个别特征进行修改,从而混淆自己的指纹。但在这些特征之外,还有许多系统层、硬件层的特征可以为网站所利用,所以以上几种做法,在风控水平低的网站可以蒙混过关,但对于中大型网站的风控工作而言,就显得有些儿戏。面对这些网站的检测,刷手们通常会使用指纹浏览器,即 Anti Detect Browser。
指纹浏览器品牌众多,但采用的思路不同,具体可分为两种:1、降低指纹的唯一性。具体做法便是极力提高不同指纹间的一致性,为多个用户提供高度相似、甚至相同的指纹,这样的情况下,用户的指纹对于网站而言毫无意义;2、破坏指纹的稳定性。通过提升指纹的唯一性,为用户生成一个个截然不同的指纹,这样网站便无法将两个迥异的指纹联系起来,更无法利用这些指纹确定某一个用户。
第一种思路践行到极致便是Tor浏览器,在20余项关键特征上,为所有用户设置一样的参数,从而让所有用户的指纹看起来无限相似,网站自然难以将某个指纹同某个用户关联起来。但是这种思路有一个致命的缺陷,那就是此类指纹浏览器的效果,和用户的数量密切相关:用户数量少,浏览器特征信息的熵便升高,指纹的唯一性就会增强,反而有利于网站记录并识别这种指纹;用户数量多,网站可以轻而易举地将这种指纹和某一个浏览器联系起来,如如今绝大多数网站都可以通过指纹识别出用户使用了Tor浏览器,并拒绝其访问。
第二种思路,典型的代表便是Brave浏览器,这也是最早使用随机化手段,对用户指纹信息进行处理的浏览器。利用这种指纹浏览器,用户可以不断地更换指纹,而且每次新生成的指纹,同上一次使用的指纹差异极大。但这一思路在现实中,未必如人们想象的那样有效:网站有可能检测出,浏览器返回的特征值是否经历了随机化处理,典型的做法便是两次或多次调用相关的 API,如 Canvas 的 API、Audio API 以及 WebRTC 的 API 等等,对比多次的返回值并从中识别出异常。
当下最流行的指纹浏览器,越来越多的采用了第二种思路,即为用户提供多个不同的指纹,从而达到伪装的目的。但在技术手段上,不再像Brave等浏览器那样,通过浏览器内置的规则对用户的信息进行随机化处理,而是将浏览器本身视作一个屏障、一条通道:阻止网站获取真实的用户浏览器、系统和硬件方面的特征信息,同时将用户指定的信息提供给网站。
利用这一类浏览器,刷手们搭建CVV环境就变得十分简单。用户可以使用浏览器内置的若干指纹,通常是浏览器开发者自行设置并检测过的;或者自行导入外部指纹,这些外部指纹既可以由用户自己制作,也可以在黑产市场上购买,如 Genesis Market 在被关闭前便出售了海量的浏览器指纹,如今的 2easy 和 Russianmarket 等也在出售浏览器指纹,至于黑客论坛等地,购买浏览器指纹同样简单。