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

This commit is contained in:
Translator 2025-07-28 10:28:44 +00:00
parent aece53ec30
commit 757be9fbec

View File

@ -1,10 +1,10 @@
# बायपास बायोमेट्रिक ऑथेंटिकेशन (एंड्रॉइड)
# बायपास बायोमेट्रिक प्रमाणीकरण (एंड्रॉइड)
{{#include ../../banners/hacktricks-training.md}}
## **विधि 1 बिना क्रिप्टो ऑब्जेक्ट उपयोग के बायपास करना**
यहाँ ध्यान _onAuthenticationSucceeded_ कॉलबैक पर है, जो ऑथेंटिकेशन प्रक्रिया में महत्वपूर्ण है। WithSecure के शोधकर्ताओं ने एक [Frida स्क्रिप्ट](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js) विकसित की, जो _onAuthenticationSucceeded(...)_ में NULL _CryptoObject_ के बायपास की अनुमति देती है। यह स्क्रिप्ट विधि के आह्वान पर फिंगरप्रिंट ऑथेंटिकेशन का स्वचालित बायपास करने के लिए मजबूर करती है। नीचे एक सरल स्निप्पेट है जो एंड्रॉइड फिंगरप्रिंट संदर्भ में बायपास को प्रदर्शित करता है, पूरी एप्लिकेशन [GitHub](https://github.com/St3v3nsS/InsecureBanking) पर उपलब्ध है।
यहाँ ध्यान _onAuthenticationSucceeded_ कॉलबैक पर है, जो प्रमाणीकरण प्रक्रिया में महत्वपूर्ण है। WithSecure के शोधकर्ताओं ने एक [Frida स्क्रिप्ट](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js) विकसित की, जो _onAuthenticationSucceeded(...)_ में NULL _CryptoObject_ के बायपास की अनुमति देती है। यह स्क्रिप्ट विधि के आह्वान पर फिंगरप्रिंट प्रमाणीकरण का स्वचालित बायपास करने के लिए मजबूर करती है। नीचे एक सरल स्निप्पेट है जो एंड्रॉइड फिंगरप्रिंट संदर्भ में बायपास को प्रदर्शित करता है, पूरी एप्लिकेशन [GitHub](https://github.com/St3v3nsS/InsecureBanking) पर उपलब्ध है।
```javascript
biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
@ -21,11 +21,11 @@ frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-byp
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. The script invokes _onAuthenticationSucceeded_ with a _CryptoObject_ that hasn't been authorized by a fingerprint. If the application tries to use a different cipher object, it will trigger an exception. The script prepares to invoke _onAuthenticationSucceeded_ and handle the _javax.crypto.IllegalBlockSizeException_ in the _Cipher_ class, ensuring subsequent objects used by the application are encrypted with the new key.
Command to run the Frida script:
Frida स्क्रिप्ट चलाने के लिए कमांड:
```bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
```
फिंगरप्रिंट स्क्रीन पर पहुँचने और `authenticate()` शुरू करने पर, बायपास सक्रिय करने के लिए Frida कंसोल में `bypass()` टाइप करें:
फिंगरप्रिंट स्क्रीन पर पहुँचने और `authenticate()` के आरंभ होने पर, बायपास सक्रिय करने के लिए Frida कंसोल में `bypass()` टाइप करें:
```
Spawning com.generic.insecurebankingfingerprint...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> Hooking BiometricPrompt.authenticate()...
@ -33,12 +33,12 @@ Hooking BiometricPrompt.authenticate2()...
Hooking FingerprintManager.authenticate()...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> bypass()
```
## **विधि 3 इंस्ट्रुमेंटेशन फ्रेमवर्क**
## **Method 3 Instrumentation Frameworks**
इंस्ट्रुमेंटेशन फ्रेमवर्क जैसे Xposed या Frida का उपयोग रनटाइम पर एप्लिकेशन विधियों में हुक करने के लिए किया जा सकता है। फिंगरप्रिंट प्रमाणीकरण के लिए, ये फ्रेमवर्क कर सकते हैं:
Instrumentation frameworks जैसे Xposed या Frida का उपयोग रनटाइम पर एप्लिकेशन विधियों में हुक करने के लिए किया जा सकता है। फिंगरप्रिंट प्रमाणीकरण के लिए, ये फ्रेमवर्क कर सकते हैं:
1. **प्रमाणीकरण कॉलबैक को मॉक करें**: `BiometricPrompt.AuthenticationCallback` के `onAuthenticationSucceeded`, `onAuthenticationFailed`, या `onAuthenticationError` विधियों में हुक करके, आप फिंगरप्रिंट प्रमाणीकरण प्रक्रिया के परिणाम को नियंत्रित कर सकते हैं।
2. **SSL पिनिंग को बायपास करें**: यह एक हमलावर को क्लाइंट और सर्वर के बीच ट्रैफ़िक को इंटरसेप्ट और संशोधित करने की अनुमति देता है, संभावित रूप से प्रमाणीकरण प्रक्रिया को बदलने या संवेदनशील डेटा चुराने के लिए।
1. **Authentication Callbacks को Mock करें**: `BiometricPrompt.AuthenticationCallback` के `onAuthenticationSucceeded`, `onAuthenticationFailed`, या `onAuthenticationError` विधियों में हुक करके, आप फिंगरप्रिंट प्रमाणीकरण प्रक्रिया के परिणाम को नियंत्रित कर सकते हैं।
2. **SSL Pinning को Bypass करें**: यह एक हमलावर को क्लाइंट और सर्वर के बीच ट्रैफ़िक को इंटरसेप्ट और संशोधित करने की अनुमति देता है, संभावित रूप से प्रमाणीकरण प्रक्रिया को बदलने या संवेदनशील डेटा चुराने के लिए।
Frida के लिए उदाहरण कमांड:
```bash
@ -57,11 +57,56 @@ frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
प्रमाणीकरण तंत्र का परीक्षण और बायपास करने के लिए विशेष उपकरण और स्क्रिप्ट डिज़ाइन की गई हैं। उदाहरण के लिए:
1. **MAGISK मॉड्यूल**: MAGISK एक Android के लिए उपकरण है जो उपयोगकर्ताओं को अपने उपकरणों को रूट करने और मॉड्यूल जोड़ने की अनुमति देता है जो हार्डवेयर-स्तरीय जानकारी, जिसमें फिंगरप्रिंट शामिल हैं, को संशोधित या स्पूफ कर सकते हैं।
2. **कस्टम-निर्मित स्क्रिप्ट**: स्क्रिप्ट को Android डिबग ब्रिज (ADB) के साथ बातचीत करने या एप्लिकेशन के बैकएंड के साथ सीधे फिंगरप्रिंट प्रमाणीकरण का अनुकरण या बायपास करने के लिए लिखा जा सकता है।
2. **कस्टम-निर्मित स्क्रिप्ट**: स्क्रिप्ट को Android डिबग ब्रिज (ADB) के साथ बातचीत करने या सीधे एप्लिकेशन के बैकएंड के साथ फिंगरप्रिंट प्रमाणीकरण का अनुकरण या बायपास करने के लिए लिखा जा सकता है।
---
## **विधि 6 `BiometricPrompt` (API 28-34) के लिए यूनिवर्सल फ्रिडा हुक**
2023 में एक सामुदायिक फ्रिडा स्क्रिप्ट **Universal-Android-Biometric-Bypass** नाम से CodeShare पर आई। यह स्क्रिप्ट `BiometricPrompt.authenticate()` के हर ओवरलोड के साथ-साथ पुराने `FingerprintManager.authenticate()` को हुक करती है और सीधे **एक निर्मित `AuthenticationResult` के साथ `onAuthenticationSucceeded()` को ट्रिगर करती है जिसमें एक शून्य `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
```
Key ideas
* सब कुछ उपयोगकर्ता स्थान में होता है - कोई कर्नेल एक्सप्लॉइट या रूट की आवश्यकता नहीं है।
* हमला UI के लिए पूरी तरह से चुप रहता है: सिस्टम बायोमेट्रिक डायलॉग कभी नहीं दिखाई देता।
* शमन: **संवेदनशील सुविधाओं को अनलॉक करने से पहले हमेशा `result.cryptoObject` और इसके सिफर/हस्ताक्षर की पुष्टि करें**
## **Method 7 Downgrade / Fallback Manipulation**
Android 11 से शुरू होकर, डेवलपर्स यह निर्दिष्ट कर सकते हैं कि कौन से प्रमाणीकरणकर्ता स्वीकार्य हैं `setAllowedAuthenticators()` (या पुराने `setDeviceCredentialAllowed()`) के माध्यम से। एक **रनटाइम हुकिंग** हमला `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 विक्रेता / कर्नेल-स्तरीय CVEs**
एंड्रॉइड सुरक्षा बुलेटिन पर नज़र रखें: कई हालिया कर्नेल-साइड बग स्थानीय विशेषाधिकार वृद्धि की अनुमति देते हैं जो फिंगरप्रिंट HAL के माध्यम से **सेंसर पाइपलाइन को निष्क्रिय या शॉर्ट-सर्किट** करते हैं। उदाहरणों में शामिल हैं:
* **CVE-2023-20995** `CustomizedSensor.cpp` के `captureImage` में लॉजिक त्रुटि (पिक्सेल 8, एंड्रॉइड 13) जो उपयोगकर्ता इंटरैक्शन के बिना अनलॉक बायपास की अनुमति देती है।
* **CVE-2024-53835 / CVE-2024-53840** “एक असामान्य मूल कारण के कारण संभावित बायोमेट्रिक बायपास” जो **दिसंबर 2024 पिक्सेल बुलेटिन** में पैच किया गया।
हालांकि ये कमजोरियां लॉक-स्क्रीन को लक्षित करती हैं, एक रूटेड परीक्षक उन्हें ऐप-स्तरीय दोषों के साथ जोड़ सकता है ताकि इन-ऐप बायोमेट्रिक्स को बायपास किया जा सके।
---
### डेवलपर्स के लिए हार्डनिंग चेकलिस्ट (त्वरित पेंटेस्टर नोट्स)
* **Keystore** कुंजियों को उत्पन्न करते समय `setUserAuthenticationRequired(true)` और `setInvalidatedByBiometricEnrollment(true)` को लागू करें। कुंजी का उपयोग करने से पहले एक मान्य बायोमेट्रिक की आवश्यकता होती है।
* **null या अप्रत्याशित सिफर / हस्ताक्षर** के साथ `CryptoObject` को अस्वीकार करें; इसे एक घातक प्रमाणीकरण त्रुटि के रूप में मानें।
* `BiometricPrompt` का उपयोग करते समय, `BIOMETRIC_STRONG` को प्राथमिकता दें और उच्च-जोखिम वाले कार्यों के लिए **कभी भी `BIOMETRIC_WEAK` या `DEVICE_CREDENTIAL` पर वापस न जाएं**
* नवीनतम `androidx.biometric` संस्करण (≥1.2.0-beta02) को पिन करें हाल के रिलीज़ स्वचालित null-cipher जांच जोड़ते हैं और अनुमत प्रमाणीकरण संयोजनों को कड़ा करते हैं।
## संदर्भ
- [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}}