Cómo implementar la aleatorización de MAC

A partir de Android 8.0, los dispositivos Android usan direcciones MAC aleatorias cuando sondean redes nuevas cuando no están asociados a una red. En Android 9, puedes habilitar una opción para desarrolladores (está inhabilitada de forma predeterminada) para provocar que el dispositivo use una dirección MAC aleatoria cuando se conecte a una red Wi-Fi.

En Android 10, la aleatorización de MAC está habilitada de forma predeterminada para el modo cliente, SoftAp y Wi-Fi directo.

La aleatorización de MAC evita que los objetos de escucha usen direcciones MAC para crear un historial de actividad del dispositivo, lo que aumenta la privacidad del usuario.

Además, las direcciones MAC se aleatorizan como parte de las operaciones de Reconocimiento de Wi-Fi y Wi-Fi RTT.

Para obtener más información, consulta Comportamiento de la aleatorización de MAC.

Implementación

Para implementar la aleatorización de MAC en tu dispositivo, haz lo siguiente:

  1. Trabaja con un proveedor de chips Wi-Fi para implementar los siguientes métodos de HAL:

    • IWifiStaIface#setMacAddress: Configura la dirección MAC de la interfaz. La implementación predeterminada hace que la interfaz falle, cambia la dirección MAC y vuelve a mostrar la interfaz.
    • IWifiStaIface#getFactoryMacAddress: Obtiene la MAC de fábrica de wlan0 mediante una llamada a ioctl.
    • ISupplicantP2pIface#setMacRandomization: Activa o desactiva la aleatorización de MAC de P2P en el solicitante.
  2. Establece config_wifi_connected_mac_randomization_supported en true en Configuración config.xml (esto se puede hacer en una superposición personalizada en el dispositivo).

    • Esta marca se usa para controlar si se habilita la aleatorización de MAC en modo de cliente.
  3. Establece config_wifi_p2p_mac_randomization_supported en true en Configuración config.xml (esto se puede hacer en una superposición personalizada en el dispositivo).

    • Esta marca se usa para controlar si se habilita la aleatorización de MAC de Wi-Fi directo.
  4. Prueba tu implementación con los métodos descritos en Validación.

La IU del sistema debe cumplir con lo siguiente:

  • Tener la opción de habilitar o inhabilitar la aleatorización para cada SSID.
  • Tienen habilitada la aleatorización de MAC de forma predeterminada para todas las redes agregadas recientemente.

Usa la implementación de referencia de la IU de Configuración para implementar instrucciones nuevas.

Es posible que los dispositivos con Android 9 o versiones anteriores no admitan la aleatorización de MAC de Wi-Fi. Cuando actualizas esos dispositivos a Android 10, la función de aleatorización de MAC de Wi-Fi se puede inhabilitar configurando la marca WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION como verdadera en el archivo de creación de la HAL del proveedor de Wi-Fi.

Validación

Para validar que la función se ejecuta según lo previsto, ejecuta una prueba manual:

  1. Para verificar que la aleatorización de MAC esté habilitada en el dispositivo, comprueba que config_wifi_connected_mac_randomization_supported esté configurado como true en la superposición del dispositivo.
  2. Conectarte a una red Wi-Fi
  3. Presiona la red para ir a la página Detalles de la red. Verifica que la aleatorización de MAC esté activada. Verifica que la dirección MAC que se muestra sea una MAC aleatoria, que tenga el bit generado localmente en 1 y el bit de multidifusión establecido en 0.
  4. Desactiva la aleatorización de MAC. Conéctate a la misma red y verifica que se esté usando la MAC de fábrica.
  5. Para borrar la red, presiona Olvidar en la página de detalles de la red.
  6. Conéctate a la misma red y verifica que se use la misma dirección MAC aleatoria.

Para probar la aleatorización de MAC en un dispositivo anterior a Android 10 (que es capaz de admitir la aleatorización de MAC) con Android 10 o una versión posterior, haz lo siguiente:

  1. Tener al menos una red guardada en un dispositivo con Android 9 o versiones anteriores
  2. Escribe en la memoria flash la imagen del sistema Android 10.
  3. En el selector de Wi-Fi, verifica que la aleatorización de MAC esté desactivada para todas las redes guardadas.
  4. Activa la aleatorización de MAC. Conéctate a la misma red y verifica que se esté usando el MAC aleatorio.