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

This commit is contained in:
Translator 2025-07-28 10:29:42 +00:00
parent 34ead8b62e
commit 0a581d9212

View File

@ -4,7 +4,7 @@
## **Method 1 Bypassing with No Crypto Object Usage**
Увага тут зосереджена на _onAuthenticationSucceeded_ зворотному виклику, який є критично важливим у процесі аутентифікації. Дослідники з WithSecure розробили [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js), що дозволяє обійти NULL _CryptoObject_ у _onAuthenticationSucceeded(...)_. Скрипт примусово виконує автоматичне обхід аутентифікації за відбитком пальця під час виклику методу. Нижче наведено спрощений фрагмент, що демонструє обхід у контексті Android Fingerprint, повна програма доступна на [GitHub](https://github.com/St3v3nsS/InsecureBanking).
Основна увага тут приділяється _onAuthenticationSucceeded_ зворотному виклику, який є критично важливим у процесі аутентифікації. Дослідники з WithSecure розробили [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js), що дозволяє обійти NULL _CryptoObject_ в _onAuthenticationSucceeded(...)_. Скрипт примусово викликає автоматичне обхід аутентифікації за відбитком пальця під час виклику методу. Нижче наведено спрощений фрагмент, що демонструє обхід у контексті Android Fingerprint, повна програма доступна на [GitHub](https://github.com/St3v3nsS/InsecureBanking).
```javascript
biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
@ -19,13 +19,13 @@ frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-byp
```
## **Метод 2 Підхід обробки виключень**
Ще один [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) від WithSecure вирішує проблему обходу використання небезпечних криптооб'єктів. Скрипт викликає _onAuthenticationSucceeded_ з _CryptoObject_, який не був авторизований за допомогою відбитка пальця. Якщо додаток намагається використовувати інший об'єкт шифрування, це викличе виключення. Скрипт готується викликати _onAuthenticationSucceeded_ і обробляти _javax.crypto.IllegalBlockSizeException_ у класі _Cipher_, забезпечуючи, щоб наступні об'єкти, що використовуються додатком, були зашифровані новим ключем.
Ще один [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) від WithSecure вирішує проблему обходу небезпечного використання криптооб'єктів. Скрипт викликає _onAuthenticationSucceeded_ з _CryptoObject_, який не був авторизований за допомогою відбитка пальця. Якщо додаток намагається використовувати інший об'єкт шифру, це викличе виключення. Скрипт готується викликати _onAuthenticationSucceeded_ і обробляти _javax.crypto.IllegalBlockSizeException_ у класі _Cipher_, забезпечуючи, щоб наступні об'єкти, які використовуються додатком, були зашифровані новим ключем.
Команда для запуску скрипта Frida:
```bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
```
Після того, як ви досягнете екрану відбитків пальців і ініціюєте `authenticate()`, введіть `bypass()` у консолі Frida, щоб активувати обхід:
Після досягнення екрану відбитків пальців та ініціації `authenticate()`, введіть `bypass()` у консолі Frida, щоб активувати обхід:
```
Spawning com.generic.insecurebankingfingerprint...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> Hooking BiometricPrompt.authenticate()...
@ -56,12 +56,57 @@ frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
Існують спеціалізовані інструменти та скрипти, призначені для тестування та обходу механізмів аутентифікації. Наприклад:
1. **Модулі MAGISK**: MAGISK це інструмент для Android, який дозволяє користувачам рутувати свої пристрої та додавати модулі, які можуть модифікувати або підробляти інформацію на апаратному рівні, включаючи відбитки пальців.
1. **MAGISK Модулі**: MAGISK це інструмент для Android, який дозволяє користувачам рутувати свої пристрої та додавати модулі, які можуть модифікувати або підробляти інформацію на апаратному рівні, включаючи відбитки пальців.
2. **Скрипти на замовлення**: Скрипти можуть бути написані для взаємодії з Android Debug Bridge (ADB) або безпосередньо з бекендом додатку для симуляції або обходу аутентифікації за відбитками пальців.
---
## **Метод 6 Універсальний Frida Hook для `BiometricPrompt` (API 28-34)**
У 2023 році на CodeShare з'явився скрипт Frida, що отримав назву **Universal-Android-Biometric-Bypass**. Скрипт перехоплює кожне перевантаження `BiometricPrompt.authenticate()` а також застаріле `FingerprintManager.authenticate()` і безпосередньо викликає `onAuthenticationSucceeded()` з **сфабрикованим `AuthenticationResult`, що містить null `CryptoObject`**. Оскільки він динамічно адаптується до рівнів API, він все ще працює на Android 14 (API 34), якщо цільовий додаток не виконує **жодних криптографічних перевірок на повернутому `CryptoObject`**.
```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()`). Атака **runtime hooking** може примусити бітове поле `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 Уразливості на рівні постачальника / ядра**
Слідкуйте за бюлетенями безпеки Android: кілька недавніх помилок на стороні ядра дозволяють локальне підвищення привілеїв через HAL для відбитків пальців і фактично **відключають або короткочасно замикають сенсорний потік**. Приклади включають:
* **CVE-2023-20995** логічна помилка в `captureImage` файлу `CustomizedSensor.cpp` (Pixel 8, Android 13), що дозволяє обійти розблокування без взаємодії з користувачем.
* **CVE-2024-53835 / CVE-2024-53840** “можливе обхід біометрії через незвичайну кореневу причину”, виправлено в **бюлетені Pixel за грудень 2024 року**.
Хоча ці вразливості націлені на екран блокування, тестер з правами root може поєднати їх з недоліками на рівні додатків, щоб обійти біометрію в додатку.
---
### Контрольний список посилення безпеки для розробників (Швидкі нотатки для пентестера)
* Вимагайте `setUserAuthenticationRequired(true)` та `setInvalidatedByBiometricEnrollment(true)` при генерації ключів **Keystore**. Дійсна біометрія буде потрібна перед використанням ключа.
* Відхиляйте `CryptoObject` з **null або несподіваним шифром / підписом**; розглядайте це як фатальну помилку аутентифікації.
* При використанні `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}}