Второй этаж

Продолжение истории с устройством для тестирования атаки Deauthentication на Wi-Fi сеть.

Поигравшись с прототипом от предыдущего проекта, понял, что эффективность работы всё таки не достаточна. Последней каплей стал смартфон моего сына, который настолько быстро переподключался, что вообще было не понятно – “в чём прикол”.
Но, сдаваться мы не привыкли 🙂
Поразмыслив, придумал новый вариант улучшения системы. С помощью второго ESP8266 модуля.
Идея такова – разделить систему на две части. Один модуль непрерывно сканирует и ищет абонентские устройства и точки доступа. Он передаёт результаты на второй модуль по последовательному порту. Второй модуль максимально быстро рассылает Deauthenticate, постоянно обновляя список.

Железо

_DSC0120На более длинные планки установлено сразу два ESP модуля. Они подключены к одному преобразователю напряжения. В общем, всё также как и в предыдущем устройстве. Дополнительно Tx последовательного порта одного модуля подключен к Rx другого. (Земля и так общая.) Таким образом, порт работает в симплексном режиме. Какой модуль первый, какой второй – неважно. Программа на них одна (см. ниже).

Из минусов – уменьшилось время жизни батареи. Я точно не измерял, но по ощущениям держит где-то порядка одного часа. Пришлось перейти на лабораторный блок питания для отладки.

Софт

_DSC0121Делать две программы естественно лень. Так что программа одна. После включения модули в течении ~3 секунд передают последовательность 0xFF. Но получает её только один из них (будущий Джамер), поскольку обратно просто нет провода. Так модули понимают, кто из них будет сканером, а кто Джамером. В качестве бонуса остаётся незанятый канал передачи на Джамере, его можно использовать для вывода отладочной информации.

“Сканер” ищет точки доступа и клиентов на каждом канале. Найдя нового клиента на данном канале, отправляет основную информацию на Джамер. Номер канала, MAC’и и порядковый номер последнего пакета. Если около 200 миллисекунд новых пакетов нет, Сканер переходит на следующий канал. При этом сбрасывается счётчик клиентов, чтобы все найденные клиенты были вновь отправлены на Джамер.

Протокол между модулями максимально простой, просто передача 15 байт на одного клиента. Начальная синхронизация основана на том, что первый байт пакета – номер канала, должен быть от 1 до 14, а никак не 0xFF, который 3 секунды посылает Сканер. В принципе, это же может сработать и в дальнейшем, если в канале будут ошибки (что маловероятно, учитывая схему).

Джамер проверяет порт, если есть что-то новенькое – добавляет/обновляет список. Потом отключает всех, кто уже зарегистрирован на этом канале. И идёт на следующий канал.

В результате скорость подавления возросла многократно. Устройство стабильно отключает два смартфона, лэптоп и принтер в двух смежных комнатах от Wi-Fi.

Моддинг

_DSC0123С самого начала меня смущали загнутые проводки антенн модулей. А теперь их стало две, в неприятной близости друг от друга. Также система уже стала механически не очень устойчивой.

Так появился мод – “No-Wi-Fi-Coctail-Party-Edition”. Откуда взялись трубочки я думаю Вы догадались. Антенны теперь расположены на одной оси, что, как я надеюсь, должно уменьшить взаимное влияние (“поле диполя” и далее по тексту :-))

А к батарейке приделан небольшой магнит, он удерживает сборку на любой вертикальной металлической поверхности.

Исходный код на GitHub.

Выходные на Тёмной Стороне

Давным давно я заказал несколько модулей ESP8266 (модификация ESP-201) для создания системы “умный дом”, которую так до сих пор и не закончил. Незадолго до этого я работал над проектом в области безопасности Wi-Fi сетей, и довольно близко познакомился с имеющимся в широко известном дистрибутиве Kali арсеналом утилит для работы с Wi-Fi. Так что, когда модули наконец попали ко мне в руки, я сразу подумал, а нельзя ли их использовать для тестирования атак на Wi-Fi сети. Однако, просмотрев функции, присутствующие в распространяемом на тот момент SDK, я не нашёл ничего подходящего и забросил идею.
Некоторое время назад на Hackaday опубликовали интересную статью, где демонстрировался способ отправки произвольного пакета в сеть. Таким образом, появилась возможность на выходных покопаться и реализовать старый план.

Железо

Внутреннее устройство
Устройство состоит из собственно ESP модуля, миниатюрного конвертера постоянного напряжения, двух планок с отверстиями для пинов, батареи на 9 Вольт и соответствующего разъёма, четырёх резисторов на 4.7 кОм.
Прошивка модуля
Разъём для батареи на 9 Вольт можно достать из аналогичной старой батарейки. Соединения между разъёмом и платой конвертера и между конвертером и планками я сделал из толстой железной проволоки. Они удерживают всю сборку вместе. Сопротивления присоединены так, как требуется для запуска и работы модуля ESP. Выводы CHIP, RST подтянуты к плюсу, вывод 15 к минусу. Вывод 0 подсоединён к трёхпиновому разъёму, закреплённому на боку сборки. Если надеть джампер на этот разъём, вывод 0 подтянется к земле. В такой конфигурации модуль ESP можно прошить, используя последовательный порт и кабель, совместимый с TTL уровнями.
Модуль работает
Если джампер не стоит, после подачи питания модуль запускается и начинает выполнять программу из памяти. Программа выводит диагностические сообщения на последовательный порт, независимо от того, подключен кабель или нет. В качестве бонуса при выводе на последовательный порт мигает маленький светодиод на поверхности ESP модуля. Таким образом можно судить о том, что программа пока работает 🙂

Софт

Я использовал Arduino IDE (1.6.7). Эта среда разработки может работать со всеми платами которые у меня сейчас есть, также она работает как на Linux, так и под Windows. Можно начать проект на Windows и, если нужно, перейти на Linux или наоборот. Конечно, в ней отсутствует много того, к чему я привык в более богатых системах типа Visual Studio, но для маленьких проектов это не так существенно.
Я начал с кода из оригинальной статьи. Сначала адаптировал проект к Arduino, а потом начал вносить изменения и поменял практически всё. Сильно помог исходный код другой известной программы – MDK3. В результате в коде осталась пара мест, которые я не до конца понимаю и подобрал работающий вариант путём тестирования. Наверно, можно покопаться в стандартах и разобраться, но на это не хватило времени.
Ниже приведён снимок экрана системы которую я использовал для мониторинга работы прототипа. Видно как примерно через 10 секунд после подсоединения батареи пропадает пинг на телефон подключенный по Wi-Fi. В дампе Wireshark видны пакеты Deauthentication.
Мониторинг
Программа устроена довольно просто. Она принимает и распознаёт пакеты Beacon и пакеты с данными на заданном радио канале. На основании этих данных она обновляет списки обнаруженных точек доступа и клиентов. После того как в течении примерно 200 миллисекунд не обнаружено новых станций, система посылает команды на отключение для всех обнаруженных клиентов от имени соответствующих точек доступа. После этого система переходит на следующий канал.
Различные устройства по разному реагируют на такую атаку. Один из моих телефонов отключился от Wi-Fi на совсем, а второй временно отключался, но успевал переподключиться пока система проверяла остальные каналы. Для более стабильного результата можно предпринять следующее:

  • После какого-то начального периода перестать искать новые станции и просто быстро отсоединять уже известные по кругу.
  • Поиграть с константами, возможно у меня не оптимальная комбинация.
  • Купить 14 ESP модулей по одному на каждый канал 😉

Есть одна тонкость при работе с SDK от Espressif. В последних версиях они ограничили функцию передачи самодельных пакетов. НО, в более старой версии SDK 1.3.0 есть версия этой функция до введения ограничений. Нужно только дополнить файл заголовков “user_interface.h”:
typedef void (*freedom_outside_cb_t)(uint8 status);
int wifi_register_send_pkt_freedom_cb(freedom_outside_cb_t cb);
void wifi_unregister_send_pkt_freedom_cb(void);
int wifi_send_pkt_freedom(uint8 *buf, int len, bool sys_seq);

Также полезно знать, что функция перехвата пакетов в режиме мониторинга даёт доступ только к первым 112 байтам пакета. Таким образом, не получится, например, перехватывать handshake, или запоминать пакеты для последующей расшифровки. Возможно эти ограничения смогут снять в будущем.

Исходный код под катом. Проект на GitHub.

Continue reading “Выходные на Тёмной Стороне”