Открываем порты за NAT при помощи NAT-PMP и UPnP IGD
Ранее я много раз слышал, что UPnP каким-то образом умеет самостоятельно открывать порты (производить Port Forwarding на роутере) по запросу от хоста из локальной сети. Однако, то, каким именно образом это происходит, и какие протоколы для этого используются, доселе было покрыто для меня пеленой тумана.
В данной статье я хочу кратко рассказать, как работают два механизма для проброса портов, а именно NAT Port Mapping Protocol и Internet Gateway Device (IGD) Protocol, входящий в набор протоколов UPnP. К своему удивлению я обнаружил, что в рунете информация по данному вопросу более чем скудна, что и сподвигло меня на написание данной заметки.
Для начала приведу краткий FAQ:
Q: Для чего нужны данные протоколы?
A: Для формирования на маршрутизаторе правила проброса определенного TCP/UDP порта (Port Forwarding) не вручную, а «автоматически», т.е. по запросу от хоста во внутренней сети.
Q: Как это реализуется?
A: Устройство за NAT отправляет маршрутизатору запрос с указанием внутреннего и внешнего номеров портов и типа протокола (TCP/UDP). Если указанный внешний порт свободен, маршрутизатор формирует у себя правило трансляции и рапортует запросившему компьютеру об успешном выполнении запроса.
Q: Проводится ли на маршрутизаторе аутентификация/авторизация запросов на открытие порта?
A: Нет, не проводится.
Теперь же рассмотрим работу данных протоколов более подробно (под катом).
Port Mapping Protocol
NAT-PMP описан в RFC 6886. Для своей работы он использует UDP-порт сервера 5351.
Рассмотрим работу протокола на конкретном примере — торрент-клиенте Vuze 5.7 для Windows 7.
Примечание: NAT-PMP во Vuze по умолчанию выключен. Его необходимо активировать в настройках плагинов.
1. Запускаем Wireshark. В строке фильтра вводим nat-pmp
2. Запускам Vuze.
3. Останавливаем перехват пакетов, смотрим результаты.
У меня получилось следующее:
Всего видим 6 пакетов (3 запроса и 3 ответа).
Первые 2 это запрос внешнего адреса маршрутизатора и ответ с указанием этого самого адреса. Не будем на них подробно останавливаться и лучше рассмотрим, как происходит маппинг портов на примере пакетов 3-4.
Здесь мы видим, что запрашивается проброс внешнего UDP порта 48166 на такой же внутренний порт. Интересно, что внутри протокола не указывается адрес хоста, на который должна происходить трансляция (Inside Local в терминологии Cisco). Это означает, что маршрутизатор должен взять адрес источника пакета из IP-заголовка и использовать его в качестве Inside Local.
Параметр Requested Port Mapping Lifetime ожидаемо означает время жизни записи в таблице трансляций.
Как мы видим, маршрутизатор предполагаемо создал запрашиваемую трансляцию и ответил кодом Success. Параметр Seconds Since Start of Epoch означает время с момента инициализации таблицы трансляций (т.е. с момента последней перезагрузки роутера).
Маппинг TCP-портов происходит точно также и отличается только значением поля Opcode.
После того, как приложение прекратило использовать данные порты, оно может послать маршрутизатору запрос на удаление трансляции.
Главное отличие запроса на удаление от запроса на создание заключается в том, что параметр Lifetime устанавливается в ноль.
Вот что произойдет, если мы закроем Vuze.
На этом рассмотрение NAT-PMP закончено, предлагаю перейти к несколько более «мудреному» UPnP IGD.
Internet Group Device Protocol
Для обмена своими сообщениями данный протокол использует SOAP.
Однако, в отличие от NAT-PMP, IGD не использует фиксированный номер порта сервера, поэтому перед тем, как обмениваться сообщениями, нужно сперва этот порт узнать. Делается это при помощи протокола SSDP (данный протокол является частью UPnP и используется для обнаружения сервисов).
Запускаем торрент-клиент. Он формирует SSDP-запрос и отсылает его на мультикастовый адрес 239.255.255.250.
Маршрутизатор формирует ответ и отправляет его уже юникастом:
Внутри ответа мы можем увидеть URL для взаимодействия с маршрутизатором по протоколу IGD.
Далее Vuze подключается к маршрутизатору по указанному URL и получает XML с информацией о данном устройстве, в том числе содержащую набор URI для управления некоторыми функциями маршрутизатора. После того, как нужный URI найден в rootDesc.xml, Vuze отправляет SOAP-запрос на содание NAT-трансляции по найденному URI.
Примечание: до того, как запросить создание трансляции, Vuze заставил маршрутизатор перечислить все имеющиеся Port Forwarding’и. Для чего это было сделано, я могу лишь догадываться.
SOAP-запрос на создание трансляции UDP-порта:
Как говорилось ранее, нужный URI (идет сразу после POST) Vuze взял из rootDesc.xml. Для добавления трансляции используется функция с названием AddPortMapping.
Также можно отметить, что, в противоположность NAT-PMP, Inside Local-адрес указывается внутри самого протокола.
Аналогично NAT-PMP, при закрытии торрент-клиента маппинги проброшенных портов удаляются. Делается это функцией DeletePortMapping:
Можно заметить, что для удаления правила достаточно указать только тип протокола (UDP) и номер внешнего порта, не указывая остальные параметры.
Настройка port mapping в windows с помощью netsh
О чём речь и зачем это нужно
В windows, начиная с версии Windows XP существует возможность настроить проброс портов (port forwarding или port mapping) без каких-либо внешних программ (и даже не используя встроенный брандмауэр!).
Зачем это может быть нужно? Например, для настройки еще одного (дополнительного) порта, на котором будет «висеть» служба. К примеру, вдобавок к порту 80 (на котором находится apache) можно вдобавок «открыть» порт 1580 или 65123, который будет фактически выполнять ту же роль, что и 80-й порт, но при этом он будет «секретным» портом.
Или же можно таким образом «прятать» фактические серверы: разрешать подключения на какой-либо локальный порт (на localhost, 127.0.0.1), а затем «пробрасывать» это подключение на другой сервер (и на другой порт).
Ограничение: данные перенаправления действуют только на TCP порты, UDP трафик таким образом перенаправить не удастся.
Как сделать port mapping (port forwarding) через netsh
netsh interface portproxy add v4tov4 listenport= <целое_число или имя_службы>listenaddress=
например:
netsh interface portproxy add v4tov4 listenport=5556 listenaddress=192.168.1.1 connectport=3389 connectaddress=192.168.1.10
В этом примере на компьютере с IP адресом 192.168.1.1 был открыт порт № 5556. При подключении к этому порту все пакеты, приходящие на порт, автоматически будут пересылаться на IP адрес 192.168.1.10, на порт 3389 (RDP).
Проверка правильности настройки port mapping
В первую очередь проверяем, появилось ли наше правило в списке правил netsh:
netsh interface portproxy show all
В случае возникновения проблем с подключением проверьте, что у Вас правильно настроен (или отключен) брандмауэр (который может блокировать подключения на открытый Вами порт).
Удаление port mapping
Для того, чтобы удалить все правила перенаправления (простейший случай) достаточно выполнить команду (напоминаю, командная строка должна быть запущена от имени администратора!):
netsh interface portproxy reset
После этого убедитесь, что все правила удалены: по команде
netsh interface portproxy show all
не должно ничего отображаться.
Если же Вы хотите удалить только одно правило перенаправления портов, команда будет немного сложнее:
netsh interface portproxy delete v4tov4 listenport= <целое_число или имя_службы>listenaddress=
например:
netsh interface portproxy delete v4tov4 listenport=5556
В этом примере мы удаляем port mapping, который был настроен на локальном компьютере, на порту 5556.
Изменение настроек port mapping через netsh
например:
netsh interface portproxy set v4tov4 listenport=5556 listenaddress=192.168.1.1 connectport=3300 connectaddress=192.168.1.10
В этом примере на компьютере с IP адресом 192.168.1.1 была изменена настройка порта № 5556: теперь при подключении к этому порту все пакеты, приходящие на порт, автоматически будут пересылаться на IP адрес 192.168.1.10, на порт 3300.
Примечание: Можно изменять любые значения параметров для существующей записи сервера portproxy. Если значения не заданы, изменения не производятся.
Что такое port mapping и как его настроить
В этой статье я хочу рассказать вам о настройке port mapping на прокси сервера iDeco. Для начала давайте разберемся, что же такое port mapping или перенаправление портов. Обычно как в не больших так и в крупных организациях компьютеры всех пользователей объединены в одну локальную сеть, а выход в интернет осуществляется через единый шлюз. В качестве шлюза может выступать обычный роутер, более умный маршрутизатор Cisco или как в нашем случае интернет шлюз iDeco.
В настройках, которого можно указать каким пользователям разрешен, а каким запрещен выход в глобальную сеть. Внутри интернет шлюза располагаются 2 сетевых карты одна, из которых смотрит наружу, т.е. имеет прямой выход в интернет и белый ip адрес, вторая наоборот смотрит внутрь локальной сети. Когда пользователь пытается открыть сайт или посылает запрос в интернет он сначала попадает на локальную сетевую карту, затем обрабатывается и при отсутвии запретов пакеты от компьютера в локальной сети пересылаются на внешнюю сетевую карту, откуда уже уходят по своему назначению в глобальную сеть.
Бывают такие ситуации когда нам необходимо получить доступ к какой либо службе или компьютеру, находящемуся в локальной сети за шлюзом, именно в этот момент на помощь приходит port mapping. Вообще настройка роутера очень простое дело, конечно же, для знающего человека, но я уверен что если вы научитесь настраивать более сложные интернет шлюзы то с простыми роутерами проблем у вас больше никогда не возникнет.
Итак, разберем все на конкретном примере:
внешний ip адрес шлюза: 82.231.13.165
адрес компьютера за шлюзом: 192.168.1.115
к компьютеру необходимо получить доступ по RDP
По умолчанию порт RDP = 3389
Сейчас мы сделаем так, что бы при обращении к ip 82.231.13.165 из интернета по порту 3389 мы могли спокойно управлять своим офисным компьютером, который имеет локальный ip 192.168.1.115
Данное правило будет выглядеть следующим образом:
Как видите ничего сложного нет, осталось только перезагрузить службу, что бы применить только что созданное правило.
Что такое port mapping?
На самом деле это гораздо легче технически реализовать, чем объяснить сам принцип. Это можно сравнить с солнечным зайчиком: если Вы направляете луч света в зеркало, он «автоматически» отражается и освещает какой-либо предмет. При этом если вы осветили какого-либо человека и этот человек не знает, что луч отразился от зеркала, он будет думать, что свет исходит от того места, где находится зеркало. Так же и здесь: все передаваемые Вами данные безо всяких искажений передаются на другой компьютер, который может быть расположен где угодно.
Эта технология в чем-то аналогична прокси серверу, однако она гораздо проще и гораздо менее гибкая.
Ваш компьютер >>> компьютер с port mapping >>> удаленный сервер.
Для чего нужен port mapping?
Разумеется это только основные способы применения port mapping. Существует еще масса видов деятельности, где он также будет весьма и весьма полезен.
Преимущества port mapping
Недостатки port mapping
Как работать с port mapping
Предположим, что сделан port mapping:
Хотелось бы заметить: если Вам нужно использовать port mapping, то Вы должны пользоваться только вторым адресом. То есть если Вы не можете подключиться к mail.ru, то Вы должны использовать только внутренний адрес ( http://192.168.1.255:1234/ ).
Port mapping на локальном компьютере
В случае, когда у Вас делается port mapping на Вашем же компьютере, то обычно указывают:
Так вот, в этом случае Вам нужно (настроив port mapping) подключаться не к mail.ru (и им подобным), а указать в качестве сервера Ваш же компьютер:
127.0.0.1:localport
То есть если Вы сделали port mapping на web сайт, то Вам нужно писать: http://127.0.0.1:1234/
Всё, что вы хотели знать о МАС адресе

Разберемся, что это такое.
МАС адрес (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, и это не удивительно: они сами производят не так много сетевых устройств.
Когда закончатся МАС-адреса
Мы все порядком устали от не прекращающихся уже лет 10 историй о том, что «IPv4 адреса вот-вот кончатся». Да, новые блоки IPv4 получить уже непросто. При этом известно, что IP адреса распределены крайне неравномерно; существуют гигантские и мало использованные блоки, принадлежащие крупным корпорациям и государственным учреждением США, впрочем, без особой надежды на их перераспределение в пользу нуждающихся. Распространение NAT, CG-NAT и IPv6 сделало проблему нехватки публичных адресов не такой острой.
В МАС адресе 48 бит, из которых «полезными» можно считать 46 (почему? читай дальше), что даёт 2 46 или 10 14 адресов, что в 2 14 раз больше 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.
Уникальность
Уникальны ли МАС адреса? В теории да, поскольку каждый из производителей устройств (владельцев блока МА) обязан обеспечивать уникальный адрес для каждого из выпускаемых им сетевых адаптеров. Однако некоторые производители чипов, а именно:
выставляют последние три байта МАС адреса в случайное число, по всей видимости, после каждой перезагрузки устройства. Таких адресов в моей выборке №1 нашлось 82 тысячи.
Поставить себе чужой, не уникальный адрес можно, конечно, путем целенаправленной его установки «как у соседа», определив его сниффером, или выбрав наугад. Также возможно случайно поставить себе не уникальный адрес, выполнив, например, восстановление бэкапа конфигурации какого-нибудь маршрутизатора вроде Mikrotik или 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.
Стоковый андроид в поиске беспроводных сетей использует специальный, зарегистрированный OUI, один из немногих с установленным седьмым битом.
Вычислить реальный МАС из рандомного
Адрес целиком, либо его младшие три байта, это чистый Random.nextLong(). «Патентованное восстановление реального МАС» — надувательство. С большой долей уверенности можно ожидать, что производители Android-телефонов применяют и другие, не зарегистрированные OUI. Исходников iOS у нас нет, но скорее всего там применен схожий алгоритм.
Вышесказанное не отменяет работу других механизмов деанонимизации Wi-Fi абонентов, основанных на анализе других полей probe request фрейма, или корреляции относительной частоты посылаемых устройством запросов. Однако достоверно отследить абонента внешними средствами крайне проблематично. Собираемые данные больше подойдут для анализа средней/пиковой нагрузки по местоположению и времени, на основе больших чисел, без привязки к конкретным устройствам и людям. Точные данные есть только у тех, кто «внутри», у самих производителей мобильных ОС, у установленных приложений.
Что может быть опасного в том, что кто-то другой узнает МАС-адрес вашего устройства? Для проводных и беспроводных сетей можно организовать атаку «отказ в обслуживании». Для беспроводного устройства, к тому же, с некоторой вероятностью можно зафиксировать момент появления в месте, где установлен сенсор. Подменой адреса можно попробовать «представиться» вашим устройством, что может сработать, только если не применяется дополнительных средств защиты (авторизация и/или шифрование). 99.9% людей здесь не о чем волноваться.
МАС-адрес сложнее, чем кажется, но проще, чем мог бы быть.




