Sääntö oli yksinkertainen: suodata liikennettä vain, kun puhelin on yhteydessä toimiston Wi-Fi-verkkoon. Se piti kuukausia, ja sitten eräänä aamuna puhelin istui samassa SSID:ssä samalla avainkuvakkeella ja suodatus oli lakannut. Verkossa ei ollut muuttunut mikään; muuttunut oli se, näkeekö sovellus verkon nimen. Androidissa «missä Wi-Fi-verkossa olen» ja «estä tämä liikenne» ovat kaksi eri tehtävää, ja palomuuri, joka sekoittaa ne, epäonnistuu avoimesti juuri silloin, kun nimi ei ole saatavilla.

Oire: identiteetti katoaa ja käytäntö seuraa perässä

SSID-sääntö lukee arvon ja valitsee sitten haaran. Kun luku ei palauta mitään hyödyllistä, koodin on tehtävä jotain, ja tavallinen oletus on «ei odotettu verkko, joten älä suodata». Tämä oletus muuttaa lupakysymyksen liikennevuodoksi. Avainkuvake pysyy näkyvissä, koska VPN-palvelu on yhä käynnissä; se vain toteuttaa toista haaraa.

Katso tapahtumien järjestystä, älä verkkoa. Hylätty lupakehote, järjestelmäpäivitys, joka siirsi SSID-käytön toisen luvan taakse, sammutetut sijaintipalvelut tai työprofiilin käytännön muutos voivat kaikki tuottaa saman tuloksen, kun puhelin pysyy samassa tukiasemassa.

Miksi nimi voi palata tuntemattomana

WifiInfo.getSSID() palauttaa nykyisen verkon palvelusarjan tunnisteen, ja Android dokumentoi, että pääsy sijaintiherkkiin kenttiin riippuu luvasta. Kun pääsyä ei ole, kutsu palauttaa UNKNOWN_SSID sen sijaan, että epäonnistuisi äänekkäästi. Tyhjä tai tuntematon arvo ei siis todista, että puhelin on poistunut Wi-Fi-verkosta; se todistaa, että sovellus ei pysty luokittelemaan verkkoa.

Kaksi tarkistusta erottaa tapaukset. Varmista, että puhelin on yhdistetty, ja katso, mitä järjestelmä raportoi, ja varmista sitten, että sovelluksella todella on lupa, jonka se tarvitsee tässä Android-versiossa:

adb shell cmd wifi status
adb shell dumpsys package <your.app> | grep -i -E "ACCESS_FINE_LOCATION|NEARBY_WIFI_DEVICES"

Jos tilan rivi näyttää yhdistetyn verkon, kun sovellus näkee tuntemattoman nimen, sinulla on lupaan tai API-tasoon liittyvä ongelma, ei Wi-Fi-ongelma. Korjaa se ennen kuin kosket palomuurin sääntöihin, koska jokaista alempaa sääntöä arvioidaan arvoa vasten, jota sovellus ei voi lukea.

Missä suodatus todella tapahtuu

Paikallinen Android-palomuuri käyttää yleensä VpnService-mallia lähettämättä liikennettä etäpalvelimelle: se ottaa virtuaalisen rajapinnan, soveltaa omia sääntöjään ja välittää sen, minkä se sallii. Alusta sallii yhden aktiivisen VPN-palvelun käyttäjäprofiilia kohden, ja toinen korvaa ensimmäisen sen sijaan, että kerrostuisi sen päälle. Erillinen palomuurisovellus ja erillinen työ-VPN eivät siis muodosta kaksivaiheista ketjua; toinen niistä voittaa.

Tämä on tärkeää SSID-säännölle, koska toteutuskohta ja havaintokohta ovat eri komponentteja. VpnService päättää, mitä laitteesta lähtee; Wi-Fi-rajapinta antaa vain tunnisteen. Sovellus voi toteuttaa oikein ja luokitella väärin, ja juuri se on tämän artikkelin vika.

Anna tuntemattomalle oma käytäntönsä

Käsittele verkon identiteettiä kolmena tilana ja kirjoita käytäntö jokaiselle ennen säännön julkaisua. Kolmas tila on se, joka unohdetaan, ja juuri siihen hyökkääjä tai väärä kokoonpano sinut asettaa.

ObservationPolicy to specify
Expected SSID is readableThe explicit filtering policy you designed
A different SSID is readableThe default policy for untrusted networks
Unknown, changing or unreadableFail closed until classification is reliable

Kiinni epäonnistuminen tarkoittaa, että tuntematon tila perii tiukimman järkevän käytännön eikä mukavinta. Jos se tekee puhelimesta käyttökelvottoman uudessa verkossa, oikea ratkaisu on tarkoituksellinen, näkyvä poikkeus, ei tyhjän arvon tarkistukseen piilotettu hiljainen luottamuspäätös.

Tuttu SSID on tunniste, ei todiste verkon operaattorista. Kuka tahansa voi pystyttää tukiaseman toimiston nimellä, joten nimiosuma ei saisi koskaan olla ainoa asia arkaluontoisen istunnon ja epäluotettavan segmentin välissä.

Testaa siirtymät, älä tasaista tilaa

Tasaisen tilan testit menevät läpi verkossa, jossa rakensit säännön. Vikatilanteet elävät siirtymissä: evätty lupa, Wi-Fi:stä mobiiliin, yhdestä SSID:stä toiseen, VPN-palvelun uudelleenkäynnistys ja toinen VPN-sovellus, joka ottaa rajapinnan haltuunsa. Päätä kunkin kohdalla, arvioidaanko olemassa olevat yhteydet uudelleen ja pysyykö suojattu liikenne estettynä, kun tila on tuntematon.

Kirjoita tulos kolmena lauseena: havaittu ehto, päätöksen toteuttava komponentti ja tarkoituksellinen varatoimi. Jos jokin kolmesta puuttuu, sääntö ei ole vielä käytäntö; se on arvaus, joka sattumalta toimii toimiston verkossa.

Aiheeseen liittyvät artikkelit