事情发生在今年年初。
当时我的淘宝账号被系统判定存在“恶意行为”,随后设备似乎进入了风控名单,88VIP 客服直接说无法处理并且挂电话,2000 分的淘宝分账号,续费了 88VIP 后不到三天就出了这个问题,我没有继续申诉,而是直接卸载了淘宝以及相关应用。
前几天因为需要查看几件商品,我重新安装并登录了淘宝。出于好奇,我查看了一下账号登录日志,却发现了一个让我比较意外的现象:
在过去半年里,我的 iPhone 一直存在登录记录。
这些记录并不是连续产生的,而是以两三天一次、时间随机的形式出现。可以确定的是,这段时间淘宝早已被卸载,而且我本人没有进行过任何登录操作。
最开始我怀疑是否存在账号泄露或其他设备登录的情况,但进一步排查后发现,登录设备信息始终显示为同一台 iPhone 。
随后我查阅了一些资料,并进行了测试,发现问题可能与 iOS 的 Keychain (钥匙串)机制有关。
很多开发者会将设备标识符( UUID )、登录状态或其他身份信息存储在 Keychain 中。与普通 App 沙盒数据不同,Keychain 默认不会因为 App 被卸载而自动删除。因此即使用户删除应用并重新安装,开发者依然有机会识别出这是同一台设备。
在测试过程中我发现:
- 删除淘宝 App 并不会清除相关标识;
- 即使删除所有淘宝系 App ,部分标识仍可能保留;
- 用户无法直接手动清理指定 App 写入的 Keychain 数据;
- 在部分情况下,需要先退出账号,再重启设备,相关状态才会发生变化。
后来我咨询了一位从事风控工作的朋友。他认为淘宝很可能并不仅仅依赖 App 本地生成的 UUID ,而是结合 Keychain 、设备指纹以及服务端风控信息进行识别。
如果设备已经被关联到某些风控状态,仅仅卸载重装应用通常无法完成“身份重置”。理论上需要:
- 抹掉设备全部内容;
- 不恢复旧备份;
- 停止同步 iCloud 钥匙串;
- 以全新设备方式初始化;
才能获得完全新的设备身份环境。
关于 Keychain 的一个典型用途,是所谓的“防卸载标识”。
开发者会把设备唯一标识写入 Keychain 。这样即使用户删除 App ,重新安装后仍然可以识别为同一设备。这个机制原本常用于游客账号恢复、防作弊和风控系统。
让我感兴趣的是:
如果一个应用在被卸载后,仍然能够通过系统保留的数据持续识别同一设备,那么它在多大程度上仍然保留着用户身份关联能力?
此外,淘宝登录日志中持续出现的“设备登录记录”究竟是客户端主动行为、服务端状态刷新,还是其他机制导致的表现,也值得进一步研究。
不知道论坛里有没有做过 iOS 风控、移动安全或者逆向分析的朋友遇到过类似情况,欢迎一起讨论。