首页
社区
课程
招聘
[原创]Key Attestation 密钥认证流程和饶过思路
2023-12-7 19:20 11487

[原创]Key Attestation 密钥认证流程和饶过思路

2023-12-7 19:20
11487

bypassKeyAttestation

目录

Key Attestation 密钥认证

官方文档介绍: https://source.android.com/docs/security/features/keystore/attestation,

个人理解,硬件提供加密功能,同时该硬件模块也会反映设备的软硬件的安全环境。

不想自己实现一套代码的,可以直接用开源的:

https://github.com/vvb2060/KeyAttestation

功能入口 https://github.com/vvb2060/KeyAttestation/blob/master/app/src/main/java/io/github/vvb2060/keyattestation/home/HomeViewModel.kt doAttestation方法:

获取证书链

解析证书链

对证书链进行校验

解析extension,获取设备的状态

格式规范文档: https://source.android.com/docs/security/features/keystore/attestation#attestation-extension

简单看下解析extension的内容

解析后部分数据

Attest version: Keymaster version 4.1
Attest security: StrongBox
Verified boot Key: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= (base64)
Device locked: false
Verified boot state: Unverified

//Hash for boot
//Hashtree metadata for system
//Hashtree metadata for vendor
Verified boot hash: nDqAWissOCsw+aWEm7cEcAkCvQngEE+ypQ75UWakxt4= (base64) 

饶过手段

思路比较简单,替换到整条证书链为一个正常设备的证书链即可:

  1. 可以通过hook java层代码
  2. 写一个magisk插件 https://github.com/doom-man/bypasskeyattestation

hook java层已经比较熟练了,由于后续期望强化对异常设备的检测,大多对抗检测的工具又是走magisk插件实现的,打算用magisk插件实现一遍。

参考 https://github.com/chiteroman/PlayIntegrityFix 大佬写的插件进行学习,对大佬拙劣的模仿。

准备证书

将证书文件移动/data/local/tmp 下,并提供读权限;

注入目标进程

代码入口在cpp/main.cpp

替换证书链

CustomKeyStoreSpi.java

替换后效果

结语

我认为设备异常判定,即使各大厂商去自研解决方案,也应该去学习了解系统层面提供的安全检测手段 和 官方在用的判定方案。


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2023-12-8 10:41 被pareto编辑 ,原因: 调整图片
收藏
点赞7
打赏
分享
最新回复 (13)
雪    币: 19431
活跃值: (29097)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-12-8 10:26
2
1
感谢分享
雪    币: 6369
活跃值: (1263)
能力值: ( LV4,RANK:156 )
在线值:
发帖
回帖
粉丝
月落之汀 1 2023-12-11 10:15
3
0
RootOfTrust这部分信息在bootloader的启动过程中就被设置进TEE了,用TEE的证书签发时,就包含了这部分信息,且存放在证书的extension中,这里面包含了设备BL状态和启动状态等信息,因为校验的是链上的所有证书(通常3个),这部分信息是无法篡改的,因此这部分,针对本地的证书链校验,hook掉证书的verify就可以了,没必要替换证书,因为人家真的把证书传上服务器(目前是有的)去校验是不是谷歌的证书的话,即便通过,也存在相应的检测点
雪    币: 69
活跃值: (335)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
pedies 2023-12-11 10:17
4
0
试了一下,没有生效呢, 设备还是unlock
雪    币: 69
活跃值: (335)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
pedies 2023-12-11 10:28
5
0
思路比较简单,替换到整条证书链为一个正常设备的证书链?   正常的证书怎么获取到呢?
雪    币: 463
活跃值: (2536)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
pareto 2023-12-11 10:49
6
0
跟大师傅沟通下 ,目前unlock 只是针对key attesation ,还有challenge 码的问题需要解决,还会做进一步研究强化功能
雪    币: 463
活跃值: (2536)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
pareto 2023-12-11 10:50
7
0
私聊 我看看问题呢
雪    币: 463
活跃值: (2536)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
pareto 2023-12-11 10:51
8
0
pedies 试了一下,没有生效呢, 设备还是unlock
私信下 看看问题
雪    币: 463
活跃值: (2536)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
pareto 2023-12-11 10:53
9
0
月落之汀 RootOfTrust这部分信息在bootloader的启动过程中就被设置进TEE了,用TEE的证书签发时,就包含了这部分信息,且存放在证书的extension中,这里面包含了设备BL状态和启动状态等 ...

是的 也可以

最后于 2023-12-11 14:42 被pareto编辑 ,原因:
雪    币: 463
活跃值: (2536)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
pareto 2023-12-11 11:08
10
0
pedies 试了一下,没有生效呢, 设备还是unlock
或者直接提issue
雪    币: 199
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zpazz 2023-12-13 00:01
11
0
月落之汀 RootOfTrust这部分信息在bootloader的启动过程中就被设置进TEE了,用TEE的证书签发时,就包含了这部分信息,且存放在证书的extension中,这里面包含了设备BL状态和启动状态等 ...
师傅,如果上传。有思路解决么
雪    币: 463
活跃值: (2536)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
pareto 2023-12-13 10:15
12
0
zpazz 师傅,如果上传。有思路解决么[em_35]
利用一个安全的中间人提供证书,
雪    币: 6369
活跃值: (1263)
能力值: ( LV4,RANK:156 )
在线值:
发帖
回帖
粉丝
月落之汀 1 2023-12-13 11:38
13
0
zpazz 师傅,如果上传。有思路解决么[em_35]
理论上你能搞到TEE的私钥(RSA和ECC两组)才行,这个是生产的时候就已经被厂家写进去的,而且大概是10k设备用一组(谷歌是这么说的,实际不清楚),没那么简单就可以读出来,不过有些设备TEE本身就有问题,就是取不到的,还有个办法就是楼主说的中间人了,给另外一台环境一致的设备代签就可以了
雪    币: 225
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
空空的爸爸 2023-12-30 17:38
14
0
月落之汀 RootOfTrust这部分信息在bootloader的启动过程中就被设置进TEE了,用TEE的证书签发时,就包含了这部分信息,且存放在证书的extension中,这里面包含了设备BL状态和启动状态等 ...
可以通过自定义rom 解决把。直接修改bl状态为lock可以么
游客
登录 | 注册 方可回帖
返回