Implementar a ordem aleatória de MAC

A partir do Android 8.0, os dispositivos Android usam endereços MAC aleatórios ao procurar novas redes enquanto não estão associados a uma rede. No Android 9, é possível ativar uma opção do desenvolvedor (ela fica desativada por padrão) para fazer com que o dispositivo use um endereço MAC aleatório ao se conectar a uma rede Wi-Fi.

No Android 10, a escolha aleatória de MAC é ativada por padrão para o modo cliente, SoftAp e Wi-Fi Direct.

A escolha aleatória de MAC impede que os listeners usem endereços MAC para criar um histórico de atividades do dispositivo, aumentando a privacidade do usuário.

Além disso, os endereços MAC são aleatórios como parte das operações Wi-Fi Aware e Wi-Fi RTT.

Para mais informações, consulte Comportamento de ordem aleatória de MAC.

Implementação

Para implementar a escolha aleatória de MAC no dispositivo:

  1. Trabalhe com um fornecedor de chip Wi-Fi para implementar os seguintes métodos HAL:

    • IWifiStaIface#setMacAddress: configura o endereço MAC da interface. A implementação padrão desativa a interface, muda o endereço MAC e a reativa.
    • IWifiStaIface#getFactoryMacAddress: recebe o MAC de fábrica de wlan0 usando uma chamada ioctl.
    • ISupplicantP2pIface#setMacRandomization: ativa ou desativa a escolha aleatória de MAC P2P no suplicante.
  2. Defina config_wifi_connected_mac_randomization_supported como true nas configurações config.xml. Isso pode ser feito em uma sobreposição personalizada do dispositivo .

    • Esse flag é usado para controlar se a escolha aleatória de MAC no modo cliente está ativada.
  3. Defina config_wifi_p2p_mac_randomization_supported como true nas configurações config.xml. Isso pode ser feito em uma sobreposição personalizada do dispositivo .

    • Esse flag é usado para controlar se a escolha aleatória de MAC Wi-Fi Direct está ativada.
  4. Teste sua implementação usando os métodos descritos em Validação.

A interface do sistema precisa:

  • Ter uma opção para ativar ou desativar a escolha aleatória de cada SSID.
  • Ter a escolha aleatória de MAC ativada por padrão para todas as redes recém-adicionadas.

Use a implementação de referência da interface das configurações para implementar novos comandos.

Dispositivos com o Android 9 ou versões anteriores podem não ter suporte à escolha aleatória de MAC no Wi-Fi. Ao fazer upgrade desses dispositivos para o Android 10, o recurso de escolha aleatória de MAC no Wi-Fi pode ser desativado definindo o flag WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION como verdadeiro no arquivo de criação do HAL do fornecedor de Wi-Fi.

Validação

Para validar se o recurso está funcionando conforme o esperado, execute um teste manual:

  1. Verifique se a escolha aleatória de MAC está ativada no dispositivo conferindo se config_wifi_connected_mac_randomization_supported está definido como true na sobreposição do dispositivo.
  2. Conecte seu dispositivo a uma rede Wi-Fi.
  3. Toque na rede para acessar a página de detalhes da rede. Verifique se a escolha aleatória de MAC está ativada. Verifique se o endereço MAC exibido é aleatório, com o bit gerado localmente definido como 1 e o bit multicast definido como 0.
  4. Desative a escolha aleatória de MAC. Conecte-se à mesma rede e verifique se o MAC de fábrica está sendo usado.
  5. Exclua a rede tocando em Esquecer na página de detalhes da rede.
  6. Conecte-se à mesma rede e verifique se o mesmo endereço MAC aleatório está sendo usado.

Para testar a escolha aleatória de MAC em um dispositivo anterior ao Android 10 (capaz de oferecer suporte à escolha aleatória de MAC) que está fazendo upgrade para o Android 10 ou versões mais recentes:

  1. Tenha pelo menos uma rede salva em um dispositivo com o Android 9 ou versões anteriores.
  2. Atualize a imagem do sistema Android 10.
  3. No seletor de Wi-Fi, verifique se a escolha aleatória de MAC está desativada para todas as redes salvas.
  4. Ative a escolha aleatória de MAC. Conecte-se à mesma rede e verifique se o MAC aleatório está sendo usado.