A regra era simple: filtrar o tráfico só mentres o teléfono estivese conectado ao Wi-Fi da oficina. Aguantou meses, e logo, unha mañá, o teléfono estaba no mesmo SSID coa mesma icona de chave e o filtrado parara. Nada da rede cambiara; o que cambiara era se a aplicación podía ver o nome da rede. En Android, «en que Wi-Fi estou» e «bloquea este tráfico» son dúas tarefas separadas, e un firewall que as confunde falla aberto xusto cando o nome deixa de estar dispoñible.

O síntoma: a identidade desaparece e a política séguena

Unha regra por SSID le un valor e despois escolle unha rama. Cando a lectura non devolve nada útil, o código ten que facer algo, e o defecto habitual é «non é a rede esperada, así que non filtres». Ese defecto converte un problema de permisos nunha fuga de tráfico. A icona da chave segue visible porque o servizo VPN continúa en execución; só está aplicando outra rama.

Mire a orde dos acontecementos, non a rede. Un diálogo de permiso rexeitado, unha actualización do sistema que moveu o acceso ao SSID detrás doutro permiso, os servizos de localización apagados ou un cambio de política do perfil de traballo poden producir o mesmo resultado mentres o teléfono segue no mesmo punto de acceso.

Por que o nome pode volver descoñecido

WifiInfo.getSSID() devolve o identificador de conxunto de servizos da rede actual, e Android documenta que o acceso aos campos sensibles á localización depende do permiso. Cando o acceso non está dispoñible, a chamada devolve UNKNOWN_SSID en lugar de fallar ruidosamente. Un valor baleiro ou descoñecido non é, polo tanto, proba de que o teléfono deixase o Wi-Fi; é proba de que a aplicación non pode clasificar a rede.

Dúas comprobacións separan os casos. Confirme que o teléfono está asociado e vexa que informa o sistema, e despois confirme que a aplicación ten realmente o permiso que precisa nesta versión de Android:

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

Se a liña de estado mostra unha rede conectada mentres a aplicación ve un nome descoñecido, ten un problema de permisos ou de nivel de API, non un problema de Wi-Fi. Corríxao antes de tocar as regras do firewall, porque cada regra posterior avalíase contra un valor que a aplicación non pode ler.

Onde se executa realmente o filtrado

Un firewall local de Android adoita usar o modelo VpnService sen enviar tráfico a un servidor remoto: toma a interface virtual, aplica as súas propias regras e reenvía o que permite. A plataforma permite un servizo VPN activo por perfil de usuario, e o segundo substitúe o primeiro en lugar de apilarse sobre el. Por iso unha aplicación de firewall separada e unha VPN de traballo separada non forman unha cadea de dúas etapas; unha das dúas gaña.

Iso importa para unha regra por SSID porque o punto de aplicación e o punto de observación son compoñentes distintos. O VpnService decide que sae do dispositivo; a API de Wi-Fi só achega unha etiqueta. Unha aplicación pode aplicar correctamente e clasificar incorrectamente, e ese é exactamente o fallo deste artigo.

Dálle ao descoñecido a súa propia política

Trate a identidade da rede como tres estados e escriba a política de cada un antes de publicar a regra. O terceiro estado é o que se esquece, e é no que lle vai pór un atacante ou unha configuración incorrecta.

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

Fallar pechado significa que o estado descoñecido herda a política razoable máis estrita en lugar da máis cómoda. Se iso deixa o teléfono inutilizable nunha rede nova, a solución correcta é unha excepción deliberada e visible, non unha decisión de confianza silenciosa agochada nunha comprobación de valor nulo.

Un SSID familiar é unha etiqueta, non unha proba do operador da rede. Calquera pode montar un punto de acceso co nome da oficina, así que unha coincidencia de nome nunca debería ser o único entre unha sesión sensible e un segmento non fiable.

Probe as transicións, non o estado estable

As probas en estado estable pasan na rede onde construíu a regra. Os fallos viven nas transicións: permiso denegado, de Wi-Fi a móbil, dun SSID a outro, o servizo VPN reiniciado e outra aplicación VPN que toma a interface. Para cada unha, decida se as conexións existentes se reconsideran e se o tráfico protexido permanece bloqueado mentres o estado é descoñecido.

Escriba o resultado en tres frases: a condición observada, o compoñente que aplica a decisión e o repliegue deliberado. Se falta calquera das tres, a regra aínda non é unha política; é unha suposición que funciona por casualidade na rede da oficina.

Artigos relacionados