Attribuzzjoni tal-VPN fuq Android: getConnectionOwnerUid kontra /proc/net
Android 10 jaħbi /proc/net mill-apps. VPN xorta jirċievi pakketti, imma l-attribuzzjoni tinbidel għal getConnectionOwnerUid, bir-regoli tiegħu stess għat-tuple u l-permessi.
Fuq Android 10 u wara, app li tiftaħ /proc/net/tcp tirċievi ċaħda ta' aċċess minflok tabella tas-sockets. L-interface tal-VPN ma jimpurtahx: il-pakketti għadhom jaslu, għax il-mina hija deċiżjoni ta' routing, mhux permess tal-fajl. Dak li nbidel hija t-tweġiba għal mistoqsija iżjed dejqa: «liema app tippossjedi din il-konnessjoni?» Is-sostitut huwa ConnectivityManager.getConnectionOwnerUid, il-mistoqsija appoġġata għal kull konnessjoni, u l-għażla bejn id-drawwa l-qadima u l-API l-ġdida tiddependi minn liema mit-tliet xogħlijiet fil-fatt għandek: li tirċievi pakketti, li tattribwixxi fluss jew li tgħodd l-użu.
Żewġ modi kif twieġeb il-mistoqsija tas-sid
Qabel l-API 29, proċess privileġġjat jew root seta' jaqra t-tabelli tas-sockets tal-kernel, iqabbel l-erbgħa u jsir jaf l-UID tas-sid. Dan ta inventar tal-apparat kollu fi fajl wieħed. Mill-API 29 il-veduta tas-sistema tal-fajls hija ristretta, u t-triq appoġġata hija mistoqsija għal kull konnessjoni bil-protokoll, l-indirizz lokali u l-indirizz remot.
| Question | Legacy socket tables | getConnectionOwnerUid |
|---|---|---|
| Who owns this flow? | Scan and match the tuple | Ask once per tuple |
| Device-wide inventory? | Yes, when readable | No, one flow at a time |
| Historical usage? | No | No; that is NetworkStatsManager |
| Works without root? | No on modern releases | Yes, for authorized callers |
Il-paragun mhuwiex «qadim kontra ġdid». Dawn huma tliet xogħlijiet differenti li darba kien jissodisfahom fajl wieħed li jinqara u issa jissodisfawhom tliet interfaces differenti bi tliet kuntratti differenti.
L-indirizz lokali huwa t-tarf tal-app
Il-firma tal-metodu tieħu protokoll, indirizz tas-socket lokali u indirizz tas-socket remot. «Lokali» tfisser in-naħa tal-app fil-konnessjoni, mhux it-tarf li fil-mument tal-ispezzjoni jkun is-sors tal-pakkett. Pakkett li jivvjaġġa mis-server remot lura lejn l-app għandu s-sors u d-destinazzjoni maqlubin fir-rigward ta' dik id-definizzjoni.
ConnectivityManager cm = getSystemService(ConnectivityManager.class);
int uid = cm.getConnectionOwnerUid(
OsConstants.IPPROTO_TCP, appLocalAddress, appRemoteAddress);Din l-iżball tad-direzzjoni hija l-aktar raġuni komuni li mistoqsija li taħdem tirritorna tweġiba ħażina, jew xejn. Irreġistra ż-żewġ trufijiet qabel is-sejħa u kkonferma l-par kontra l-konnessjoni li l-app fil-fatt fetħet. Il-familja tal-indirizzi timporta wkoll: indirizz immappjat bl-IPv4 u indirizz IPv6 nattiv huma tuples differenti, u hekk ukoll huma l-flussi TCP u UDP fuq l-istess ports.
L-awtorizzazzjoni u r-riżultati mhux magħrufa huma parti mill-kuntratt
Il-mistoqsija hija ristretta għal sejjieħa awtorizzati, inkluż l-app VPN attiva għall-utent rilevanti. App ta' monitoraġġ mhux relatata ma tistax tassumi li tista' telenka l-konnessjonijiet ta' profil ieħor, u sejħa mhux awtorizzata tista' tarmi eċċezzjoni tas-sigurtà minflok ma tirritorna żball ħbiberija. Immaniġġja ż-żewġ riżultati b'mod espliċitu.
Sid nieqes mhuwiex isem tal-pakkett. Il-fluss seta' ngħalaq bejn il-pakkett u l-mistoqsija, it-tuple tista' tkun mhux kompluta, jew is-sejjieħ sempliċement ma jitħalliex jaf. Li taħżen l-ewwel tweġiba ta' suċċess u terġa' tużaha aktar tard tattribwixxi konnessjoni ġdida lil app qadima, li hija agħar milli tirrapporta mhux magħruf.
Meta l-attribuzzjoni tfalli, it-traffiku xorta jeħtieġ deċiżjoni: iċċekknah fejn il-politika teħtieġ dan, ippermetti biss ambitu li tifhem, jew uriha l-vojt. Dak il-fallback jappartjeni lid-disinn, mhux lil kumment.
Il-kontabilità hija mistoqsija oħra
NetworkStatsManager jirrapporta l-użu skont ir-regoli tal-aċċess tiegħu stess. Jista' jgħidlek kemm ittrasferixxa UID fuq perjodu; ma jistax jgħidlek is-sid ta' pakkett ħaj arbitrarju. Il-kapaċitajiet tan-netwerk jiddeskrivu proprjetajiet ta' netwerk, mhux direttorju tas-sockets. It-taħlit tat-tlieta jipproduċi dashboards li jidhru konsistenti u mhumiex.
Għall-każ sempliċi li tiddeċiedi liema apps jużaw il-mina, il-listi appoġġati tal-apps permessi u pprojbiti ta' Android diġà jesprimu l-politika mingħajr ebda scraping. Żomm l-attribuzzjoni għal kull fluss għall-każijiet li verament jeħtieġuha, u baġit għal implimentazzjoni miżmuma li tittratta direzzjoni, permessi u stati mhux magħrufa flimkien.
Agħżel l-għodda skont ix-xogħol, imbagħad ipprova t-trufijiet
Jekk il-ħtieġa hija l-għażla tal-mina, uża l-lista tal-pjattaforma. Jekk hija attribuzzjoni ħajja, uża l-mistoqsija tas-sid u ttratta kull tuple li ma tistax tiġi mwieġba bħala mhux magħrufa. Jekk huma totali storiċi, uża l-istats API. Imbagħad ipprova t-tliet trufijiet li jkissru implimentazzjonijiet naive: pakkett fid-direzzjoni opposta, fluss li jagħlaq qabel ma tistaqsi, u sejjieħ li mhuwiex il-VPN attiva.
Xejn minn dan ma jeħtieġ li tiddiżattiva SELinux, tirroota t-telefon jew tagħmel it-tabelli tal-kernel jinqraw globalment. Ir-restrizzjoni hija l-punt: il-pjattaforma ċaqalqet l-attribuzzjoni wara kuntratt sabiex it-tweġiba tkun disponibbli għall-komponent li jeħtieġha b'mod leġittimu, u għal ħaddieħor.