ਰੂਟ ਤੋਂ ਬਿਨਾਂ 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 ਇੰਟਰਫ਼ੇਸ ਸਾਬਤ ਕਰਦੇ ਹਨ ਕਿ ਐਪ ਟ੍ਰੈਫ਼ਿਕ ਲੈ ਸਕਦੀ ਹੈ, ਇਹ ਨਹੀਂ ਕਿ ਉਹ ਇਸਨੂੰ ਇਨਕ੍ਰਿਪਟ ਕਰਦੀ ਹੈ, ਸਾਥੀ ਦੀ ਪ੍ਰਮਾਣਿਕਤਾ ਜਾਂਚਦੀ ਹੈ ਜਾਂ ਸਾਫ਼-ਸੁਥਰਾ ਬਹਾਲ ਹੁੰਦੀ ਹੈ। ਇਹ ਲਾਗੂ ਕਰਨ ਦੇ ਗੁਣ ਹਨ, ਅਤੇ ਇਮਾਨਦਾਰ ਸਮੀਖਿਆ ਉੱਥੇ ਹੀ ਸਮਾਂ ਲੰਘਾਉਂਦੀ ਹੈ।
ਗ਼ੈਰ-ਜ਼ਰੂਰੀ ਰੂਟ ਬੇਨਤੀ ਨਤੀਜੇ ਨੂੰ ਕਿਲ ਸਵਿੱਚ ਕਹਿਣ ਨਾਲ ਜਾਇਜ਼ ਨਹੀਂ ਬਣਦੀ, ਅਤੇ ਸਹਿਮਤੀ ਗੱਲਬਾਤ ਸੁਰੱਖਿਆ ਆਡਿਟ ਨਹੀਂ। ਤਿੰਨੇ ਇਜਾਜ਼ਤਾਂ ਵੱਖਰੀਆਂ ਰੱਖੋ ਅਤੇ ਹਰ ਦਾਅਵਾ ਜਾਂਚਯੋਗ ਬਣ ਜਾਂਦਾ ਹੈ।