详解设备指纹核心算法

1年前 (2023) 程序员胖胖胖虎阿
179 0 0

大部分风险都来自于身份的不确定性。

比如我们熟知的网络钓鱼、薅羊毛、账号窃取、注册登录等带来的盗用和欺诈都是其身份不确定性造成的直接后果。那么,如何保证你的身份确定且黑灰产不会轻易盗取或者模仿呢?

设备指纹便是一个不错的选择。此前顶象在《从Cookie到设备ID,从算法到云+端!全面盘点设备指纹技术的五代发展》一文中详细介绍过设备指纹技术的迭代,感兴趣的朋友可以回顾下。从设备指纹的概念可知,设备指纹是指通过用户上网设备的硬件、网络、环境等特征信息生成设备的唯一标识,而衡量设备指纹优劣的最重要指标便是唯一性和稳定性。

本文就从设备指纹的稳定性和唯一性说起。

要保证设备指纹的稳定性唯一性并不简单

设备指纹作为标识手机或者浏览器的唯一 ID,首先要做的是对用户的设备进行数据采集,但数据采集对于设备指纹技术而言并不是很容易。

首先是法律层面对于用户个人信息数据的保护权限上升。近年来出台的对个人信息数据的保护条款对于数据采集的权限一直在持续收紧,具备设备唯一标识作用的特征可采集率越来越少,一定程度上加大了设备指纹技术的难度。以前采集设备指纹唯一标识的方法可使用MAC地址(以太网物理地址)、IMEI(移动设备识别码)、IDFA(广告标识符)等类似标识即可唯一标识一个设备。

随着系统的不断更新迭代,加之与黑灰产的对抗逐渐白热化,各种作弊手段和工具的出现,设备上的各种参数都可以被篡改和伪造,通过一键抹机,变成一台新的设备,这就影响了对设备唯一标识的效果。此时就需要设备指纹技术采集更多的信息来保证设备指纹的唯一性和稳定性。以iOS 系统为例,iOS 14以后IDFA采集需要用户授权才可以,Serial、IMEI等都存在类似情况。这种变化对设备指纹的计算带来了影响,生成一个稳定且唯一的标识会越来越复杂。
详解设备指纹核心算法
其次是异常数据增多。不同的手机型号和操作系统版本会导致采集到的数据有不同的特性。尤其是安卓,品牌多,操作系统版本多,各类ROM多,数据的可采集性不统一。

以IMEI为例,以下是实际采集到的一些异常数据。
000000000000000
88888888888888
666666666666667
111111111111119
A000005EAAACCC
868686868686863
444646464643346
100000000150705
010000000053015
A0000060A60A0B
A0000070000AAB

同样异常的MAC地址。
00:00:00:00:00:0a
02:00:00:00:00:00
00:00:00:00:00:01
00:00:00:00:00:10
6a:aa:6a:aa:6a:6a
00:02:00:00:00:00
00:00:00:80:00:00
10:00:00:00:00:12
f2:0f:f0:02:f0:22
32:12:31:23:32:32
66:00:44:40:06:66
c0:00:00:00:00:d0
00:00:00:00:00:12
04:00:00:50:54:04

这些异常数据或来自被篡改的设备,或是异常的ROM,或者是特殊的机型设备,其他诸如android_id、Seria也都会存在这种情况。如果不考虑处理这些异常数据,指纹的效果肯定会受到影响。所以采集哪些数据用于指纹计算,数据有哪些异常情况,需要有大数据支撑才能制定合理的算法。

并且,指纹计算算法并不是一成不变的,新版本操作系统发布,新型号手机,这些随时都有可能导致数据采集出现异常,这需要设备指纹具备持续性的对异常数据的监测能力。最后是黑灰产的作弊手段影响。设备指纹在风控领域是对抗黑灰产的一个基础工具,所以黑灰产必然会想尽办法来绕过指纹的追踪和检测。常见的方式是通过各种工具来修改设备指纹使设备指纹发生改变,即人工篡改。
详解设备指纹核心算法
设备信息的篡改除了可能会影响指纹计算,还有可能会造成指纹数据污染。大量篡改后的错误数据如果和正常用户的设备产生关联,会导致正常用户的数据受到不可控的影响,而且这种数据想从系统中剔除干净是比较困难的。

基于特征信息精准匹配保证设备指纹稳定性

那么,这就要求设备指纹做出改变,顶象的做法是通过云+端模式,补足信息采集短板,显著增强设备攻防对抗的时效性和安全性,综合各行业的攻防经验和风险数据沉淀,当新的攻击方式和特征出现时,设备指纹能够更快的感知应对和准确识别。具体到设备指纹的稳定性和唯一性上,如何应对呢?

我们先来看稳定性。稳定性计算逻辑是通过采集到的数据,构建多维度的设备画像,每次设备重新上报数据后,通过算法匹配到最相近的设备,如果找到则使用找到的设备指纹,反之则生成新的设备指纹。而之所以要强调设备指纹的稳定性,是因为很多操作会导致设备的特征信息发生变化比如App卸载重装、权限变更、重置广告标识符、机器重启、系统升级、修改设备参数、恢复出厂设置等等。

想要在以上这些情况下计算出一个稳定的设备唯一标识,当然不可能只依赖一两个设备参数,需要更全面的设备信息来构建一个设备画像。而要保证设备指纹的高稳定性,则需要采集多维度数据,进行区分度、稳定性、变化周期等方面的全方位分析,对特征特性的准确分析帮助算法更合理的利用特征。以CPU,存储,内存等特征为例,其具备非常好的稳定性,但区分度非常差。所以这类特征不适合单独使用,需要和其他特征结合在一起形成互补。
详解设备指纹核心算法
这就需要我们进一步观察其特征稳定周期(特征保持不变的周期大小)和特征稳定变化的难度(改变特征的难易程度),基于特征的不同特性来决定如何使用特征,选取一个特征时,其至少要在某个指标上有明显优势。
详解设备指纹核心算法
综上,不难看出,要保证设备指纹的稳定性需要基于不同特征的不同特性,为设备构建多个设备画像(短期和长期),首先要通过相似性搜索算法先定位出一批相似设备,再用精准匹配算法准确匹配。
详解设备指纹核心算法
其基本算法(SimHash)过程如下:

1、从采集设备信息中选取部分作为特征池;

2、根据采集信息的区分度、稳定性、变化难度等,对特征相应处理后进行hash 编码,比如将多个区分度弱的特征拼接后再进行hash 编码,得到编码向量C;

3、根据特征的特性,设定编码向量C的权重W,(注意:权重W可基于大数据学习得到,亦可根据专家经验设定,不同操作系统版本的设备,权重W可以不一样);

4、将编码向量C与对应的权重W相乘,得到特征向量C’;

5、将所有特征向量C’相加得到一个特征向量,二值化(大于0的值变为1,小于0的值变为0)后得到最后的索引D;

6、将索引D与服务器中的其他设备索引进行相似度计算,(计算海明距离—在信息编码中,两个合法代码对应位上编码不同的位数称为码距,又称海明距离。两个码字对应比特取值不同的比特数称为两个码字的海明距离。

例如10101和00110从第一位开始依次有第一位、第四、第五位不同,则海明距离为3)返回相似度在阈值以内的设备信息作为候选池,进行进一步的精准匹配。
详解设备指纹核心算法
需要注意的是,设备指纹稳定性的效果依赖于是否选取了充分且合适的特征、是否对每个特征的特性有正确的理解、是否采用了符合数据获取现状的合适匹配算法。

算法更新+碰撞检测=设备指纹唯一性“法宝”

再来看下唯一性。唯一性是设备指纹非常关键的一个指标。设备指纹作为一项基础服务,是众多数据服务的核心要素,比如用户常用设备、风控中依赖设备的策略、广告唯一标识等。如果指纹唯一性计算出现偏差,即碰撞,可能会引起严重的误判。
详解设备指纹核心算法
比如碰撞后,可能会判断出设备出现在陌生地区,关联陌生账号,导致误处罚;如果出现大面积碰撞,会导致风控拦截大批正常用户。碰撞会直接导致指纹可信度下降,使得线上业务不敢再依赖基于指纹的判断。

所以一个好的设备指纹,唯一性上一定不能有大的偏差。而导致碰撞的原因则可能因为某些应该具备唯一性的重要设备特征出现不唯一,亦或是特征选择不当,多个特征组合后唯一性标识不够,当然也可能是匹配算法问题。因此,在保证设备指纹的唯一性层面,不仅需要具备实时动态更新的算法匹配,更要注重碰撞检测。
详解设备指纹核心算法
首先,就算法更新而言,日常的异常数据的检测仅靠应用是不够的,需要离线仓库定期分析当前的数据,对出现的异常特征可以及时发现并提取出来,然后反馈给线上进行算法优化。

就碰撞检测能力而言,顶象也是获得了专利认证。顶象设备指纹的碰撞检测能力,可避免异常数据进入影响指纹数据。采用设备的uuid不可逆原理来检测碰撞。对于同一台设备,多次采集数据进行计算,uuid在这期间可能会发生变化,变化以后则不可能变回以前的uuid,如果一台设备在某次计算后出现历史uuid,则表明本次计算不可信,出现了设备碰撞情况。
详解设备指纹核心算法
其基本原理是:

1、设备首次使用App,采集设备数据上报时,指纹服务器下发一个凭据,缓存在客户端,首次下发的凭据称为凭据X1;

2、设备再次使用App,采集设备数据上报时,先检查是否有缓存客户端在的凭据X1;若有,则携带上凭据X1;若没有,则认为是由于清理缓存导致凭据X1被删除,指纹服务器下发凭据X2,凭据X2与凭据X1不相同;

3、在生成凭据X2以后,采集设备数据上报时再次出现凭据X1,则判断设备指纹出现了碰撞;

4、在多次清理缓存的情况下,还包括按出现顺序依次排列的凭据X3、凭据X4…凭据XN,只要检测到凭据XN之后出现过此前曾出现的凭据X1至凭据X(N-1)中的任一个,则判断设备指纹出现了碰撞;

当然,设备的碰撞检测也有其他方式可以实现,但不适合沿用指纹本身的计算思路了,因为碰撞时应用已经‘犯错’了,所以上面介绍的以一个‘旁路’的方式来检测会更适合。此外,顶象设备指纹的计算流程涵盖了数据解析,特征选取,算法匹配,碰撞检测等。
详解设备指纹核心算法
同时,针对私有化用户,顶象提供防御云服务,将云服务设备指纹收集到的最新计算算法同步到防御云平台,私有化指纹可以保持和云服务同步更新。
详解设备指纹核心算法
整体来看,设备指纹在唯一性和稳定性层面,不仅做到了防止采集逻辑被破解或数据伪造,从数据采集源头上保证真实性和准确性,并且针对黑灰产对设备参数进行篡改伪造(篡改IMEI、MAC地址、AndroidId、SIM卡信息、机型、品牌等),或是禁用、清除缓存和cookie等风险,能够保证设备指纹保持不变,稳定性保持在99%以上,为每一台设备生成的设备指纹ID全球唯一,不可被篡改,唯一性上保持在100%,响应时间小于0.1秒、崩溃率小于1/10000。

同时,设备指纹作为顶象防御云的一部分,集成了业务安全情报、云策略和数据模型,通过对上网软硬件生成唯一指纹信息,支持安卓、iOS、H5、小程序,可有效侦测模拟器、刷机改机、ROOT越狱、劫持注入等风险。

版权声明:程序员胖胖胖虎阿 发表于 2023年9月4日 上午4:40。
转载请注明:详解设备指纹核心算法 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...