Инжект пакетов в закрытые WIFI сети

//habrahabr.ru/sandbox/82 777/ в продолжение предыдущего поста попалась заметка из песочницы хабра.

При передаче данных по защищенным беспроводным wifi-сетям заголовок фрейма 802.11 передается в открытом виде тогда как вся его полезная нагрузка поддаётся шифрованию. Для правильной обработки такого фрейма машина получателя должна каким либо образом «догадаться» что данные внутри него зашифрованы, и перед их передачей на более высокие уровни модели OSI их необходимо расшифровать. Эту роль согласно стандарту 802.11 выполняет флаг WEP, который занимает 15-ий бит в заголовке фрейма 802.11, и принимает значение 1 при использовании шифрования.

Структура фрейма 802.11

Заголовок фрейма 802.11

Frame control field

Отсюда вопрос: Как отреагирует машина в защищенной wifi сети на фрейм в котором флаг WEP не установлен, когда в 15-м бите заголовка будет находиться 0?

Как оказалось она его корректно обработает!

Следовательно если сконструировать такой фрейм и поместить в него например ARP-response или DNS-request, ICMP-echo request то все они будут обработаны целевой системой. Кроме флага WEP значение имеют еще несколько полей в заголовке, а именно"To DS" и «From DS» биты. По сути они обозначают кому непосредственно предназначается фрейм — точке доступа или клиентской станции.

Как не удивительно чтобы добиться успеха необходимо выставить «1» и «0» в эти биты соответственно. Секрет заключается в том что этот фрейм перед тем как попасть непосредственно на машину об’екта будет ретранслирован точкой доступа. В зависимости от значений в этих двух битах значения полей адресов могут иметь разную интерпретацию. Эта зависимость изображена на рисунке, где AP — access point, STA — station, BSSID — MAC адрес точки доступа, DA — Destination address, SA — source address.

В качестве исходного MAC адреса нужно указать адрес который ассоциирован с точкой доступа, то есть адрес любого компьютера из целевой сети. Делается это для того чтобы точка доступа ретранслировала наш фрейм. Также стоит отметить что Android-устройстване обрабатывают фреймы в которых в заголовке указаны одинаковые адреса отправителя и получателя. Стационарные компьютеры которые были под рукой восприняли такие фреймы нормально.

Для инжекта пакетов в сеть использовалась библиотека JnetPcap. Также перед проведением инжекта необходимо перевести сетевую карту в режим монитора и настроить на необходимую частоту. Но следует учитывать что ответ на такие пакеты все же будет зашифрован. Конкретной области применения данной особенности работы беспроводных протоколов наводить не буду, так как тут все зависит от глубины фантазии и исходных данных.