一加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
2
3
4
5
adb shell
su
dd if=/dev/block/by-name/persist of=/sdcard/persist_orig.img
LD_LIBRARY_PATH=/vendor/lib64/hw KmInstallKeybox Keybox_file Device_ID true rkp
dd if=/dev/block/by-name/persist of=/sdcard/persist_provisioned_device_id.img

提示:

1
2
3
4
5
6
7
8
9
10
11
12
qmi_client_send_msg_sync success for get dev_ser_num 0
Imei: 860000000000000
qmi_client_send_msg_sync success for get dev_ser_num 1
Imei: 860000000000000
Brand: OnePlus
Device: OP5D0DL1
Product: PJZ110
SerialNum: 00000000
Manufacturer: OnePlus
Model: PJZ110
TEE done
InstallKeybox is done!
  • 一加15修复ID步骤
    报错/system/bin/sh: KmInstallKeybox: inaccessible or not found,使用如下修复步骤:
    下载小米17的KmInstallKeybox

执行:

1
2
3
4
5
6
7
adb push KmInstallKeybox /data/local/tmp/
adb shell chmod 755 /data/local/tmp/KmInstallKeybox
adb shell
su
dd if=/dev/block/by-name/persist of=/sdcard/persist_orig.img
LD_LIBRARY_PATH=/vendor/lib64/hw /data/local/tmp/KmInstallKeybox Keybox_file Device_ID true true
dd if=/dev/block/by-name/persist of=/sdcard/persist_provisioned_device_id.img

提示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Remote Key Provisioning is used, keybox provisioning is not needed.
AttestationIdInfo {
brand: "OnePlus",
device: "OP60FFL1",
product: "PLK110",
serial: "XXXXXXXXXXXXXXXX",
imei: "860000000000000",
imei2: "860000000000000",
meid: "",
meid2: None,
manufacturer: "OnePlus",
model: "PLK110",
}
Device info provisioning complete.

获取备份好的persist,用于对比分析,以备不时之需:

1
2
adb pull /sdcard/persist_orig.img
adb pull /sdcard/persist_provisioned_device_id.img
  • 对比分析:
    对比发现,persist分区(挂载到/mnt/vendor/persist/)新增了如下目录,其下新增了很多个文件:
    目录:
    data/DdHdVQd1FIOARksZgXG27GJ1A5UjYCGhP-ZoGvseqsY_Alt
    文件(已过滤同名的.bak文件):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+Qs4yZ88j-k--YQj0Ve4
1YG3S3w9OuOU2238aVFF
4gHVa+HMBl2pMBOFougH
6LSJ6yDG9fVaJkc7902m
DdHdVQd1FIOARksZgXG27GJ1A5UjYCGhP-ZoGvseqsY_Alt
F-ieW+N4WSLMDdLl0Hqm
LPjoUbz2NHtyqKrfEcXr
Qem31TH4hFopHC8xflqH
dGgXvAOudYeJjDY-u8tO
jaJisXVMZ9uDpCoodjxT
js2MPVdkSoN224SiQCQ7
srUGPItwZnsd6c7CvQLB
z-CDKP4JsJUxT4GDEqd1
zppz2LHaIfP8aLFZsea6

修复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
2
3
4
5
6
Number of keyboxes 1
myDeviceID: dev
keyboxCtx.device_id.data: dev
KeyMaster Attestation Key Provisioning success for KeyIDdev
TEE done
InstallKeybox is done!

对比发现,persist分区(挂载到/mnt/vendor/persist/)新增了如下目录,其下新增了2个文件:
目录:
data/DdHdVQd1FIOARksZgXG27GJ1A5UjYCGhP-ZoGvseqsY_Alt
文件(已过滤同名的.bak文件):

1
2
5r5LgWqAGkK7pkbwDExz
DdHdVQd1FIOARksZgXG27GJ1A5UjYCGhP-ZoGvseqsY_Alt

仅修复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抗议