रूट के बिना Android VPN: सहमति, रूट और ब्लॉकिंग किसकी है
सहमति, TUN इंटरफ़ेस और सिस्टम की ब्लॉकिंग नीति तीन अलग अनुमतियाँ हैं। Android VPN ऐप की समीक्षा से पहले पहचानें कि कौन-सा घटक किसका मालिक है।
रूट वह नहीं है जो Android VPN ऐप को ट्रैफ़िक ले जाने, लीक रोकने या रीबूट के बाद टिके रहने देता है। लोग यह सब „ऐप के पास VPN अनुमति है“ में समेट देते हैं, जो तीन अलग तंत्र छिपाता है: उपयोगकर्ता की सहमति, सिस्टम द्वारा बनाया गया पैकेट इंटरफ़ेस, और प्लेटफ़ॉर्म की ब्लॉकिंग नीति जिसे तय करना ऐप का काम नहीं है। Android VPN डिज़ाइन की समीक्षा का अर्थ है यह पूछना कि कोई दावा वास्तव में इन तीन में से किस पर टिका है, क्योंकि हर एक का मालिक और विफलता का तरीका अलग है।
सहमति सिस्टम गतिविधि से आती है
VpnService.prepare() कुछ नहीं देता। सहमति न होने पर यह सिस्टम सहमति गतिविधि को intent लौटाता है, और ऐप वह संवाद खोलता है ताकि उपयोगकर्ता सेवा को स्वीकृति दे सके। ऐप की अपनी प्रक्रिया शुरू करना, मैनिफ़ेस्ट में अनुमति जोड़ना, या कस्टम „VPN सक्षम करें“ स्क्रीन दिखाना अनुमति नहीं बनाता।
अनुमति का दायरा भी सीमित है। यह उपयोगकर्ता प्रोफ़ाइल में एक पैकेज की है, इसलिए निजी प्रतिलिपि और कार्य प्रतिलिपि अलग निर्णय हैं, और डिवाइस का मालिक प्रबंधित प्रोफ़ाइल को निजी से अलग तरह से तैयार कर सकता है। अगर संवाद कभी नहीं दिखता और prepare() null लौटाता है, तो उस प्रोफ़ाइल में उस पैकेज की सहमति पहले से है; यह ऐप के भरोसेमंद होने का सबूत नहीं, केवल यह कि अनुमति मौजूद है।
इंटरफ़ेस एक अनुरोध है जिसे सिस्टम पूरा करता है
सहमति के बाद ऐप VpnService.Builder से बताता है कि क्या चाहता है: पते, रूट, DNS सर्वर, MTU और जहाँ समर्थित हो वहाँ शामिल या बहिष्कृत करने वाले ऐप। establish() सिस्टम से टनल इंटरफ़ेस बनाने और मेल खाता ट्रैफ़िक उसमें भेजने का अनुरोध करता है। रूटिंग निर्णय सिस्टम का है; ऐप फ़ाइल डिस्क्रिप्टर पाता है और फिर पैकेटों के साथ कुछ उपयोगी करना होता है।
| What you observe | Who actually owns it |
|---|---|
| VPN consent dialog | The system, triggered by prepare() |
| Routes, DNS and app lists | The app requests them; the system applies them |
| One active VPN per profile | The platform; a new service replaces the old one |
| Always-on and block-without-VPN | Device policy enforced by the platform |
यह तालिका एक ही जगह पर आर्किटेक्चर है। ऐप पैकेट प्रबंधन में भाग लेता है; इंटरफ़ेस, रूटिंग तालिका या चल सकने वाली सेवाओं की संख्या इसकी नहीं है।
टनल सॉकेट को अपनी ही टनल से बाहर निकलना होता है
एन्क्रिप्टेड ट्रैफ़िक ले जाने वाला कनेक्शन स्वयं एक सॉकेट है। अगर यह उसी इंटरफ़ेस में वापस रूट हो जाए जिसे ऐप ने अभी बनाया है, तो टनल टनल पर निर्भर हो जाती है और रुक जाती है। VpnService.protect() उस सॉकेट को अंतर्निहित नेटवर्क से बाँधता है ताकि वह कैप्चर से बच जाए, इसीलिए सही क्लाइंट पहले हैंडशेक से पहले अपना बाहरी सॉकेट सुरक्षित करता है।
adb shell dumpsys connectivity | grep -i -A5 vpn
adb shell settings get global always_on_vpn_app
adb shell settings get global always_on_vpn_lockdown
ये कमांड इंस्टॉल किया गया VPN नेटवर्क, ऑलवेज़-ऑन पैकेज और यह दिखाते हैं कि लॉकडाउन सेट है या नहीं। ये केवल पढ़ने योग्य अवलोकन हैं: अगर मान डिज़ाइन के दावे से मेल नहीं खाते, तो दावा सिस्टम की स्थिति के बजाय ऐप के इंटरफ़ेस के बारे में है।
ब्लॉकिंग प्लेटफ़ॉर्म की हो सकती है
Android एक नीति का दस्तावेज़ीकरण करता है जो उन कनेक्शनों को ब्लॉक करती है जो VPN का उपयोग नहीं करते। वह प्रवर्तन प्लेटफ़ॉर्म का अनुबंध है, ऐप का लूप में बार-बार कनेक्शन आज़माना नहीं। स्विच डिवाइस की VPN सेटिंग्स में „VPN के बिना कनेक्शन ब्लॉक करें“ के रूप में है, और प्रबंधित डिवाइस पर मालिक इसे पूरे प्रोफ़ाइल के लिए चालू कर सकता है। यह अंतर मार्केटिंग दावे का मूल्यांकन करते समय मायने रखता है: क्लाइंट ताले का आइकन दिखा सकता है और आक्रामक रूप से फिर से जुड़ सकता है जबकि सीधा ट्रैफ़िक अभी भी संभव है, या कवर किए गए ऐप ऑफ़लाइन रह सकते हैं क्योंकि सिस्टम लॉकडाउन लागू कर रहा है।
ताले का आइकन ऐप बनाता है, इसलिए यह केवल साबित करता है कि ऐप मानता है कि वह जुड़ा है। कोई दूसरा ऐप अपनी नेटवर्क पहुँच खोएगा या नहीं, यह प्लेटफ़ॉर्म तय करता है, इसलिए उपयोगी जाँच यह देखना है कि टनल चालू रहने पर वह ऐप विफल होता है।
ऐप स्टोर का „ऑलवेज़ ऑन“ लेबल भी उस अनुबंध की जगह नहीं लेता। ऑलवेज़-ऑन और लॉकडाउन डिवाइस सेटिंग्स हैं, जिन्हें अक्सर डिवाइस का मालिक लागू करता है, और बहिष्कृत ऐप के लिए उनका व्यवहार प्लेटफ़ॉर्म तय करता है। सेटिंग पढ़ें, बैज नहीं।
डिज़ाइन समीक्षा के चार प्रश्न
पहला, किसने सहमति दी: कौन-सा पैकेज, कौन-सी प्रोफ़ाइल, और यह उपयोगकर्ता था या प्रबंधित-डिवाइस नीति? दूसरा, ऐप ने क्या माँगा: कौन-से रूट, कौन-से पता परिवार, कौन-से ऐप शामिल या बहिष्कृत? तीसरा, जब टनल उपलब्ध नहीं है तो क्या होता है: सिस्टम ब्लॉक करता है या ट्रैफ़िक अंतर्निहित नेटवर्क पर लौट जाता है? चौथा, ऐप प्राप्त पैकेटों के साथ क्या करता है?
चौथा प्रश्न वह है जिसका उत्तर अनुमति मॉडल नहीं दे सकता। सहमति और TUN इंटरफ़ेस साबित करते हैं कि ऐप ट्रैफ़िक प्राप्त कर सकता है, यह नहीं कि वह उसे एन्क्रिप्ट करता है, साथी को प्रमाणित करता है या स्वच्छ रूप से पुनर्प्राप्त होता है। ये कार्यान्वयन के गुण हैं, और ईमानदार समीक्षा वहीं समय बिताती है।
अनावश्यक रूट अनुरोध परिणाम को किल स्विच कहने से वैध नहीं हो जाता, और सहमति संवाद सुरक्षा ऑडिट नहीं है। तीनों अनुमतियाँ अलग रखें और हर दावा जाँचने योग्य हो जाता है।