
नैतिक हैकिंग के लिए Android deeplink, Intent और WebView bridge मूल्यांकन सहायक
Android डीपलिंक, Intent और WebView ब्रिज आकलन सहायक
apk-interceptor एक पोर्टेबल Android परीक्षण APK है जो अधिकृत एप्लिकेशन सुरक्षा आकलन के लिए है। यह सुरक्षा इंजीनियरों को यह सत्यापित करने में मदद करता है कि कोई Android ऐप बाहरी प्रवेश बिंदुओं जैसे कस्टम URI स्कीम, डीपलिंक, एक्सपोर्टेड Activity और WebView JavaScript ब्रिज को कैसे संभालता है।
यह उपकरण जानबूझकर सीमित है:
android.permission.INTERNET घोषित नहीं करताcontent:// पेलोड फ़ाइल प्रदान करता हैAndroid एप्लिकेशन सुरक्षा आकलन के दौरान, स्थैतिक विश्लेषण के कई निष्कर्षों की पुष्टि से पहले अभी भी एक छोटे ऑन-डिवाइस प्रूफ ऑफ कॉन्सेप्ट की आवश्यकता होती है: कस्टम URI स्कीम पंजीकृत करना, स्पष्ट Intent भेजना, स्थानीय content:// पेलोड प्रदान करना, या यह जाँचना कि क्या JavaScript WebView ब्रिज तक पहुँच सकता है।
हर मामले के लिए एक नया अस्थायी परीक्षण ऐप बनाना दोहराव वाला और त्रुटि-प्रवण है। मैनिफेस्ट प्रविष्टियों, अथॉरिटी, URI अनुदान, पैकेज नाम या Intent निर्माण में छोटे अंतर सत्यापन को धीमा कर सकते हैं और परिणामों को पुनरुत्पादित करना कठिन बना सकते हैं।
apk-interceptor को उस पुष्टिकरण चरण को दोहराने योग्य बनाने के लिए बनाया गया था। हर आकलन के लिए नया PoC APK लिखने के बजाय, आप इस उपकरण को आवश्यक अधिकृत स्कीम या एप्लिकेशन ID के साथ बनाते हैं, डिवाइस पर परीक्षण चलाते हैं, और कार्यप्रवाह को डिज़ाइन द्वारा सीमित रखते हैं: कोई INTERNET अनुमति नहीं, कोई बाहरी डेटा ट्रांसमिशन नहीं, कोई शेल निष्पादन नहीं और कोई root निर्भरता नहीं।
apk-interceptor इन आकलन कार्यों के लिए उपयोगी है:
विस्तृत भेद्यता वॉकथ्रू:
content:// के माध्यम से WebView JavaScript ब्रिज एक्सपोज़रऐप भेजे गए Intents, प्राप्त डीपलिंक, ब्रिज कॉलबैक, JavaScript परिणाम और त्रुटियों के लिए एक इन-मेमोरी आकलन लॉग रखता है। ऐप प्रोसेस बंद होने पर लॉग गायब हो जाते हैं। चूँकि लॉग संग्रहीत नहीं होते, काम करते समय स्क्रीनशॉट या स्क्रीन रिकॉर्डिंग के साथ साक्ष्य कैप्चर करें।
apk-interceptor एक पुष्टिकरण उपकरण है, न कि खोज या शोषण ढांचा। यह मानता है कि आप पहले से जानते हैं कि स्थैतिक विश्लेषण से क्या परीक्षण करना है (स्कीम, Activity क्लास, ब्रिज नाम), और आपको पहुँच क्षमता सत्यापित करने और साक्ष्य कैप्चर करने का एक सुरक्षित, ऑन-डिवाइस तरीका देता है। इसे आकलन डिवाइस पर स्थापित करने और यहाँ तक कि क्लाइंट के साथ साझा करने के लिए बनाया गया है, इसलिए इसमें कोई INTERNET अनुमति, शेल निष्पादन, डेटा एक्सफिल्ट्रेशन या root आवश्यकता नहीं है।
सामान्य Android टूलिंग के साथ यह कहाँ स्थित है:
दो क्षेत्र जहाँ apk-interceptor का विकल्पों पर सबसे स्पष्ट लाभ है:
adb/स्थैतिक विश्लेषण नहीं दिखा सकता।content:// → WebView ब्रिज सत्यापन: एक गैर-एक्सपोर्टेड, एकल-फ़ाइल प्रदाता जिसका पेलोड केवल अस्थायी Intent रीड अनुदान के माध्यम से वितरित किया जाता है, साथ ही पेलोड सिंटैक्स को पहले मान्य करने के लिए एक स्थानीय सेल्फ-टेस्ट WebView।apk-interceptor भेजने और इंटरसेप्ट करने को अलग तरह से व्यवहार करता है, और उपयोग से पहले यह सबसे महत्वपूर्ण बात है:
| क्रिया | मॉड्यूल | क्या बिल्ड समय पर कस्टम स्कीम आवश्यक है? |
|---|---|---|
| किसी अन्य ऐप को Intent या डीपलिंक भेजें | Sender | नहीं, रनटाइम पर कोई भी URI, पैकेज या Activity टाइप करें |
| किसी कस्टम स्कीम के लिए डीपलिंक इंटरसेप्ट (प्राप्त) करें | Interceptor | हाँ, स्कीम बिल्ड समय पर APK में निर्धारित की जाती है |
मूल्यांकित ऐप को एक क्राफ्टेड डीपलिंक भेजने के लिए, आपको पुनर्निर्माण करने की आवश्यकता नहीं है: Sender टैब के Implicit Deeplink मोड का उपयोग करें और कोई भी URI टाइप करें।
एक डीपलिंक इंटरसेप्ट करने के लिए, यानी Android को एक कस्टम स्कीम को apk-interceptor की ओर रूट करने देना ताकि आप संभावित स्कीम-हाइजैक देख सकें, आपको APK को उस स्कीम के साथ --scheme के माध्यम से बनाना होगा। स्कीम जानबूझकर बिल्ड समय पर निर्धारित की जाती है (एक डिज़ाइन गार्डरेल); apk-interceptor रनटाइम पर मनमानी स्कीम कभी पंजीकृत नहीं करता। यदि आप जिस स्कीम का आकलन कर रहे हैं उसे बदलते हैं, तो पुनर्निर्माण करें और पुनः स्थापित करें।
adbAPK को उस कस्टम URI स्कीम के साथ बनाएं जिसका आकलन करने के लिए आप अधिकृत हैं:
./build-interceptor.sh --scheme <authorized_custom_scheme>
adb install ./out/apk-interceptor-<authorized_custom_scheme>-debug.apk
वैकल्पिक बिल्ड फ़्लैग:
./build-interceptor.sh \
--scheme <authorized_custom_scheme> \
--app-id <custom.application.id> \
--output ./out
--app-id बिल्ड समय पर स्थापित एप्लिकेशन ID (डिवाइस पर पैकेज पहचान और content://<applicationId>.payload अथॉरिटी) सेट करता है। डिफ़ॉल्ट com.sterrasec.apkinterceptor है। जब आपको विभिन्न आकलनों के लिए कई अलग-अलग इंस्टॉल करने योग्य बिल्ड की आवश्यकता हो, तो इसे --app-id से ओवरराइड करें। Windows समकक्ष build-interceptor.bat है।
डिफ़ॉल्ट स्कीम intercept-poc-example एक हानिरहित प्लेसहोल्डर है। बिल्ड स्क्रिप्ट उस डिफ़ॉल्ट स्कीम के साथ आकलन APK बनाने से इनकार करती है।
प्रत्येक ऐप संस्करण के पहले लॉन्च पर, apk-interceptor एक अधिकृत-उपयोग संवाद दिखाता है। I understand पर टैप करने के बाद, वही संस्करण संवाद दोबारा नहीं दिखाता। Sender टैब अभी भी एक स्थायी चेतावनी दिखाता है क्योंकि यह अन्य ऐप्स को Intent भेज सकता है।
| Sender | Payload | Interceptor |
|---|---|---|
![]() | ![]() | ![]() |
इस टैब का उपयोग कस्टम URI स्कीम इंटरसेप्शन सत्यापित करने के लिए करें।
यह क्या दिखाता है:
मूल कार्यप्रवाह:
Send Test Deeplink के बारे में: यह हमेशा एक निश्चित test होस्ट के साथ <scheme>://test?<your params> भेजता है, इसलिए इसका उद्देश्य यह पुष्टि करना है कि apk-interceptor स्कीम प्राप्त करता है और लॉग करता है, न कि मूल्यांकित ऐप के विशिष्ट डीपलिंक रूट को चलाना। मूल्यांकित ऐप के आवश्यक होस्ट या पथ से मेल खाने वाली क्राफ्टेड डीपलिंक भेजने के लिए, Sender टैब के Implicit Deeplink मोड का उपयोग करें।
adb उदाहरण:
adb shell am start -W \
-a android.intent.action.VIEW \
-d 'my-authorized-scheme://test?source=adb\&message=hello%20world'
adb shell के माध्यम से कई query पैरामीटर भेजते समय \& का उपयोग करें; अन्यथा डिवाइस शेल & को कमांड विभाजक मान सकता है।
अपेक्षित परिणाम:
RECEIVED लॉग प्रविष्टि दिखाई देती हैइस टैब का उपयोग अधिकृत परीक्षण के दौरान नियंत्रित Intent भेजने के लिए करें।
मोड:
Intent(ACTION_VIEW, Uri.parse(uri)) भेजता हैफ़ील्ड और नियंत्रण:
इम्प्लिसिट डीपलिंक कार्यप्रवाह:
एक्सप्लिसिट Activity कार्यप्रवाह:
नोट:
content:// संलग्नक तब उपयोगी होता है जब आप परीक्षण कर रहे हों कि कोई लक्ष्य Activity अविश्वसनीय Intent डेटा को WebView तक पहुँचाती है या नहीं।data के रूप में वितरित किया जाता है, जो Implicit Deeplink मोड में आपके द्वारा टाइप किए गए URI को अधिलेखित कर देगा, इसलिए विकल्प वहाँ छिपा है।PayloadProvider एक्सपोर्टेड नहीं है। मूल्यांकित ऐप संलग्न content:// पेलोड को केवल इसलिए पढ़ सकता है क्योंकि Intent उसे FLAG_GRANT_READ_URI_PERMISSION के माध्यम से अस्थायी पढ़ने की पहुँच प्रदान करता है। उस फ़्लैग को सक्षम रखें, और URI को Intent के माध्यम से वितरित करें। किसी अन्य तरीके से खोला गया content:// URI किसी अन्य ऐप द्वारा पठनीय नहीं होगा।इस टैब का उपयोग स्थानीय HTML पेलोड बनाने और apk-interceptor के स्वयं के सेल्फ-टेस्ट WebView में JavaScript ब्रिज सिंटैक्स मान्य करने के लिए करें।
इसमें क्या है:
content:// URIउत्पन्न पेलोड URI प्रारूप:
content://<applicationId>.payload/current.html
प्रदाता केवल इस निश्चित फ़ाइल को प्रदान करता है:
filesDir/payloads/current.html
पेलोड सेल्फ-टेस्ट कार्यप्रवाह:
localBridge।BRIDGE_RESULT, console.log और evaluateJavascript result प्रविष्टियों की समीक्षा करें।उदाहरण सेल्फ-टेस्ट JavaScript:
console.log("payload loaded");
window.localBridge.logResult(window.localBridge.getInfo());
सेल्फ-टेस्ट ब्रिज निम्नलिखित उजागर करता है:
window.<bridgeName>.logResult("message");
window.<bridgeName>.getInfo();
महत्वपूर्ण सीमा:
सेल्फ-टेस्ट WebView पुष्टि करता है कि आपका स्थानीय पेलोड और ब्रिज-कॉल सिंटैक्स apk-interceptor के अंदर काम करते हैं। यह नहीं देख सकता कि किसी अन्य ऐप के WebView ने आपका पेलोड निष्पादित किया या अपना स्वयं का ब्रिज कॉल किया। मूल्यांकित ऐप के लिए, उस ऐप के UI, लॉग, परीक्षण हुक या Chrome DevTools के माध्यम से सत्यापित करें यदि ऐप डिबग करने योग्य है।
जोखिम:
एक Android ऐप सत्यापित App Link के बजाय एक कस्टम URI स्कीम पंजीकृत करता है। कोई भी अन्य ऐप समान स्कीम पंजीकृत कर सकता है, इसलिए Android एक ऐप चयनकर्ता दिखा सकता है या लिंक को किसी अन्य ऐप पर रूट कर सकता है।
जाँचने के लिए apk-interceptor का उपयोग करें:
चरण:
कैप्चर करने के लिए साक्ष्य:
जोखिम:
मूल्यांकित ऐप पर्याप्त सत्यापन के बिना नेविगेशन, URL लोडिंग, फीचर फ्लैग, खाता चयन या रेंडरिंग के लिए डीपलिंक पैरामीटर पर भरोसा करता है।
जाँचने के लिए apk-interceptor का उपयोग करें:
चरण:
उदाहरण प्लेसहोल्डर:
my-authorized-scheme://open?next=https%3A%2F%2Fauthorized-test.example%2Flanding
वास्तविक तृतीय-पक्ष डोमेन या खातों का उपयोग न करें जब तक कि वे स्पष्ट रूप से दायरे में न हों।
जोखिम:
एक एक्सपोर्टेड Activity कॉलर, उपयोगकर्ता स्थिति या आवश्यक प्राधिकरण को सत्यापित किए बिना संवेदनशील क्रियाएँ करती है या संवेदनशील डेटा प्रदर्शित करती है।
जाँचने के लिए apk-interceptor का उपयोग करें:
चरण:
content:// पेलोड URI संलग्न करें।कैप्चर करने के लिए साक्ष्य:
content:// के माध्यम से WebView JavaScript ब्रिज एक्सपोज़रजोखिम:
मूल्यांकित ऐप अविश्वसनीय content:// Intent डेटा को एक WebView में लोड करता है जो addJavascriptInterface के माध्यम से JavaScript ब्रिज भी उजागर करता है।
जाँचने के लिए apk-interceptor का उपयोग करें:
content:// के रूप में वितरित किया जा सकता हैचरण:
महत्वपूर्ण सीमा:
apk-interceptor किसी अन्य ऐप से परिणाम प्राप्त नहीं कर सकता जब तक कि वह ऐप स्पष्ट रूप से उन्हें वापस न करे या प्रदर्शित न करे। उपकरण स्थानीय पेलोड वितरित करने और सिंटैक्स मान्य करने के लिए डिज़ाइन किया गया है, न कि डेटा एक्सफिल्ट्रेट करने के लिए।
सत्यापित करें कि APK नेटवर्क एक्सेस का अनुरोध नहीं करता:
aapt dump permissions ./out/apk-interceptor-<scheme>-debug.apk
अपेक्षित: कोई android.permission.INTERNET नहीं।
apk-interceptor पर स्पष्ट रूप से एक डीपलिंक ट्रिगर करें:
adb shell am start -W \
-n com.sterrasec.apkinterceptor/.InterceptActivity \
-a android.intent.action.VIEW \
-d 'my-authorized-scheme://test?source=adb'
Android के रिज़ॉल्वर के माध्यम से एक डीपलिंक ट्रिगर करें:
adb shell am start -W \
-a android.intent.action.VIEW \
-d 'my-authorized-scheme://test?source=adb'
स्पष्ट कमांड InterceptActivity व्यवहार की पुष्टि करता है। इम्प्लिसिट कमांड मैनिफेस्ट इंटेंट-फ़िल्टर और रिज़ॉल्वर व्यवहार की पुष्टि करता है।
यूनिट परीक्षण Robolectric के साथ JVM पर चलते हैं, इसलिए किसी डिवाइस या एमुलेटर की आवश्यकता नहीं होती। वे PayloadProvider को कवर करते हैं, जिसमें पाथ-व्हाइटलिस्टिंग और ट्रैवर्सल जाँच शामिल हैं जो प्रदाता को एकमात्र current.html पेलोड के अलावा कुछ भी प्रदान करने से रोकती हैं।
./gradlew testDebugUnitTest
परीक्षण परिणाम app/build/reports/tests/testDebugUnitTest/index.html पर लिखे जाते हैं। यही कार्य CI में main पर प्रत्येक push और pull request पर चलता है।
android.permission.INTERNET नहीं/current.html PayloadProvider द्वारा प्रदान किया जाता हैMIT
| परिदृश्य | मॉड्यूल | यह क्या सत्यापित करने में मदद करता है |
|---|
| कस्टम URI स्कीम हाइजैकिंग | Interceptor | क्या कोई अन्य ऐप समान कस्टम स्कीम पंजीकृत कर सकता है और लिंक प्राप्त कर सकता है |
| डीपलिंक पैरामीटर हैंडलिंग | Sender | क्या मूल्यांकित ऐप असुरक्षित query/path पैरामीटर स्वीकार करता है |
| एक्सपोर्टेड Activity एक्सपोज़र | Sender | क्या कोई एक्सपोर्टेड Activity सीधे किसी अन्य ऐप द्वारा लॉन्च की जा सकती है |
content:// के माध्यम से WebView ब्रिज एक्सपोज़र | Payload + Sender | क्या कोई स्थानीय HTML पेलोड WebView JavaScript ब्रिज तक पहुँच सकता है |
| स्थानीय पेलोड सिंटैक्स जाँच | Payload | क्या आपका HTML/JS पेलोड सेल्फ-टेस्ट WebView में चलता है |
| उपकरण | भूमिका | apk-interceptor कैसे भिन्न है |
|---|
| jadx / MobSF / QARK / Semgrep | कमजोर प्रवेश बिंदु खोजें (स्थैतिक) | apk-interceptor स्कैन या डीकंपाइल नहीं करता; यह उस निष्कर्ष की पुष्टि करता है जो आपके पास पहले से है |
deep-C / NSdeepLink / adb am start | डीपलिंक की गणना करें और भेजें | apk-interceptor भेज भी सकता है, लेकिन इसका विभेदक एक हाइजैक की गई स्कीम को प्राप्त करना और सटीक URI और पैरामीटर दिखाना है |
| drozer | सामान्य ऑन-डिवाइस आक्रमण ढांचा (एजेंट + अक्सर root) | apk-interceptor एक हल्का APK है जिसमें जानबूझकर सुरक्षा गार्डरेल, संकीर्ण दायरा और आसान क्लाइंट-सुरक्षित वितरण है |
| Metasploit / Frida | हथियार बनाना या हुक करना (जैसे addJavascriptInterface RCE) | apk-interceptor केवल एक हानिरहित पेलोड के साथ ब्रिज पहुँच क्षमता की जाँच करता है; यह कभी एक्सफिल्ट्रेट नहीं करता या शेल कमांड निष्पादित नहीं करता |