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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Method 1 – Bypassing with No Crypto Object Usage
Основна увага тут приділяється onAuthenticationSucceeded зворотному виклику, який є критично важливим у процесі аутентифікації. Дослідники з WithSecure розробили Frida script, що дозволяє обійти NULL CryptoObject в onAuthenticationSucceeded(...). Скрипт примусово викликає автоматичне обхід аутентифікації за відбитком пальця під час виклику методу. Нижче наведено спрощений фрагмент, що демонструє обхід у контексті Android Fingerprint, повна програма доступна на 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 script від WithSecure вирішує проблему обходу небезпечного використання криптооб'єктів. Скрипт викликає onAuthenticationSucceeded з CryptoObject, який не був авторизований за допомогою відбитка пальця. Якщо додаток намагається використовувати інший об'єкт шифру, це викличе виключення. Скрипт готується викликати onAuthenticationSucceeded і обробляти javax.crypto.IllegalBlockSizeException у класі Cipher, забезпечуючи, щоб наступні об'єкти, які використовуються додатком, були зашифровані новим ключем.
Команда для запуску скрипта Frida:
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, можуть бути використані для підключення до методів додатка під час виконання. Для аутентифікації за відбитком пальця ці фреймворки можуть:
- Мокати Виклики Аутентифікації: Підключившись до методів
onAuthenticationSucceeded
,onAuthenticationFailed
абоonAuthenticationError
класуBiometricPrompt.AuthenticationCallback
, ви можете контролювати результат процесу аутентифікації за відбитком пальця. - Обійти SSL Пінінг: Це дозволяє зловмиснику перехоплювати та змінювати трафік між клієнтом і сервером, потенційно змінюючи процес аутентифікації або крадучи чутливі дані.
Приклад команди для Frida:
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
Метод 4 – Реверс-інжиніринг та модифікація коду
Інструменти реверс-інжинірингу, такі як APKTool
, dex2jar
та JD-GUI
, можуть бути використані для декомпіляції Android-додатку, читання його вихідного коду та розуміння його механізму аутентифікації. Кроки зазвичай включають:
- Декомпіляція APK: Перетворення файлу APK у більш зрозумілий формат (наприклад, Java-код).
- Аналіз коду: Пошук реалізації аутентифікації за відбитками пальців та виявлення потенційних вразливостей (наприклад, механізмів резервного копіювання або неналежних перевірок валідації).
- Рекомпіляція APK: Після модифікації коду для обходу аутентифікації за відбитками пальців, додаток рекомпілюється, підписується та встановлюється на пристрій для тестування.
Метод 5 – Використання спеціалізованих інструментів аутентифікації
Існують спеціалізовані інструменти та скрипти, призначені для тестування та обходу механізмів аутентифікації. Наприклад:
- MAGISK Модулі: MAGISK – це інструмент для Android, який дозволяє користувачам рутувати свої пристрої та додавати модулі, які можуть модифікувати або підробляти інформацію на апаратному рівні, включаючи відбитки пальців.
- Скрипти на замовлення: Скрипти можуть бути написані для взаємодії з 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
.
# 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
:
// 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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.