Фишинговая атака с помощью бесплатного WiFi

Free_Wi-Fi… как же приятно видеть подобное оповещение на экране смартфона или другого гаджета, когда ты присел отдохнуть в кафе торгового центра или аэропорта перед вылетом. Так уж устроен человек, что тянет его ко всему дармовому. Однако каждому известно, где чаще всего бывает бесплатный сыр. Какие опасности таит в себе бесплатный вай-фай?
 

Уже давно не секрет (по крайней мере для знающих людей), что операторы открытых сетей с доступом к интернету могут легко перехватывать весь идущий через них трафик и получать таким образом различную информацию, в том числе что вы ищете и какие ресурсы посещаете. Хорошо, если ее просто передадут рекламодателям, чтобы изучать спрос на товары и услуги, и на этом все ограничится, но это далеко не все опасности, подстерегающие охочих до халявы владельцев электронных девайсов. Что же еще не так?

Недавно в РФ был принят закон, призванный обезопасить открытые точки доступа в общественных местах через обязательную авторизацию с помощью мобильного телефона или социальных сетей. Но, как часто бывает, «что-то пошло не так» и благое, казалось бы, дело обернулось появлением новых уязвимостей, играющих на тонкостях души человеческой. В итоге родился небольшой проект, который в полной мере демонстрирует безграничную легковерность подавляющего большинства представителей Homo Sapiens. Итак, обо всем по порядку.

Что за бесплатный WIFI?

Зверя изобрели и воплотили в железе наши китайские коллеги. Точнее, они построили скелет самого хищного зверя, которого мы будем одевать в овечью шкуру. Имя ему — контроллер ESP8266, неоднократно упоминавшийся на страницах нашего сайта и GitHub. В нашем проекте мы будем использовать его в качестве автономной точки доступа и веб-сервера. Девайс поднимет точку доступа с именем Free_Wifi, не содержащую пароля, при этом большая часть смартфонов и прочих девайсов будет присылать своим владельцам уведомление с предложением подключиться к открытой сети Wi-Fi, даже если они не просматривали список доступных сетей. Это проверено на Android 9 и iOS последней версии. Итак, доверчивый юзер, не особо полагаясь на интуицию и здравый смысл, нажимает на выпадающее уведомление с весьма заманчивым предложением и попадает на страницу регистрации (при этом не нужно открывать браузер). На экране появится вот такое окно.

Страница авторизации в открытой сети
Страница авторизации в открытой сети

Здесь мы видим стандартную страничку приветствия открытых точек доступа, предлагающую авторизоваться с помощью электронной почты, пароля и номера телефона либо сразу ввести код авторизации, если он есть. Жертва (как правило, не задумываясь) вводит данные, после чего получает уведомление, что нужно подождать SMS-сообщение с кодом авторизации, а все введенные жертвой данные благополучно сливаются на SD-карту устройства, одновременно отображаясь на OLED-дисплее.

Так выглядят перехваченные данные
Так выглядят перехваченные данные

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

И что дальше?

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

Часто ли ты используешь разные пароли для разных сервисов? Вопрос, скорее всего, риторический. Но, даже не имея действительного пароля, можно уже сделать выводы о предпочтениях и уровне осведомленности человека. А адрес электронной почты и номер телефона — это уже хоть какая-то информация, способная сыграть большую роль в дальнейших атаках. Тут на что фантазии хватит: от рассылки писем и SMS с рекламой находящихся поблизости заведений до взлома почты, социальных сетей и деанонимизации человека… Как минимум этот метод позволит узнать номерок и мыло понравившейся девчонки из соседнего подъезда.

В общем, мы наглядно убедились, что открытые сети могут быть весьма небезопасны.

Рождение зверя

Как я уже говорил, использовать мы будем ESP8266 NodeMCU либо ESP32 (для 32 придется подкорректировать код), эти контроллеры работают идентично. Вооружаемся паяльником, макетной платкой, инструментами. Также в нашем устройстве применяется адаптер microSD-карты и OLED-дисплей размером 128 на 32 пикселя с контроллером SSD1306 и интерфейсом i2C. Еще нам понадобится зуммер (динамик-пищалка от старого системника). Так, все приготовили. Берем схему, которая показана на следующей картинке, и приступаем к сборке зверюги. Можно паять, можно соединить просто на макетной плате, суть от этого не изменится.

Схема устройства
Схема устройства

Я предполагаю, что ты уже имеешь опыт работы с ESP, в Arduino IDE и справишься со всеми последующими шагами. Если нет, то вот ссылка на подробный гайд.

Из дополнительных библиотек нам понадобится только библиотека для OLED-дисплеев, которая имеется в архиве, приложенном к этой статье, а также на странице GitHub проекта. Папку U8g2 с этой библиотекой следует поместить в папку libraries рабочего каталога Arduino. Для Windows путь будет следующим: \user\My Documents\Arduino, для Linux — /home/user/Arduino.

Перед сборкой учти, что не все модули ESP подойдут для нашего проекта. Во-первых, некоторые виды модулей имеют весьма малый объем памяти и прошивка с дополнительным файлом может просто не поместиться «на борт». Во-вторых, у некоторых разновидностей физически не хватит выводов для подключения необходимой периферии (а у нас задействованы аж три периферийных устройства). Из того, что есть на рынке, для проекта подойдут (и были испытаны) следующие модификации ESP8266: NodeMCU V3, V1, V0.9. В принципе, любой модуль, распаянный на отладочной плате с достаточным количеством выводов, сгодится.

ESP-12 — отличный вариант, так как обладает всеми необходимыми выводами и вполне достаточным объемом памяти. ESP-07 тоже хороший вариант, но здесь нужно внимательно смотреть на модификацию (есть 1 Мбайт памяти, а есть 3 Мбайт). Но из неоспоримых плюсов однозначно можно назвать наличие разъема под внешнюю антенну.

Разнообразные модули ESP
Разнообразные модули ESP

Обрати внимание, что крайний слева модуль для наших целей не подойдет: слишком мало памяти и нет необходимых выводов на плате. Также не вариант модуль ESP-201, он крайне глючно работает. Вот еще несколько плат NodeMCU — все они для проекта вполне сгодятся.

Все эти платы NodeMCU подходят для нашей поделки
Все эти платы NodeMCU подходят для нашей поделки

Приобрести все компоненты можно на AliExpress. Вот список того, что нам понадобится:

  • модуль NodeMCU;
  • модуль ESP-12;
  • дисплей OLED 128 x 32;
  • модуль SD.

Если ты собираешь устройство методом пайки проводами, крайне рекомендую приобрести для этих целей МГТФ 0.12 — это провод, отлично зарекомендовавший себя еще со времен СССР, он обладает превосходными характеристиками проводимости, прочности, огнеупорности и долговечности.

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

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

После пайки нужно тщательно промыть плату мягкой кистью и ацетоном, спиртом или специальным раствором для удаления флюса. Остатки флюса могут вызывать довольно сильные паразитные связи на выводах контроллера, особенно на аналоговых входах.

Внимательно перепроверяй все, что собираешься паять, на соответствие схеме. Все выводы, указанные в схеме, полностью соответствуют по своим обозначениям выводам на платах (они подписаны одинаково). Особенное внимание обращай на пины питания. На плате NodeMCU они двух видов: на 5 В и на 3,3 В. Как правило, на модулях SD-карт имеется свой преобразователь напряжения, поэтому такой модуль можно запитать от 5 В. Это даже лучше — не стоит перегружать и без того не особо мощный преобразователь на плате NodeMCU, ему и так вытягивать обвязку и весь Wi-Fi-модуль c дисплеем.

Итак, плату собрали, питание проверили, монтаж проверили, наличие драйверов в системе тоже проверили. Если в твоей схеме используется отдельно модуль ESP, то необходимо будет подключить его в соответствии с даташитом конкретной модификации (речь идет о подтяжке резисторами определенных выводов, всю информацию можно найти в интернете). Ниже приведен пример подключения по стандартной схеме модуля ESP-07 (ESP-12 подключается аналогично). Без резисторов, (особенно на выводах СH_PD) модуль попросту не запустится, так же как и без активации вывода FLASH ты просто не сможешь его прошить.

Cхема подключения отдельного модуля
Cхема подключения отдельного модуля

Бузер (он же зуммер, он же пищалка) у нас пассивный! То есть он не имеет встроенного генератора, такой можно вытащить из старого системника или купить за пять рублей у бомжей. Дисплей мы используем с контроллером SSD1306 (это тоже необходимо учесть). Что же касается адаптера для SD-карты — тут особых нюансов нет. За исключением того, что на борту должен иметься преобразователь на 3,3 В, так как сам контроллер питается именно этим напряжением, как и карта.

Если преобразователя нет, то запитываем адаптер от MCU с ноги 3,3 В, но не 5! Иначе с модулем можно будет распрощаться в мгновение ока. То же касается и дисплея, хотя на нем установлен преобразователь и, по сути, сам дисплей толерантен к пятивольтовому питанию, чего нельзя сказать об уровнях сигналов i2C. Поэтому настоятельно рекомендую запитывать его также от 3,3 В.

Из дополнительных плюшек я приобрел копеечный модуль зарядки Li-Ion-аккумулятора от пауэрбанка за каких-то 52 рубля. Его фишка в том, что он способен выдавать ток до 1 А и имеет встроенный DC-DC STEP-UP на 5 В. А это нам и нужно, с него мы и запитаем систему.

Одного заряда аккумулятора типа 18650 хватает очень надолго. Общее потребление устройства составляет около 120 мА, а емкость 18650 колеблется от 1800 до 3200 мА. Нехитрые расчеты позволят тебе вычислить время работы девайса от батарейки. Еще один немаловажный момент: питание 5 В необходимо подавать на вывод VIN платы NodeMCU, так как в рабочем режиме питать через USB, имея в распоряжении аккумулятор, попросту непрактично.

И последний важный момент: при использовании отдельных модулей (без отладочной платы) имей в виду, что они также рассчитаны на питание 3,3 В. Так что, если ты не хочешь лишний раз бежать в магазин за новой ESP-шкой, учти этот момент. Подобные преобразователи можно также купить в радиомагазине, их цена около 90 рублей. Вполне достаточно на 500 мА. Еще я подумывал оснастить железяку голосовым оповещением на базе платки WTV020, но это в дальнейшем. Будет здорово, наверное, когда система начнет общаться с тобой приятным женским голосом, сообщая об очередной жертве в захлопнувшемся капкане.

Модуль зарядки с преобразователем
Модуль зарядки с преобразователем

Идем делать кофе: начинается самое интересное. 🙂

Создаем точку доступа с бесплатным WIFI

За основу прошивки для данного девайса был взят код, разработанный нашим коллегой 0xRM. Код был доработан и переделан в соответствии с требованиями «Роскомнадзора» под сценарий использования в России.

Ничего особо сложного в нем нет, самые необходимые строки прокомментированы. Файл notes (это ассоциация кодов звука для зуммера) должен лежать в одной папке с файлом прошивки и, соответственно, появится в окне проекта в качестве отдельной вкладки.

Сама веб-страница авторизации вместе с ее оформлением лежит в коде программы и закодирована в Base64 (это та самая длиннющая строка в коде, практически нечитабельная). Все моя непомерная лень: я не стал заморачиваться с переносом страницы авторизации в отдельный HTML-файл. Скорее всего, сделаю это, когда буду модернизировать проект.

ESP имеет хитрую фишку: он умеет считывать и выполнять код программы не из своей памяти, а с SD-карты. Я не пробовал, но не раз слышал об этом, так что это станет поводом для дальнейших исследований. В планах сделать несколько иной способ авторизации, а точнее, поместить на SD-карту две-три фишинговые страницы, например страницы авторизации Google, Vk.com, Instagram, а сама страница входа будет предлагать авторизоваться с помощью одного из перечисленных сайтов.

Кроме того, после ввода данных покажем юзеру реалистичную страницу ошибки (например, с сообщением об ошибке соединения), дабы не вызывать особых подозрений. И никакая система безопасности не спалит подвох, так как веб-узел находится на нашем устройстве и совершенно никаких точек соприкосновения с реальным интернетом, естественно, не имеет. Но все это дело будущих усовершенствований, и при желании ты сам можешь доработать идею на собственный вкус.

Логи авторизации на нашей фишинговой странице хранятся на SD-карте, а на экране мы видим только авторизационные данные последнего зашедшего и общее количество жертв. В общем, не забудь вставить в девайс карту памяти. Код программы можно скачать со страницы проекта на GitHub.

При выборе платы контроллера в Arduino IDE обращаем внимание на параметры того, что мы выбрали. Ниже представлен порядок выбора и настройки, которые используются для плат в зависимости от их типа.

Настройки для плат NodeMCU
Настройки для плат NodeMCU
Настройки для модуля ESP-12
Настройки для модуля ESP-12
Настройки для модуля ESP-07
Настройки для модуля ESP-07

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

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

На экране появится индикатор уровня заряда батареи, а также счетчик количества подключенных клиентов и число авторизовавшихся пользователей. Когда очередная потенциальная жертва введет данные, ты снова услышишь мелодичный сигнал, оповещающий о том, что кто-то попался в нашу ловушку. Файл с логами авторизации сохраняется на карту памяти. Предварительно она обязательно должна быть отформатирована в FAT32, в противном случае карта работать не будет.

Так выглядит устройство в сборе
Так выглядит устройство в сборе

Выводы

Этот проект может быть модернизирован при использовании, например, модулей ESP-07 с внешней антенной, значительно увеличит дальность покрытия. Гораздо страшнее эта зверюга станет, если на странице авторизации предлагать жертвам войти в сеть с помощью социальных сетей, после чего показывать фишинговую страницу с формой для ввода логина и пароля, оформление которой идентично настоящей.

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

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

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

Leave a reply:

Your email address will not be published.