一加13/15使用KmInstallKeybox修复attestation key+widevine RKP+attestation RKP测试
一加手机高通平台的机型,在解锁BootLoader后,Attestation Key无法使用. 我们试试公开的修复方法.
背景
一加手机高通平台的机型,在解锁BootLoader后,Attestation Key无法使用.
网上有公开使用KmInstallKeybox的写key方法Reprogram-TEE-on-Qualcomm-devices,我们在一加13、15进行测试.
测试过程
测试对象
| 类型 | 一加13 | 一加15中国大陆版 | 一加15国际版 |
|---|---|---|---|
| Attestation Key(TEE) | 支持 | 支持 | 不支持 |
| Attestation RKP(TEE) | 支持 | 支持 | 支持 |
| Attestation RKP(StrongBox) | 支持 | 支持 | 支持 |
| WideVine L1 Key(TEE) | 不支持 | 支持 | 不支持 |
| WideVine L1 RKP(TEE) | 支持 | 不支持 | 支持 |
测试目的
在unlock状态下,不写ID+Key的状态,使用KmInstallKeybox仅写ID的状态,仅写Key的状态,写ID+Key的状态,lock回去的状态.
测试条件
- 安装密钥认证,DRM Info,ExoPlayer demo.
- 【中国大陆版】开发者选项,打开禁止权限监控(root条件下也可以移除cn.google.services feature).
- 【中国大陆版】打开GMS.
- 【位于中国大陆】科学上网.
unlock前状态:完全正常
- Attestation Key、WideVine L1 Key正常:支持的机型均正常.
- Strongbox RKP正常:密钥认证,打开使用安全模块,成功获取RKP证书.
- TEE RKP正常:密钥认证,关闭使用安全模块,正常获取RKP证书.
- WideVine L1 RKP正常:ExoPlayer demo正常播放widevine L1视频,DRM Info,Security Level显示L1,SystemID显示五位数.
unlock后+修复前:
- Attestation Key异常:支持的机型不正常、无法使用.
- WideVine L1 Key正常:支持的机型均正常.
- Strongbox RKP正常:密钥认证,打开使用安全模块,成功获取RKP证书.
- TEE RKP异常:密钥认证,关闭使用安全模块,无法获取RKP证书.
- WideVine L1 RKP异常:ExoPlayer demo无法播放widevine L1视频,DRM Info,Security Level显示L1,但SystemID显示2147483647.
修复ID
- 一加13修复ID步骤
执行
1 | adb shell |
提示:
1 | qmi_client_send_msg_sync success for get dev_ser_num 0 |
- 一加15修复ID步骤
报错/system/bin/sh: KmInstallKeybox: inaccessible or not found,使用如下修复步骤:
下载小米17的KmInstallKeybox
执行:
1 | adb push KmInstallKeybox /data/local/tmp/ |
提示:
1 | Remote Key Provisioning is used, keybox provisioning is not needed. |
获取备份好的persist,用于对比分析,以备不时之需:
1 | adb pull /sdcard/persist_orig.img |
- 对比分析:
对比发现,persist分区(挂载到/mnt/vendor/persist/)新增了如下目录,其下新增了很多个文件:
目录:data/DdHdVQd1FIOARksZgXG27GJ1A5UjYCGhP-ZoGvseqsY_Alt
文件(已过滤同名的.bak文件):
1 | +Qs4yZ88j-k--YQj0Ve4 |
修复ID后再次测试
- Attestation Key异常:支持的机型不正常、无法使用(断网、不获取RKP情况下,但联网可获取RKP证书).
- WideVine L1 Key正常:支持的机型均正常.
- Strongbox RKP正常:密钥认证,打开使用安全模块,成功获取RKP证书.
- TEE RKP恢复正常:密钥认证,关闭使用安全模块,正常获取RKP证书.
- WideVine L1 RKP恢复正常:ExoPlayer demo正常播放widevine L1视频,DRM Info,Security Level显示L1,SystemID显示五位数.
仅修复Key
恢复persist,参考上述步骤,仅替换执行KmInstallKeybox命令的参数,传入合法的keybox.xml和其中的deviceid:
1 | LD_LIBRARY_PATH=/vendor/lib64/hw KmInstallKeybox Keybox_file Device_ID false |
提示:
1 | Number of keyboxes 1 |
对比发现,persist分区(挂载到/mnt/vendor/persist/)新增了如下目录,其下新增了2个文件:
目录:data/DdHdVQd1FIOARksZgXG27GJ1A5UjYCGhP-ZoGvseqsY_Alt
文件(已过滤同名的.bak文件):
1 | 5r5LgWqAGkK7pkbwDExz |
仅修复Key后测试
- Attestation Key半正常:ID证明不可用.
修复Key+ID
恢复persist,参考上述步骤,仅替换执行KmInstallKeybox命令的参数,传入合法的keybox.xml和其中的deviceid:
1 | LD_LIBRARY_PATH=/vendor/lib64/hw KmInstallKeybox Keybox_file Device_ID true |
对比发现persist分区(挂载到/mnt/vendor/persist/)新增了的目录和文件就是上述单独修复过程的合集.
修复Key+ID后再次测试
- Attestation Key正常:正常可用(断网、不获取RKP情况下),但依赖写入的KEY的有效性.
- WideVine L1 Key正常:支持的机型均正常.
- Strongbox RKP正常:密钥认证,打开使用安全模块,成功获取RKP证书.
- TEE RKP恢复正常:密钥认证,关闭使用安全模块,正常获取RKP证书.
- WideVine L1 RKP恢复正常:ExoPlayer demo正常播放widevine L1视频,DRM Info,Security Level显示L1,SystemID显示五位数.
lock bootloader后再次测试:
完全正常,未受到任何影响.
分析与总结
命令解释
一加13的KmInstallKeybox:
- KmInstallKeybox Keybox_file Device_ID true:写KEY+ID,将Keybox_file中Device_ID的密钥和当前读取的设备信息写入TEE.
- KmInstallKeybox Keybox_file Device_ID false:写KEY,将Keybox_file中Device_ID的密钥写入TEE.
- KmInstallKeybox Keybox_file Device_ID true rkp:写ID,仅将当前读取的设备信息写入TEE,无需传入合法的keybox.xml和其中的deviceid.
小米17的KmInstallKeybox:
- KmInstallKeybox Keybox_file Device_ID true:写KEY+ID,将Keybox_file中Device_ID的密钥和当前读取的设备信息写入TEE.
- KmInstallKeybox Keybox_file Device_ID false:写KEY,将Keybox_file中Device_ID的密钥写入TEE.
- KmInstallKeybox Keybox_file Device_ID true true:写ID,仅将当前读取的设备信息写入TEE,无需传入合法的keybox.xml和其中的deviceid.
具体原理可参考github上的KmInstallKeybox相关源代码,以及该命令的帮助信息。
收益对比:
| 类型 | LOCK | UNLOCK默认 | UNLOCK+修复ID | UNLOCK+仅修复KEY | UNLOCK+修复KEY+ID | 回锁 |
|---|---|---|---|---|---|---|
| Attestation Key(TEE) | 正常 | 异常 | 异常,但可使用RKP替代 | 半正常,ID证明不可用 | 正常,但依赖写入的KEY的有效性 | 恢复出厂 |
| Attestation RKP(TEE) | 正常 | 异常 | 正常 | 异常 | 正常 | 正常 |
| Attestation RKP(StrongBox) | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
| WideVine L1 Key(TEE) | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
| WideVine L1 RKP(TEE) | 正常 | 异常 | 正常 | 异常 | 正常 | 正常 |
总结:
总结下来,在可承担风险(KEY损坏)的条件下:
- 一加13或者非中国大陆的一加新机,需使用WideVine L1的玩家:
可在不影响lock状态的KEY、也没有注入泄露的随时可能被吊销的密钥的情况下,修复ID,以实现Attestation RKP(TEE)和WideVine L1 RKP恢复正常,正常播放WideVine L1视频. - 一加15中国大陆版,强烈需要Attestation RKP(TEE)的玩家:
可在不影响lock状态的KEY、也没有注入泄露的随时可能被吊销的密钥的情况下,修复ID,仅新增Attestation RKP(TEE)恢复正常,但仍然只能证明自己的设备是unlock状态,针对使用StrongBox API的应用来说,与Attestation RKP(StrongBox)效果一致:但对未适配strongbox且未检查unlock状态的应用有用.
备注:
其他机型建议不要轻易尝试,特别是小米机型,有网友反馈执行KmInstallKeybox后会影响lock状态的key.
删除persist的新增文件夹后,测试attestation key依然可用,说明key已经写入RPMB,未发现删除方法.
相关链接:
密钥认证和ID认证
使用密钥认证功能来验证由硬件支持的密钥对
Play Integrity API
Keystore Key Attestation
RKP远程密钥配置
Upgrading Android Attestation: Remote Provisioning
TEE损坏的说明:TEE环境并没有损坏,只是出厂写入的密钥不可用
Play Integrity API抗议