设备指纹在安全上主要用来识别用户,增强认证能力。参考业界普遍实践和学术探索,我们对常见的29种方法进行了比较,本文对这些方法根据稳定性、可重复性、资源消耗、用户端被动、绕过难度和可区分性进行了比较,用以在实践中选择。

一、背景

网络认证机制当前主要仍然是密码方法,但问题大家也都知道,密码方法在可用性、安全性上都有缺陷。设备指纹作为一种增强技术,收集设备软硬件信息进行识别,例如浏览器可采集屏幕分辨率、本地时间、操作系统版本进行主机系统识别,同时也可通过浏览器行为采集信息,目前很多用户画像、广告推送都会采用设备指纹跟踪用户浏览的习惯。另外则是在风控领域有大规模使用,通过在认证过程中进行多维判断,在无需用户干预的情况下实现增强认证。

现实中对设备指纹的主要考虑是:能够提高安全性、对用户不可见、兼容,从而在可用性和可部署性上实现低成本。

二、学术界研究

学术界对设备指纹也早有研究,目前业界知名的研究我们也做了分析。

第一篇设备指纹研究论文是Eckersley在2010年发表的,详细讨论了基于浏览器的设备指纹的概念,表明可通过收集设备IP地址、时区、屏幕分辨率、支持字体和插件列表等基本信息来识别用户,并跟踪用户的浏览习惯,这个功能最初目的是为了优化各类设备浏览体验。

后来Mowery等人提出了两种更先进的指纹方法:第一种是测量浏览器JavaScript引擎的性能签名,第二种是在HTML5画布中渲染文本,来区分不同软硬件平台的字体渲染技术。

Nikiforakis等人继续扩展了一些对抗下的方法,例如不同浏览器JavaScript实现差异会暴露出使用的是哪个浏览器,哪怕是user-agent被伪造。用户如果使用代理,则可通过Flash或Java等外部插件来确认真实IP地址。用户如果改动设备指纹,则会导致一个罕见指纹,对识别用户反而更有用。

Bojinov开始对手机传感器进行指纹识别,利用了设备的加速度校准误差和扬声器麦克风系统的响应频率。

Nikiforakis等人开发了PriVaricator,通过随机化各种浏览器参数来降低指纹性。

Acar和Nikiforakis等人的实证研究发现,在用户清除浏览器cookie的情况下广告商普遍使用设备指纹作为后备机制跟踪用户,广告商还通过非传统的存储机制保存识别信息,例如Flash cookie,用户很难删除,如果用户清除浏览器cookie,这些信息还可用来重建浏览器cookie。

在安全上也有一些研究探索。Unger提出了,通过监控某些Web浏览器属性(例如user-agent、支持的CSS功能)来增强会话安全,帮助检测会话劫持。Preuveneers和Joosen则提出了一个协议,该协议在整个认证会话中监控各种参数,使用比较算法为每个属性分配一个权重来确定指纹变化。Van Goethem提出了一种基于加速度计的设备指纹机制,用于多因素认证。Freeman提出了一个统计框架,利用各种浏览器属性和其他参数(如访问时间)来检测可疑的登录尝试。

Spooren认为,与台式电脑相比,移动设备指纹相对缺乏多样性,在风险的认证中的可靠性较低,但这个研究并没包括一些先进的指纹技术。Laperdrix收集分析了119,000个指纹,发现虽然一些移动设备属性的多样性较低(例如浏览器插件支持有限),但其他属性(例如user-agent和画布指纹)的多样性要比台式机高得多。Eisen有两项设备指纹专利:第一项描述了通过记录服务器的本地时间和客户端时间差来检测欺诈(用户端时区、夏令时以及UTC漂移);第二项描述了一个通用的框架,在用户端向服务器请求的每个页面上获取指纹,并在指纹有足够变化时发出告警。

Varghese的专利描述了如何将设备指纹作为索引,从涉嫌欺诈的设备指纹数据库中匹配相关欺诈风险,并据此给账户访问分级。

Markus提出了隐式认证,根据用户行为如打字节奏、触摸屏输入、传感器输入(如陀螺仪、加速度计、附近蓝牙或WiFi)、使用模式(如访问时间、常用访问页面)等来加强或替代现有的认证机制。在更广泛的多维认证背景下,用户行为特征分析可与设备指纹一起使用,在不牺牲可用性的情况下实现更强认证。

三。设备指纹框架和威胁模型

在设备指纹中,服务器使用多种指纹向量验证设备的软硬件相关属性。“纯粹的”设备指纹是无状态的,对应则是有状态。而攻击者则会学习设备指纹的组成来对抗绕过。

有些向量要求浏览器执行操作,例如通过JavaScript,并将输出返回给服务器。如果一个向量响应是静态的,不管在什么情况下都不变,那么攻击者可以重放。如果服务器改变向量,或者使用单个向量,或其响应取决于条件或二次挑战,那就需要更高一级对抗,例如伪造地理位置等。

按照攻击能力,我们分为五类,用来分析设备指纹的防御能力。

M1:天真级,天真级就是传统密码猜测攻击,这是最容易防范的。攻击者试图猜测账户密码,但不对抗设备指纹,可根据历史数据确定暴力尝试来自来自新设备。

M2:密码和指纹猜测攻击。在多个账户中按流行程度暴力猜测密码,同时对设备指纹猜测迭代。攻击者可伪造设备匹配的指纹,这些指纹可能是为目标网站受众量身定做,例如针对特定国家用户的网站有特定时区访问者,特定厂商的技术支持网站则使用该厂商设备。然后,攻击者可以根据每个密码和设备指纹组合,在所有账户中递减顺序遍历密码-指纹。攻击者还可通过已泄漏密码库或设备指纹库(例如利用XSS获取大量数据伪造设备指纹)。

M3:目标密码和指纹猜测攻击。攻击者针对特定账户的密码猜测攻击,同时伪造指纹,这种攻击按照某种顺序对密码和指纹进行暴力迭代,通过已知信息(例如已知用户使用iphone7)或在特殊情况下可能拥有用户密码或用户设备指纹,从而将攻击降低为指纹猜测或密码猜测,大大减少搜索空间。

M4:指纹钓鱼和欺骗。钓鱼攻击可窃取密码和设备指纹。然后攻击者伪造指纹并使用密码访问,如果设备指纹不易伪造,这种攻击就比较困难。

M5:利用指纹欺骗进行会话劫持。攻击者目的是劫持会话,M1-M4攻击者是通过密码和指纹伪造来破解账户。M5攻击者则可窃取会话cookie,并利用诸如配置不当的HTTPS或XSS漏洞来执行用户端JavaScript。这样攻击者能够捕获设备指纹,从攻击者设备上恢复会话。因此,在M5下设备指纹必须很难伪造。

模型的总体分层结论如下:

M1:设备指纹可以防御,即使指纹可重放。

M2:设备指纹可显著降低攻击成功概率,即使指纹可重放,即使指纹的猜测空间足够大。

M3:这类攻击比较难以防御,因为攻击目标是特定用户,并拥有特定设备信息。

M4:最难防范,攻击者通过钓鱼获取密码和设备指纹,如果指纹可重放,就足以伪造。

M5:专门针对会话劫持,指纹不仅仅是在一个会话开始时,而是在整个会话过程中用来增强身份验证,后面我们会讨论。

四、设备指纹分类

我们查了各类研究文献、专利,以及网上技术文章、开源指纹库、营销广告和反欺诈服务,把所有的到的类型进行了总结分类,分类主要根据获取方法。

第一类:浏览器提供的信息。浏览器明确提供(例如JavaScript)多种系统信息,这些信息已知向量如下:

(a) 主要软硬件细节。navigator和浏览器对象模型(BOM)公开了浏览器/操作系统厂商和版本、系统语言、平台、user-agent (有时还包括设备型号之类)、已安装插件、浏览器支持的存储机制(如本地存储(localStorage)、索引数据库(indexedDB)、会话存储(sessionStorage)、通过openDatabase的WebSQL)、屏幕分辨率、颜色深度和像素等属性。

(b) WebGL信息。WebGL是用来在浏览器内渲染图形的JavaScript API,公开了底层浏览器和硬件各种属性(如GL版本、最大纹理大小、渲染缓冲区大小、支持的WebGL扩展、供应商/渲染器字符串)。

(c) 系统时间和时钟漂移。设备的系统时间可通过JavaScript访问,并用于推断设备的时区、是否遵守夏令时以及UTC时钟漂移。

(d) 电池信息。当提供足够精确的读数时,HTML5电池状态API适用于指纹识别。电池电量可用于在不同网站上对用户端进行短期跟踪,电池容量随着电池老化缓慢下降,但在相对较短的时间内,例如一天内变化不大,可通过监测约30秒的放电速率来估计,并用于辅助识别。

(e) 永续cookie。Evercookie通过使用HTML5本地存储、HTTP ETags或Flash Cookie等多种技术,将用户端标识符存储在设备上,从而允许网站重建用户删除的cookie。

(f) WebRTC。WebRTC是一套W3C标准,支持原生(无插件)浏览器应用,如语音和视频聊天。设备可通过枚举支持的WebRTC功能和媒体设备(如麦克风和网络摄像头)来进行指纹识别。对于哪些类型的设备可以在未经用户许可的情况下进行枚举,各浏览器的做法不同。WebRTC还公开了分配给设备上所有网络接口的IP地址,包括由用户分配的私有IP地址、NAT路由器或VPN。

(g) 密码自动填充。JavaScript可以用来检测密码是用户输入,还是被浏览器或密码管理器自动填充。使用事件监听器来检测用户是否在密码字段中输入字符,为keydown和keypress分配一个事件监听器,由于事件是由物理按键触发的,缺失则表明密码是通过自动填充输入。

第二类:基于设备行为推断。不仅可以通过浏览器提供信息,还可在浏览器上执行特定JavaScript代码观察效果,如测量执行时间或分析输出来收集设备的信息,包括:

(a) HTML5画布指纹。通过JavaScript在用户端执行HTML5画布渲染各种文本和图形,并向服务器发送位图图像的哈希。不同软/硬件设备生成的图像有细微不同,例如字体和抗锯齿会随操作系统和显卡驱动变化,表情符号随操作系统和手机厂商变化。使用预定义字体列表渲染文本,可以进行字体检测。使用WebGL渲染复杂的图形,可进一步提供指纹多样性。

(b) 系统性能。在一系列计算密集型操作上运行JavaScript引擎基准,对运行时间进行测量,可推断设备性能特点;

(c) 硬件传感器。移动设备传感器可以根据制造和工厂校准变化进行指纹识别,例如,测量手机加速度计的校准误差(通过JavaScript访问)或扬声器-麦克风系统的频率响应;

(d) 滚轮指纹。监听WheelEvent事件,可通过JavaScript推断用户设备,当用户使用鼠标滚轮或触摸板滚动时,就会触发该事件。鼠标滚轮在触发时以固定增量滚动页面,触摸板则以不同增量滚动。测量文档的滚动速度可以显示用户滚动行为的信息和操作系统的滚动速度值。

(e) CSS特征检测。浏览器厂商和版本可通过检测CSS特征来推断,因为各浏览器不统一。在目标元素上设置所需的CSS属性,然后查询该元素判断是否应用更改。这个向量可从user-agent获取。如果设备指纹已经通过另一个向量提取了user-agent,那么这里也用来测试信息是否被篡改。

(f) JavaScript标准的一致性。浏览器对JavaScript标准的符合性不同,各种JavaScript一致性测试要数千个测试用例,加起来可能需要30多分钟。Mulazzani等人开发了一种技术,方法是使用决策树来选择一个非常小的子集,这些子集的运行时间可以忽略不计,可用来验证user-agent中报告的浏览器供应商和版本。

(g) URL scheme handler。有些浏览器在访问本地资源时使用了非标准方案。例如,res://在Microsoft IE中是存储在Windows系统目录下DLL文件,Firefox中的moz-icon://、jar:resource://和resource://公开了内置浏览器和操作系统资源。因此网站可以创建HTML图片标签,将源地址设置为本地资源,并使用onerror事件处理来检测图片是否加载。通过迭代不同浏览器或操作系统版本预加载资源列表,向量可以列举。这算是一个替代方案,因为很多新版本浏览器出于隐私考虑,不再支持。

(h) 显卡RAM检测。GPU可用RAM(VRAM)数量,虽然不能通过WebGL API明确获得,但可以通过反复分配纹理来推断,直到VRAM满了,之后纹理开始被交换到系统主内存。通过每次纹理分配的时间长度,并记录观察到的较大峰值,可推断GPU VRAM已达到充分利用的状态。在这之后,浏览器可以继续分配纹理,直到出现OUT OF MEMORY错误。

(i) 字体检测。虽然不能通过JavaScript枚举已安装的字体,但可以用预定义列表中的字体来格式化文本,产生的文本尺寸可以区分不同的字体渲染设置,因此推断每种字体的存在。

(j) 音频处理。HTML5 AudioContext API通过提供音频播放的实时频域和时域分析接口,允许创建音频可视化。和HTML5画布指纹一样,音频处理因浏览器和软/硬件不同而不同。

第三类:浏览器扩展插件。包括:

(a) 浏览器插件指纹。浏览器插件,如Java、Flash和Silverlight,可以被查询(通过嵌入网页插件对象),以采集系统信息,而且比JavaScript提供的信息更详细。例如,Flash提供了完整的操作系统内核版本,Flash和Java插件都允许枚举所有系统字体,甚至系统字体的列举顺序在不同的系统中也会有所不同,增加了指纹的可区分性。

(b) 浏览器扩展指纹。如果安装了NoScript扩展(默认情况下,除了用户白名单上外,所有网站都禁用JavaScript),网站可以尝试从一大批网站(如Alexa Top 1000)加载脚本,检测哪些网站在用户白名单上。同样,广告拦截器也可以通过嵌入一个虚假广告来检测,比如一个隐藏的图片或iframe,其源URL中包含广告拦截器常用的黑名单词(比如 “广告”),然后JavaScript可以检测假广告是否被加载,并将结果返回服务器。其他扩展也有不同方法进行指纹识别,比如一些浏览器扩展会添加自定义HTTP headers。

(c) 系统指纹插件。网站可能会安装专门的插件,例如早年的网上银行,这样可提供更强大指纹信息,包括硬件标识符、操作系统安装日期和已安装驱动程序版本,不过这种插件现在一般会被杀毒软件报出。

第四类:网络和协议级技术。前面几类涉及在客户端上访问API,而网络和协议层面的技术也可给设备打指纹,包括:

(a) IP地址。众所周知IP可用来做判断,也可查询WHOIS获得更多信息,比如所在自治系统和注册组织名称。虽然IP地址比AS号更精确,但AS更稳定,在校验用户位置时可以作为交叉检查。

(b) Geolocation。地理位置可以通过几种机制来确定,浏览器通常会暴露API(例如通过navigator BOM对象),通过这些API,可以请求用户允许获取当前位置(GPS硬件、蜂窝三角、WiFi信息或用户提供的信息)。基于网络的机制也包括基于IP地址的WHOIS查询、基于路由数据的推理以及基于地理定位。

(c) 主动式TCP/IP协议栈指纹。由于网络和操作系统TCP/IP实现之间的差异,可以通过向设备发送针对性探针并分析响应包头字段(如RTT、TCP初始窗口大小)或链路特征(如MTU、延迟)来确定指纹。这种方法与浏览器无关,可以在任何互联网主机使用。可以理解为Nmap之类的扫描,具有主机发现、端口扫描和操作系统检测能力,可以发送各种探测数据包,通过内置数据库中的启发式方法来区分成千上万的系统。这种向用户端发送特殊的探测数据包,称之为主动指纹,但可能会触发防火墙、IDS警报。

(d) 被动TCP/IP协议栈指纹。被动指纹是侵入性较低的方法,但效果也较弱,通过嗅探网络通信,但使用主动指纹的启发式方法来识别主机,例如p0f这种工具。被动方法是比较合适的指纹向量,因为对现有header分析不需要制造新数据包,不具有侵入性。

(e) 协议指纹。协议指纹用于更高级别的协议,用来区分浏览器软件、版本、配置,例如HTTP header、user-agent、支持语言、字符编码列表以及DoNotTrack参数。此外,浏览器的TLS库可以用ClientHello数据包从协商参数的握手序列中获得指纹,相关信息包括用户端TLS版本、支持的密码套件、它们的顺序、压缩选项和扩展列表(相关参数如椭圆曲线参数)。

(f) DNS解析。很多用户默认DNS解析器是运营商配置的,但少数用户可能会设置其他DNS,如阿里云或OpenDNS。于是就产生了一种比较骚的方法,服务器向浏览器发送一份文件,文件包含一份随机生成子域名,但该域名的权威DNS服务器由网站所有者控制。当用户端试图解析时,网站的DNS服务器会收到来自用户端DNS解析请求,然后将随机生成子域与最初为用户生成的进行关联。

(g) 时钟偏移。可以被动分析TCP时间戳,来测量用户时钟偏移—用户时钟和真实时间的偏离率。

(h) 计算NAT后面的主机。Bellovin最早提出来计算NAT后面的主机数量,通过被动分析IPv4 ID字段(用于片段重构)来计算NAT后面的主机数量。Kohno则又提出使用时钟偏移来区分NAT后面的主机。这些技术可以通过上层信息来增强,例如在指纹中加入从同一IP地址访问的其他用户账户。

(i) 广告拦截器检测。虽然广告拦截器检测可以用JavaScript在用户端进行,但也可以在服务器监控用户端是否请求了虚假广告。

五、设备指纹向量

用设备指纹需要考虑很多特性,在身份验证的需求下,准确率要求很高。广告营销在80%或90%的准确率可能就够了,但安全领域显然不行。

为提高准确性,设备指纹采用了多个指纹向量。前面说的所有向量都可自由组合,但整体受限于用户体验和验证成本。第一到第三类涉及用户端JavaScript,会产生非零但较小的开销。为了帮助比较向量,并提供组合可能,还需要提供可识别性的预测值。

5.1 稳定性

实际上设备指纹的所有组成部分都会发生变化,但有些组成(如台式机或很少移动设备的时区)的变化频率可能比其他组成(如浏览器版本)低得多。设备指纹的重大变化可能要求服务器对用户的认证降级,通过二次短信重新验证。因此从可用性的角度来看,最好是结合一个随时间稳定的指纹方法,即在给定时间内,有足够多稳定向量。通过结合多个向量实现变化的评分机制,可以提高整体指纹的稳定性。在Eckersley的实证研究中,提到的算法在65%的设备中正确地将新旧指纹关联,准确率达到99.1%。如果这样的算法用于身份验证,误报仍然很大。

第一类到第三类的向量大多比较稳定,但也有个别例外:

1(a)如果用户升级操作系统、切换浏览器、安装或删除浏览器插件等,主要的软硬件细节会偶尔发生变化。

1(d)电池信息会发生变化,因为电池会老化。

2(a)HTML5画布渲染细节会随着浏览器、操作系统或显卡驱动更新而变化。

2(e)CSS功能检测和2(f)JavaScript标准一致性会随着浏览器更新而改变。

相比之下,第四类的向量一般不太稳定:

4(a)IP地址、4(b)地理位置和4(f)DNS解析会随着用户从不同地点登录而改变。

4(c,d) TCP/IP协议栈指纹会随着路由变化,这些变化会影响到用户和服务器之间的往返延迟和跳数等。如果用户从不同的网络位置登录,则可以观察到额外的变化,例如,网络链路的MTU,或者由于不同的防火墙规则对探测数据包的响应。

4(e)协议指纹会随着浏览器或SSL/TLS库的更新而变化。

4(h)随着时间的推移,NAT后面主机是不稳定的,设备可能会进入和离开网络。

例外的是4(i)广告拦截器检测和4(g)时钟偏移,TCP时间戳反映的是CPU时钟偏移,相对稳定。哪怕是在长时间内不稳定的向量,如果只在短时间内进行识别,例如在一天、一小时或一个会话中,则仍然有用。

5.2 可重复性

可重复性定义为:如果设备软硬件和网络配置不变,那么一个向量就会产生相同的结果,而稳定性主要涉及设备配置的变化。除了以下这些例外,大多数向量都是可重复的。

2(b) 系统性能因设备任务负担有所不同。对于移动设备来说也可能取决于温度,移动芯片组在高温下会降低速度。

2(c)、4(g) 温度会影响硬件传感器数据和时钟偏移。

2(d)滚轮指纹要求用户使用滚轮,如果用户没用滚轮,那么该向量不可重复。

2(h) 可用 VRAM 会根据设备当前使用的数量而变化。

4(f) 由于DNS解析服务器的负载均衡,使用的DNS解析服务器可能不同。

4(h)计算NAT后面的主机会因网络上存在其他设备而不同。

如果在整个设备指纹中使用了很多向量,并且使用了适当评分机制,那么不可靠指纹向量则仍然有价值。

5.3 资源使用

指纹向量需要系统资源CPU、内存或I/O,会带来性能消耗和电池成本。对于每次认证过程只给设备打一次指纹的网站来说,这一点并不太重要,但对于在整个会话中反复打指纹来检测会话劫持的网站来说,这一点很重要。

大多数向量开销都较小,在毫秒范围内的处理时间,但少数可能需要秒级的时间:1(d)电池信息,2(b)系统性能,2(c)硬件传感器,和2(h)显卡RAM检测。而2(b)消耗CPU,2(h)消耗 GPU内存,1(d)和2(c)需要时间收集足够的数据,因此速率降低一半。

5.4 抗欺骗性

攻击者会伪造相似设备指纹,因此需要抗欺骗性。第一类到第三类的向量,浏览器运行JavaScript,并将输出返回到服务器,这样攻击者很容易拦截响应,但有三种情况下例外:

1(e)Evercookies是有状态的,可以使用例如Flash cookies和HTML5本地存储来存储全局标识符,这些标识符受到同源策略的保护。与其说是欺骗,不如说是evercookies可能被攻击者窃取并重放,不过这需要利用漏洞。

2(c)硬件传感器,可以通过从用户端获取传感器数据并重放来进行欺骗,但首先获取这些数据需要用户配合,浏览器在访问麦克风之前需要询问用户许可。

3(c)如果插件被设计成只与安装该插件的网站进行通信,则攻击者需要更多方法才能获得这个信息,例如硬件标识符。

相比之下,第四类的抗欺骗性更强,但没有一个可完全免疫。以下向量具有较强的抗欺骗性:

4(a) 由于整个互联网的源地址验证不足,IP源地址欺骗是可以做到的,而且经常用来发动DoS攻击。但是,使用欺骗源地址与主机建立双向通信就困难了,因为服务器总是会向欺骗地址发送响应数据包。

4(g)时钟偏移指纹可用于识别无线传感器和802.11无线局域网中的接入点,这两种技术都依赖于各自MAC协议中使用的时间戳。Arackaparambil的论文说明,时钟偏移可以被欺骗,但可通过分析检测到不规则性,使用较小的801.11信标帧传输间隔(通常为100ms)会使不规则性更明显,从而更容易检测到。与MAC协议的时间戳相比,从TCP时间戳中得出的时钟偏移结果更粗糙,但仍然可被检测到。

4(i)广告拦截器检测和4(e)协议指纹检测,可以通过使用与目标设备相同浏览器和版本很容易欺骗,除此之外其余的第四类向量中属于部分抗欺骗:

4(b)位置验证,使用代理,浏览器位置 API 的地理定位可以很容易被欺骗,但这属于第一类。

4(c,d) 欺骗操作系统TCP/IP协议栈可以通过各种现成的工具,伪造网络或链路相关的信息,如跳数、延迟和MTU,需要一些成本。

4(f) 如果用户使用运营商的DNS服务器,则攻击者需要篡改DNS指向。

4(h)欺骗NAT后面的主机数量的难度根据技术实现有所不同,基于IPv4 ID字段的简单技术比较容易欺骗,但基于时钟偏移的技术则比较困难。

因此,可以通过策略增加防御能力。例如对于2(a)HTML5画布指纹,当设备首次与账户关联时,服务器可以发送多个挑战,让其渲染不同文本和图形,用户端返回相应的结果。然后,服务器可以在每次认证时随机选择挑战子集。提高对简单重放的防御能力可提高抗欺骗性,但攻击者资源可能比较丰富,尤其黑产,能够为任何挑战配置模仿。不同策略可能会增强其他向量的抗欺骗性,例如对于2(b)系统性能,可以用用用户端数学题的方法,即服务器向用户端发送数学题,测量每次计算的时间变化。

5.5 被动客户端

被动客户端不需要设备的明确支持,第一到第三类的所有向量都需要浏览器执行JavaScript并将输出返回,这些都不是被动的。第四类向量在某种程度上都是被动的,因为不需要明确的客户端合作授权。

4(b)地理定位可以是被动的,主要取决于机制,例如基于IP的地理定位是被动的,不需要用户端JavaScript的向量。

4(c)主动式TCP/IP协议栈指纹需要向用户端发送额外的探针包来观察响应,发送探测数据包不需要用户合作。

第四类中的所有其他设备都是被动的,仅检查服务器和用户之间现有的HTTP流量,就可以用这些设备指纹来构建。

5.6 可区分性

为了描述指纹向量能够识别设备的粒度,我们使用了可区分性。业界一般会熵来表示,但是香农熵是相对于一个既定的概率分布而言的,而我们实际上很难对设备指纹进行完整描述。可识别性取决于用户设备空间的大小,以及指纹属性的多样性。一个向量的可区分性可能取决于一个网站的目标用户分布,例如对于中文网站用户,系统时间和地理位置的分离度较低。

为了帮助比较和选择要组合的向量,我们对每个向量的可区分性进行了定性分析:

1(a)主要软硬件细节:高,因为它包括user-agent、插件列表、屏幕分辨率、是否存在localStorage和sessionStorage等属性,另外还有其他属性。

1(b) WebGL信息:低,根据初步实验得出。

1(c)系统时间:取决于时区,一共24个值,但实际上用户在不同时区的分布会有偏移。时钟偏移也可以测量,但缺少大规模试验,所以这个向量整体评定为低。

1(d)电池信息,低,一般设备电池基本上在4-10小时内,如果充电则可提供更多的区分度。

1(e)Evercookies:非常高,服务器可以在设备上保存一个全球唯一标识符。

1(f)WebRTC:中,大多数家用路由器分配的IP地址在192.168.0.x范围内,因此这些IP地址有上限。

1(g)密码自动填充和4(i)广告拦截器检测:非常低,每个都是二进制值。

2(a)HTML5画布指纹被:中,提供了˜8.6位的区分信息。

2(b)系统性能:低,在几秒钟时间的约束下,可测量系统性能的粒度有限。

2(c)硬件传感器:中,根据Bojinov收集的3000多个设备加速度计数据,计算出分布的熵为˜7.5位。

2(d)滚轮指纹:非常低。滚轮指纹产生一个二进制值来区分滚轮和触摸板,但也有可能因为操作系统滚动速度设置造成。

向量2(e)、2(f)、2(g)尚未有实证研究报告,但估计位非常低。这些向量的作用是区分不同的浏览器厂商和版本,对于这些厂商和版本,其分布很可能偏向于最新的版本。

2(h)显卡RAM:低或非常低。因为选择很有限,例如1GB、2GB、4GB。而且很多设备共享显卡内存,这一点变得复杂了。

2(i)字体检测:低或中。通过Flash插件枚举所有字体的结果是7-14位,这个差值主要是由于移动设备上字体多样性大大降低。JavaScript字体检测是无序的,不能进行完全枚举,它使用已知字体列表进行测试。

2(j)音频处理:中,概念上类似于2(a)。

3(a)浏览器插件指纹:低或中,除了可以采集更细粒度的系统信息(如内核版本)外,还包括完整的系统字体枚举。但移动设备不支持插件,而桌面网页浏览器则转向扩展模式。

3(b)浏览器扩展指纹:低或非常低。除了技术含量高的用户外,很少有用户安装很多浏扩展。

3(c) 系统指纹插件:高。可以提供相当多的识别信息,与JavaScript相比,对底层操作系统和硬件的访问限制较少。

4(a) IP地址:高。通常可以作为全局标识符,例如由于NAT、代理,以及在某些情况下地址的快速变化。

4(b) 地理定位:从低到高,有较大可变性。地理定位如果颗粒度够细的话,可以提供相当大的区分度。

4(c,d)基于p0f的MTU和TCP标志签名列表:从低到中。被动式TCP/IP协议栈指纹为低,主动式为低到中,主动式更强大一些。

4(e)协议指纹:高。包括HTTP header文件列表(˜4.36位)、某些header文件对应的值,如user-agent、resp、DoNotTrack。也可以推断出是否启用cookies,SSL指纹还不太能确定。但总体等级为高。

4(f) DNS解析:低到中。类似于地理定位,但颗粒度较小。

4(g) 时钟偏移:中。根据Kohno收集的几千台设备数据,计算出分布的熵为˜6位。

4(h)计算NAT后面的主机数量:低。对家庭用户来说,NAT后面主机数量变化不大,比如1到16台设备(企业设备来说会更高)。

六、设备在指纹认证中的价值

设备指纹其实不适合作为唯一认证机制,一个理想化的设备指纹认证需要:

每个设备都有一个独特的指纹,可以与用户账户关联。

不同时间从同一设备上获得的指纹要么是相同的,要么是可链接的,即可以高度确信来自同一设备。如果无法链接,比如用户换硬件了,则通过类似二次短信之类的备份机制确保可用

攻击者即使完全掌握设备软硬件配置,也很难伪造。

如果能够满足上述要求,仅设备指纹就可以用于账户认证,但目前显然无法达到这些要求。所以设备指纹主要作为额外的风控机制,尤其是这种机制不会增加用户负担。在这种情况下,设备指纹有两种用法,一是在会话开始时认证,二是在整个会话中维持认证。

6.1 会话开始时认证

设备指纹作为附加认证维度使用时,为了授权一个会话,服务器需要正确的响应和匹配用户指纹数据,因此服务器必须能持久访问指纹数据。同时,指纹要在单位时间内稳定跨越多个会话。前面我们说过,如果设备配置发生变化,以至于进化后的指纹不再可验证,则需要一个备份机制来重新关联设备和账户。

这种方式下指纹只需在会话开始时采集一次,因此资源消耗不是主要障碍。

增强双因素认证。用户端指纹可以增强双因素认证,值得注意的是,因素这个词通常涉及用户操作,设备指纹这样的维度最好不要涉及用户操作这部分。以Google的两步验证为例,首先用户名密码登陆,然后发送一个6位短信验证码,如果用户选择信任登陆的电脑,浏览器会保存一个cookie,用户在未来30天内无需验证码登陆。显然这是为了可用性而做出的妥协,攻击者获得cookie后就可以直接绕过第二个因素。所以设备指纹可以至少以三种方式作为辅助验证:

(a) 当用户提交密码时,服务器在发送短信代码之前验证设备指纹。如果指纹验证失败,则需要额外的认证,或向用户发送警报—在接收短信设备被盗的情况下提高安全性。

(b)当用户提交密码时,服务器可验证设备指纹和受信任的cookie,提高cookie被盗时的安全性。

(c)如果用户清除了浏览器cookie,之后试图重新认证,服务器可通过设备指纹识别出用户之前的可信情况,并允许跳过第二个认证因素。

6.2 整个会话的认证

在典型基于密码认证过程中,服务器接收到用户名密码后,会返回一个浏览器会话cookie,允许客户端在后续请求中用cookie来保持认证状态。cookie作为一个不记名标记,取代了密码。因此,获得cookie的对手可以在不知道密码的情况下提交认证,获取cookie可以有很多方法,设备盗窃、跨站脚本、MITM攻击等。

有的网站在发起认证会话时记录IP,并检查任何包含cookie的请求是否来自同一地址。这种会话cookie的IP绑定增强了安全性,如果IP交叉验证失败,服务器则终止会话,并选择向用户发出警告,锁定账户,额外认证等步骤。由于客户端在发送每个HTTP请求的同时发送会话cookie,服务器最好在每个请求上都验证源IP地址。不过这可能会影响可用性,用户IP地址在移动环境中可能经常变化。在这里,使用多个指纹向量会有帮助。

一个页面会产生很多HTTP请求,在这种情况下,被动向量应作为主要选择。对于完全被动向量,服务器可从现有流量中提取相关指纹数据,从而在每个请求中验证。但对于部分被动的4(c)或4(f),则需要额外的网络流量。

非被动向量要求浏览器执行某些操作,并生成指纹输出,且包含在每个HTTP请求中。如果服务器使用固定向量,而且不涉及时间变化的挑战,设备配置也不改变,那么在用户浏览一个网页的过程中,这个指纹就会保持静态。因此在每次请求之前重新计算这个指纹对于合法用户端来说是多余的。但静态指纹可进行重放攻击。

在客户端用计数器对设备指纹进行哈希处理,然后再发送给服务器,这样可解决重放攻击。但对于XSS窃取会话cookie是无效的,因为XSS也可以窃取明文设备指纹和计数器,然后攻击者可以在自己的机器上恢复会话,并继续生成有效设备指纹,例如递增计数器和重新计算哈希。攻击脚本可以收集关于目标设备的额外信息,以便在服务器动态调整其指纹的情况下伪造。严格情况下,服务器可在每次设备被指纹时收集不同的属性。

综上所述,对于全会话指纹:

  1. 设备指纹应对每个HTTP请求进行验证。

  2. 被动向量的优点:向攻击者隐藏服务器指纹策略;消除用户端资源负担。

  3. 定期改变指纹方法可提高防御能力,但要考虑资源使用成本。

  4. 改变用户端生成指纹格式可提高安全性,例如使用计数器和哈希,或改变指纹属性。但对高级攻击者效果有限。

  5. 抗欺骗能力较强的向量可提供更强的认证保证。

七、总结

本文涉及的指纹向量,除了参考业界研究,我们自己也对19个指纹向量做了仿真实验,从这些研究中得出的一个结论是,任何向量子集结合起来都是可行的,但向量组合成需要平衡稳定性和可重复性。向量越多,可识别性则会增加,但并不是在所有情况下都会增加,例如在手机端的user-agent中中,屏幕分辨率不会增加区别性,因为一个型号的所有手机都有一个固定的分辨率。虽然攻击者可从统计学上猜测设备指纹的一些组件,比如伪造最常见的屏幕分辨率,但硬件传感器校准等组件可能是完全随机的,因此难以有效伪造。虽然目前无法给出精确的量化,但结合更多的向量往往会提高抗欺骗性,或至少提高标准。

声明:本文来自安全客,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。