Как реализовать случайное назначение MAC-адреса

Начиная с Android 8.0, устройства Android используют случайные MAC-адреса при поиске новых сетей, когда они не подключены к сети. В Android 9 можно включить параметр для разработчиков (по умолчанию он отключен), чтобы устройство использовало случайный MAC-адрес при подключении к сети Wi-Fi.

В Android 10 случайное назначение MAC-адреса по умолчанию включено для клиентского режима, SoftAp и Wi-Fi Direct.

Рандомизация MAC-адресов не позволяет злоумышленникам использовать MAC-адреса для создания истории действий на устройстве, что повышает конфиденциальность пользователей.

Кроме того, MAC-адреса рандомизируются в рамках операций Wi-Fi Aware и Wi-Fi RTT.

Подробнее о рандомизации MAC-адресов…

Реализация

Чтобы включить случайный выбор MAC-адреса на устройстве, выполните следующие действия:

  1. Обратитесь к поставщику чипа Wi-Fi, чтобы реализовать следующие методы HAL:

    • IWifiStaIface#setMacAddress – задает MAC-адрес интерфейса. По умолчанию реализация отключает интерфейс, меняет MAC-адрес и снова включает интерфейс.
    • IWifiStaIface#getFactoryMacAddress: получает заводской MAC-адрес wlan0 с помощью вызова ioctl.
    • ISupplicantP2pIface#setMacRandomization – включает или отключает рандомизацию MAC-адресов P2P в запрашивающем клиенте.
  2. В настройках config.xml задайте для параметра config_wifi_connected_mac_randomization_supported значение true (это можно сделать в наложении устройства).

    • Этот флаг используется, чтобы определить, включена ли рандомизация MAC-адресов в режиме клиента.
  3. Установите для параметра config_wifi_p2p_mac_randomization_supported значение true в настройках config.xml (это можно сделать с помощью специального оверлея).

    • Этот параметр определяет, включена ли рандомизация MAC-адресов для Wi-Fi Direct.
  4. Протестируйте реализацию, используя методы, описанные в разделе Проверка.

Системный интерфейс должен:

  • Возможность включить или отключить рандомизацию для каждой SSID.
  • Включить создание случайных MAC-адресов по умолчанию для всех новых сетей.

Используйте референсную реализацию интерфейса настроек, чтобы реализовать новые запросы.

На устройствах с Android 9 или более ранней версии может не поддерживаться рандомизация MAC-адреса Wi-Fi. При обновлении таких устройств до Android 10 функцию создания случайных MAC-адресов Wi-Fi можно отключить, задав для флага WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION значение true в файле make HAL поставщика Wi-Fi.

Проверка

Чтобы проверить, правильно ли работает функция, выполните следующие действия:

  1. Убедитесь, что на устройстве включена рандомизация MAC-адресов. Для этого проверьте, чтобы в оверлее устройства для параметра config_wifi_connected_mac_randomization_supported было задано значение true.
  2. Подключитесь к сети Wi-Fi.
  3. Нажмите на сеть, чтобы перейти на страницу сведений о ней. Убедитесь, что рандомизация MAC-адресов включена. Убедитесь, что отображаемый MAC-адрес является случайным, то есть у него бит локально сгенерированного адреса равен 1, а бит многоадресной рассылки – 0.
  4. Отключите случайное назначение MAC-адреса. Подключитесь к той же сети и убедитесь, что используется заводской MAC-адрес.
  5. Удалите сеть, нажав Удалить на странице сведений о сети.
  6. Подключитесь к той же сети и убедитесь, что используется тот же случайный MAC-адрес.

Чтобы проверить рандомизацию MAC-адреса на устройстве с версией ОС ниже Android 10 (но поддерживающем эту функцию), обновите ОС до Android 10 или более поздней версии.

  1. На устройстве с ОС Android 9 или более ранней версии сохранена хотя бы одна сеть.
  2. Установите образ системы Android 10.
  3. В окне выбора сети Wi-Fi убедитесь, что случайный выбор MAC-адреса отключен для всех сохраненных сетей.
  4. Включите случайное назначение MAC-адреса. Подключитесь к той же сети и убедитесь, что используется случайный MAC-адрес.