Уже давно не секрет (по крайней мере для разбирающих в теме людей), что операторы открытых сетей с доступом к интернету могут легко перехватывать весь идущий через них трафик и получать таким образом различную информацию, в том числе что вы ищете и какие ресурсы посещаете. Хорошо, если ее просто передадут рекламодателям, чтобы изучать спрос на товары и услуги, и на этом все ограничится, но это далеко не все опасности, подстерегающие охочих до халявы владельцев электронных девайсов. Что же еще не так?
Недавно в РФ был принят закон, призванный обезопасить открытые точки доступа в общественных местах через обязательную авторизацию с помощью мобильного телефона или социальных сетей. Но, как часто бывает, «что-то пошло не так» и благое, казалось бы, дело обернулось появлением новых уязвимостей, играющих на тонкостях души человеческой. В итоге родился небольшой проект, который в полной мере демонстрирует безграничную легковерность подавляющего большинства представителей Homo Sapiens. Итак, обо всем по порядку.
Поддельная точка доступа
Зверя изобрели и воплотили в железе наши китайские коллеги. Точнее, они построили скелет самого хищного зверя, которого мы будем одевать в овечью шкуру. Имя ему — контроллер ESP8266. В нашем проекте мы будем использовать его в качестве автономной точки доступа и веб-сервера. Девайс поднимет точку доступа с именем Free_Wifi, не содержащую пароля, при этом большая часть смартфонов и прочих девайсов будет присылать своим владельцам уведомление с предложением подключиться к открытой сети Wi-Fi, даже если они не просматривали список доступных сетей. Это проверено на Android 9 и iOS последней версии. Итак, доверчивый юзер, не особо полагаясь на интуицию и здравый смысл, нажимает на выпадающее уведомление с весьма заманчивым предложением и попадает на страницу регистрации (при этом не нужно открывать браузер). На экране появится вот такое окно.
Страница авторизации поддельной точки доступа
Здесь мы видим стандартную страничку приветствия открытых точек доступа, предлагающую авторизоваться с помощью электронной почты, пароля и номера телефона либо сразу ввести код авторизации, если он есть. Жертва (как правило, не задумываясь) вводит данные, после чего получает уведомление, что нужно подождать SMS-сообщение с кодом авторизации, а все введенные жертвой данные благополучно сливаются на SD-карту устройства, одновременно отображаясь на OLED-дисплее.
Так выглядят перехваченные данные
Итак, наше устройство работает в режиме фейковой точки доступа, которая имеет привлекательное название и вынуждает расположенные поблизости девайсы обращать внимание на приглашение подключиться, но на самом деле просто сливает учетные данные пользователей.
И что дальше?
А вот дальше начинается самое интересное. В самом простом случае у нас окажется предположительно действующий адрес электронной почты и номер телефона. В лучшем случае мы получим бонусом некий пароль — возможно, один из тех, которыми пользуется данный человек.
Часто ли вы используете разные надежные пароли для разных сервисов? Вопрос, скорее всего, риторический. Но, даже не имея действительного пароля, можно уже сделать выводы о предпочтениях и уровне осведомленности человека. А адрес электронной почты и номер телефона — это уже хоть какая-то информация, способная сыграть большую роль в дальнейших атаках. Тут на что фантазии хватит: от рассылки писем и SMS с рекламой находящихся поблизости заведений до взлома почты, социальных сетей и деанонимизации человека…
В общем, мы наглядно убедились, что открытые сети могут быть весьма небезопасны. Теперь я покажу, как все это реализовывается.
Поддельная точка доступа из ESP8266
Как уже говорили, для создания поддельной точки доступа использовать будем 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-201, он крайне глючно работает. Вот еще несколько плат NodeMCU — все они для проекта вполне сгодятся.
Все эти платы NodeMCU подходят для нашей поделки
Приобрести все компоненты можно на AliExpress. Вот список того, что нам понадобится:
модуль NodeMCU;
модуль ESP-12;
дисплей OLED 128 x 32;
модуль SD.
Если вы собираете устройство методом пайки проводами, крайне рекомендую приобрести для этих целей МГТФ 0.12 — это провод, отлично зарекомендовавший себя еще со времен СССР, он обладает превосходными характеристиками проводимости, прочности, огнеупорности и долговечности.
Паяльник лучше всего использовать не сильно мощный, и уж совсем здорово, если это будет станция с регулировкой температуры и гальванической развязкой. Статические разряды могут убить ваш контроллер наповал. Вообще пайку подобных устройств лучше производить в антистатических трусах перчатках либо в браслете с заземлением.
Первым делом соединяйте между собой минусовую шину всех плат и только потом приступайте к пайке остальных выводов. Применять лучше гелевый флюс либо жидкий флюс, но не активный и, боже упаси, не на кислотной основе. Хорошие флюс-гели вы можете найти в радиомагазинах своего города или в магазинах, торгующих запчастями и инструментами для ремонта сотовых телефонов.
После пайки нужно тщательно промыть плату мягкой кистью и ацетоном, спиртом или специальным раствором для удаления флюса. Остатки флюса могут вызывать довольно сильные паразитные связи на выводах контроллера, особенно на аналоговых входах.
Внимательно перепроверяйте все, что собираетесь паять, на соответствие схеме. Все выводы, указанные в схеме, полностью соответствуют по своим обозначениям выводам на платах (они подписаны одинаково). Особенное внимание обращайте на пины питания. На плате NodeMCU они двух видов: на 5 В и на 3,3 В. Как правило, на модулях SD-карт имеется свой преобразователь напряжения, поэтому такой модуль можно запитать от 5 В. Это даже лучше — не стоит перегружать и без того не особо мощный преобразователь на плате NodeMCU, ему и так вытягивать обвязку и весь WiFi-модуль c дисплеем.
Итак, плату собрали, питание проверили, монтаж проверили, наличие драйверов в системе тоже проверили. Если в вашей схеме используется отдельно модуль ESP, то необходимо будет подключить его в соответствии с даташитом конкретной модификации (речь идет о подтяжке резисторами определенных выводов, всю информацию можно найти в интернете). Ниже приведен пример подключения по стандартной схеме модуля ESP-07 (ESP-12 подключается аналогично). Без резисторов, (особенно на выводах СH_PD) модуль попросту не запустится, так же как и без активации вывода FLASH вы просто не сможете его прошить.
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, но это в дальнейшем. Будет здорово, наверное, когда система начнет общаться с вами приятным женским голосом, сообщая об очередной жертве в захлопнувшемся капкане.
Модуль зарядки с преобразователем
Идем делать кофе: начинается самое интересное.
Шьем овечью шкуру
За основу прошивки для данного девайса был взят код, разработанный 0xRM. Код был доработан и переделан в соответствии с требованиями «Роскомнадзора» под сценарий использования в России.
Ничего особо сложного в нем нет, самые необходимые строки прокомментированы. Файл notes (это ассоциация кодов звука для зуммера) должен лежать в одной папке с файлом прошивки и, соответственно, появится в окне проекта в качестве отдельной вкладки.
Сама веб-страница авторизации вместе с ее оформлением лежит в коде программы и закодирована в Base64 (это та самая длиннющая строка в коде, практически нечитабельная). Все моя непомерная лень: я не стал заморачиваться с переносом страницы авторизации в отдельный HTML-файл. Скорее всего, сделаю это, когда буду модернизировать проект.
ESP имеет хитрую фишку: он умеет считывать и выполнять код программы не из своей памяти, а с SD-карты. Я не пробовал, но не раз слышал об этом, так что это станет поводом для дальнейших исследований. В планах сделать несколько иной способ авторизации, а точнее, поместить на SD-карту две-три фишинговые страницы, например страницы авторизации Google, Vk.com, Instagram, а сама страница входа будет предлагать авторизоваться с помощью одного из перечисленных сайтов.
Кроме того, после ввода данных покажем юзеру реалистичную страницу ошибки (например, с сообщением об ошибке соединения), дабы не вызывать особых подозрений. И никакая система безопасности не спалит подвох, так как веб-узел находится на нашем устройстве и совершенно никаких точек соприкосновения с реальным интернетом, естественно, не имеет. Но все это дело будущих усовершенствований, и при желании вы сами можете доработать идею на собственный вкус.
Логи авторизации на нашей фишинговой странице хранятся на SD-карте, а на экране мы видим только авторизационные данные последнего зашедшего и общее количество жертв. В общем, не забудьте вставить в девайс карту памяти. Код программы можно скачать со страницы проекта на GitHub.
При выборе платы контроллера в Arduino IDE обращаем внимание на параметры того, что мы выбрали. Ниже представлен порядок выбора и настройки, которые используются для плат в зависимости от их типа.
Настройки для плат NodeMCU
Настройки для модуля ESP-12
Настройки для модуля ESP-07
Теперь о порядке работы: при запуске вы увидите на дисплее приветственное сообщение, после чего устройство оповестит вас о попытке инициализации карты памяти. Если ее нет, девайс издаст три коротких предупредительных выстрела звуковых сигнала, после чего продолжится выполнение программы.
Программа тоже будет выводить сообщения о выполняемой в данный момент операции. После завершения всех описанных в программе действий вы услышите мелодию, которая оповестит, что точка доступа успешно запустилась и устройство готово к работе.
На экране появится индикатор уровня заряда батареи, а также счетчик количества подключенных клиентов и число авторизовавшихся пользователей. Когда очередная потенциальная жертва введет данные, вы снова услышите мелодичный сигнал, оповещающий о том, что кто-то попался в нашу ловушку. Файл с логами авторизации сохраняется на карту памяти. Предварительно она обязательно должна быть отформатирована в FAT32, в противном случае карта работать не будет.
Так выглядит поддельная точка доступа в сбореЗаключение
Этот поддельная точки доступа может быть модернизирован при использовании, например, модулей ESP-07 с внешней антенной, значительно увеличит дальность покрытия. Гораздо страшнее эта зверюга станет, если на странице авторизации предлагать жертвам войти в сеть с помощью социальных сетей, после чего показывать фишинговую страницу с формой для ввода логина и пароля, оформление которой идентично настоящей.
В этом случае вы получите учетные данные, которые потом можно использовать множеством способов, не все из которых законны!!!. Кроме того, существуют скрипты, позволяющие делать снимки с фронтальных камер устройства. Их можно встроить в веб-страницы на нашем мини-сервере.
Еще мы можем прописать данные уже имеющейся открытой точки доступа в нашу прошивку и поднять ее копию, при этом настоящую точку отключить с помощью все тех же ESP8266. В общем, здесь поле непаханое, и свобода творчества ограничивается лишь вашей фантазией.