Translated ['src/mobile-pentesting/android-app-pentesting/bypass-biometr

This commit is contained in:
Translator 2025-07-28 10:27:16 +00:00
parent 4ea7c9fa61
commit 582194953e

View File

@ -19,7 +19,7 @@ frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-byp
```
## **方法 2 异常处理方法**
另一个 [Frida 脚本](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) 由 WithSecure 提供,旨在绕过不安全的加密对象使用。该脚本使用未通过指纹授权的 _CryptoObject_ 调用 _onAuthenticationSucceeded_。如果应用程序尝试使用不同的密码对象将会触发异常。该脚本准备调用 _onAuthenticationSucceeded_ 并处理 _javax.crypto.IllegalBlockSizeException_,确保应用程序后续使用的对象使用新密钥进行加密。
另一个 [Frida 脚本](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) 由 WithSecure 提供,旨在绕过不安全的加密对象使用。该脚本调用 _onAuthenticationSucceeded_并使用未通过指纹授权的 _CryptoObject_。如果应用程序尝试使用不同的密码对象将会触发异常。该脚本准备调用 _onAuthenticationSucceeded_ 并处理 _javax.crypto.IllegalBlockSizeException_,确保应用程序后续使用的对象使用新密钥进行加密。
运行 Frida 脚本的命令:
```bash
@ -35,10 +35,10 @@ Hooking FingerprintManager.authenticate()...
```
## **方法 3 插桩框架**
插桩框架如 Xposed 或 Frida 可用于在运行时钩应用程序方法。对于指纹认证,这些框架可以:
插桩框架如 Xposed 或 Frida 可用于在运行时钩应用程序方法。对于指纹认证,这些框架可以:
1. **模拟认证回调**:通过钩 `BiometricPrompt.AuthenticationCallback``onAuthenticationSucceeded``onAuthenticationFailed``onAuthenticationError` 方法,您可以控制指纹认证过程的结果。
2. **绕过 SSL 钉扎**:这允许攻击者拦截修改客户端与服务器之间的流量,可能改变认证过程或窃取敏感数据。
1. **模拟认证回调**:通过钩 `BiometricPrompt.AuthenticationCallback``onAuthenticationSucceeded``onAuthenticationFailed``onAuthenticationError` 方法,您可以控制指纹认证过程的结果。
2. **绕过 SSL 钉扎**:这允许攻击者拦截修改客户端与服务器之间的流量,可能改变认证过程或窃取敏感数据。
Frida 的示例命令:
```bash
@ -46,22 +46,67 @@ frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
```
## **方法 4 逆向工程与代码修改**
逆向工程工具如 `APKTool``dex2jar``JD-GUI` 可用于反编译 Android 应用程序,阅读其源代码并理解其身份验证机制。步骤通常包括:
逆向工程工具如 `APKTool``dex2jar``JD-GUI` 可用于反编译 Android 应用程序,阅读其源代码并理解其身份验证机制。步骤通常包括:
1. **反编译 APK**:将 APK 文件转换为更易读的格式(如 Java 代码)。
2. **分析代码**:查找指纹身份验证的实现并识别潜在的弱点(如后备机制或不当的验证检查)。
3. **重新编译 APK**:在修改代码以绕过指纹身份验证后,应用程序被重新编译、签名并安装到设备上进行测试。
2. **分析代码**:查找指纹身份验证的实现并识别潜在的弱点(如后备机制或不当的验证检查)。
3. **重新编译 APK**:在修改代码以绕过指纹身份验证后,应用程序被重新编译、签名并安装到设备上进行测试。
## **方法 5 使用自定义身份验证工具**
有专门的工具和脚本设计用于测试和绕过身份验证机制。例如:
1. **MAGISK 模块**MAGISK 是一个 Android 工具,允许用户获取设备的 root 权限并添加可以修改或伪造硬件级信息(包括指纹)的模块。
1. **MAGISK 模块**MAGISK 是一个 Android 工具,允许用户获取设备的 root 权限并添加可以修改或伪造硬件级信息(包括指纹)的模块。
2. **自定义脚本**:可以编写脚本与 Android 调试桥ADB或直接与应用程序的后端交互以模拟或绕过指纹身份验证。
---
## **方法 6 针对 `BiometricPrompt` 的通用 Frida HookAPI 28-34**
在 2023 年,一个名为 **Universal-Android-Biometric-Bypass** 的社区 Frida 脚本出现在 CodeShare 上。该脚本钩住了 `BiometricPrompt.authenticate()` 的每个重载以及遗留的 `FingerprintManager.authenticate()`,并直接触发 `onAuthenticationSucceeded()`,带有一个 **伪造的 `AuthenticationResult`,其中包含一个空的 `CryptoObject`**。由于它动态适应 API 级别,如果目标应用程序对返回的 `CryptoObject` **没有进行加密检查**,它仍然可以在 Android 14API 34上工作。
```bash
# Install the script from CodeShare and run it against the target package
frida -U -f com.target.app --no-pause -l universal-android-biometric-bypass.js
```
关键思想
* 一切都发生在用户空间 - 不需要内核漏洞或 root 权限。
* 攻击对 UI 完全静默:系统生物识别对话框从未出现。
* 缓解措施:**在解锁敏感功能之前,始终验证 `result.cryptoObject` 及其密码/签名**。
## **方法 7 降级 / 回退操控**
从 Android 11 开始,开发者可以通过 `setAllowedAuthenticators()`(或较旧的 `setDeviceCredentialAllowed()`)指定哪些身份验证器是可接受的。一个 **运行时钩子** 攻击可以强制将 `allowedAuthenticators` 位域设置为较弱的 `BIOMETRIC_WEAK | DEVICE_CREDENTIAL` 值:
```javascript
// Frida one-liner replace strong-only policy with weak/device-credential
var PromptInfoBuilder = Java.use('androidx.biometric.BiometricPrompt$PromptInfo$Builder');
PromptInfoBuilder.setAllowedAuthenticators.implementation = function(flags){
return this.setAllowedAuthenticators(0x0002 | 0x8000); // BIOMETRIC_WEAK | DEVICE_CREDENTIAL
};
```
如果应用程序**不**随后验证返回的 `AuthenticationResult`,攻击者可以简单地按下 _PIN/Pattern_ 回退按钮,甚至注册一个新的弱生物特征以获得访问权限。
## **方法 8 供应商 / 内核级 CVE**
关注 Android 安全公告:最近几个内核侧的漏洞允许通过指纹 HAL 进行本地特权升级,并有效地**禁用或短路传感器管道**。示例包括:
* **CVE-2023-20995** `CustomizedSensor.cpp``captureImage` 的逻辑错误Pixel 8Android 13允许在没有用户交互的情况下绕过解锁。
* **CVE-2024-53835 / CVE-2024-53840** “由于不寻常的根本原因导致的可能生物识别绕过”,已在**2024 年 12 月 Pixel 公告**中修补。
尽管这些漏洞针对锁屏,但已获取 root 的测试人员可以将它们与应用级缺陷链式结合,以绕过应用内生物识别。
---
### 开发人员的加固检查清单(快速渗透测试者笔记)
* 在生成 **Keystore** 密钥时,强制执行 `setUserAuthenticationRequired(true)``setInvalidatedByBiometricEnrollment(true)`。然后需要有效的生物特征才能使用该密钥。
* 拒绝具有 **null 或意外密码/签名**`CryptoObject`;将其视为致命的身份验证错误。
* 使用 `BiometricPrompt` 时,优先选择 `BIOMETRIC_STRONG`,并且**绝不要回退到 `BIOMETRIC_WEAK``DEVICE_CREDENTIAL`** 进行高风险操作。
* 固定最新的 `androidx.biometric` 版本 (≥1.2.0-beta02) 最近的版本增加了自动 null 密码检查,并收紧了允许的身份验证器组合。
## 参考文献
- [https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/](https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/)
- [Universal Android Biometric Bypass Frida CodeShare](https://codeshare.frida.re/@ax/universal-android-biometric-bypass/)
- [Android Pixel Security Bulletin 2024-12-01](https://source.android.com/security/bulletin/pixel/2024-12-01)
{{#include ../../banners/hacktricks-training.md}}