Cualquier app que tenga el permiso INTERNET
puede acceder a los dispositivos de una red de área local (LAN).
Esto facilita que las apps se conecten a dispositivos locales, pero también tiene implicaciones para la privacidad, como la formación de una huella digital del usuario y la posibilidad de servir como proxy de la ubicación.
El proyecto de Protecciones de red local tiene como objetivo proteger la privacidad del usuario limitando el acceso a la red local con un nuevo permiso de tiempo de ejecución.
Impacto
Durante Android 16, este permiso será una función opcional, lo que significa que solo se verán afectadas las apps que lo habiliten. El objetivo de la habilitación es que los desarrolladores de apps comprendan qué partes de sus apps dependen del acceso implícito a la red local para que puedan prepararse para protegerlas con permisos en una versión futura de Android.
Las apps se verán afectadas si acceden a la red local del usuario con los siguientes métodos:
- Uso directo o de biblioteca de sockets sin procesar en direcciones de red locales, por ejemplo,
Multicast DNS (mDNS)
oSimple Service Discovery Protocol (SSDP)
- Uso de clases a nivel del framework que acceden a la red local, por ejemplo,
NsdManager
Detalles del impacto
El tráfico hacia y desde una dirección de red local requiere permiso de acceso a la red local. En la siguiente tabla, se enumeran algunos casos comunes:
Operación de red de bajo nivel de la app | Se requiere permiso de red local |
---|---|
Cómo realizar una conexión TCP saliente | sí |
Cómo aceptar una conexión TCP entrante | sí |
Envía una transmisión unidifusión, multidifusión o difusión de UDP | sí |
Recepción de una unidifusión, multidifusión o transmisión de UDP entrante | sí |
Estas restricciones se implementan en lo profundo de la pila de redes y, por lo tanto, se aplican a todas las APIs de redes. Esto incluye los sockets creados en la plataforma o el código administrado, las bibliotecas de redes como Cronet y OkHttp, y cualquier API implementada sobre ellos. Intentar resolver servicios en la red local que tienen un sufijo .local
requiere permiso de red local.
Excepciones a las reglas anteriores:
- Si el servidor DNS de un dispositivo está en una red local, el tráfico hacia él y desde él (en el puerto 53) no requiere permiso de acceso a la red local.
- Las aplicaciones que usen el Selector de salida como selector integrado en la app no necesitarán permisos de red local (se proporcionará más orientación en una versión posterior).
Orientación
Para habilitar las restricciones de red local, haz lo siguiente:
- Escribe en la memoria flash de tu dispositivo una compilación con Android 16 Beta 3 o una versión posterior
- Instala la app que se probará
Cómo activar o desactivar la configuración de Appcompat con adb
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
Reinicia el dispositivo
Ahora, el acceso de tu app a la red local está restringido, y cualquier intento de acceder a la red local generará errores de socket.
Si usas APIs que realizan operaciones de red local fuera del proceso de tu app (por ejemplo, NsdManager
), no se verán afectadas durante la habilitación.
Para restablecer el acceso, debes otorgarle permiso a tu app para NEARBY_WIFI_DEVICES
.
- Asegúrate de que la app declare el permiso
NEARBY_WIFI_DEVICES
en sumanifest
. - Ve a Configuración > Apps > [Nombre de la aplicación] > Permisos > Dispositivos cercanos > Permitir.
Ahora se debería restablecer el acceso de tu app a la red local, y todos tus casos de uso deberían funcionar como lo hacían antes de habilitar la app. A continuación, se explica cómo se verá afectado el tráfico de la red de aplicaciones.
Permiso | Solicitud de LAN saliente | Solicitud de Internet entrante o saliente | Solicitud de LAN entrante |
---|---|---|---|
Concedido | Works | Works | Works |
Sin otorgar | Errores | Works | Errores |
Usa el siguiente comando para desactivar la configuración de Appcompat.
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
Errores
Los errores que surjan de estas restricciones se devolverán al socket de llamada cada vez que invoque send
o una variante de send
a una dirección de red local.
Ejemplos de errores:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Errores
Envía errores y comentarios sobre lo siguiente:
- Discrepancias en el acceso a la LAN (crees que un determinado acceso no debería considerarse como acceso a la "red local")
- Errores en los que se debería bloquear el acceso a la LAN, pero no se hace
- Errores en los que no se debería bloquear el acceso a la LAN, pero se bloquea
Los siguientes elementos no se verán afectados por este cambio:
- Acceso a Internet
- Red móvil