ரூட் இல்லாத 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 வலையமைப்பு, எப்போதும் இயங்கும் தொகுப்பு மற்றும் பூட்டு அமைக்கப்பட்டுள்ளதா என்பதைக் காட்டுகின்றன. இவை படிக்க மட்டுமேயான அவதானிப்புகள்: மதிப்புகள் வடிவமைப்பின் கூற்றுடன் பொருந்தவில்லை என்றால், கூற்று கணினியின் நிலையைப் பற்றியதல்ல, செயலியின் இடைமுகத்தைப் பற்றியது.
தடுப்பு தளத்திற்குச் சொந்தமாக இருக்கலாம்
VPN பயன்படுத்தாத இணைப்புகளைத் தடுக்கும் கொள்கையை Android ஆவணப்படுத்துகிறது. அந்த அமலாக்கம் தளத்தின் ஒப்பந்தம், செயலி சுழற்சியில் இணைப்பை மீண்டும் முயல்வது அல்ல. சுவிட்ச் சாதனத்தின் VPN அமைப்புகளில் „VPN இல்லாமல் இணைப்புகளைத் தடு“ என உள்ளது, நிர்வகிக்கப்பட்ட சாதனத்தில் உரிமையாளர் அதை முழு சுயவிவரத்திற்கும் இயக்கலாம். சந்தைப்படுத்தல் கூற்றை மதிப்பிடும்போது இந்த வேறுபாடு முக்கியம்: வாடிக்கையாளர் பூட்டு ஐகானைக் காட்டி ஆக்ரோஷமாக மீண்டும் இணையலாம், அதேநேரம் நேரடிப் போக்குவரத்து இன்னும் சாத்தியமாக இருக்கும்; அல்லது மூடப்பட்ட செயலிகள் கணினி பூட்டை அமல்படுத்துவதால் ஆஃப்லைனில் இருக்கலாம்.
பூட்டு ஐகானைச் செயலி வரைகிறது, எனவே அது செயலி இணைந்துள்ளதாக நம்புகிறது என்பதை மட்டுமே நிரூபிக்கிறது. வேறு செயலி அதன் வலையமைப்பு அணுகலை இழக்குமா என்பதைத் தளம் தீர்மானிக்கிறது, எனவே பயனுள்ள சோதனை டனல் இயங்கும்போது அந்தச் செயலி தோல்வியடைவதைப் பார்ப்பதாகும்.
செயலி கடையின் „எப்போதும் இயங்கும்“ லேபிளும் அந்த ஒப்பந்தத்தை மாற்றாது. எப்போதும் இயங்கும் மற்றும் பூட்டு ஆகியவை சாதன அமைப்புகள், பெரும்பாலும் சாதன உரிமையாளரால் பயன்படுத்தப்படுகின்றன, விலக்கப்பட்ட செயலிகளுக்கான அவற்றின் நடத்தையைத் தளம் வரையறுக்கிறது. அமைப்பைப் படியுங்கள், பேட்ஜை அல்ல.
வடிவமைப்பு மதிப்பாய்வுக்கான நான்கு கேள்விகள்
முதலில், யார் ஒப்புதல் அளித்தது: எந்தத் தொகுப்பு, எந்தச் சுயவிவரம், மேலும் அது பயனரா அல்லது நிர்வகிக்கப்பட்ட சாதனக் கொள்கையா? இரண்டாவது, செயலி எதைக் கோரியது: எந்த வழிகள், எந்த முகவரிக் குடும்பங்கள், எந்தச் செயலிகள் சேர்க்கப்பட்டன அல்லது விலக்கப்பட்டன? மூன்றாவது, டனல் கிடைக்காதபோது என்ன நடக்கிறது: கணினி தடுக்கிறதா அல்லது போக்குவரத்து அடிப்படை வலையமைப்பிற்குத் திரும்புகிறதா? நான்காவது, செயலி பெறும் பாக்கெட்டுகளுடன் என்ன செய்கிறது?
நான்காவது கேள்வி அனுமதி மாதிரியால் பதிலளிக்க முடியாதது. ஒப்புதலும் TUN இடைமுகமும் செயலி போக்குவரத்தைப் பெற முடியும் என்பதை நிரூபிக்கின்றன, அதை மறையாக்குகிறது, இணையை அங்கீகரிக்கிறது அல்லது தூய்மையாக மீள்கிறது என்பதை அல்ல. இவை செயலாக்கப் பண்புகள், நேர்மையான மதிப்பாய்வு அங்கேயே நேரம் செலவிடுகிறது.
தேவையற்ற ரூட் கோரிக்கை முடிவைக் கில் சுவிட்ச் என்று அழைப்பதால் செல்லுபடியாகாது, ஒப்புதல் உரையாடல் பாதுகாப்புத் தணிக்கை அல்ல. மூன்று அனுமதிகளையும் தனித்தனியாக வைத்திருங்கள், ஒவ்வொரு கூற்றும் சரிபார்க்கக்கூடியதாகும்.