Cómo implementar la aleatorización de MAC

A partir de Android 8.0, los dispositivos Android usan direcciones MAC aleatorizadas cuando sondean redes nuevas sin estar asociados a una red. En Android 9, puedes habilitar una opción para desarrolladores (que está inhabilitada de forma predeterminada) para 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 Direct.

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

Además, las direcciones MAC se asignan de forma aleatoria como parte de las operaciones de Wi-Fi Aware 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 con 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 la configuración config.xml (se puede hacer en una superposición personalizada del 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 la configuración config.xml (se puede hacer en una superposición personalizada del 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 que se describen en Validación.

La IU del sistema debe cumplir con lo siguiente:

  • Tener una opción para habilitar o inhabilitar la aleatorización para cada SSID
  • Habilita la aleatorización de MAC de forma predeterminada para todas las redes nuevas que se agreguen.

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

Es posible que los dispositivos con Android 9 o versiones anteriores no admitan la aleatorización de MAC de Wi-Fi. Cuando se actualizan esos dispositivos a Android 10, se puede inhabilitar la función de aleatorización de MAC de Wi-Fi configurando la marca WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION como verdadera en el archivo de compilación 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. Verifica que la aleatoriedad de MAC esté habilitada en el dispositivo. Para ello, verifica que config_wifi_connected_mac_randomization_supported esté configurado en true en la superposición del dispositivo.
  2. Conéctate a una red Wi‑Fi.
  3. Presiona la red para ir a la página de detalles de la red. Verifica que la aleatoriedad de MAC esté activada. Verifica que la dirección MAC que se muestra sea una MAC aleatoria, que tenga el bit generado de forma local establecido en 1 y el bit de multicast establecido en 0.
  4. Desactiva la aleatorización de MAC. Conéctate a la misma red y verifica que se esté usando el 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 aleatorizacion de MAC en un dispositivo anterior a Android 10 (capaz de admitir la aleatorizacion de MAC) que se actualiza a Android 10 o versiones posteriores, haz lo siguiente:

  1. Tener al menos una red guardada en un dispositivo que ejecute Android 9 o versiones anteriores
  2. Escribe en la memoria flash la imagen del sistema de 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.