Publicado por Giles Hogben, ingeniero de privacidad
En Android O, se presentan algunas mejoras para que el usuario pueda controlar el uso de identificadores. Entre estas mejoras se incluye lo siguiente:
- Limitación del uso de identificadores con ámbito en dispositivos no restablecibles.
- Actualización de la pila Wi-Fi de Android O y cambios en el firmware de chipset de Wi-Fi de los teléfonos Pixel, Pixel XL y Nexus 5x para aleatorizar direcciones MAC en solicitudes de sondeo.
- Actualización de la forma en que las aplicaciones solicitan información sobre cuentas y provisión de un control más orientado al cliente.
Cambios de identificadores de dispositivos
A continuación, se muestran algunos de los cambios de los identificadores de dispositivos para Android O:
Android ID
En Android O, el ID de Android (Settings.Secure.ANDROID_ID o SSAID) tiene un valor diferente para cada app y cada usuario en el dispositivo. Los desarrolladores que necesitan un identificador con ámbito en dispositivos deben usar como alternativa un identificador restablecible, como el
ID de publicidad, lo que proporciona más control a los usuarios. El ID de publicidad también proporciona una configuración para el usuario a fin de limitar el seguimiento de anuncios.
.
Además, en Android O:
- El valor ANDROID_ID no cambiará durante la desinstalación y la reinstalación de paquetes mientras el nombre y la clave de firma del paquete sean los mismos. Las apps pueden basarse en este valor para mantener el estado al realizar reinstalaciones.
- Si una app se instala en un dispositivo con una versión anterior de Android, el ID de Android se conserva cuando el dispositivo recibe una actualización a Android O, a menos que la app se desinstale y reinstale.
- El valor de ID de Android solo cambia si se restablece la configuración de fábrica del dispositivo o si la clave de firma se rota entre eventos de desinstalación y reinstalación.
- Este cambio solo es necesario para fabricantes de dispositivos que incorporan Google Play Services e ID de publicidad. Otros fabricantes de dispositivos pueden proporcionar un ID restablecible alternativo o continuar proporcionando el ID de Android.
Build.SERIAL
A fin de mantener la uniformidad con los permisos de tiempo de ejecución requeridos para acceder a IMEI, android.os.Build.SERIAL dejó de estar disponible para apps orientadas a Android O o versiones posteriores. Como alternativa, se puede usar una nueva Android O API,
Build.getSerial(), que muestra el número de serie real mientras el emisor conserve el permiso PHONE. En una versión futura de Android, para las apps orientadas a Android O Build.SERIAL aparecerá como “DESCONOCIDO”. Para evitar afectar la funcionalidad de las apps heredadas, las apps orientadas a versiones anteriores de Android continuarán detectando el número de serie del dispositivo, como antes.
Net.Hostname
Net.Hostname proporciona el nombre de host del dispositivo. En versiones anteriores de Android, el valor predeterminado del nombre de host de red y el valor de la opción de nombre de host de DHCP contenido en Settings.Secure.ANDROID_ID. En Android O, net.hostname no tiene contenido y el cliente DHCP deja de enviar un nombre de host, después de
IETF RFC 7844 (perfil de anonimidad).
Widevine ID
Para los dispositivos con Android O, el ID de cliente de Widevine muestra un valor diferente para cada nombre de paquete y origen web (para apps de navegadores web).
Propiedades de sistema y configuración exclusivas
Además de Build.SERIAL, hay otras configuraciones y propiedades de sistema que no se encuentran disponibles en Android O. Entre ellas se incluyen:
- ro.runtime.firstboot: marca de tiempo con precisión de milisegundos del primer inicio después del último borrado o del inicio más reciente.
- htc.camera.sensor.front_SN: número de serie de la cámara (disponible en algunos dispositivos HTC).
- persist.service.bdroid.bdaddr: propiedad de dirección MAC de Bluetooth
- Settings.Secure.bluetooth_address: dirección MAC de Bluetooth del dispositivo. En Android O, solo se encuentra disponible para apps que conserven el permiso LOCAL_MAC_ADDRESS.
Aleatorización de direcciones MAC en solicitudes de sondeo de Wi-Fi.
Colaboramos con investigadores del área de la seguridad
1 con el propósito de diseñar un sistema sólido de aleatorización de direcciones MAC para tráfico de análisis de Wi-Fi producido por el firmware de chipset de dispositivos Google Pixel y Nexus 5X. El equipo de Android Connectivity luego trabajó junto a los fabricantes para actualizar el firmware de chipset de Wi-Fi empleado en estos dispositivos.
Android O integra estos cambios de firmware a la pila de Wi-Fi de Android, para que los dispositivos que usan estos chipsets con firmware actualizado y cuentan con Android O, o versiones posteriores, puedan aprovecharlos.
A continuación, se muestran algunos de los cambios que hemos realizado en el firmware de Pixel, Pixel XL y Nexus 5x con Android O o versiones posteriores:
- Para cada análisis de Wi-Fi durante la desconexión de un punto de acceso, el teléfono usa una dirección MAC aleatoria nueva (independientemente de que se encuentre o no en espera).
- El número de secuencia de paquete inicial para cada análisis también se aleatoriza.
- Se eliminaron elementos de información de solicitudes de sondeo innecesarios: Los elementos de información se limitan a los conjuntos de parámetros de SSID y DS.
Cambios en la getAccounts API
En Android O y versiones posteriores, ya no basta con el permiso GET_ACCOUNTS para obtener acceso a la lista de cuentas registradas en el dispositivo. La aplicaciones deben usar una API provista por la app que administra el tipo de cuenta específico o el usuario debe otorgar permiso para acceder a la cuenta a través de una actividad de selector de cuenta. Por ejemplo, Gmail puede acceder a cuentas de Google registradas en el dispositivo porque Google posee la aplicación Gmail, pero el usuario debe otorgar acceso en Gmail a información sobre otras cuentas registradas en el dispositivo.
Para obtener acceso a una cuenta, las apps orientadas a Android O, o versiones posteriores, deben usar AccountManager#newChooseAccountIntent() o un método específico de autenticador. Las aplicaciones con un SDK de destino inferior pueden, de todos modos, usar el flujo actual.
En Android O, las apps también pueden usar los métodos AccountManager.setAccountVisibility() y getVisibility() para administrar políticas de visibilidad de sus cuentas.
A su vez, la transmisión LOGIN_ACCOUNTS_CHANGED_ACTION dejó de estar disponible, pero sigue funcionando en Android O. Las aplicaciones deben usar addOnAccountsUpdatedListener() a fin de obtener actualizaciones sobre cuentas en tiempo de ejecución para una lista de tipos de cuentas que especifiquen.
Para obtener más información, consulta
Prácticas recomendadas para identificadores únicos.
Notas