Android chroot VPN: సొరంగం పనిచేస్తుంది, కానీ యాప్లు దాన్ని విస్మరించడం ఎందుకు
chroot మారుస్తుంది మార్గ శోధనను మాత్రమే, కర్నెల్, నెట్వర్క్ నేమ్స్పేస్ లేదా Android యొక్క VPN నమోదును కాదు. దీని నుండి రెండు ఫలితాలు వస్తాయి, రెండూ ప్రజలను ఆశ్చర్యపరుస్తాయి.
మీరు ఫోన్లో chroot కింద నడుస్తున్న Linux పంపిణీని పొంది, దానిలో VPN క్లయింట్ను ఇన్స్టాల్ చేస్తారు, షెల్ సొరంగం పూర్తయిందని ప్రకటిస్తుంది. తర్వాత మీరు బ్రౌజర్కు మారుతారు మరియు ఏమీ జరగనట్లుగా ట్రాఫిక్ మొబైల్ డేటా ద్వారా బయటకు వెళ్తుంది. లేదా దీనికి విరుద్ధంగా: క్లయింట్ Android నిజంగా ఉపయోగిస్తున్న నేమ్స్పేస్లో డిఫాల్ట్ మార్గాన్ని ఉంచినందున ఫోన్లోని ప్రతి యాప్ కనెక్టివిటీని కోల్పోతుంది. ఈ రెండు లక్షణాలు ఒకే మిస్ అయిన భాగం నుండి వస్తాయి, రెండూ VPN క్లయింట్లోని బగ్ కాదు.
షెల్ కనెక్ట్ అయింది అంటుంది, యాప్లు అంగీకరించవు
మొదటి ఫలితం సాధారణమైనది. chroot నుండి తెరిచిన యూజర్-స్పేస్ సొరంగం తన హ్యాండ్షేక్ను పూర్తి చేయగలదు, గణాంకాలను ముద్రించగలదు మరియు అదే షెల్ ఉత్పత్తి చేసే ట్రాఫిక్ను తీసుకెళ్లగలదు, కానీ Android యాప్లు ఫోన్ డిఫాల్ట్ నెట్వర్క్ను ఉపయోగిస్తూనే ఉంటాయి. ఏదీ వాటిని అడ్డుకోవట్లేదు, ఎందుకంటే VPN ఉందని ఏదీ Android కు చెప్పలేదు.
రెండవ ఫలితం ప్రమాదకరమైనది. chroot Android నెట్వర్క్ నేమ్స్పేస్ను పంచుకుంటే, డిఫాల్ట్గా అలా చేస్తుంది, సరిపోయే అధికారాలున్న ప్రక్రియ మొత్తం ఫోన్పై ప్రభావం చూపే మార్గాలను మరియు TUN ఇంటర్ఫేస్ను జోడించగలదు. అప్పుడు సొరంగం ప్రతి యాప్కు పనిచేస్తుంది, మీరు రూట్ చేయాలని అనుకోని వాటితో సహా, మరియు ఫోన్ కనెక్టివిటీ ఇప్పుడు జీవిత చక్ర నిర్వహణ, కనెక్షన్ సూచిక మరియు always-on విధానం లేని డెమన్పై ఆధారపడి ఉంటుంది.
రెండింటిలో ఏది వచ్చిందో ఒకే ఆదేశంతో తెలుసుకోవచ్చు. chroot లోపల ip route ను దాని బయట Android షెల్ నుండి అదే ఆదేశంతో పోల్చండి. ఒకే విధమైన అవుట్పుట్ అంటే chroot హోస్ట్ నేమ్స్పేస్లో ఉంది: అది చేసే ఏదైనా నెట్వర్కింగ్ మార్పు మొత్తం ఫోన్కు వర్తిస్తుంది. భిన్నమైన అవుట్పుట్ అంటే లాంచర్ దానికి నేమ్స్పేస్ను సృష్టించింది, మరియు దాని సొరంగం Android కు నిర్మాణాత్మకంగా అదృశ్యం.
chroot ఏమి మార్చింది, ఏమి మార్చలేదు
| Object | Effect of a chroot |
|---|---|
| Pathname resolution | Changed: lookups start at the new root |
| Kernel and drivers | Unchanged: the phone's kernel, its TUN driver, its limits |
| Network namespace | Unchanged unless the launcher creates one |
| Android VPN registration | Unchanged: no app consented, no VPN is selected |
chroot సిస్టమ్ కాల్ ఒక పని చేస్తుంది: మార్గ నామాలను పరిష్కరించడానికి ఉపయోగించే డైరెక్టరీని మారుస్తుంది. ఇది భద్రతా సరిహద్దు కాదని మ్యాన్ పేజీ స్పష్టంగా చెబుతుంది, ఇంటర్ఫేస్లు, మార్గాలు లేదా VPN స్థితి గురించి ఏమీ చెప్పదు. Linux కంటైనర్ నుండి ప్రజలు ఆశించే ప్రతిదీ — ప్రైవేట్ నెట్వర్క్ స్టాక్, ఫిల్టర్ చేసిన ఫైల్ సిస్టమ్, వనరు పరిమితులు — లాంచర్ ఉపయోగించి ఉండవచ్చు లేదా ఉండకపోవచ్చు అనే ఇతర యంత్రాంగాల నుండి వస్తుంది.
అందుకే chroot VPN ను వేరుచేస్తుంది అనే వాదనలు సాధారణంగా తప్పు ప్రశ్నకు సమాధానమిస్తాయి. సంబంధిత ప్రశ్న ఏమిటంటే ప్రక్రియ ఏ నేమ్స్పేస్లో నడుస్తుంది మరియు ఏ SELinux డొమైన్కు పరిమితమైంది; రెండూ అది ఎలా ప్రారంభించబడింది అనే లక్షణాలు, chroot అనే పదం యొక్కవి కావు.
TUN కు మూడు విషయాలు కావాలి, పరికర నోడ్ వాటిలో ఒకటి మాత్రమే
సాంప్రదాయ యూజర్-స్పేస్ సొరంగానికి తెరవగల TUN పరికరం, ఆ పరికరానికి కర్నెల్ మద్దతు, మరియు ఇంటర్ఫేస్, మార్గాలను కాన్ఫిగర్ చేసే అనుమతి కావాలి. ఇవి వేర్వేరు అవసరాలు, /dev కింద మార్గ నామాన్ని సృష్టించడం వాటిలో ఏదీ దానంతట అదే నెరవేర్చదు:
ls -l /dev/net/tun
ip tuntap add dev tun0 mode tun
Android లో కర్నెల్లో సాధారణంగా TUN మద్దతు కంపైల్ అయి ఉంటుంది, ఎందుకంటే ప్లాట్ఫారమ్ సొంత VPN సేవ దాన్ని ఉపయోగిస్తుంది, కానీ అంటే మీ ప్రక్రియ దాన్ని ఉపయోగించవచ్చని కాదు. ఇంటర్ఫేస్ కాన్ఫిగరేషన్కు నెట్వర్క్ నిర్వహణ సామర్థ్యం కావాలి, ప్రక్రియ పరికర నోడ్ను చేరుకోగలదా అని SELinux నిర్ణయిస్తుంది. తిరస్కరణ స్పష్టమైన కారణం లేని అనుమతి లోపంలా కనిపిస్తుంది, సమాధానం ఆడిట్ ట్రైల్లో ఉంటుంది:
dmesg | grep avc
logcat -d | grep "avc: denied"
Root ఇది పరిష్కరించదు. uid 0 గా నడిచే ప్రక్రియలను SELinux ఇతరుల మాదిరిగానే పరిమితం చేస్తుంది, కాబట్టి root షెల్ నుండి ప్రారంభించిన chroot కూడా తాను చూసే పరికరానికి తిరస్కరించబడవచ్చు. పాత ఇన్స్టాలర్ పనిచేయడానికి అమలును ఆపివేయడం సొరంగానికి చాలా దూరంగా పరిణామాలున్న మొత్తం ఫోన్ నిర్ణయం, అది పాత బైనరీకి పరిష్కారం కాదు.
Android యాప్లు మీ సొరంగాన్ని విస్మరించడం ఎందుకు
Android యొక్క మద్దతు ఉన్న నమూనా ఏమిటంటే VPN యాప్ ప్లాట్ఫారమ్ VPN సేవ ద్వారా నమోదు చేసుకోవడం, వినియోగదారు అనుమతిని ఒకసారి అడగడం, తన సొరంగానికి ఫైల్ డిస్క్రిప్టర్ను పొందడం. తర్వాత ప్లాట్ఫారమ్ ట్రాఫిక్ను ఆ డిస్క్రిప్టర్కు మళ్లించి, వినియోగదారు లేదా నిర్వాహకుడు ఎంచుకున్న యాప్ పరిధిని అమలు చేస్తుంది; అందుకే అదే యంత్రాంగం ప్రతి-యాప్, ప్రతి-ప్రొఫైల్గా ఉండి always-on మరియు block-without-VPN సెట్టింగ్లతో కలపబడవచ్చు. Android VPN అభివృద్ధి మార్గదర్శిని ఆ హ్యాండ్షేక్ను వివరిస్తుంది, ముఖ్య విషయం ఏమిటంటే అది నమోదు, రూటింగ్ ఉపాయం కాదు.
chroot లోపలి డెమన్ ఎప్పుడూ నమోదు చేసుకోదు. అనుమతి సంభాషణ లేదు, స్టేటస్ బార్లో కీ చిహ్నం లేదు, ప్రతి-యాప్ చేర్చు లేదా మినహాయించు జాబితా లేదు, always-on విధానంలో పాల్గొనడం లేదు. అందువల్ల యాప్లు డిఫాల్ట్ నెట్వర్క్ను ఉపయోగిస్తాయి, సొరంగం షెల్ స్వయంగా పంపేది మాత్రమే తీసుకెళ్తుంది.
అవతలి దిశలో వెళ్లడం కూడా సహాయపడదు. హోస్ట్ నేమ్స్పేస్లోకి మార్గాలను నెట్టడం అన్నింటినీ పట్టుకుంటుంది, ప్లాట్ఫారమ్ స్థానికంగా ఉంచాలని ఆశించిన ట్రాఫిక్తో సహా, మరియు అది ప్రతి-యాప్ నియంత్రణ లేకుండా, వినియోగదారు చూడలేని లేదా రద్దు చేయలేని విధంగా చేస్తుంది. chroot డెమన్ ఒకే యాప్ కోసం మాత్రమే ట్రాఫిక్ను రూట్ చేసే మధ్యస్థ సెట్టింగ్ లేదు.
బైనరీ అనుకూలత వేరే గోడ
నెట్వర్క్ వైపు ఆసక్తికరంగా ఉన్నా, ఎగ్జిక్యూటబుల్కు దాని సొంత అవసరాలు ఉన్నాయి: CPU నిర్మాణం, డైనమిక్ లోడర్, C లైబ్రరీ, మరియు అది ఆశించే కర్నెల్ సౌకర్యాలు. Android glibc బదులు bionic ఉపయోగిస్తుంది, డెస్క్టాప్ పంపిణీ కోసం నిర్మించిన పాత బైనరీకి పరికరంలో ఇక లేని లైబ్రరీలు కావాల్సి రావచ్చు.
లైబ్రరీ ఫైల్ పేరును కొత్త సంస్కరణకు సింబాలిక్ లింక్ చేయడం ABI అనుకూలతను సృష్టించదు, మరియు దశాబ్దం పాత ప్యాకేజీ నుండి ఆర్కైవ్ చేసిన క్రిప్టోగ్రాఫిక్ లైబ్రరీ నిర్వహించబడే భాగం కాదు. ప్రణాళిక దానిపై ఆధారపడి ఉంటే, ఆ ప్రణాళిక ఫోన్లో నెట్వర్క్ అధికారాలతో నిర్వహించబడని కోడ్ను నడపడం.
Android సందర్భంలో నిరూపించి తర్వాత శుభ్రం చేయండి
మీకు నిజంగా ముఖ్యమైనది, ముఖ్యమైన వైపు నుండి పరీక్షించండి: నిర్దిష్ట యాప్ను తెరవండి, నిర్దిష్ట ప్రైవేట్ గమ్యాన్ని చేరుకోండి, ఏ రిజాల్వర్ సమాధానమిచ్చిందో నిర్ధారించండి, తర్వాత సొరంగాన్ని డిస్కనెక్ట్ చేసి నమోదిత ప్రవర్తనను నిర్ధారించండి. chroot లోపలి టెర్మినల్ నుండి వచ్చిన ఫలితం ఆ టెర్మినల్ అమలు సందర్భం గురించిన సాక్ష్యం మాత్రమే, అంతకంటే ఎక్కువ కాదు.
ప్రయోగాల సమయంలో హోస్ట్ మార్గాలను మార్చినట్లయితే, వాటిని తిరిగి పెట్టి ఏమి మార్చారో నమోదు చేయండి. తర్వాత ఫోన్లో always-on VPN కాన్ఫిగర్ చేయబడిందో లేదో తనిఖీ చేయండి, ఎందుకంటే నియమాన్ని మిగిల్చిన పాత ప్రయోగం నెలల తర్వాత ప్లాట్ఫారమ్ లోపంలా కనిపించవచ్చు.
నిజమైన రిమోట్ యాక్సెస్ అవసరానికి, సేవ యొక్క మద్దతు ఉన్న క్లయింట్ లేదా ఆమోదించిన గేట్వే డిజైన్ను ఉపయోగించండి. అడగదగిన ప్రశ్న root చేసిన ఇన్స్టాలర్ నడపగలమా అని కాదు, మద్దతు ఉన్న అమలు మీకు కావలసిన యాప్లను మీరు ఉద్దేశించిన సరిహద్దు దాటి తీసుకెళుతుందా, పరికరంలో యజమాని లేని ప్రత్యేక మార్పులను మిగల్చకుండా అనేది.