一般而言,一个公司会对每一个访问本公司服务的客户端创造一个指纹(包括web方式,APP,小程序)等来作为这个设备的唯一识别码,称为Device Fingerprint
流程为客户端采集
硬件信息:如固定信息,包括imei,mac,cpu,存储卡,动态信息,包括电池,传感器,内存,cpu。比如usb经常链接,电量常满,没有锁屏密码,设备倾斜角度不变的设备可能涉嫌群控,
软件信息:如版本,调试,rom,root。比如输入法是自定义输入法,有按键精灵。
环境信息: 比如有一些root操作。
网络信息:如IP,风险程序
然后交给后端,通过数据分析的方式,生成设备唯一ID,建立设备风险画像和风险标签。来防范风险。
(原来唯一ID可以参考android的imei,iso的idfa,但是随着隐私管理越来越严格,获取这种唯一标志变得越来越困难)
为了防止黑产直接修改指纹,客户端SDK会使用如下技术:
- java代码native化
- native代码虚拟化和混淆
- 反调试、反注入,内存校验,hook校验
服务器会给每个APP下发一个唯一编码,每个客户端会根据这一个编码在每日的第一次启动时上报指纹(一些公司甚至每半个小时就要上报一次)。
Android10以上,禁止非系统应用访问用户不可更改的ID,包括IMEI 、Serial、USB 序列号等,AndroidID恢复出厂会变、可手动修改、不同签名APP取到不一致。
iOS14以后,App默认无权限读IDFA,需要用户手动授权。
一个好的设备指纹
- 唯一性:不同的设备应该拥有不同的ID
- 稳定性:同一个设备ID应该永远不变。
- 完整性:不能篡改伪造
黑产的攻击方式
真人真机:金融欺诈/薅羊毛
假人真机:流量作弊/恶意养号
假人假机:虚假注册/模拟登陆/DDOS攻击