观察总结
注册过程仅要求提供电话号码,不收集其他个人身份信息。该应用基于开源的BlueTrace/OpenTrace框架构建,最初于2020年3月在新加坡的TraceTogether应用中首次使用。
设备间的接触记录仅在本地存储,只有在卫生部门联系并要求时才会手动自愿上传。测试显示应用仅在进行必要通信时(如获取加密的前瞻性临时ID)才会与服务器交互。
追踪数据库分析未发现具有重大取证价值的信息。设备接触日志仅包含:1)对方设备的品牌型号 2)本机品牌型号 3)交互时间 4)接收信号强度指示器(RSSI)等接近度指标。其余数据均经过加密,没有卫生部门持有的密钥无法访问。
静态分析
应用版本1.0.0在运行iOS 13.2.2的iPhone 6S上进行分析,使用frida获取解密的应用二进制文件,并通过Hopper进行检查。这是一个用Swift编写的小型简单应用,代码量不多。
应用使用了OpenTrace库(BlueTrace的实现)。BlueTrace发布了详细说明技术方法的白皮书。
Info.plist分析
应用Info.plist包含权限请求的开发者描述:
- NSBluetoothAlwaysUsageDescription:应用与附近运行相同应用的手机交换包含匿名ID的蓝牙信号
- NSCameraUsageDescription:用于支持请求中上传照片
- NSPhotoLibraryUsageDescription:用于支持请求中上传照片
应用最低要求iOS 13,这一要求限制了无法运行iOS 13的旧设备用户使用。
文件系统取证价值
位于Library/Application Support/的tracer.sqlite数据库中的ZENCOUNTER表记录了设备间的交互信息:
| 列名 | 描述 |
|---|---|
| ZV | 对方设备使用的BlueTrace协议版本 |
| ZRSSI | 接收信号强度指示器 |
| ZTIMESTAMP | 接触发生时间 |
| ZTXPOWER | 传输功率 |
| ZMODELC | 设备品牌型号(中央设备) |
| ZMODELP | 设备品牌型号(外围设备) |
| ZMSG | 加密的有效载荷,base64编码 |
| ZORG | 外围设备注册的国家/卫生机构代码 |
前瞻性临时ID在Library\Caches\ca.ab.gov.ahs.contacttracing\fsCachedData{GUID}文件中找到。
未来工作
iOS钥匙链中存有多个条目,值得进一步研究,考虑到临时ID令牌生成在服务器端进行,这些条目的用途令人好奇。
更新说明
2020-05-02更新:OpenTrace项目使用GPL许可证可能存在问题,因为该许可证要求与其一起分发的所有内容也必须使用GPL许可证。