跳过内容

MASTG-TEST-0266: 引用事件绑定生物识别认证 API

概述

此测试检查应用程序是否不安全地访问应受用户身份验证保护的敏感资源(例如,令牌、密钥),仅仅依赖** LocalAuthentication API 进行访问控制,而不是使用 Keychain API 并要求用户在场。

LocalAuthentication API(例如,LAContext)提供用户身份验证(Touch ID、Face ID、设备密码),仅返回成功或失败结果。但是,它**不会**安全地存储密钥或强制执行任何安全措施。这使其容易受到逻辑操作的影响(例如,绕过 if authenticated { ... } 检查)。

相比之下,Keychain API 安全地存储敏感数据,并且可以通过 kSecAccessControl 标志配置访问控制策略(例如,要求用户在场,如生物识别)。这确保身份验证不仅仅是一次性的布尔值,而是安全数据检索路径(进程外)的一部分,因此绕过身份验证变得非常困难。

步骤

  1. 使用 radare2 for iOS运行静态分析扫描以检测 LAContext.evaluatePolicy 的使用情况
  2. 使用 radare2 for iOS运行静态分析扫描以检测 Keychain API 的使用情况,特别是 SecAccessControlCreateWithFlags (它应该伴随其他 API,例如 SecItemAddSecItemCopyMatching)。

观察

分析应输出 LAContext.evaluatePolicy 和 Keychain API 在代码库中使用(或缺少使用)的位置。

评估

如果每个值得保护的敏感数据资源都满足以下条件,则测试失败

  • 显式使用 LAContext.evaluatePolicy
  • 没有调用 SecAccessControlCreateWithFlags 要求用户在场,并使用任何可能的标志

演示

MASTG-DEMO-0041:使用 r2 的 LAContext.evaluatePolicy 用法 MASTG-DEMO-0047:Frida 运行时使用不需要用户在场的 Keychain