来源:https://mp.weixin.qq.com/s?__biz=MzA4OTAwMjY2Nw==&mid=2650191152&idx=1&sn=56d1b66ed696055ab8efeddd23a4e368&chksm=882392f4bf541be2340f691cba093173faf42266f4c41fcfe8ae9a8f1d188d8989ee9bb050d3&scene=21#wechat_redirect

    背景

    当你手机APP上刷着某些视频并多停留几秒,后续再刷视频的时候,是否有感觉到更多是推送同类型的视频;
    当你在某APP搜索某产品的时候,后面在启动APP时候,是否能感觉到更多给你推送相关的产品信息;
    当你更换手机的时候,在登录同一个APP的时候,是否会有提示你是新环境登录需要特别验证才能登录;
    当你手机上安装一些作弊软件,在进行支付的时候,是否会有提示你当前环境不安全不允许支付或支付不成功;
    这些的背后都是依靠哪些技术进行支撑实现呢?这些场景下都离不开一个重要的设备指纹技术,下面就梳理设备指纹技术的细节。

    理论基础

    设备指纹是指可以用于唯一标识出该设备的设备特征或者独特的设备标识。
    设备指纹围绕着设备的唯一ID、设备环境风险特征、设备历史风险标签等维度对设备进行全方位刻画,识别设备风险、并且透传设备风险特征。
    设备指纹在同一设备中的不同应用,必须具备设备ID不变,同一设备卸载重装APP应用,设备ID同样要保持不变,在IOS设备中重置IDFA后,设备ID不变改机软件修改属性后,设备保持ID不变。
    设备指纹需要考虑设备指纹唯一标识的稳定性、唯一标识的唯一性、设备风险标签的精准度、设备风险标签的准召率、设备指纹所需的隐私权限、微行为无感识别能力、设备终端覆盖识别。
    设备指纹的关键用途:设备信息唯一性、渠道流量检测、风险设备识别、通用风控策略。
    image.png
    (上图来源网络)

    技术分析

    采集设备信息需要关注的问题:用户设备是真实设备?哪个设备信息是稳定?Android系统大版本升级是否导致权限变动?采集的数据是否符合隐私合规政策?采用什么算法来计算出唯一ID?新APP上线所有设备ID是全新?
    技术实现流程:通过采集客户端的特征属性信息并将其加密上传到云端,然后通过特定的算法分析并为每台设备生成唯一的ID来标识这台设备。
    设备指纹必须具备:稳定性、唯一性、安全性、易用性、高性能。
    设备环境风险特征:识别模拟器环境、多开、ROOT、篡改设备参数、脚本,等异常环境特征。具有稳定性高,性能高。
    浅谈设备指纹技术和在风控中的应用 - 图2

    通常情况下,设备指纹采集到用户的设备数据后,数据会通过异步方式先上传到业务的服务器上,然后再通过代理服务端进行转发到对应设备指纹的服务端。这样也是为了保证数据的安全性,客户端采集数据功能防止被剥离,从而采集不到设备数据。采集的数据一般通过json格式加密数据进行上传。
    浅谈设备指纹技术和在风控中的应用 - 图3

    设备指纹上传一般采用URL的POST请求,并集成json格式,并且所采集的字段信息中会有一些字段是无用的,有一些字段适用于对json信息采用强校验的混淆信息。
    设备指纹中设备风险识别的微行为常用的属性:电池状态、重力传感器、加速度传感器状态、联网状态、USB状态、触摸轨迹、压感、按压时长、剪切板。
    设备指纹的SDK主要以java代码和C、C++代码为主,java代码部分是以aar包或jar包方式存在,C\C++代码主要以SO方式存储的。例如某易的设备指纹就是以aar包(NEDevice-SdkRelease_v1.7.0_2022xxxxxx.aar)单独方式存在,某盾的设备指纹以aar文件(fraudmetrix-xxx.aar)和so文件(libtongdun.so)两者相结合存在,某美的设备指纹以aar包(smsdk-x.x.x-release.aar)和so文件(libsmsdk.so)相结合存在。
    设备指纹主要是通过集成到APP中的SDK,还有小程序的SDK,通常情况下是采用aar包方式进行提供的SDK,还有就是强度较高的是通过aar包和SO文件进行结合集成的设备指纹SDK。将关键的采集信息集成到SO中代码中实现,并且SO文件采用虚拟机保护。
    下面是某设备指纹以aar形式的,它关键代码都是java实现的。并且java代码利用proguard 混淆规则进行对aar的class类进行混淆类名而已,并没有混淆到函数名称和变量名称,字符串信息。
    浅谈设备指纹技术和在风控中的应用 - 图4

    下面是某设备指纹的java代码和C++代码部分,java代码和C++代码都采用了虚拟化保护技术进行保护。
    浅谈设备指纹技术和在风控中的应用 - 图5
    浅谈设备指纹技术和在风控中的应用 - 图6
    浅谈设备指纹技术和在风控中的应用 - 图7

    设备指纹读取用户信息,通常需要涉及到向用户申请权限的情况,所以在android的AndroidManifest.xml配置文件中通常有一系列的权限申请。
    浅谈设备指纹技术和在风控中的应用 - 图8
    (上图只是申请权限的一小部分)
    浅谈设备指纹技术和在风控中的应用 - 图9

    设备指纹合规

    设备指纹应用中,在采集用户设备指纹信息的过程,首先必须确保用户APP中有《用户隐私政策》,并且在首次启动APP时就弹出《用户隐私政策》获得用户的同意,不得默认用户已勾选。并且确保只有用户同意的时候才可以进行对用户信息的采集。
    根据《网络安全法》等相关法律法规要求,APP应当在隐私政策中向最终用户告知收集、使用、于第三方共享最终用户个人信息的目的、方式和范围,并征得最终用户明示同意才可以采集用户信息。
    设备信息采集需要遵循必要最小化低频采集非敏感信息原则,在采集用户属性时候,不应采集用户行为和应用列表、传感器状态、通讯录、相册等敏感信息,采集这些属性容易出现不符合隐私合规政策。支持按需采集和合规上架指导,采集信息 合规和安全加固,不触碰用户隐私,不会被黑产破解,兼容性好。
    设备指纹SDK的初始化时机,在安装后首次启动时,并且只有在用户同意隐私协议后,才进行设备指纹SDK初始化。如果用户没有同意隐私协议不可进行采集数据。
    风控场景分析

    设备指纹的在游戏应用场景中主要风控维度:手机设备、游戏账号、账号行为、账号动机。
    设备指纹识别设备的风控特征:模拟器、协议刷数据、脚本外挂、设备改机、多开工具、云手机等。
    设备指纹识别游戏账号的风控特征:批量注册游戏账号、猫池、接码手机、通讯小号等等。
    设备指纹识别游戏行为的风控特征:批量养号、黄牛养号、鱼塘账号。
    设备指纹识别账号动机的风控特征:账号的买卖、游戏的代练等
    设备指纹识别风险识别重点在于:注册、登录、营销、交易、充值、渠道推广等业务场景中,识别出虚假注册、盗号、养号、薅羊毛、虚假推广、作弊行为,然后对应采取一定的对抗策略方案。
    游戏中黑灰产破解移动端的技术及工具不断在更新变化发展,设备指纹中核心的技术攻防点主要围绕,root(非法读取文件,反安全检测)、自动化工具(批量注册、活动作弊)、模拟器(自动注册小号、秒杀)、多开(虚假作弊、养号、)、改机、群控(薅羊毛、虚假流量),app重打包(植入广告、破解功能限制)等问题。
    通过基于设备指纹技术,可以实现IP风险画像、风险情报、邮箱风险画像去识别游戏的黑灰产行为,然后对游戏黑灰产进行重点打击
    浅谈设备指纹技术和在风控中的应用 - 图10
    (上图来源网络)
    设备指纹思考

    一个人常用设备的总是有限,一般正常情况下一段时间内不会超过5个,因此可以通过这些信息进行作为风控的策略,而设备指纹中关键的一个采集点是网络相关信息的采集,通过采集网络相关信息,可以判断出同一网络下的用户的设备数量。
    一个好的设备指纹必须具备:1.可以灵活定制化,可以根据不同的业务需求提供灵活的接口;2.高准确性,对设备唯一码必须准确率足够高;3.性能卓越,设备指纹的sdk不能影响到APP的性能;4.系统兼容性好,需要兼容到android4.0到android 13的所有系统。
    如果作为开发者,开发一个设备指纹sdk中需要综合考虑的:LaunchTime、闪退率、体积大小、网络消耗情况。
    设备指纹技术存在一定的被动性。黑灰产研发者处在暗处,公司的业务在明处,在什么时间段,采用什么方式的攻击方式,都是黑灰产攻击者决定的,这一点业务安全人员也是非常头疼。更进一步,黑灰产可以不断试错通过分析设备指纹技术采用的算法,尝试采用新的攻击方式绕过已有加解密算法,就可以达到新的攻击目的。设备指纹技术对抗过程中是存在一定的滞后性。