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.

QuestionLegacy socket tablesgetConnectionOwnerUid
Who owns this flow?Scan and match the tupleAsk once per tuple
Device-wide inventory?Yes, when readableNo, one flow at a time
Historical usage?NoNo; that is NetworkStatsManager
Works without root?No on modern releasesYes, 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.

Artikli relatati