如何在同一设备上低风险多开浏览器

零 前言

上周看了『@李越』圈友分享的数据隔离还有『@顾铁牛』圈友分享的浏览器指纹的分享,对这个问题蛮感兴趣,所以周末花了时间看了设备指纹的相关项目和论文文章,对整个领域大概建立了框架性的理解。

不过毕竟不是专业人员,一些想法不一定对,说错了还请行家指正,在此先行谢过。

通过阅读本文你可以获得:

同一设备低风险多开浏览器养号的思路设备/浏览器获取指纹的方式及应对办法一套快速、高效的批量多开的方法

一 背景与思路

1.1 指纹

这里的指纹有两种,一种是『浏览器指纹』,另一种是『设备指纹』。指纹的特点就在于它的唯一性,平台可以通过检测指纹来判断某项行为是不是在同一个浏览器或者设备上进行的。

平台用于生成指纹的信息大概有两部分,一部分是语言、版本号、时区这些具体设置上的信息,这个大家都能理解;另一部分则是让你的电脑做一些实验,这些实验在不同的机器上会有不同的结果。如果这两部分的信息都一样,那生成的指纹自然相同,也就能因此判断是在同一『浏览器』/『设备』上完成的操作。

1.2 目的与思路

然后我们需要明确的就是「我们在同一个设备上多开浏览器的目的是什么」?

——「尽可能的让自己像一位正常用户而不触发风控」,对吧?

这个问题很关键,我们所做的一切操作都是为了它。

当你对『这项设定应不应该进行改动』或者『这部分应该怎么改动』产生疑问的时候,回过头想想这个最终目的,你就会知道应该怎么做了。

但是正常用户并不会有『把许多账号伪装成普通用户』的需求,即便是正常用户中有那么一小部分非常在乎隐私,他们的目的也是『让平台分辨不出你做的操作都是你做的,从而无法利用长时间的数据监测对你做画像』。

把话说得再直白一点,我们的需求是:一台电脑能开 100 个浏览器养号,让平台认为这些是真实的、不同的 100 个普通用户;

而隐私防护的需求是:一个人要访问 100 个网站,想办法让这 100 个网站判断不出都是这个人在操作,从而没办法进一步判断这个人的兴趣爱好。

所以尽管『浏览器多开』和『隐私防护』都有欺骗平台的目的,但是『浏览器多开』重在伪装模拟正常用户,而『隐私防护』重在隐藏自己不被平台一直追踪。

对应到指纹上,『浏览器多开』的需求是:「多开的每个浏览器访问某网站时的浏览器指纹最好唯一但彼此不相同,由此判断出的设备指纹也不能相同」。

而『隐私防护』的需求是:「单个浏览器访问不同网站时生成的浏览器指纹不能相同」,当然设备指纹也不能相同(不过这点并不重要,因为普通用户通常只使用一个常用浏览器)。

排除专业做防指纹浏览器的(紫鸟、Adspower、Boss) 这些,市面上你能找到的工具大多是为了『隐私防护』的目的开发的,他们通常采用的方法是每次访问网站的时候生成一个「随机的」虚假浏览器指纹。

『随机浏览器指纹』可以解决同一设备不同浏览器的『浏览器指纹』不相同的需求,但是也带来了个体浏览器『浏览器指纹』一直在变动的问题。

从这个意义上讲,这种区别于正常用户的异常行为反而会让你的特征「异常突出」,所以使用『隐私防护』工具来进行『浏览器多开』还是会有一定的风险的。

不过也不得不用,因为市面上除了专业的防指纹浏览器和虚拟机,也没有其他工具来确保『多个浏览器的浏览器指纹不相同』,两害相权取其轻就是了。

1.3 大隐隐于市-改动的信息量

有的人看到这里会想,既然我们需要浏览器指纹各不相同,那我们「尽可能多地」改动指纹的生成因素不就好了?这不就能让不同浏览器指纹差异很大么?

其实恰恰相反,推荐的做法是『除非必要,应该「尽可能少地」修改指纹的生成因素』。

为什么?

这还是说回我们的终极目的——『「尽可能的让自己像一位正常用户而不触发风控」』,普通用户只会使用浏览器的默认设置,所以你做的「任何一点改动其实也是一种特征」,尤其是那些「可以被检测出来用户是否在尝试伪装的设置」。

比如,浏览器生成指纹时会检测当前屏幕的大小,你为了避免检测,每次都以窗口模式运行浏览器(不全屏)。的确,这样平台拿不到你屏幕真实的大小。但常见的屏幕大小也就 20 种左右,你以窗口模式返回给平台的屏幕大小可能是一个非常奇怪的数据。「把时间拉长」,平台就会发现在某一时段总有一批浏览器的屏幕大小很奇怪,那平台其实有理由怀疑这些浏览器背后存在着某些联系。

所以如非必要,请勿随意更改浏览器的设置。

你可以在 Device Info[1] 这个网站看到平台通过浏览器能够拿到哪些信息,又有哪些设置改动后是可以被判断出用户在尝试伪装的。

检测出我在 Canvas 测试中反馈了虚假信息

好了,讲完思路和注意事项以后我们可以来讲具体的实操方法了。

二 数据隔离

所谓的浏览器多实例,有时候也称之为“Multiple Profiles”。  不论是 Firefox 还是 Chrome,默认安装的时候,只有一个实例(Profile)。和浏览器相关的各种信息,包括:插件、扩展、外观(皮肤)、页面缓存、cookie、等等,都存储在这个实例中。  反之,如果使用多实例,每个实例都具有独立的插件、独立的扩展、独立的外观(皮肤)、独立的页面缓存、独立的 cookies、等等。不同实例之间是相对隔离的,【不会】互相影响。  对于 Chrome,再特别提醒一下:  Chrome 同时支持“Multiple Profiles”与“Multiple Accounts”。但别把这两者搞混了。即使你配置了多个 Accounts,依然在【同一个】实例里。

❞Chrome 的多用户模式

Chrome 在『多用户』模式下很容易通过检测一些信息判断出这些用户实际上都是在同一台设备上运行的。所以我们要使用 Chrome 的『多实例』模式,具体方法可参考:

一台电脑设置多个独立 chrome 方法实例演示,chrome 独立多开技术[2]

三 IP 隔离

IP 就相当于网络世界的地址,如果很多浏览器都使用一个 IP,很难不让平台怀疑它们都是一台设备在操作。规避方法一般使用 911 + SwitchyOmega,具体使用方法:

SwitchyOmega配置详细图文教程,一看就懂!- Phpvars Blog - phpvar.com[3]

911 S5 代理 - HelpDocs[4]

PS:像 IP、端口、socks、http 这些网络世界的一些概念和软件使用后面如果大家有需要,我也会写一篇科普方便大家有个形象的理解。

四 设备/浏览器指纹

4.1 基本指纹

4.1.1 User Agent

User Agent 就像是浏览器向平台发送的自我介绍:我是哪个版本的什么浏览器?我运行在什么电脑上?我的技能是啥(指渲染引擎)?UA 在浏览器指纹的生成因素里面影响很大,所以多开浏览器时务必要修改 UA,尽可能减少 UA 相同的浏览器数量。

Chrome 上可以使用 User-Agent Switcher and Manager - Chrome Web Store[5] 来修改 UA。

同时请时刻牢记我们的目的——「模仿真实用户」。

根据 Win10 在普通用户里的份额 => 尽量避免伪装成 Windows 7、8、XP 设备。

根据 Chrome 的自动更新机制 => 尽量避免伪装成版本较老或者特别新的 Chrome 版本。

通过 User-Agent Switcher and Manager 修改 Chrome 的 UA

4.1.2 硬件/浏览器信息

类别应对备注屏幕分辨率(Resolution, Device Pixel Ratio, Color Depth)、屏幕大小、是否全屏无不建议故意非全屏运行-『非常见行为』CPU 核心数、内存大小无选择常规的硬件即可浏览器语言避免 IP 和浏览器设置语言严重不匹配请勿追踪(DoNotTrack)默认关闭,不要手动开启手动开启属于『非常见行为』电池信息仅限于笔记本AdBlock非特殊需求不要使用使用属于『非常见行为』端口扫描端口扫描保护 - HelpDocs[6]

可以安装下面两个插件进行权限屏蔽,即浏览器拿不到相关信息。不过「不建议使用」,因为这同样也属于『非常见行为』。

Fingerprint Spoofing - Chrome Web Store[7]CyDec Platform Anti-Fingerprinting - Chrome Web Store[8]

1 地理位置❝

Chrome 和 Firefox 浏览器都有网站获取用户地理位置的 API。当网站调用该 API 时,浏览器通常会跳出提示,询问用户接受或是拒绝该请求。然后,浏览器会记住用户的选项,并继续向该网站提供用户地理位置,或持续自动拒绝这样的要求。

「应对」:

对待网站的申请『地理位置权限』,非必要则直接予以拒绝。保证代理 IP 对应的地理位置不同。2 时区❝

网站可通过两种方式获取您的时区。一种是在 Ip2Geo 数据库中匹配到你的 IP 地址。第二种则是使用JavaScript 函数,通过浏览器的 API 从操作系统的区域设置中获取时区。网站会核对两种方式获取的结果是否一致。如不一致,它会认为您可能使用了位于另一时区的代理服务器。

所以务必确保自己代理 IP 的时区和 Spoof 修改的时区相同,至于查自己代理的时区,你可以在 IP查询_专业的 IP 地址库_IPIP.NET[9] 查询到该 IP 的地理信息,进而获得其时区。

Spoof Timezone - Chrome 网上应用店[10]

发现了么,IP-时区-浏览器语言是有一个强关联的,这点请务必注意。

3 Accounts logged in

常见的可以检测出浏览器登录的账号有:Amazon, Graigslist, Dropbox, Expedia, Facebook, Google/YouTube, Instagram, PayPal, Pinterest, Tumblr, Twitch, Twitter, VK(VKontakte)

「应对」:

做到完全的账号隔离,不要在不同浏览器上登录同一个账号,包括 Chrome 浏览器的同步账号(即 Google 账号)。

即使你只是在某第三方网站登录了第三方的账号,也有可能因为这个网站装了类似于 Facebook 的 Pixel 的追踪代码而使得不同浏览器被关联。

4 插件❝

插件和浏览器附加组件不可混为一谈。附加组件是一种浏览器扩展程序,您通常可以从Chrome商店这样的地方下载。附加组件是在浏览器进程中运行的。浏览器附加组件的例子有 AdBlock 和 Chostery。

相较之下,插件通常预装在浏览器中,或从第三方网站被下载。插件的例子有 Flash 和 Widevine 。插件通常在一个单独的进程中运行,它该进程拥有当前活跃用户的所有权利,从而可能导致各种漏洞。

默认情况下,Firefox 没有安装插件。Chrome 则有四个捆绑插件:

Chrome PDFChrome PDF viewerNative client (本机客户端)Widevine Content Decryption Module (Widevine内容解密模块)❞

「应对」:

保持默认设置即可。

5 Cookies 设置❝

一个网站无法看到其他网站放置的 cookie。但是,cookie 可以通过网页内的任何内容或者图像被发送给另一个网站。比如,很多网站都布置了 Facebook pixel、喜欢、分享、评论按键,当您访问这些网站中的其中一个,Facebook 可以注入一个包含着您的独特身份的 cookie,随后它将读取这个 cookie,这就是跨网站追踪您的上网活动。

「应对」:

保持 Chrome 默认设置即可。

6 真人键入功能❝

经常需要快速地复制数据到相应的栏目中,但是,网站可以追踪此类“复制”是来自键盘还是来自复制缓冲区。比方说,在 Gmail 账号注册过程中,这种追踪就经常发生。

「应对」:

利用 Quicker 写一个动作,复制内容后模拟键盘输入。

4.2 高级指纹

下面这些项目大家读不懂没关系,这就是开头提到的那些实验,同样一个实验在不同的机器上会有完全不同的结果,所以平台可以籍此来判断身份。

下面这五个项目的防御手段就属于那种「不得不使用」的,因为不使用就会被判断出是同一个设备,使用了也算是『非正常行为』,有一定风险。

4.2.1 Canvas

Canvas 是一种 HTML5 API,用于在网页上绘出 2D 图像和动画。

除了上述功能之外,Canvas 也可以作为浏览器指纹识别的附加熵。根据 Englehardt 和 Narayanan 在普林斯顿大学的一项研究(2016),超过 5% 的网站使用 Canvas 来进行指纹识别。

综上,Canvas 通过命令浏览器绘制一个隐藏的 Canvas 图像来实现指纹识别。在不同的机器上,这张图片的绘制结果略有不同;但「如果机器相同,则图像也相同」。图像被绘出后,它会被转换成一个哈希字符串,被进一步用于身份验证的额外熵。

Canvas Fingerprint Defender - Chrome Web Store[11]

没有屏蔽此功能,只是在原有指纹上添加了一点噪声「每次随机」生成了一个新的指纹。可被检测出是否进行了伪装。不得不安装。

4.2.2 WebGL (Web Graphics Library)

WebGL 是一种 JavaScript 浏览器 API,用于在网页上呈现 3D 图像。网站可利用 WebGL 来识别您的设备指纹。通常,网站可以用两种方法来做到这一点:

WebGL 报告——完整的 WebGL 浏览器报告表是可获取、可被检测的。在一些情况下,它会被转换成为哈希值以便更快地进行分析。WebGL 图像 ——渲染和转换为哈希值的隐藏 3D 图像。由于最终结果取决于进行计算的硬件设备,因此此方法会为设备及其驱动程序的不同组合生成唯一值。这种方式为不同的设备组合和驱动程序生成了唯一值。

您可以通过 Browserleaks test[12] 检测网站来查看网站可以通过该 API 获取哪些信息。

软件渲染也会有指纹,但是会比硬件的少。

在 WebGL 的渲染由硬件和软件部分共同完成,硬件的贡献比较多。

WebGL Fingerprint Defender - Chrome Web Store[13]

没有屏蔽此功能,只是在原有指纹上添加了一点噪声「每次随机」生成了一个新的指纹。可被检测出是否进行了伪装。不得不安装。

4.2.3 AudioContext

AudioContext 指纹(也被称作“音频指纹”)是设备音频栈的哈希衍生值。它的工作原理如下。基于您的音频设置和硬件,网站要求您的浏览器把播放音频文件的方式模拟为一个正弦函数。这个正弦函数被转化为一个哈希函数并发送给服务器,作为浏览器指纹识别中的附加熵。

您可以在此页面中 page[14] 查看 AudioContext 指纹识别的原理。

AudioContext Fingerprint Defender - Chrome Web Store[15]

没有屏蔽此功能,只是在原有指纹上添加了一点噪声「每次随机」生成了一个新的指纹。可被检测出是否进行了伪装。不得不安装。

4.2.4 WebRTC(Web Real-Time Communication)

WebRTC 是一种浏览器插件,通常被需要快速直接连接的网络应用程序所应用。WebRTC 通过 UDP 协议来建立连接,因此它并不会通过你在浏览器配置文件中使用的代理服务器进行路由。即便您使用了代理,网站也能借此获取您真实的公共和本地 IP 地址。该插件可被用于泄漏你的本地 IP 地址或追踪媒体设备。

「WebRTC IP-Leak」:泄露本地真实 IP(即使用了 VPN 这种服务)

「Media Device ID」:安装/连接的媒体设备,比如麦克风、音响、摄像头

WebRTC Control - Chrome Web Store[16]

采用的直接禁用 API 的方式,能用但是特征明显,更好的方式是进行伪装替换。禁用后 IP 泄露和媒体设备信息泄露的问题可以规避。不得不安装。

4.2.5 字体指纹

字体指纹识别是一种身份验证的方式。基于用户所使用的字体种类及字体在浏览器中被绘出的方式,网站可以进行指纹追踪。通常,网站在浏览器指纹识别时有两种运用字体的方法。

枚举字体列表基于字体测量的指纹识别

您可以通过 Borwserleaks.com,从这里[17]和这里[18]查看这些方法是如何被应用的。

Font Fingerprint Defender - Chrome Web Store[19]

没有屏蔽此功能,只是在原有指纹上添加了一点噪声「每次随机」生成了一个新的指纹。可被检测出是否进行了伪装。不得不安装。

4.3 检测指纹的网站

由于各家生成指纹的算法并不相同,所以不同浏览器的指纹只有在使用相同算法生成的情况下才有对比的意义。

同时不同算法侧重点不一样,建议自己验证的时候使用多个网站,更保险一些。

Unique Machine[20](这个网站的检测必须得过)

http://fp.virpo.sk/

AmIUnique[21]

BrowserLeaks - Web Browser Fingerprinting - Browsing Privacy[22]

Cover Your Tracks[23]

日常流程

我们来总结一下在一台设备上实现『浏览器多开』的步骤:

Chrome 采用多实例模式做数据隔离不同浏览器利用 911 设置不同的代理安装插件,对抗指纹检测UA 必须改IP-浏览器语言-时区保持一致抗高级指纹插件利用 quicker 模拟真人键入功能过一遍指纹检测网站,如果不同浏览器检测出指纹相同,修改设置

这些操作还是会有一点麻烦,每次都需要改动一大堆东西。

其实有一种更简单的方法可以减少很多工作量——『Chrome 便携版』,把一份先配置好,之后可以直接复制文件夹进行修改,省去了新建实例和安装插件的过程。

当然这样也带来了一些风险——正常用户不会使用便携版..便携版的一些修改可能也会被特征识别。

结语

其实看到这里,你会发现还是虚拟机和指纹浏览器风险会更小一些,它们既保证了指纹的差异性,也保留了指纹的唯一性。

而 Chrome + 插件的模式风险则会大一点,但胜在实施成本很低。原则上硬盘有多大,就能复制多少份资料出来..

不论采用什么方法,自己衡量好「成本」和「风险」即可。

必须声明,因为对抗的过程是动态的,双方都在成长,所以「没有任何一种方法是 100% 无风险的」。

或许技术上可以做到没有漏洞,但只要把时间的维度拉长,总会有一些新的异常,检测这种异常对于机器学习算法很牛 X 的平台而言,真不是大问题,平台可能只是因为实施成本和误伤率的原因暂时放弃处置。

诸位且行且珍惜。

以上!

参考资料

We’ve analysed 500,000 browser fingerprints. Here is what we found. | by Peter Hraška | Slido developers blog | Medium[24]

2.5代指纹追踪技术—跨浏览器指纹识别[25]

fingerprintjs/fingerprintjs: Browser fingerprinting library with the highest accuracy and stability.[26]

LukasDrgon/fingerprintjs2: Modern & flexible browser fingerprinting library[27]

Fingerprinting WebRTC[28]

浏览器指纹 - HelpDocs[29]

BrowserLeaks - Web Browser Fingerprinting - Browsing Privacy[30]

「本文中分享的爬虫/代码/技术仅供学习交流,请合理使用,任何人拿它们做的违法的事情与我无关」。

Reference

[1]

Device Info:

[2]

一台电脑设置多个独立 chrome 方法实例演示,chrome 独立多开技术:

[3]

SwitchyOmega配置详细图文教程,一看就懂!- Phpvars Blog - phpvar.com:

[4]

911 S5 代理 - HelpDocs:

[5]

User-Agent Switcher and Manager - Chrome Web Store:

[6]

端口扫描保护 - HelpDocs:

[7]

Fingerprint Spoofing - Chrome Web Store: ?hl=en

[8]

CyDec Platform Anti-Fingerprinting - Chrome Web Store: ?hl=en

[9]

IP查询_专业的 IP 地址库_IPIP.NET:

[10]

Spoof Timezone - Chrome 网上应用店:

[11]

Canvas Fingerprint Defender - Chrome Web Store: ?hl=en

[12]

Browserleaks test:

[13]

WebGL Fingerprint Defender - Chrome Web Store: ?hl=en

[14]

page:

[15]

AudioContext Fingerprint Defender - Chrome Web Store: ?hl=en

[16]

WebRTC Control - Chrome Web Store: ?hl=en

[17]

这里:

[18]

这里:

[19]

Font Fingerprint Defender - Chrome Web Store: ?hl=en

[20]

Unique Machine:

[21]

AmIUnique:

[22]

BrowserLeaks - Web Browser Fingerprinting - Browsing Privacy:

[23]

Cover Your Tracks:

[24]

We’ve analysed 500,000 browser fingerprints. Here is what we found. | by Peter Hraška | Slido developers blog | Medium:

[25]

2.5代指纹追踪技术—跨浏览器指纹识别:

[26]

fingerprintjs/fingerprintjs: Browser fingerprinting library with the highest accuracy and stability.:

[27]

LukasDrgon/fingerprintjs2: Modern & flexible browser fingerprinting library:

[28]

Fingerprinting WebRTC:

[29]

浏览器指纹 - HelpDocs:

[30]

BrowserLeaks - Web Browser Fingerprinting - Browsing Privacy: