hacktricks/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md

88 lines
7.2 KiB
Markdown
Raw Normal View History

2023-08-03 19:12:22 +00:00
# 绕过生物识别认证Android
2022-10-26 09:06:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-10-26 09:06:33 +00:00
* 您在**网络安全公司**工作吗?您想在**HackTricks**中看到您的**公司广告**吗?或者您想要访问**最新版本的PEASS或下载HackTricks的PDF**?查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)系列
* 获取[**官方PEASS & HackTricks周边商品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向[hacktricks仓库](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud仓库](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享您的黑客技巧。**
2022-10-26 09:06:33 +00:00
</details>
### **方法1 不使用CryptoObject绕过**
2022-10-26 09:06:33 +00:00
这里的重点是*onAuthenticationSucceeded*回调这在认证过程中至关重要。WithSecure的研究人员开发了一个[Frida脚本](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js),可以绕过*onAuthenticationSucceeded(...)*中的NULL *CryptoObject*。该脚本强制在方法调用时自动绕过指纹认证。下面是一个简化的代码片段演示了在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
});
```
```markdown
运行Frida脚本的命令
2022-10-26 09:06:33 +00:00
```
```bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js
2022-10-26 09:06:33 +00:00
```
### **方法2 异常处理方法**
2022-10-26 09:06:33 +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*,确保应用程序使用的后续对象都用新密钥加密。
运行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
```
在到达指纹屏幕并启动 `authenticate()` 后,在 Frida 控制台中输入 `bypass()` 以激活绕过:
2022-10-26 09:06:33 +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()...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> bypass()
```
### **方法 3 Instrumentation 框架**
像 Xposed 或 Frida 这样的 Instrumentation 框架可以在运行时挂钩应用程序方法。对于指纹认证,这些框架可以:
1. **模拟认证回调**: 通过挂钩 `BiometricPrompt.AuthenticationCallback``onAuthenticationSucceeded`、`onAuthenticationFailed` 或 `onAuthenticationError` 方法,你可以控制指纹认证过程的结果。
2. **绕过 SSL Pinning**: 这允许攻击者拦截并修改客户端和服务器之间的通信,可能改变认证过程或窃取敏感数据。
Frida 示例命令:
```bash
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
2022-10-26 09:06:33 +00:00
```
### **方法 4 反向工程与代码修改**
`APKTool`、`dex2jar` 和 `JD-GUI` 这样的反向工程工具可以用来反编译安卓应用程序,阅读其源代码,并了解其认证机制。步骤通常包括:
1. **反编译 APK**:将 APK 文件转换为更易于人类阅读的格式(如 Java 代码)。
2. **分析代码**:寻找指纹认证的实现,并识别潜在的弱点(如后备机制或不当的验证检查)。
3. **重新编译 APK**:修改代码以绕过指纹认证后,重新编译应用程序,签名,并安装在设备上进行测试。
### **方法 5 使用自定义认证工具**
有专门设计的工具和脚本用于测试和绕过认证机制。例如:
1. **MAGISK 模块**MAGISK 是一个安卓工具,允许用户对其设备进行 root 并添加模块,这些模块可以修改或伪造硬件级别的信息,包括指纹。
2. **自定义脚本**:可以编写脚本与 Android Debug Bridge (ADB) 或直接与应用程序的后端交互,以模拟或绕过指纹认证。
# 参考资料
* [https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/](https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/)
2022-10-26 09:06:33 +00:00
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-10-26 09:06:33 +00:00
* 如果你在一家**网络安全公司**工作?你想在 **HackTricks** 中看到你的**公司广告**?或者你想要访问**最新版本的 PEASS 或下载 HackTricks 的 PDF**?查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的 [**NFTs**](https://opensea.io/collection/the-peass-family) 收藏。
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或在 **Twitter** 上**关注**我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向 [hacktricks 仓库](https://github.com/carlospolop/hacktricks) 和 [hacktricks-cloud 仓库](https://github.com/carlospolop/hacktricks-cloud) 提交 PR 来分享你的黑客技巧**。
2022-10-26 09:06:33 +00:00
</details>