跳过内容

MASTG-TEST-0064:生物认证测试

概述

可以通过分析应用程序二进制文件的共享动态库列表来检测应用程序中框架的使用情况。这可以通过使用 otool来完成。

otool -L <AppName>.app/<AppName>

如果在应用程序中使用LocalAuthentication.framework,则输出将包含以下两行(请记住,LocalAuthentication.framework在底层使用Security.framework

/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
/System/Library/Frameworks/Security.framework/Security

如果使用Security.framework,则只会显示第二行。

静态分析

重要的是要记住,LocalAuthentication 框架是一个基于事件的过程,因此不应是唯一的身份验证方法。尽管这种类型的身份验证在用户界面级别上有效,但很容易通过修补或插桩来绕过。因此,最好使用钥匙串服务方法,这意味着你应该

  • 验证敏感流程,例如重新验证执行支付交易的用户,是否使用钥匙串服务方法进行保护。
  • 验证是否为钥匙串项目设置了访问控制标志,以确保只能通过验证用户身份来解锁钥匙串项目的数据。这可以通过以下标志之一来完成
    • kSecAccessControlBiometryCurrentSet(iOS 11.3 之前的kSecAccessControlTouchIDCurrentSet)。这将确保用户需要使用生物识别(例如 Face ID 或 Touch ID)进行身份验证,然后才能访问钥匙串项目中的数据。每当用户向设备添加指纹或面部表示时,它将自动使钥匙串中的条目无效。这确保了钥匙串项目只能由在添加到钥匙串时注册的用户解锁。
    • kSecAccessControlBiometryAny(iOS 11.3 之前的kSecAccessControlTouchIDAny)。这将确保用户需要使用生物识别(例如 Face ID 或 Touch ID)进行身份验证,然后才能访问钥匙串条目中的数据。钥匙串条目将在任何新的指纹或面部表示的(重新)注册后仍然存在。如果用户的指纹不断变化,这可能非常方便。但是,这也意味着以某种方式能够将其指纹或面部表示注册到设备的攻击者现在也可以访问这些条目。
    • kSecAccessControlUserPresence可以用作替代方案。如果生物识别身份验证不再起作用,这将允许用户通过密码进行身份验证。这被认为比kSecAccessControlBiometryAny更弱,因为通过偷窥来窃取某人的密码条目比绕过 Touch ID 或 Face ID 服务容易得多。
  • 为了确保可以使用生物识别技术,请验证在调用SecAccessControlCreateWithFlags方法时是否设置了kSecAttrAccessibleWhenPasscodeSetThisDeviceOnlykSecAttrAccessibleWhenPasscodeSet保护类。请注意,...ThisDeviceOnly变体将确保钥匙串项目不会与其他 iOS 设备同步。

请注意,数据保护类指定了用于保护数据的访问方法。每个类使用不同的策略来确定何时可以访问数据。

动态分析

Objection 生物识别旁路可用于绕过 LocalAuthentication。Objection 使用 Frida 来检测 evaluatePolicy 函数,使其返回 True,即使身份验证未成功执行。使用 ios ui biometrics_bypass 命令绕过不安全的生物识别身份验证。Objection 将注册一个作业,该作业将替换 evaluatePolicy 结果。它将在 Swift 和 Objective-C 实现中都有效。

...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # (agent) [3mhtws9x47q] Localized Reason for auth requirement: Please authenticate yourself
(agent) [3mhtws9x47q] OS authentication response: false
(agent) [3mhtws9x47q] Marking OS response as True instead
(agent) [3mhtws9x47q] Biometrics bypass hook complete

如果存在漏洞,该模块将自动绕过登录表单。