V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeviMarvin
V2EX  ›  Android

关于现代 Android 设备的底层安全

  •  
  •   LeviMarvin · 2023-03-22 21:46:08 +08:00 · 11711 次点击
    这是一个创建于 644 天前的主题,其中的信息可能已经有所发展或是发生改变。

    android 设备的 KeyStore/KeyStore2/KeyMaster/KeyMint 有 software/TEE/StrongBox 三个安全等级的实现。大多数现代非高端手机都是 TEE 实现。某些情况下破坏了 TEE 环境(如高通平台在密钥认证时返回内部错误-10003 (密钥认证所需的认证密钥未声明)),能否通过额外实现一个 TEE 环境或降级到 software 实现来修复密钥认证功能?

    14 条回复    2024-08-22 19:07:10 +08:00
    bkmi
        1
    bkmi  
       2023-03-22 22:07:32 +08:00
    LeviMarvin
        2
    LeviMarvin  
    OP
       2023-03-22 22:13:55 +08:00
    @bkmi 不是 Safetynet 的问题,是底层安全。Safetynet 特别好过,保证 root 不被检测后修改指纹就行
    1ver
        3
    1ver  
       2023-03-22 22:26:11 +08:00
    “破坏了 TEE 环境”是指 tee 崩溃了吗,大佬这块儿有详细的博客等资料吗,或者能细说一下吗
    marat1ren
        4
    marat1ren  
       2023-03-22 22:26:45 +08:00 via iPhone
    感觉很难,TEE 是和硬件关联的,额外实现需要能直接访问硬件,而且你需要更改 HAL 。假设你能改写 Keymaster/Keymint ,可以让它们用 software 而不是 TEE 。以我的理解,它们属于 Trusted Application ,所以你无法更改它们。
    1ver
        5
    1ver  
       2023-03-22 22:27:18 +08:00
    tencent 的 soter 有派生密钥的功能,不知道“修复密钥认证功能”是不是可以用这个呢
    bkmi
        6
    bkmi  
       2023-03-22 22:29:27 +08:00 via Android
    @LeviMarvin 这个过 safetynet 就是通过降级到 software 然后提供一个自定义的 keystore provider ,你看看他的代码
    LeviMarvin
        7
    LeviMarvin  
    OP
       2023-03-22 22:43:01 +08:00
    @marat1ren 现有的 TEE 肯定是无法修改的,我的设想是能否用运行一个额外的 TEE 来替代损坏的 TEE 运行,对于类原生来说确实可以改写 KM ,但是我没找到具体如何改写从而使用 software 实现的文章或者是代码,我也查阅过 KM 的代码,里面有判断 SecurityLevel::SOFTWARE 的代码,但是具体实现似乎都是 SecurityLevel:TrustedEnvironment 或者~::StrongBox
    LeviMarvin
        8
    LeviMarvin  
    OP
       2023-03-22 22:44:07 +08:00
    @bkmi SafetyNet 本身有两种:BASIC 认证和基于硬件的 StrongBox 认证(无法篡改),SN-Fix 是通过修改设备名称 /指纹来强制回退到 BASIC
    marat1ren
        9
    marat1ren  
       2023-03-22 23:00:47 +08:00 via iPhone
    @LeviMarvin 需要考虑的是你怎么样能启动这个新的 TEE 环境。这需要让 bootloader 能 load 这个新的 binary ,所以你需要知道能签名和加密的 key 。改写 KM 你也需要能够重新编译再用 key 签名和加密
    V1Eerie
        10
    V1Eerie  
       2023-03-23 01:12:30 +08:00 via Android
    TEE 损坏返修的话常见的都是更换主板,你提出的这种方式到目前为止我还没见到过有人实现。
    SinceJune
        11
    SinceJune  
       2023-03-23 13:16:19 +08:00
    TEE 环境损坏是啥意思?如果是高通的问题 就反馈给高通让他们修复啊,然后后续通过升级 TEE 环境可以解决的吧?
    HusaYn
        12
    HusaYn  
       2023-09-22 13:44:02 +08:00
    不知道算不算挖坟,GP 规范里是说明了可以有多个 TEE ,CA initializeContext 的时候可以指定 TEE ,但貌似没听说有厂商这么做。荣耀貌似做了层 hypervisor 上的虚拟 TEE ,部分 TA 跑在上面,部分跑在高通 QSEE 里
    shunf4
        13
    shunf4  
       125 天前
    [hardware/interfaces/security/keymint/aidl/default]( https://cs.android.com/android/platform/superproject/main/+/main:hardware/interfaces/security/keymint/aidl/default/main.rs;drc=fbc30893106df9b55f0c73a8727575824b86c71b) 提供了 keymint 的纯软件(不安全)实现,底层的 TA 是直接运行在操作系统进程里,SerializedChannel 是直接内存复制。编译 ROM 时把这个模块加上,正确配置 rc 开机启动,应该就能实现降级到 software 。
    LeviMarvin
        14
    LeviMarvin  
    OP
       125 天前
    @shunf4 是的,这个问题我已经解决啦,感谢回答。我现在用开发板,在尝试用 OPTEE 实现。开发板自带的是闭源的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1465 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 17:17 · PVG 01:17 · LAX 09:17 · JFK 12:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.