2023-08-03 19:12:22 +00:00
# 绕过生物识别认证( Android)
2022-10-26 09:06:33 +00:00
< details >
2024-02-09 01:27:24 +00:00
< summary > < strong > 从零开始学习AWS黑客技术, 成为专家< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE( HackTricks AWS Red Team Expert) < / strong > < / a > < strong > ! < / strong > < / summary >
2022-10-26 09:06:33 +00:00
2024-02-09 01:27:24 +00:00
* 您在**网络安全公司**工作吗? 想要看到您的**公司在HackTricks中做广告**吗? 或者您想要访问**PEASS的最新版本或下载PDF格式的HackTricks**吗? 请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[NFTs收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
2024-02-07 05:49:16 +00:00
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
2024-02-09 01:27:24 +00:00
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群** ](https://discord.gg/hRep4RUj7f ) 或[**电报群**](https://t.me/peass) 或在**Twitter**上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
2024-02-07 05:49:16 +00:00
* **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享您的黑客技巧**。
2022-10-26 09:06:33 +00:00
< / details >
2024-02-09 01:27:24 +00:00
## **方法1 – 无需使用加密对象绕过**
2022-10-26 09:06:33 +00:00
2024-02-07 05:49:16 +00:00
重点在于*onAuthenticationSucceeded*回调, 在认证过程中至关重要。WithSecure的研究人员开发了一个[Frida脚本](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js),可以绕过*onAuthenticationSucceeded(...)*中的空*CrytoObject*。该脚本在方法调用时强制自动绕过指纹认证。以下是一个简化的代码片段, 演示了在Android指纹上下文中的绕过, 完整应用程序可在[GitHub](https://github.com/St3v3nsS/InsecureBanking)上找到。
2022-10-26 09:06:33 +00:00
```javascript
biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
2023-08-03 19:12:22 +00:00
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
Toast.makeText(MainActivity.this,"Success",Toast.LENGTH_LONG).show();
}
2022-10-26 09:06:33 +00:00
});
```
2024-02-03 16:02:37 +00:00
运行Frida脚本的命令:
```bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js
2022-10-26 09:06:33 +00:00
```
2024-02-08 03:56:12 +00:00
## **方法2 – 异常处理方法**
2022-10-26 09:06:33 +00:00
2024-02-09 01:27:24 +00:00
另一个由WithSecure开发的[Frida脚本](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js)解决了绕过不安全的加密对象使用的问题。该脚本调用*onAuthenticationSucceeded*时使用一个未经指纹授权的*CryptoObject*。如果应用程序尝试使用不同的密码对象,将触发异常。该脚本准备调用*onAuthenticationSucceeded*并处理_Cipher_类中的*javax.crypto.IllegalBlockSizeException*,确保应用程序使用的后续对象使用新密钥加密。
2024-02-03 16:02:37 +00:00
运行Frida脚本的命令:
```bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
2022-10-26 09:06:33 +00:00
```
2024-02-07 05:49:16 +00:00
在达到指纹屏幕并启动`authenticate()`时, 在Frida控制台中键入`bypass()`以激活绕过:
2022-10-26 09:06:33 +00:00
```
2024-02-03 16:02:37 +00:00
Spawning com.generic.insecurebankingfingerprint...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> Hooking BiometricPrompt.authenticate()...
2022-10-26 09:06:33 +00:00
Hooking BiometricPrompt.authenticate2()...
Hooking FingerprintManager.authenticate()...
2024-02-03 16:02:37 +00:00
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> bypass()
```
2024-02-09 01:27:24 +00:00
## **方法 3 – 仪器化框架**
2024-02-03 16:02:37 +00:00
2024-02-08 03:56:12 +00:00
仪器化框架如Xposed或Frida可用于在运行时钩入应用程序方法。对于指纹认证, 这些框架可以:
2024-02-03 16:02:37 +00:00
2024-02-08 03:56:12 +00:00
1. **模拟认证回调** :通过钩入`BiometricPrompt.AuthenticationCallback`的`onAuthenticationSucceeded`、`onAuthenticationFailed`或`onAuthenticationError`方法,您可以控制指纹认证过程的结果。
2. **绕过SSL Pinning** :这允许攻击者拦截和修改客户端与服务器之间的流量,可能改变认证过程或窃取敏感数据。
2024-02-03 16:02:37 +00:00
2024-02-08 03:56:12 +00:00
Frida的示例命令:
2024-02-03 16:02:37 +00:00
```bash
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
2022-10-26 09:06:33 +00:00
```
2024-02-09 01:27:24 +00:00
## **方法 4 – 逆向工程 & 代码修改**
2024-02-03 16:02:37 +00:00
2024-02-09 01:27:24 +00:00
类似 `APKTool` 、`dex2jar` 和 `JD-GUI` 的逆向工程工具可用于反编译 Android 应用程序,阅读其源代码,并了解其身份验证机制。一般步骤包括:
2024-02-03 16:02:37 +00:00
2024-02-07 05:49:16 +00:00
1. **反编译 APK** :将 APK 文件转换为更易读的格式(如 Java 代码)。
2024-02-08 03:56:12 +00:00
2. **分析代码** :查找指纹身份验证的实现,并识别潜在的弱点(如备用机制或不正确的验证检查)。
2024-02-07 05:49:16 +00:00
3. **重新编译 APK** :在修改代码以绕过指纹身份验证后,重新编译、签名并安装应用程序到设备进行测试。
2024-02-03 16:02:37 +00:00
2024-02-09 01:27:24 +00:00
## **方法 5 – 使用自定义身份验证工具**
2024-02-03 16:02:37 +00:00
2024-02-07 05:49:16 +00:00
有专门设计用于测试和绕过身份验证机制的工具和脚本。例如:
2024-02-03 16:02:37 +00:00
2024-02-09 01:27:24 +00:00
1. **MAGISK 模块** : MAGISK 是一款用于 Android 的工具,允许用户对其设备进行 root, 并添加可修改或欺骗硬件级信息( 包括指纹) 的模块。
2. **自定义脚本** :可以编写脚本与 Android 调试桥( ADB) 交互, 或直接与应用程序后端交互以模拟或绕过指纹身份验证。
2024-02-03 16:02:37 +00:00
2024-02-08 03:56:12 +00:00
## 参考资料
2024-02-03 16:02:37 +00:00
* [https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/ ](https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/ )