Bypass Biometric Authentication (Android)

支持 HackTricks

方法 1 – 无加密对象使用的绕过

这里的重点是 onAuthenticationSucceeded 回调,它在认证过程中至关重要。WithSecure 的研究人员开发了一个 Frida 脚本,使得可以绕过 onAuthenticationSucceeded(...) 中的 NULL CryptoObject。该脚本在方法调用时强制自动绕过指纹认证。下面是一个简化的代码片段,演示了在 Android 指纹上下文中的绕过,完整应用程序可在 GitHub 上获取。

biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
Toast.makeText(MainActivity.this,"Success",Toast.LENGTH_LONG).show();
}
});

运行 Frida 脚本的命令:

frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js

方法 2 – 异常处理方法

另一个 Frida 脚本 来自 WithSecure,旨在绕过不安全的加密对象使用。该脚本调用 onAuthenticationSucceeded,并使用未通过指纹授权的 CryptoObject。如果应用程序尝试使用不同的密码对象,将会触发异常。该脚本准备调用 onAuthenticationSucceeded 并处理 Cipher 类中的 javax.crypto.IllegalBlockSizeException,确保应用程序后续使用的对象使用新密钥进行加密。

运行 Frida 脚本的命令:

frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js

在到达指纹屏幕并启动 authenticate() 时,在 Frida 控制台中输入 bypass() 以激活绕过:

Spawning com.generic.insecurebankingfingerprint...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> Hooking BiometricPrompt.authenticate()...
Hooking BiometricPrompt.authenticate2()...
Hooking FingerprintManager.authenticate()...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> bypass()

方法 3 – 插桩框架

插桩框架如 Xposed 或 Frida 可用于在运行时钩入应用程序方法。对于指纹认证,这些框架可以:

  1. 模拟认证回调:通过钩入 BiometricPrompt.AuthenticationCallbackonAuthenticationSucceededonAuthenticationFailedonAuthenticationError 方法,您可以控制指纹认证过程的结果。

  2. 绕过 SSL 钉扎:这允许攻击者拦截并修改客户端与服务器之间的流量,可能会改变认证过程或窃取敏感数据。

Frida 的示例命令:

frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in

方法 4 – 逆向工程与代码修改

逆向工程工具如 APKTooldex2jarJD-GUI 可用于反编译 Android 应用程序,阅读其源代码,并理解其身份验证机制。步骤通常包括:

  1. 反编译 APK:将 APK 文件转换为更易读的格式(如 Java 代码)。

  2. 分析代码:查找指纹身份验证的实现,并识别潜在的弱点(如后备机制或不当的验证检查)。

  3. 重新编译 APK:在修改代码以绕过指纹身份验证后,应用程序被重新编译、签名并安装到设备上进行测试。

方法 5 – 使用自定义身份验证工具

有专门的工具和脚本设计用于测试和绕过身份验证机制。例如:

  1. MAGISK 模块:MAGISK 是一个 Android 工具,允许用户获取设备的 root 权限并添加可以修改或伪造硬件级信息(包括指纹)的模块。

  2. 自定义脚本:可以编写脚本与 Android 调试桥(ADB)或直接与应用程序的后端交互,以模拟或绕过指纹身份验证。

参考文献

支持 HackTricks

Last updated