Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4Mobile wallpaper 5Mobile wallpaper 6
1932 字
10 分钟
硬件熔断
2025-12-26
统计加载中...
WARNING

本文内容在酷安用户mlgmxyysd的动态的基础上加入自己的解释,仅供本人学习使用
TEE熔断的具体机制远比想象中和AIGC回答的复杂得多!

众所周知,三星解锁后会将Knox位永久置为0x1,也就是所谓的熔断。Knox是三星自主实现的一套与TEE交互的安全功能,被Samsung Pay等功能所依赖。解锁后设备不再安全(即使再回锁),所以三星主动永久禁用了该功能,同时也可用于售后判断保修。
那么小米虽然没有和三星一样的独立Knox,但TEE在理论上提供的功能与Knox一致,可以用于用于DRM、Payment等用途,所以说和三星的结果一样。

小米最早的熔断机制可以追溯到Google首次在SafetyNet中引入HardWare级验证,接着有开发人员发现小米设备在「刷入特定persist镜像后」可以使验证强制降为 Basic 模式(经过学习得知,这里说的是SafetyNet验证模式)。后经证实,镜像破坏了 persist 分区内的一些文件,触发了小米预置的 TEE 永久熔断机制,使 Hardware 验证无法工作。
测试结果并未包含所有的触发条件,但已经可以证明小米设备具有 TEE 永久熔断。如图三(小米 9 SE,MIUI 刷 TWRP 和 Magisk)、图四(小米 10,MIUI 刷第三方内核)。

wtf is persist?

persist分区不是AOSP强制定义的分区,其用途完全由OEM决定:

  • 设备校准数据(传感器、相机)
  • 硬件配置
  • OEM/厂商自定义的安全相关状态或策略数据
  • 与 TEE / Keymaster / DRM 相关的软件状态缓存 / 标志位 / 策略文件

该分区不会被常规的OTA/恢复出厂设置清空
在很多厂商(包括小米)实现中:
persist并不属于Android官方AVB保护的强制对象,是否校验、怎么用,完全由OEM决定。因此,persist可以被刷写,一旦刷入异常内容,可能永久改变某些安全状态。

vspersistvbmeta
是否属于AVB
是否参与启动信任链
是否必须校验否,OEM自定义是,强制
被破坏后结果可能隐蔽地影响安全能力直接启动失败或警告
能否长期影响设备可能否(重刷可恢复)

目前已知的触发条件有:1)persist 分区损坏;2)persist 分区内特定文件被破坏;3)由于官方内核源码开源不完整或根本无法使用,刷入第三方内核可能使设备触发熔断。


persist 损坏离我们很遥远吗?
并不是,由于 persist 分区具有在 init 启动前就挂载,并且为了方便厂商校准传感器,分区是可读写的 Ext4 格式这两个特性,Magisk 可能会把 persist 分区作为模块自定义 sepolicy 规则的存储分区(Magisk 在不同设备存储的分区不一样,也可能保存在 userdata、metadata 等分区,可以在安装日志里检查(如图五),勿杠),TWRP 也会将配置文件,甚至一些版本还会将日志存入该分区(如图六),一些内核和 ROM 也会使用该分区存储资料。
一般情况下这些读写不会造成损坏,但分区只有 32M 的总空间(不同设备可能大小不一样,反正都不是很大,勿杠),在分区存满的时候,就容易出现超级块(superblock)损坏,实际表现就是文件损坏;另外在读写时出现意外情况(如关机、分区被意外卸载等)也会损坏。
事实上,不止是 persist 会损坏,在早些时候 userdata 也是 ext4 格式时,也经常可以看到损坏的表现,XDA 中有帖子教用户如何使用 e2fsck 来修复损坏的 userdata 分区 [2]。

WARNING

以下原文表达含有混用概念的部分,为了能学习准确的TEE机制而保留,请仔细甄别!

如果 persist 出现损坏,与 TEE 无关倒也还好(这半句逻辑互搏了),顶多传感器失灵或 Widevine 等级掉 L1(后半句可能的后果完全正确)。
但是,一旦损坏的文件与小米预制的 TEE 熔断机制有关,即使后续可以用 e2fsck 修复分区,已经自毁的 TEE 也不再能够自动恢复。

WARNING

烧烤一下,为什么persist出现损坏会导致Widevine掉L1?
Widevine掉L1说明TEE肯定采取了降级的风险控制,不可能与TEE无关。
设备启动时DRM服务请求L1,TEE从多个地方取“设备状态”,包括但不限于

  • Keymaster / StrongBox 的可用性
  • OEM 提供的安全状态接口aq
  • persist 中的缓存 / 标志

此时TEE发现 “状态 不完整 / 不一致 / 不符合预期” 如:

  • persist 中的 DRM provisioning记录丢失
  • persist 被wipe,导致状态回退到“未认证”

TEE选择不提供L1,因为“我不能 101.0000% 确认这是一个OEM允许的L1设备”
再结合一下前一篇文章,看看提供L1需要什么前提条件 [[我对 安卓设备启动信任链 的理解#^a844e0]]L1密钥和解密都在TEE内。它依赖TEE状态、==OEM标志==和DRM私钥。

!完全正确的表达

persist 只是OEM 用来让 TEE 做出判断的一个条件元。persist损坏本身不会破坏TEE的Root of Trust,但可能破坏TEE所依赖的OEM状态前提,从而间接导致L1被禁用。


已经触发了 TEE 熔断,可以恢复吗?
可以,但又是「和三星一样」,只能通过更换主板恢复。上文提到了恢复 persist 不能使熔断恢复,同样,回锁也不能。

WARNING

依旧解释不全面,为什么刷回persist / 回锁 都不能救回L1
TEE:吗的我内部维护的东西多呢

  • monotonic counter
  • provisioning history
  • anti-rollback

劳资状态回退了就是认为状态异常,不会再重新provision


TEE 有什么用?
对于普通用户,目前来说,没什么用。
TEE 损坏的最直观的表现为微信无法使用指纹支付,但这是因为腾讯 Soter 组件不按规范使用造成的。Android 提供了用于指纹识别的 Biometrics API,其数据存储在 ARM SoC 提供的 TrustZone 中,安全性有保证,完全没有必要要求厂商在 TEE 中加入 Soter Key 来实现指纹支付验证 [3]。(所以用户应该去骂障啸聋而不是来骂厂商熔断可信执行环境)
支付宝所使用的 IFAA 可信认证组件在指纹校验这方面就做的很好,直接与 TrustZone 进行交互,并未强依赖 TEE 环境 [4]。
TEE 会为所有应用提供一个不可伪造的解锁状态,这其中就包括了 Google 的 SafetyNet 或 Play Integrity,这意味着任何应用都可以轻而易举的检测真实的解锁状态。

引用:
[1]: TEE の実例 - Samsung Pay on Samsung Knox. Smart Card Guy. [2019-08-08]. 查看链接
[2]: Repairing corrupted /data partition. XDA Forums. [2013-12-20]. 查看链接
[3]: TENCENT SOTER 简介. GitHub. [2023-11-28]. 查看链接
[4]: IFAA 互联网可信认证联盟. IFAA 官网. [2015]. 查看链接
[5]: 申请解锁小米手机. MIUI. [2016-03-16]. 查看链接
[6]: MiCare(无忧版)服务条款. 小米商城. [2023-04-14]. 查看链接

与文本完全无关的东西(我草AIGC怎么这么坏啊

FRP (Factory Reset Protection)
纯软件层功能,与硬件熔断无关。用于防止设备被盗后绕过锁屏

1 2 3 4 5 6 7 8

硬件熔断
https://blog.y11han.icu/posts/hardware-fuse/
作者
Y11Han
发布于
2025-12-26
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时