Всем известно, что это шесть байт, обычно отображаемых в шестнадцатеричном формате, присвоены сетевой карте на заводе, и на первый взгляд случайны. Некоторые знают, что первые три байта адреса – это идентификатор производителя, а остальные три байта им назначаются. Известно также, что можно поставить себе произвольный адрес. Многие слышали и про "рандомные адреса" в Wi-Fi.
Разберемся, что это такое.
МАС адрес (media access control address) – уникальный идентификатор, назначенный сетевому адаптеру, применяется в сетях стандартов IEEE 802, в основном Ethernet, Wi-Fi и Bluetooth. Официально он называется «идентификатором типа EUI-48». Из названия очевидно, что адрес имеет длину в 48 бит, т.е. 6 байт. Общепринятого стандарта на написание адреса нет (в противоположность IPv4 адресу, где октеты всегда разделяют точками).Обычно он записывается как шесть шестнадцатеричных чисел, разделенных двоеточием: 00:AB:CD:EF:11:22, хотя некоторые производители оборудования предпочитают запись вида 00-AB-CD-EF-11-22 и даже 00ab.cdef.1122.
Исторически адреса прошивались в ПЗУ чипсета сетевой карты без возможности их модификации без флеш-программатора, но в настоящее время адрес может быть изменен программно, из операционной системы. Задать вручную МАС адрес сетевой карте можно в Linux и MacOS (всегда), Windows (почти всегда, если позволит драйвер), Android (только рутованный); с iOS (без рута) подобный трюк невозможен.
Структура адреса
Адрес состоит из части идентификатора производителя, OUI, и идентификатора, присваиваемого производителем. Назначением идентификаторов OUI (Organizationally Unique Identifier) занимается организация IEEE. На самом деле его длина может быть не только 3 байта (24 бита), а 28 или 36 бит, из которых формируются блоки (MAC Address Block, МА) адресов типов Large (MA-L), Medium (MA-M) и Small (MA-S) соответственно. Размер выдаваемого блока, в таком случае, составит 24, 20, 12 бит или 16 млн, 1 млн, 4 тыс. штук адресов. В настоящий момент распределено порядка 38 тысяч блоков, их можно посмотреть многочисленными онлайн-инструментами, например у IEEE или Wireshark.
Кому принадлежат адреса
Несложная обработка публично доступной базы данных выгрузки IEEE даёт довольно много информации. Например, некоторые организации забрали себе много OUI блоков. Вот наши герои:
Вендор | Число блоков/записей | Число адресов, млн. |
---|---|---|
Cisco Systems Inc | 888 | 14208 |
Apple | 772 | 12352 |
Samsung | 636 | 10144 |
Huawei Technologies Co.Ltd | 606 | 9696 |
Intel Corporation | 375 | 5776 |
ARRIS Group Inc. | 319 | 5104 |
Nokia Corporation | 241 | 3856 |
Private | 232 | 2704 |
Texas Instruments | 212 | 3392 |
zte corporation | 198 | 3168 |
IEEE Registration Authority | 194 | 3072 |
Hewlett Packard | 149 | 2384 |
Hon Hai Precision | 136 | 2176 |
TP-LINK | 134 | 2144 |
Dell Inc. | 123 | 1968 |
Juniper Networks | 110 | 1760 |
Sagemcom Broadband SAS | 97 | 1552 |
Fiberhome Telecommunication Technologies Co. LTD | 97 | 1552 |
Xiaomi Communications Co Ltd | 88 | 1408 |
Guangdong Oppo Mobile Telecommunications Corp.Ltd | 82 | 1312 |
У Google их всего 40, и это не удивительно: они сами производят не так много сетевых устройств.
Блоки МА не предоставляются бесплатно, их можно приобрести за разумные деньги (без абонентской платы) за $3000, $1800 или $755 соответственно. Интересно, что за дополнительные деньги (в год) можно приобрести «сокрытие» публичной информации о выделенном блоке. Таких сейчас, как видно выше, 232.
Когда закончатся МАС-адреса
Мы все порядком устали от не прекращающихся уже лет 10 историй о том, что «IPv4 адреса вот-вот кончатся». Да, новые блоки IPv4 получить уже непросто. При этом известно, что IP адреса распределены крайне неравномерно; существуют гигантские и мало использованные блоки, принадлежащие крупным корпорациям и государственным учреждением США, впрочем, без особой надежды на их перераспределение в пользу нуждающихся. Распространение NAT, CG-NAT и IPv6 сделало проблему нехватки публичных адресов не такой острой.
В МАС адресе 48 бит, из которых «полезными» можно считать 46 (почему? читай дальше), что даёт 246 или 1014 адресов, что в 214 раз больше IPv4 адресного пространства.
В настоящий момент распределено примерно полтриллиона адресов, или лишь 0.73% от всего объёма. До исчерпания MAC адресов ещё очень, очень далеко.
Случайность бит
Можно предположить, что OUI распределены случайно, а вендор затем также случайно назначает адреса индивидуальным сетевым устройствам. Так ли это? Посмотрим на распределение бит в имеющихся в моём распоряжении базах МАС адресов 802.11-устройств, собранных работающими системами авторизации в беспроводных сетях WNAM. Адреса принадлежат реальным устройствам, подключавшихся к Wi-Fi на протяжении нескольких лет в трех странах. В дополнение идет маленькая база 802.3-устройств проводной ЛВС.
Разобьем каждый МАС-адрес (шесть байт) каждой из выборок на биты побайтово, и посмотрим на частоту появления бита «1» в каждой из 48 позиций. Если бит выставлен совершенно произвольным образом, то вероятность получить «1» должна быть 50%.
Выборка Wi-Fi №1 (РФ) | Выборка Wi-Fi №2 (Беларусь) | Выборка Wi-Fi №3 (Узбекистан) | Выборка LAN (РФ) | |
---|---|---|---|---|
Число записей в базе | 5929000 | 1274000 | 366000 | 1000 |
Номер бита: | % бит "1" | % бит "1" | % бит "1" | % бит "1" |
1 | 48.6% | 49.2% | 50.7% | 28.7% |
2 | 44.8% | 49.1% | 47.7% | 30.7% |
3 | 46.7% | 48.3% | 46.8% | 35.8% |
4 | 48.0% | 48.6% | 49.8% | 37.1% |
5 | 45.7% | 46.9% | 47.0% | 32.3% |
6 | 46.6% | 46.7% | 47.8% | 27.1% |
7 | 0.3% | 0.3% | 0.2% | 0.7% |
8 | 0.0% | 0.0% | 0.0% | 0.0% |
9 | 48.1% | 50.6% | 49.4% | 38.1% |
10 | 49.1% | 50.2% | 47.4% | 42.7% |
11 | 50.8% | 50.0% | 50.6% | 42.9% |
12 | 49.0% | 48.4% | 48.2% | 53.7% |
13 | 47.6% | 47.0% | 46.3% | 48.5% |
14 | 47.5% | 47.4% | 51.7% | 46.8% |
15 | 48.3% | 47.5% | 48.7% | 46.1% |
16 | 50.6% | 50.4% | 51.2% | 45.3% |
17 | 49.4% | 50.4% | 54.3% | 38.2% |
18 | 49.8% | 50.5% | 51.5% | 51.9% |
19 | 51.6% | 53.3% | 53.9% | 42.6% |
20 | 46.6% | 46.1% | 45.5% | 48.4% |
21 | 51.7% | 52.9% | 47.7% | 48.9% |
22 | 49.2% | 49.6% | 41.6% | 49.8% |
23 | 51.2% | 50.9% | 47.0% | 41.9% |
24 | 49.5% | 50.2% | 50.1% | 47.5% |
25 | 47.1% | 47.3% | 47.7% | 44.2% |
26 | 48.6% | 48.6% | 49.2% | 43.9% |
27 | 49.8% | 49.0% | 49.7% | 48.9% |
28 | 49.3% | 49.3% | 49.7% | 55.1% |
29 | 49.5% | 49.4% | 49.8% | 49.8% |
30 | 49.8% | 49.8% | 49.7% | 52.1% |
31 | 49.5% | 49.7% | 49.6% | 46.6% |
32 | 49.4% | 49.7% | 49.5% | 47.5% |
33 | 49.4% | 49.8% | 49.7% | 48.3% |
34 | 49.7% | 50.0% | 49.6% | 44.9% |
35 | 49.9% | 50.0% | 50.0% | 50.6% |
36 | 49.9% | 49.9% | 49.8% | 49.1% |
37 | 49.8% | 50.0% | 49.9% | 51.4% |
38 | 50.0% | 50.0% | 49.8% | 51.8% |
39 | 49.9% | 50.0% | 49.9% | 55.7% |
40 | 50.0% | 50.0% | 50.0% | 49.5% |
41 | 49.9% | 50.0% | 49.9% | 52.2% |
42 | 50.0% | 50.0% | 50.0% | 53.9% |
43 | 50.1% | 50.0% | 50.3% | 56.1% |
44 | 50.1% | 50.0% | 50.1% | 45.8% |
45 | 50.0% | 50.0% | 50.1% | 50.1% |
46 | 50.0% | 50.0% | 50.1% | 49.5% |
47 | 49.2% | 49.4% | 49.7% | 45.2% |
48 | 49.9% | 50.1% | 50.7% | 54.6% |
Откуда такая несправедливость в 7 и 8 битах? Там почти всегда нули.
Действительно, стандарт определяет эти биты как специальные (Википедия):
Восьмой (с начала) бит первого байта МАС адреса называется Unicast/Multicast битом и определяет, какого типа кадр (фрейм) передается с этим адресом, обычный (0) или широковещательный (1) (мультикаст или броадкаст). Для обычного, unicast взаимодействия сетевого адаптера, этот бит выставлен в «0» во всех пакетах, им отправляемых.
Седьмой (с начала) бит первого байта МАС адреса называется U/L (Universal/Local) битом и определяет, является ли адрес глобально уникальным (0), или локально уникальным (1). По умолчанию, все «прошитые изготовителем» адреса глобально уникальны, поэтому подавляющее число собранных МАС адресов содержат седьмой бит выставленным в «0». В таблице присвоенных идентификаторов OUI только порядка 130 записей имеет U/L бит «1», и по всей видимости это блоки МАС адресов для специальных нужд.
С шестого по первый биты первого байта, биты второго и третьего байта в OUI идентификаторах, и тем более биты в 4-6 байтах адреса, назначаемые производителем, распределены более-менее равномерно.
Таким образом, в реальном МАС-адресе сетевого адаптера биты фактически равноценны и не несут технологического смысла, за исключением двух служебных бит старшего байта.
Распространенность
Интересно, какие производители беспроводного оборудования наиболее популярны? Объединим поиск по базе OUI данными выборки №1.
Вендор | Доля устройств, % |
---|---|
Apple | 26,09 |
Samsung | 19,79 |
Huawei Technologies Co. Ltd | 7,80 |
Xiaomi Communications Co Ltd | 6,83 |
Sony Mobile Communications Inc | 3,29 |
LG Electronics (Mobile Communications) | 2,76 |
ASUSTek COMPUTER INC. | 2,58 |
TCT mobile ltd | 2,13 |
zte corporation | 2,00 |
не найден в базе IEEE | 1,92 |
Lenovo Mobile Communication Technology Ltd. | 1,71 |
HTC Corporation | 1,68 |
Murata Manufactuaring | 1,31 |
InPro Comm | 1,26 |
Microsoft Corporation | 1,11 |
Shenzhen TINNO Mobile Technology Corp. | 1,02 |
Motorola (Wuhan) Mobility Technologies Communication Co. Ltd. | 0,93 |
Nokia Corporation | 0,88 |
Shanghai Wind Technologies Co. Ltd | 0,74 |
Lenovo Mobile Communication (Wuhan) Company Limited | 0,71 |
Практика показывает, что чем зажиточнее контингент абонентов беспроводной сети в данном месте, тем больше доля устройств Apple.
Уникальность
Уникальны ли МАС адреса? В теории да, поскольку каждый из производителей устройств (владельцев блока МА) обязан обеспечивать уникальный адрес для каждого из выпускаемых им сетевых адаптеров. Однако некоторые производители чипов, а именно:
- 00:0A:F5 Airgo Networks, Inc. (сейчас Qualcomm)
- 00:08:22 InPro Comm (сейчас MediaTek)
выставляют последние три байта МАС адреса в случайное число, по всей видимости, после каждой перезагрузки устройства. Таких адресов в моей выборке №1 нашлось 82 тысячи.
Поставить себе чужой, не уникальный адрес можно, конечно, путем целенаправленной его установки «как у соседа», определив его сниффером, или выбрав наугад. Также возможно случайно поставить себе не уникальный адрес, выполнив, например, восстановление бэкапа конфигурации какого-нибудь маршрутизатора вроде Miktorik или OpenWrt.
Что будет, если в сети будет присутствовать два устройства с одним МАС адресом? Все зависит от логики сетевого оборудования (проводного роутера, контроллера беспроводной сети). Скорее всего, оба устройства или не будут работать, или будут работать с перебоями. С точки зрения стандартов IEEE, защиту от подделки МАС адресов предлагается решать при помощи, например, MACsec или 802.1Х.
Что, если поставить себе МАС с выставленным в «1» седьмым или восьмым битом, т.е. local или multicast-адрес? Скорее всего, ваша сеть на это не обратит внимания, но формально такой адрес не будет соответствует стандарту, и лучше так не делать.
Как работает рандомизация
Мы знаем, что с целью предотвратить отслеживание перемещения людей путем сканирования эфира и сбора МАС-операционные системы смартфонов уже несколько лет применяют технологию рандомизации. Теоретически, при сканировании эфира в поиске известных сетей смартфон отправляет пакет (группу пакетов) типа 802.11 probe request с МАС-адресом в качестве источника:
Включенная рандомизация позволяет указывать не «прошитый», а какой-то другой адрес источника пакета, меняющийся при каждом цикле сканирования, во времени или ещё как-то. Работает ли это? Посмотрим на статистику собранных МАС-адресов из эфира так называемым «Wi-Fi Радаром»:
Вся выборка | Выборка только с нулевым 7м битом | |
---|---|---|
Число записей в базе | 3920000 | 305000 |
Номер бита: | % бит "1" | % бит "1" |
1 | 66.1% | 43.3% |
2 | 66.5% | 43.4% |
3 | 31.7% | 43.8% |
4 | 66.6% | 46.4% |
5 | 66.7% | 45.7% |
6 | 31.9% | 46.4% |
7 | 92.2% | 0.0% |
8 | 0.0% | 0.0% |
9 | 67.2% | 47.5% |
10 | 32.3% | 45.6% |
11 | 66.9% | 45.3% |
12 | 32.3% | 46.8% |
13 | 32.6% | 50.1% |
14 | 33.0% | 56.1% |
15 | 32.5% | 45.0% |
16 | 67.2% | 48.3% |
17 | 33.2% | 56.9% |
18 | 33.3% | 56.8% |
19 | 33.3% | 56.3% |
20 | 66.8% | 43.2% |
21 | 67.0% | 46.4% |
22 | 32.6% | 50.1% |
23 | 32.9% | 51.2% |
24 | 67.6% | 52.2% |
25 | 49.8% | 47.8% |
26 | 50.0% | 50.0% |
27 | 50.0% | 50.2% |
28 | 50.0% | 49.8% |
29 | 50.0% | 49.4% |
30 | 50.0% | 50.0% |
31 | 50.0% | 49.7% |
32 | 50.0% | 49.9% |
33 | 50.0% | 49.7% |
34 | 50.0% | 49.6% |
35 | 50.0% | 50.1% |
36 | 50.0% | 49.5% |
37 | 50.0% | 49.9% |
38 | 50.0% | 49.8% |
39 | 50.0% | 49.9% |
40 | 50.0% | 50.1% |
41 | 50.0% | 50.2% |
42 | 50.0% | 50.2% |
43 | 50.0% | 50.1% |
44 | 50.0% | 50.1% |
45 | 50.0% | 50.0% |
46 | 50.0% | 49.8% |
47 | 50.0% | 49.8% |
48 | 50.1% | 50.9% |
Картина совсем другая.
8й бит первого байта МАС адреса по-прежнему соответствует Unicast-природе SRC-адреса в probe request пакете.
7й бит в 92.2% случаев установлен в Local, т.е. с достаточной долей уверенности можно считать, что именно столько собранных адресов относится к рандомизированным, а менее 8% — к реальным. При этом распределение бит в OUI для таких реальных адресов примерно совпадает с данными предыдущей таблицы.
Какому производителю, по OUI, принадлежат рандомизированные адреса (т.е. с 7м битом в «1»)?
Производитель по OUI | Доля среди всех адресов |
---|---|
не найден в базе IEEE | 62.45% |
Google Inc. | 37.54% |
остальные | 0.01% |
При этом все рандомизированные адреса, отнесенные к Google, принадлежат одному OUI c префиксом DA:A1:19. Что это за префикс? Давайте посмотрим в исходники Android.
private static final MacAddress BASE_GOOGLE_MAC = MacAddress.fromString("da:a1:19:0:0:0");
Стоковый андроид в поиске беспроводных сетей использует специальный, зарегистрированный OUI, один из немногих с установленным седьмым битом.
Вычислить реальный МАС из рандомного
Посмотрим там же:
private static final long VALID_LONG_MASK = (1L << 48) - 1;
private static final long LOCALLY_ASSIGNED_MASK = MacAddress.fromString("2:0:0:0:0:0").mAddr;
private static final long MULTICAST_MASK = MacAddress.fromString("1:0:0:0:0:0").mAddr;
public static @NonNull MacAddress createRandomUnicastAddress(MacAddress base, Random r) {
long addr;
if (base == null) {
addr = r.nextLong() & VALID_LONG_MASK;
} else {
addr = (base.mAddr & OUI_MASK) | (NIC_MASK & r.nextLong());
}
addr |= LOCALLY_ASSIGNED_MASK;
addr &= ~MULTICAST_MASK;
MacAddress mac = new MacAddress(addr);
if (mac.equals(DEFAULT_MAC_ADDRESS)) {
return createRandomUnicastAddress(base, r);
}
return mac;
}
Адрес целиком, либо его младшие три байта, это чистый Random.nextLong(). «Патентованное восстановление реального МАС» — надувательство. С большой долей уверенности можно ожидать, что производители Android-телефонов применяют и другие, не зарегистрированные OUI. Исходников iOS у нас нет, но скорее всего там применен схожий алгоритм.
Вышесказанное не отменяет работу других механизмов деанонимизации Wi-Fi абонентов, основанных на анализе других полей probe request фрейма, или корреляции относительной частоты посылаемых устройством запросов. Однако достоверно отследить абонента внешними средствами крайне проблематично. Собираемые данные больше подойдут для анализа средней/пиковой нагрузки по местоположению и времени, на основе больших чисел, без привязки к конкретным устройствам и людям. Точные данные есть только у тех, кто "внутри", у самих производителей мобильных ОС, у установленных приложений.
Что может быть опасного в том, что кто-то другой узнает МАС-адрес вашего устройства? Для проводных и беспроводных сетей можно организовать атаку "отказ в обслуживании". Для беспроводного устройства, к тому же, с некоторой вероятностью можно зафиксировать момент появления в месте, где установлен сенсор. Подменой адреса можно попробовать "представиться" вашим устройством, что может сработать, только если не применяется дополнительных средств защиты (авторизация и/или шифрование). 99.9% людей здесь не о чем волноваться.
МАС-адрес сложнее, чем кажется, но проще, чем мог бы быть.