该技术仅可读取已经主动对你开放位置共享权限的账号,并非任意窃取他人定位,不存在可被黑客滥用的系统漏洞。
一名安全研究员完成了苹果「查找(Find My People)」私有协议完整逆向工程,在完全没有苹果硬件的前提下,依靠一台Linux主机,成功获取并解密好友实时共享的位置信息。
整个项目的初衷十分简单:研究者想写一套自动化脚本,当好友到达指定地点时,自动在Discord推送提醒。原本以为只是简单调用公开API,实际上手后才发现,苹果这套位置共享能力仅向自家硬件开放,公开iCloud网页接口并不支持读取好友位置,市面上也没有完整复现这套流程的开源项目,于是开启了为期一周的逆向分析工作。
研究者反编译苹果系统内部守护进程fmfd、findmylocated、searchpartyd,结合FindMy.py、pypush等开源工具,一点点还原整套加密通信链路。
想要拿到位置,第一步并不是直接读取坐标,而是让苹果服务器把这台Linux电脑识别成一台正规的苹果终端。
1. 账号认证特殊限制
普通iCloud登录令牌无法调用查找好友接口。苹果每一项服务都有独立权限凭证。研究者使用苹果内部GrandSlam登录协议完成账号校验,拿到IDS服务委托令牌。IDS是苹果底层设备身份与加密消息底层框架,iMessage、查找功能都建立在它之上。
2. 严苛的证书注册规则
想要生成合法设备身份,证书签名请求必须满足大量未公开硬性条件:2048位RSA密钥、SHA‑1签名,通用名称由账号配置ID做SHA‑1哈希生成,数据包还需要压缩为gzip包装的XML属性列表,任意一项格式不对,就会认证失败。
3. 服务注册不能直接注册查找功能
不能直接注册“查找好友”服务,需要先注册苹果alloy多路复用总服务,再挂载6个子服务,才能完成设备登记。
设备注册完成之后,最大难题来了:如何让苹果把已经建立好的位置共享密钥下发给这台凭空生成的Linux虚拟设备。
*不需要好友重新开启位置共享,不用修改原有共享关系
苹果原生设计中,用户新增一台苹果设备,服务器就会自动把已有共享关系的密钥下发给新设备。研究者通过发送`SubscribeAndFetch请求,设置distributeKeys`指令,触发苹果推送密钥流程。
密钥通过苹果推送APNs下发,包裹在`pair‑ec`加密信封内,经过ECDH校验、签名验证,保证消息来源真实。
这里有一处技术细节:消息信封使用P‑256椭圆曲线,但位置共享密钥却是P‑224曲线,两套加密体系相互独立。
拿到这份专属共享密钥后,就可以向苹果SearchParty服务拉取加密位置报文。服务器返回加密后的定位数据,在本地完成ECDH密钥交换、AES‑GCM解密,最终输出实时坐标、定位精度、时间戳,全程位置明文不会经过苹果服务器。
很多人看到“读取位置”,第一反应是苹果出现高危漏洞,这里需要厘清事实:
1. 只能读取已经主动分享给该Apple账号的位置,不能入侵、窃取任意陌生人定位;
2. 好友设备必须保持在线,才可以完成密钥分发;
3. 该过程属于协议逆向研究,不属于可被利用的系统漏洞,苹果无需发布补丁修复;
4. 研究价值:完整公开了苹果查找功能密钥分发、轮换底层逻辑,为第三方兼容客户端开发者提供参考资料。
资讯来源:zerotistic.blog技术博客、CyberSecurityNews