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

This commit is contained in:
Translator 2025-07-28 10:28:27 +00:00
parent 15a96850e8
commit 4a36ae0c7d

View File

@ -3,9 +3,9 @@
{{#include ../../banners/hacktricks-training.md}}
## **Yöntem 1 Kripto Nesne Kullanımı Olmadan Atlatma**
## **Yöntem 1 Kripto Nesnesi Kullanımı Olmadan Atlatma**
Burada odak, kimlik doğrulama sürecinde kritik öneme sahip olan _onAuthenticationSucceeded_ geri çağrısına yöneliktir. WithSecure'daki araştırmacılar, _onAuthenticationSucceeded(...)_ içindeki NULL _CryptoObject_'in atlatılmasını sağlayan bir [Frida scripti](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js) geliştirdiler. Script, metodun çağrılmasıyla birlikte parmak izi kimlik doğrulamasının otomatik olarak atlatılmasını zorlar. Aşağıda, bir Android Parmak İzi bağlamında atlatmayı gösteren basitleştirilmiş bir kod parçası bulunmaktadır; tam uygulama ise [GitHub](https://github.com/St3v3nsS/InsecureBanking) üzerinde mevcuttur.
Burada odak, kimlik doğrulama sürecinde kritik öneme sahip olan _onAuthenticationSucceeded_ geri çağrısındadır. WithSecure'daki araştırmacılar, _onAuthenticationSucceeded(...)_ içindeki NULL _CryptoObject_'in atlatılmasını sağlayan bir [Frida scripti](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js) geliştirdiler. Script, metodun çağrılmasıyla birlikte parmak izi kimlik doğrulamasının otomatik olarak atlatılmasını zorlar. Aşağıda, bir Android Parmak İzi bağlamında atlatmayı gösteren basitleştirilmiş bir kod parçası bulunmaktadır; tam uygulama [GitHub](https://github.com/St3v3nsS/InsecureBanking)'da mevcuttur.
```javascript
biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
@ -20,7 +20,7 @@ frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-byp
```
## **Yöntem 2 İstisna Yönetimi Yaklaşımı**
Another [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) by WithSecure, güvensiz kripto nesne kullanımını atlatmayı ele alıyor. Script, parmak izi ile yetkilendirilmemiş bir _CryptoObject_ ile _onAuthenticationSucceeded_ çağrısını yapar. Uygulama farklı bir şifreleme nesnesi kullanmaya çalışırsa, bir istisna tetiklenecektir. Script, _onAuthenticationSucceeded_ çağrısını yapmaya ve _Cipher_ sınıfındaki _javax.crypto.IllegalBlockSizeException_ ile başa çıkmaya hazırlanır, böylece uygulama tarafından kullanılan sonraki nesnelerin yeni anahtar ile şifrelenmesini sağlar.
Another [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) by WithSecure addresses bypassing insecure crypto object usage. Script, parmak izi ile yetkilendirilmemiş bir _CryptoObject_ ile _onAuthenticationSucceeded_ çağrısını yapar. Uygulama farklı bir şifreleme nesnesi kullanmaya çalışırsa, bir istisna tetiklenecektir. Script, _onAuthenticationSucceeded_ çağrısını yapmaya ve _Cipher_ sınıfındaki _javax.crypto.IllegalBlockSizeException_ ile başa çıkmaya hazırlanır, böylece uygulama tarafından kullanılan sonraki nesnelerin yeni anahtar ile şifrelenmesini sağlar.
Frida script'ini çalıştırmak için komut:
```bash
@ -38,7 +38,7 @@ Hooking FingerprintManager.authenticate()...
Xposed veya Frida gibi enstrümantasyon çerçeveleri, uygulama yöntemlerine çalışma zamanında bağlanmak için kullanılabilir. Parmak izi kimlik doğrulaması için bu çerçeveler:
1. **Kimlik Doğrulama Geri Aramalarını Taklit Etme**: `BiometricPrompt.AuthenticationCallback`'ın `onAuthenticationSucceeded`, `onAuthenticationFailed` veya `onAuthenticationError` yöntemlerine bağlanarak, parmak izi kimlik doğrulama sürecinin sonucunu kontrol edebilirsiniz.
1. **Kimlik Doğrulama Geri Çağrılarını Taklit Etme**: `BiometricPrompt.AuthenticationCallback`'ın `onAuthenticationSucceeded`, `onAuthenticationFailed` veya `onAuthenticationError` yöntemlerine bağlanarak, parmak izi kimlik doğrulama sürecinin sonucunu kontrol edebilirsiniz.
2. **SSL Pinning'i Atlatma**: Bu, bir saldırganın istemci ile sunucu arasındaki trafiği kesip değiştirmesine olanak tanır, bu da kimlik doğrulama sürecini değiştirebilir veya hassas verileri çalabilir.
Frida için örnek komut:
@ -50,7 +50,7 @@ frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
Tersine mühendislik araçları olan `APKTool`, `dex2jar` ve `JD-GUI`, bir Android uygulamasını decompile etmek, kaynak kodunu okumak ve kimlik doğrulama mekanizmasını anlamak için kullanılabilir. Adımlar genellikle şunları içerir:
1. **APK'yı Decompile Etme**: APK dosyasını daha okunabilir bir formata (Java kodu gibi) dönüştürme.
2. **Kodu Analiz Etme**: Parmak izi kimlik doğrulamasının uygulanışını arama ve potansiyel zayıflıkları (yedekleme mekanizmaları veya uygunsuz doğrulama kontrolleri gibi) belirleme.
2. **Kodu Analiz Etme**: parmak izi kimlik doğrulamasının uygulanışını arama ve potansiyel zayıflıkları (geri dönüş mekanizmaları veya uygunsuz doğrulama kontrolleri gibi) belirleme.
3. **APK'yı Yeniden Derleme**: Parmak izi kimlik doğrulamasını atlamak için kodu değiştirdikten sonra, uygulama yeniden derlenir, imzalanır ve test için cihaza yüklenir.
## **Yöntem 5 Özel Kimlik Doğrulama Araçları Kullanma**
@ -60,9 +60,54 @@ Kimlik doğrulama mekanizmalarını test etmek ve atlamak için tasarlanmış ö
1. **MAGISK Modülleri**: MAGISK, kullanıcıların cihazlarını rootlamasına ve parmak izleri de dahil olmak üzere donanım düzeyindeki bilgileri değiştirebilen veya taklit edebilen modüller eklemesine olanak tanıyan bir Android aracıdır.
2. **Özel Yapım Betikler**: Android Debug Bridge (ADB) ile etkileşimde bulunmak veya uygulamanın arka ucuyla doğrudan etkileşimde bulunarak parmak izi kimlik doğrulamasını simüle etmek veya atlamak için betikler yazılabilir.
---
## **Yöntem 6 `BiometricPrompt` için Evrensel Frida Hook (API 28-34)**
2023'te CodeShare'da **Universal-Android-Biometric-Bypass** adı verilen bir topluluk Frida betiği ortaya çıktı. Bu betik, `BiometricPrompt.authenticate()`'nin her aşırı yüklemesini ve eski `FingerprintManager.authenticate()`'yi yakalar ve doğrudan **null `CryptoObject` içeren sahte bir `AuthenticationResult` ile `onAuthenticationSucceeded()`'yi tetikler**. API seviyelerine dinamik olarak uyum sağladığı için, hedef uygulama **dönen `CryptoObject` üzerinde hiçbir kriptografik kontrol yapmıyorsa** Android 14 (API 34) üzerinde de çalışır.
```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
```
Anahtar fikirler
* Her şey kullanıcı alanında gerçekleşir kernel açığı veya root gereklidir.
* Saldırı, UI'ya tamamen sessiz kalır: sistem biyometrik diyalogu asla görünmez.
* Azaltma: **her zaman `result.cryptoObject` ve şifreleme/imza doğrulayın, hassas özellikleri açmadan önce**.
## **Yöntem 7 Düşürme / Geri Dönüş Manipülasyonu**
Android 11 ile birlikte, geliştiriciler `setAllowedAuthenticators()` (veya daha eski `setDeviceCredentialAllowed()`) aracılığıyla hangi kimlik doğrulayıcıların kabul edilebilir olduğunu belirtebilir. Bir **çalışma zamanı hooking** saldırısı, `allowedAuthenticators` bit alanını daha zayıf `BIOMETRIC_WEAK | DEVICE_CREDENTIAL` değerine zorlayabilir:
```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
};
```
Eğer uygulama dönen `AuthenticationResult`'ı **doğrulamıyorsa**, bir saldırgan basitçe _PIN/Pattern_ yedekleme butonuna basabilir veya hatta erişim sağlamak için yeni bir zayıf biyometrik kaydedebilir.
## **Yöntem 8 Satıcı / Çekirdek Düzeyinde CVE'ler**
Android güvenlik bültenlerini takip edin: birkaç son çekirdek tarafı hatası, parmak izi HAL'i aracılığıyla yerel ayrıcalık yükseltmesine izin veriyor ve etkili bir şekilde **sensör boru hattını devre dışı bırakıyor veya kısaltıyor**. Örnekler şunlardır:
* **CVE-2023-20995** `CustomizedSensor.cpp` içindeki `captureImage`'deki mantık hatası (Pixel 8, Android 13) kullanıcı etkileşimi olmadan kilit atlamaya izin veriyor.
* **CVE-2024-53835 / CVE-2024-53840** “olağandışı bir kök neden nedeniyle olası biyometrik atlama” **Aralık 2024 Pixel bülteni** ile yamanmıştır.
Bu güvenlik açıkları kilit ekranını hedeflese de, köklenmiş bir testçi bunları uygulama düzeyindeki hatalarla birleştirerek uygulama içi biyometrikleri atlayabilir.
---
### Geliştiriciler için Güçlendirme Kontrol Listesi (Hızlı Pentester Notları)
* **Keystore** anahtarları oluştururken `setUserAuthenticationRequired(true)` ve `setInvalidatedByBiometricEnrollment(true)`'yi zorunlu kılın. Anahtar kullanılmadan önce geçerli bir biyometrik gereklidir.
* **null veya beklenmeyen şifre / imza** ile bir `CryptoObject`'u reddedin; bunu ölümcül bir kimlik doğrulama hatası olarak değerlendirin.
* `BiometricPrompt` kullanırken, `BIOMETRIC_STRONG`'u tercih edin ve yüksek riskli işlemler için **asla `BIOMETRIC_WEAK` veya `DEVICE_CREDENTIAL`'a geri dönmeyin**.
* En son `androidx.biometric` sürümünü (≥1.2.0-beta02) sabitleyin son sürümler otomatik null-şifre kontrolleri ekler ve izin verilen kimlik doğrulayıcı kombinasyonlarını sıkılaştırır.
## Referanslar
- [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}}