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

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

  •  
  •   LeviMarvin · 341 天前 · 5213 次点击
    这是一个创建于 341 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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