一、设备指纹
设备id:对于硬件设备(如,手机),通常有唯一 id 标识。
设备指纹:生成设备id的产品和技术,称为设备指纹。
要求:稳定性、唯一性、安全性、易用性、高性能
挑战:个人隐私安全约束&系统api问题
1.1 稳定性
稳定性的定义:同一设备升级或者部分要素的变更,设备指纹码不会发生改变,多重要素关联决策提升稳定性。
Android系统中稳定的设备参数:
采集项 | 含义 | 特性 |
---|---|---|
AndroidID | 首次启动是系统生成的随机数 | 不需要权限 恢复出厂会重置 |
IMEI/MEID | 设备码,移动/联通获取IMEI,电信获取MEID | 唯一性好 没有卡槽则取不到 |
IMSI | 手机SIM卡识别 | 换sim卡则改变 |
WiFi-MAC | 网卡MAC地址 | 唯一性 |
Bluetooth-MAC | 蓝牙MAC地址 | |
Serial | 设备串号 | |
Fingerprint | 设备的多个硬件信息拼接合成 | |
Storage | 内存空间 | |
AdvertisingID | 谷歌广告ID |
iOS系统中稳定的设备参数:
采集项 | 含义 | 特性 |
---|---|---|
IDFA | 首次启动是系统生成的随机数 | 不需要权限 恢复出厂会重置 |
IDFV | 设备码,移动/联通获取IMEI,电信获取MEID | 唯一性好 没有卡槽则取不到 |
DeviceName | 手机SIM卡识别 | 换sim卡则改变 |
WiFi-MAC | 网卡MAC地址 | 唯一性好 |
Boottime | 系统开机时间 | 重启会 |
Storage | 内存空间 |
1.2 唯一性
唯一性定义:通过多要素采集,通过条件概率、联合概率及置信度算法综合决策,保障不同设备生成的id不会重复,确保设备标识的唯一性。
1.3 安全性
安全性定义:前端通过对采集要素进行各种算法校验及外码加密传输,防止参数被篡改;通过对采集字段混淆、采集脚本混淆、外码动态过期等机制保障防盗用;后端通过对参数验签、接口防作弊识别保障安全可用。
要求 | 特性 |
---|---|
防篡改 | 采集要素算法校验 内外码加密传输 |
防盗用 | 客户端代码混淆 外码随时过期时间 |
防作弊 | 参数验签 采集要素完整性校验 |
JS代码加固技术(以Collberg为理论基础):
- 布局混淆:
- 删除无效代码:注释文本,调试信息,无用函数和数据,缩进和换行符
- 标识重命名:将常量名、变量名、函数名 修改为无意义,难以阅读的名字
- 数据混淆:
- 数字混淆:进制转换、数字拆解
- 布尔混淆
- 控制混淆:对程序的控制流进行变换,更改程序中原有的控制流达到让代码非常难以阅读和理解为目的。
- 不透明谓词
- 插入冗余代码
- 控制流平坦化
- 预防混淆:提高现有的反混淆技术破解代码的难度或检测现有反混淆器中存在的问题。
Android/iOS SDK加固保护:
- 变量名和函数名混淆:Proguard是一款Java语言的压缩器、优化器、混淆器,能够检测并删除未使用的类、变量、方法、属性;分析并优化方法的字节码;将实际使用的类、变量、方法重命名为无意义的短名称,使字节码更小、高效,并难以逆向分析。混淆不会改变源代码逻辑,只会使得反编译出来的代码不易阅读。Android支持在编译过程中的Proguard。
- 字符串混淆:将函数字符串进行加固,通过加密字符串使得难以找到上游函数
- Dex加固与抽取:将需要保护的代码单独生成Dex
- Dex抽取:将Dex字节码中的函数代码片段单独提取出来,生成一个方法结构体为空Dex,并将代码片段保存在so中
- LLVM
- 代码虚拟化:代码虚拟化技术是一种比Dex文件保护,Java2c技术更强的安全防护技术,可以更有效地对抗黑产逆向工程和破解,避免造成核心技术和风控逻辑被泄密的问题。
1.4 易用性
设备指纹生成服务支持云方式使用或本地化部署,JS无感知嵌入,SDK客户端接口方便易调用,服务器资源低消耗,普通服务即可支持。
1.5 高性能
合理设计,合理的资源使用支持高性能、横向扩展。高并发单节点支持5000PS,与业务流水弱相关,支持随业务量的水平横向扩展,99.9%的请求可以在100ms以内返回。
二、设备画像
2.1 画像的定义
通过SDK采集信息,将采集信息进行分析和挖掘,用以描述设备的特征。
2.2 设备画像
- 虚拟设备:刻画设备虚实,大多的黑灰产会利用虚拟设备充当真机进行低成本作恶
- 异常环境:刻画设备异常状态,比如当前是否已经root
- 风险工具:描述设备是否安装了风险的应用和工具
- 农场设备:挖掘设备的使用者背后所属的群组关系
一级分类 | 二级分类 | 含义 | 例子 |
虚拟设备 | 模拟器 | 运行在PC上的模拟器 | MUMU |
云手机 | 运行在云端的模拟器 | 华为云手机 | |
多开环境 | 多开运行应用 | 多开助手 | |
异常环境 | hook | hook劫持 | |
root | 安卓root,苹果越狱 | ||
调试模式 | 开启调试模式 | ||
辅助服务 | 开启辅助服务 | ||
工程模式 | |||
sim空 | |||
风险工具 | 改机工具 | 修改设备信息 | |
自动化脚本 | 自动化可编程的操作脚本 | ||
接码工具 | 用于接收短信验证码 | ||
网赚软件 | |||
VPN工具 | |||
多开工具 | 一键分身 | ||
群控工具 | |||
农场设备 | 农场设备/工作室设备 |
2.3 采集信息
要想获得以上的画像,就需要依赖SDK采集的信息
一般采集内容包含:
- 基本属性:品牌,机型,启动时间,出厂标识 等
- 硬件属性:cpu,内存,分辨率,亮度,篡改器,摄像头,电池,陀螺仪,蓝牙 等
- 网络相关:WiFi名称,WiFi-mac,sim卡,imei,信号强度,基站信息, 等
- 安装属性:自带应用,安装应用 等
- 其他属性:手机名称,输入法,idfa,idfv,系统语言 等
- 等等
2.4 欺诈检测方法
终端 | 方法 |
---|---|
Android | 通过安装包检测安装的作弊工具 使用多种方案采集同一字段信息识别作弊框架 hook识别作弊工具和模拟器 |
iOS | 通过通用hook原理识别技术检测运行的作弊工具 通过特定特征识别越狱环境 寻找特定的空间存储设备标识对抗hook改机对抗备份和抹机 |
Web | 识别浏览器端异常环境 通过特定特征识别JS是否被篡改或者正在被调试 通过浏览器特殊方式存储设备标识,防止存储的标识被删除 |
原文: