Bypass Biometric Authentication (Android)

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Method 1 – Bypassing with No Crypto Object Usage

Основна увага тут приділяється onAuthenticationSucceeded зворотному виклику, який є критично важливим у процесі аутентифікації. Дослідники з WithSecure розробили Frida script, що дозволяє обійти NULL CryptoObject в onAuthenticationSucceeded(...). Скрипт примусово викликає автоматичне обхід аутентифікації за відбитком пальця під час виклику методу. Нижче наведено спрощений фрагмент, що демонструє обхід у контексті Android Fingerprint, повна програма доступна на GitHub.

javascript
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:

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

Метод 2 – Підхід обробки виключень

Ще один Frida script від 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, щоб активувати обхід:

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. Мокати Виклики Аутентифікації: Підключившись до методів onAuthenticationSucceeded, onAuthenticationFailed або onAuthenticationError класу BiometricPrompt.AuthenticationCallback, ви можете контролювати результат процесу аутентифікації за відбитком пальця.
  2. Обійти SSL Пінінг: Це дозволяє зловмиснику перехоплювати та змінювати трафік між клієнтом і сервером, потенційно змінюючи процес аутентифікації або крадучи чутливі дані.

Приклад команди для Frida:

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

Метод 4 – Реверс-інжиніринг та модифікація коду

Інструменти реверс-інжинірингу, такі як APKTool, dex2jar та JD-GUI, можуть бути використані для декомпіляції Android-додатку, читання його вихідного коду та розуміння його механізму аутентифікації. Кроки зазвичай включають:

  1. Декомпіляція APK: Перетворення файлу APK у більш зрозумілий формат (наприклад, Java-код).
  2. Аналіз коду: Пошук реалізації аутентифікації за відбитками пальців та виявлення потенційних вразливостей (наприклад, механізмів резервного копіювання або неналежних перевірок валідації).
  3. Рекомпіляція APK: Після модифікації коду для обходу аутентифікації за відбитками пальців, додаток рекомпілюється, підписується та встановлюється на пристрій для тестування.

Метод 5 – Використання спеціалізованих інструментів аутентифікації

Існують спеціалізовані інструменти та скрипти, призначені для тестування та обходу механізмів аутентифікації. Наприклад:

  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-шифри та посилюють дозволені комбінації аутентифікаторів.

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks