MITM атаки на клиентов Wi-Fi сетей при помощи подставной точки доступа.

При конфигурировании беспроводного адаптера на автоматическое подключение к известным беспроводным сетям пользователь подвергает себя риску стать жертвой атаки «человек посередине» (MITM). Злоумышленник может развернуть точную копию доверенной для мобильного устройства Wi-Fi сети. В результате клиентское устройство автоматически подсоединится к такой точке доступа и будет работать через нее, а атакующий получит возможность перехватывать «весь трафик» своей жертвы. Так ли это на самом деле я попытаюсь разобраться в рамках данной статьи. Для начала, немного теории.

Теория

Перед тем как подключиться к точке доступа, станция должна обнаружить доступные сети, для этого она сканирует радиоэфир в активном и пассивном режиме.

При пассивном сканировании станция прослушивает радиоэфир на наличие фреймов Beacon передаваемых точкой доступа, в которых содержится SSID.

В ходе активного сканирования станция по всем каналам рассылает широковещательные фреймы Probe-Request, ожидая отклик точки доступа, которую она ищет для подключения. Во фреймах Probe-Request может указываться или не указываться SSID сети, которую ищет станция. Отвечая на Probe-Request, точка доступа шлет фреймы Probe Response, содержащие аналогичную информацию, что и пакеты Beacon.

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

В чем заключается MITM атака

Задача злоумышленника заключается в следующем: узнать о сконфигурированных профилях беспроводных сетей клиента, создать точный «клон» такой сети и подсунуть ее клиенту в надежде на то, что тот благополучно к ней подключится. Создать клон защищенной сети (WPA-WPA2-PSK) возможно, но достаточно проблематично, т.к. по мимо имени сети нужно знать ключ безопасности сети, а его можно получить, только если удачно сложатся несколько условий: атакующий должен перехватить «рукопожатие» (handshake) клиента с доверенной сетью, а затем методом brute force атаки подобрать пароль к WPA сети (если тот не достаточно сложен, а атакующий обладает необходимыми ресурсами для его подбора). Поэтому основной упор делается на открытые сети, в данном случае необходимо: узнать есть ли у клиента сконфигурированные профили таких сетей и как осуществляется подключение к таким сетям. После получения данной информации делается вывод о целесообразности проведения данной атаки.

Есть куда более простые способы «завладеть трафиком» клиента, создав открытую точку доступа с привлекательным SSID в месте, где люди, скорее всего, будут искать открытые сети (кафе, рестораны, вокзалы и т.п. людные места «ожидания»), но их я рассматривать не буду, т.к. вопросов быть не должно, все максимально ясно.

Практика

Моя лаборатория будет состоять из следующих устройств:

  1. 1. Роутер.
  2. 2. Подставная точка доступа (Raspberry Pi с установленными pwnpi и fruitywifi).
  3. 3. Ноутбук атакующего с установленным Kali Linux.

Клиентские устройсва:

  1. 1. Ноутбук с Windows 7
  2. 2. Планшет с ОС Android 4.4.4
  3. 3. Iphone 2G с прошивкой 3.1.3
  4. 4. Windows XP
  5. 5. …..

Устаревшие ОС в списке из-за того, что ими все еще пользуется большое количество людей.

Условия для всех клиентских устройств одинаковые. Каждое из устройств настроено на автоматическое подключение к двум сетям: home c типом безопасности WPA2-PSK и bruteforcer без какой либо защиты (OPEN).

home_ssid

bruteforcer_ssid

Задача злоумышленника заставить клиента подключиться к своей точке доступа и тем самым получить контроль над трафиком своей «жертвы».

Проверяем, насколько защищены клиенты Wi-Fi сетей в Windows 7

Начнем с того, что в управлении беспроводными сетями у нас нет ни одной сконфигурированной беспроводной сети.

Управление wifi

Здесь мы можем создать подключение вручную, нажав в вертикальном меню на кнопку «Добавить».

Подключение к сети home

Обратите внимание на пункт меню, который отмечен стрелкой. Эта галочка включает передачу имени сети (SSID) во время активного сканирование сети (см. теорию выше). Почему Windows не рекомендует включать передачу SSID  рассмотрим ниже, когда я буду описывать действия злоумышленника. А сейчас просто жмем «далее».

Успешное подключение к сети home

Подключение добавлено, мы можем закрыть мастер подключения либо изменить параметры подключения.

Свойства сети home

Здесь можно видеть, что по умолчанию отмечен один пункт – «Подключаться автоматически, если сеть в радиусе действия». Как активация данного параметра влияет на безопасность клиента, мы также рассмотрим далее. Жмем «ОК» , «Закрыть» и переходим к созданию профиля открытой сети.

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

Подключение к сети bruteforcer

Сеть не защищена, поэтому мастер установки по умолчанию не настраивает запуск подключения к сети автоматически. Пользователь конечно вправе изменить параметры, установленные по умолчанию, чем ему это грозит, рассмотрим далее. А сейчас жмем «Далее» и смотрим свойства подключения.

Свойства подключения к сети bruteforcer

Как видим данное подключение максимально ограничено, а установить галочку в пункте «подключаться к более подходящей сети, если она есть» вообще не возможно. Жмем «ОК» и «Закрыть».

Профили подключения к беспроводным сетям созданы.

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

Иконка wifi в трее

Автоматическое подключение к небезопасной сети

Здесь, как можно видеть, присутствует пункт, позволяющий запомнить сеть и подключаться к ней автоматически, если при подключении к защищенной сети это удобство оправдано, то в случае открытой сети может выйти “боком”», о чем опять же поговорим далее. Большинство людей ради удобства (неосведомленности, беспечности) отмечают этот пункт и подвергают себя риску.

Все подготовительные работы завершены, переходим к возможным атакам злоумышленника.

Действия злоумышленника

Отключаем точку доступа и приступаем к сканированию радиоэфира в Kali Linux.

root@kali:~# ifconfig –a
 
root@kali:~# airmon-ng start wlan1
 
root@kali:~# airodump-ng mon0

root@kali:~# airodump-ng mon0

Как видно, никакой информации ни о сети home ни о bruteforcer. А все потому, что в настройках подключения мы последовали рекомендациям и не включили возможность подключаться к сети, даже если она не ведет вещание своего имени (активное сканирование, см. теорию). Активация данной возможности может быть «полезна» только в том случае если вы подключаетесь к скрытой сети. В некоторых руководствах по конфигурированию точки доступа Wi-Fi можно встретить рекомендации по включению режима сокрытия вещания SSID, такая мера якобы усложняет обнаружение точки доступа злоумышленником и уменьшает шансы взлома беспроводной сети. На самом деле от активации сокрытия SSID больше вреда, чем пользы. Сокрытие SSID защитит только от факта обнаружения сети обычными пользователями, которые сканирую эфир в поисках открытых сетей. Такие пользователи, кроме того как узнают имя сети никакого вреда нанести не смогут т.к. у них, как правило, нет этого в планах и что более важно, у них нет необходимых знаний для осуществления взлома. Настоящего взломщика сокрытие SSID не остановит, т.к. скрытая сеть не является большой преградой.

Сконфигурировав свою сеть как скрытую, администратор принудительно заставляет своих клиентов настраивать свои беспроводные устройства так, чтобы те передавали SSID во время активного сканирования.

Давайте рассмотрим, что произойдет при таких настройках, активировав пункт в свойствах подключения — «подключаться к сети даже тогда, когда сеть не ведет вещание своего SSID».

12_airodump_2

Сетевая карта клиента начинает активно искать скрытую сеть, тем самым выдавая SSID. Давайте рассмотрим, что может предпринять злоумышленник, попади к нему такая информация.

Запускаем подставную точку доступа с SSID home и открытым доступом и смотрим, что произойдет.

13_win_1

Подключения автоматически не произошло, не смотря на то что, в свойствах подключения к сети home. указано, подключаться автоматически (у сетей одинаковое только имя сети, а сами сети разные).

Пробуем подключиться к сети принудительно (некоторые пользователи могут не обратить внимание на предупреждение отсутствия защиты у сети).

Не удалось подключиться

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

Успешное подключение к home

Подведем промежуточный итог, зная имя сконфигурированной в Windows 7 сети (WPA-WPA2), нападающий, размещая поддельную точку доступа с аналогичным именем, может рассчитывать только на невнимательность клиента сети, который в ручную подключится к сети злоумышленника.

Перейдем к открытым сетям, занимаясь сетью home, я не видел, чтобы беспроводная карта «болтала» об открытой сети bruteforcer, что говорит о правильных рекомендациях и настройках по умолчанию мастера добавления сети в Windows 7. Давайте попробуем «ослабить гайки» и включим автоматическое подключение к сети, если та в области видимости.

16_svoistva_bruteforcer

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

Но как злоумышленник узнает о сконфигурированной у клиента открытой сети, если клиент с ней не взаимодействует? Как видно из скриншота выше, карта клиента «не болтает» о таких сетях (в нашем случае о сети bruteforcer).

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

Свойства подключения bruteforcer

airodump_3

Как видно, клиентская карта начала «болтать», теперь задача злоумышленника — создать подставную точку с таким же именем и клиент автоматически к ней подключится. Существуют способы автоматизации данного процесса (проект karma).

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

Проверяем, насколько защищены клиенты Wi-Fi сетей в Android 4.4.4

Готовим планшет, сохраняя подключения к двум сетям из предыдущего примера (home (wpa-2-psk) и bruteforcer (open)).

Сохранение сетей в Android

Отключаем обе сети и запускаем airodump-ng в Kali Linux.

root@kali:~# airodump-ng mon0

Сети home и bruteforcer

Как видно из скриншота, Android планшет в процессе активного сканирования указывает SSID которые он ищет, атакующему это как раз и нужно. Попробуем «подсунуть» сеть home.

На планшете появляется вот такое уведомление, но к сети он автоматически не подключается.

22_android_wifi_2

Сеть home в Android

Есть вероятность, что пользователь, увидев такое уведомление, сам захочет подключиться к сети, если бы уведомление не появилось, то факт появления сети, скорее всего, остался не замеченным (уведомления об открытых сетях отключается в настройках).

Пробуем запустить точку доступа с SSID bruteforcer.

24_android_wifi_4

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

Уже в процессе тестирования клиента на Android, я заметил, что airodump-ng не идеален для работы с фреймами Probe-Request, для этих целей больше подходит пакетный фильтр. Но хотелось бы еще и автоматизации, поискав интернете, я нашел скрипт hoover.pl (https://github.com/xme/hoover), написанный как раз для сбора фреймов Probe-Request в беспроводных сетях с помощью консольного пакетного фильтра tshark. Скрипт оказался хорошей заменой airodump-ng, поэтому далее я решил вести анализ фреймов с его помощью.

Проверяем, насколько защищены клиенты Wi-Fi сетей в устаревших версиях Apple IOS на примере версии 3.1.3

Действуем по уже знакомой схеме, сперва подключаемся к двум сетям.

Сохраненные сети в Iphone

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

При попытке перехватить SSID во фреймах Probe-Request меня настигла неудача, мой Iphone не передавал имя сети в данных фреймах.

root@kali:~# perl hoover.pl --interface mon0 --dumpfile ssid.txt
 
!! Dumping detected networks:
!! MAC Address          SSID                           Count      Last Seen
!! -------------------- ------------------------------ ---------- -------------------
……..
!! AA:AA:AA:AA:AA:AA    home                                  125 1970/01/01 03:00:50 //Android
………
!! AA:AA:AA:AA:AA:AA    bruteforcer                            57 1970/01/01 03:00:50 /Android
………..
10 1970/01/01 03:00:00
!! Total unique SSID: 24
Планшет на Android в списке, Iphone нет. Настало время тяжелой артиллерии. Запускаем Wireshark.

root@kali:~# wireshark
Фильтруем пакеты по MAC адресу интересующего адаптера и типу.

wlan.addr == AA:AA:AA:AA:AA:AA && wlan.fc.type_subtype == 0x04

wireshark iphone probe request
В данном случае я отфильтровал вывод wireshark, чтобы тот выводил фреймы probe request от iphone. Как видно, в фреймах нет SSID точек, которые ищет устройство.

На broadcast отвечает множество устройств, фреймами Probe Response, указывая свой SSID.
wlan.addr == AA:AA:AA:AA:AA:AA && wlan.fc.type_subtype == 0x05

wireshark iphone Probe Response

Как только во фреймах Probe Response будет обнаружено имя сети (SSID) из списка сохраненных профилей, устройство попытается к ней подключиться автоматически.
Здесь мой Iphone проявляет себя более «благоразумно» по сравнению с планшетом на Android.
wlan.addr == XX:XX:XX:XX:XX:XX && wlan.fc.type_subtype == 0x04

wireshark android probe request

“Забыть сеть” (удалить из профилей подключения) можно только подключившись к ней. Из чего следует, что однажды подключившись к сети, пользователь iphone с версией IOS 3.1.3, уязвим перед злоумышленником, способным выяснить о возможных точках доступа (с открытой аутентификацией), через которые выходит в интернет его жертва. Он может поднять у себя аналогичные, после чего iphone беспрепятственно подключится к ним (в настройках iphone такой режим работы нельзя отключить).

Проверяем, насколько защищены клиенты Wi-Fi сетей в Windows XP SP3

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

Автоматическое подключение

По умолчанию профиль беспроводной сети с открытой аутентификацией не настроен на передачу SSID во фреймах probe request.

Свойства подключения к беспроводной сети

А вот автоматическое подключение, если сеть находится в радиусе действия задано.

32_windowsxp_svoistva_3

В случае закрытой сети (WPA,WPA2-PSK), оба параметра включены по умолчанию.

33_windowsxp_svoistva_4

34_windowsxp_svoistva_5

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

wireshark windowsxp

Получить SSID открытой точки доступа через фреймы probe request не получится, поэтому единственный вариант – перебирать возможные SSID.

[video_player type=»youtube» width=»560″ height=»315″ align=»center» margin_top=»0″ margin_bottom=»20″]aHR0cDovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PU1wSlVWamZVbnBN[/video_player]

Вывод: Наиболее защищенной к атакам “человек по середине” с применением подставной точки доступа оказалась ОС Windows 7, наименее защищенной – Android 4.4.4, а вот так могут выглядеть сами уязвимые клиенты в реальной среде.

36_klienti