Pull to refresh

Wi-Fi сети: проникновение и защита. 2) Kali. Скрытие SSID. MAC-фильтрация. WPS

Reading time 20 min
Views 642K


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

В этой статье мы поговорим о том, как можно обнаружить «скрытые» сети, обойти MAC-фильтрацию на точке доступа и почему же WPS (QSS в терминологии TP-LINK) — это «бэкдор в каждом доме». А перед этим разберёмся, как работает беспроводной адаптер и антенна и как Kali Linux (ex. Backtrack) поможет нам в тестах на проникновение в беспроводные сети.

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

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

Оглавление:
1) Матчасть
2) Kali. Скрытие SSID. MAC-фильтрация. WPS
3) WPA. OpenCL/CUDA. Статистика подбора

Kali… Kali Linux


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

Все манипуляции будем проводить с использованием Kali Linuxkali.org. Это сборка на основе Debian, которая до этого была известна под именем Backtrack. Если вы впервые знакомитесь с этой системой, то советую начать сразу с Kali, так как там есть всё то, что было в Backtrack, но в более свежем виде.

(Читатели подсказывают, что есть и другие подобные сборки — например, wifiway.org. Однако я с ними не работал.)

Под Windows тоже можно делать многое из описанного, но основная проблема в отсутствии/плохой поддержке режима монитора беспроводных адаптеров, из-за чего ловить пакеты проблематично. Кому интересно — обратите внимание на CommView и утилиты Elcomsoft. Все они требуют специальных драйверов.

Kali очень удобно использовать с флешки — у неё по наследству от Debian Wheezy (у меня одного закладывает нос от такого названия?) есть persistence mode, который позволяет загружаться в трёх режимах: работы без сохранения данных (read only), работы с их сохранением на отдельный раздел на флешке, так называемом persistence, или работы без сохранения в live/vanilla mode (то есть read only и без использования данных в persistence — изначальная чистая версия дистрибутива).

Но, естественно, кто хочет установить её на жёсткий диск может легко сделать это и из загрузчика, и из уже запущенной оболочки. ОС (LVM) поддерживает шифрованные разделы. Кроме этого, можно сделать собственную сборку Kali — добавить пакеты, настроить загрузчик и прочее. Всё это подробно описано в документации и проблем не вызывает, хотя сборка требует пары часов времени.

Итак, допустим вы скачали ISO и записали его на флешку (для *nix — dd, для Windows — Win32DiskImager). Что дальше?

Режим persistence

Эта статья — не руководство по Linux, однако у меня самого были проблемы с запуском этого режима, поэтому решил специально описать его работу.

Пользоваться Kali вполне можно и в режиме Live CD, но если вы хотите иметь возможность сохранять состояние системы между перезагрузками (данные и настройки) — нужно создать отдельный ext2-раздел на флешке с именем persistence, для чего можно использовать GParted в составе самой Kali и разбить флешку прямо во время работы с неё. Когда раздел создан — смонтируйте его и запишите туда единственный файл с именем persistence.conf и таким содержимым:
/ union

Далее при каждой загрузке Kali нужно указать, в каком режиме запускать систему. Для этого в загрузчике при выделенном первом пункте Live (i686-pae) (аналогично с x64) нажимаем Tab — появляется строка загрузки ядра. Туда в конец добавляем пробел и тип загрузки:

  • persistence, «полное постоянство» — загрузка всех данных на разделе и сохранение изменённых в процессе работы данных на него же
  • persistence persistence-read-only, «постоянство без сохранения изменений» — обратите внимание, что это два слова и указывать нужно оба, через пробел, так как без первого этот режим не запустится (будет live mode). В этом режиме ранее сохранённые на раздел данные будут загружены, но изменения в течении этой сессии сохранены не будут и после выключения дистрибутив вернётся в исходное состояние

Если не указать тип загрузки, система будет запущена в live (vanilla) mode — раздел persistence не будет использован и после загрузки его можно будет смонтировать и сделать какие-то изменения. Все данные и настройки в течении работы в live-режиме не будут сохранены и содержатся только во временной памяти.


Чтобы не вбивать эти режимы при каждой загрузке можно создать свою сборку Kali (см. инструкции на сайте) — там есть настройка загрузчика, куда можно вписать нужные режимы так, чтобы изначально загружаться в persistence persistence-read-only — на мой взгляд, это самое удобное, так как изначально настроил всё, что нужно, а затем каждая сессия начинается с чистого листа.

Use the tools, Luke


Собрание окончено, расходимся, расходимся.

Ну, вот и добрались до терминала. Посмотрим, кто вокруг нас светит ультраволнами.

Режимы работы Wi-Fi адаптера

Но для начала нужно перевести наш беспроводной адаптер (сетевую карту) в «хакерский режим» — monitor mode.

Дело в том, что каждый Wi-Fi адаптер, а точнее, антенна, на физическом уровне улавливает любые сигналы, пересылаемые устройствами в радиусе действия. Антенна не может «не принимать» посторонние пакеты. А вот драйвер может работать в трёх режимах (на самом деле 6, но это за рамками данной статьи):

  1. Client mode (также managed mode) — пакеты, не предназначенные этому адаптеру — отбрасываются, а остальные передаются внутрь ОС как «полученные». В этом режиме повреждённые пакеты также отбрасываются. Нормальный режим работы «без свистелок».
  2. Monitor mode (также rfmon mode) — драйвер не фильтрует пакеты и передаёт всё, что улавливает антенна, в ОС. Пакеты с неверной контрольной суммой не отбрасываются и их можно видеть, к примеру, в Wireshark.
  3. Promiscuous mode («беспорядочный режим») — режим монитора «наполовину». Драйвер будет передавать в ОС пакеты, полученные в рамках сети, к которой мы сейчас подключены (associated), но в отличие от обычного режима не будут отбрасываться пакеты, предназначенные другим клиентам этой сети. Пакеты других сетей будут игнорироваться. Понятно, что это работает только когда вы можете успешно подключиться и авторизоваться в некоторой сети (открытой или нет). В отличии от монитора, этот режим поддерживается меньшим числом адаптеров. При работе в этом режиме, равно как и в режиме клиента, драйвер будет убирать из переданных в ОС пакетов низкоуровневые заголовки канала.

Нам нужен как раз режим монитора — в режиме клиента нам не интересно смотреть на пакеты, которые нам самим и предназначены, а для режима promiscious нам нужно сперва подключиться к некоторой сети. Если не считать повреждённых пакетов и наличия заголовков 802.11, режим монитора может то же и больше, что и беспорядочный режим, да и поддерживается львиной долей адаптеров. Единственная проблема — не все адаптеры могут одновременно передавать данные в режиме монитора, но у меня лично с этим проблем не было.


На картинке выше жирные линии показывают пакеты, которые мы перехватываем в разных режимах, а прерывистые линии — это пакеты, улавливаемые нашей антенной, но отбрасываемые драйвером из-за выбранного режима.

Открываем терминал и выполняем:
airmon-ng start wlan0

wlan0 — идентификатор устройства-адаптера. В *nix это wlan + порядковый номер (wlan0, wlan1, wlan2 и т.д.). Номер адаптера можно узнать, выполнив ifconfig или iwconfig (эта выведет только устройства беспроводных адаптеров и специфичную для них информацию).

Если airmon-ng выведет сообщение (monitor mode enabled on mon0) — значит, адаптер успешно переведён в режим наблюдения.

Обратите внимание, что в командах, которые мы будем выполнять дальше, тоже указывается идентификатор адаптера, но виртуального — mon0 (mon1, etc.), а не исходного — wlan0. mon0 — адаптер, созданный airmon-ng, предназначенный для работы с функциями монитора.

Сейчас этот режим поддерживается 80-90% всех адаптеров (по моему опыту), самые распространённые из них — Atheros, Intel и TP-LINK. Последний производит внешние адаптеры со сменными антеннами до $30 (я пользовался TL-WN722NC + TL-ANT2408CL — к тому же, благодаря USB их можно подключить к VMware). Список поддерживаемых адаптеров есть в вики Aircrack-ng.

Беспроводные каналы

Wi-Fi — технология передачи данных по радиоканалу, то есть даром с использованием того же механизма, что и в радиостанциях. И точно так же, как в радиостанциях, если передавать слишком много данных на одной частоте (обычно 2.4 ГГц), то нельзя будет разобрать, что к чему относится. Для этого существует разделение на каналы.

Всего каналов 13, хотя последний канал — тринадцатый — несчастливый и в некоторых странах запрещён, поэтому чаще всего используются 1-12. Однако 13-й можно включить, выбрав для беспроводного адаптера такую страну, как Боливия (BO) — или любую другую, где данная частота разрешена. Да, техническая возможность, как это часто бывает, есть в любом адаптере, но заблокирована по этическим предпочтениям.

Кроме этого есть и 14-й канал (японцы, как всегда, отличились) и частота 5 ГГц с ещё 23 каналами. Вообще, каналы 2.4 ГГц частично пересекаются, плюс их ширина может быть 20 и 40 МГц. Эта тема запутанная из-за наличия разных версий стандарта — кому интересно могут почитать в Википедии. Нам хватит и того, что уже сказано. Пока ещё 5 ГГц применяются реже, но описанные далее приёмы применимы и к этой частоте.

Некоторые используют 13-й канал для скрытия своих сетей, но этот способ здесь даже не рассматривается, так как достаточно перевести адаптер в нужный регион, как он сам их увидит. Например:
ifconfig wlan0 down
iw wlan0 reg set BO
ifconfig wlan0 up
iwconfig wlan0 channel 13

Любой беспроводной адаптер может принимать и передавать данные только на одном канале за раз. Однако текущий канал можно менять сколь угодно часто — для получения полной информации о беспроводных передачах вокруг airodump-ng (после рекламы ниже) переключает канал несколько раз в секунду и ловят всё, что попадается. Это называется channel hopping («прыжки по каналам»). Это делают и системные программы — например, NetworkManager для GNOME, который показывает список беспроводных сетей в правом верхнем углу.

Если канал не зафиксирован, то некоторые пакеты могут быть потеряны — адаптер переключился на соседний канал, а в это время по предыдущему каналу прошёл новый пакет, но его антенна уже не уловила. Это критично, когда вы пытаетесь перехватить handshake, поэтому для отключения всех программ, которые используют беспроводной адаптер и не дают зафиксировать канал, используется эта команда:
airmon-ng check kill

Без kill будет выведен список всех подозрительных процессов, а с kill они будут завершены. После этого адаптер останется целиком в вашем распоряжении. Команду выше рекомендуется выполнять перед любыми действиями, кроме простого обзора сети, так как беспроводной адаптер — общий ресурс; несколько программ могут использовать его одновременно (например, можно ловить список сетей в airodump-ng и одновременно подбирать WPS в reaver), но любая из них может переключить канал, поэтому важно зафиксировать его и при её запуске (обычно параметр называется -c или --channel).

Antenna overclock

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

ifconfig wlan0 down
# Обход региональных ограничений на максимальную мощность передатчика.
iw reg set BO 
iwconfig wlan0 txpower 500mW
# Либо:
iwconfig wlan0 txpower 30
ifconfig wlan0 up

Обычная мощность — 15-20 дБм. При ошибке будет сообщение типа Invalid argument, однако его может и не быть — после выполнения проверьте значение txpower в iwconfig.


Они среди нас



Выполняем:
airodump-ng mon0

airodump-ng — команда для сбора пакетов в радиоэфире. Она выводит в консоль две таблицы. В верхней выводятся найденные беспроводные сети, в нижней — клиенты, подключенные к ним, или не подключенные, но с активным беспроводным адаптером, транслирующем какие-то пакеты (например, о поиске сети с определённым именем).

Последнее, кстати, особенно интересно, так как мы можем любезно предоставить им искомую сеть и посмотреть, что нынче модно в «Одноклассниках»? На эту тему на днях комрадом KarasikovSergey была опубликована статья с использованием Karma — но так как это уже на гране вредительского проникновения в этом цикле мы эту тему затрагивать не будем. Но это действительно проблема и стоит позаботиться о том, чтобы ваше устройство не цеплялось за все сети без вашего разрешения, в том числе за известные — аутентичность точек доступа не проверяется и вы вполне можете оказаться в сети злоумышленника. Во всех смыслах.

А вот мы в XP SP2...
Интересно вспомнить Windows XP SP2, который вместо отключения сетевого адаптера при неактивном подключении к сети начинал запрашивать ESSID, состоящие из случайного набора символов — возможно для того, чтобы сэкономить на засыпании и последующем разогреве адаптера. Как результат, если вы создаёте рядом точку с именно таким именем, которое легко проследить через airodump-ng — XP подключается к ней, но смотря на статус подключения пользователь об этом никогда не узнает (так как оно «неактивно») и в итоге будет очень удивлён, обнаружив работающий Skype и утёкшие пароли. Прямая связь с космосом!

Однако вернёмся к нашим волнам. Ниже пример вывода airodump-ng:

 CH  1 ][ Elapsed: 6 mins ][ 2014-06-06 12:45

 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 00:18:E7:xx:xx:xx  -67      108        0    0  11  54e. WPA2 CCMP   PSK  infolan22451
 F8:1A:67:xx:xx:xx  -88      132        0    0   1  54e. WPA2 CCMP   PSK  TP-LINK
 48:5B:39:xx:xx:xx   -1        0        0    0   5  -1                    <length:  0>

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 (not associated)   4C:B1:99:xx:xx:xx  -73    0 - 1      0       66  dlink
 48:5B:39:xx:xx:xx  1C:7B:21:xx:xx:xx  -81    0 - 1      0       21  

Столбцы первой таблицы с доступными беспроводными сетями:

  1. BSSID — уникальный MAC-адрес беспроводной сети. По аналогии с MAC-адресом сетевых карт, это 6 чисел в шестнадцатеричном формате, разделённых двоеточием, например: AA:00:BB:12:34:56. Он передаётся в большинство других команд.
  2. PWR — уровень сигнала. Это отрицательное число; чем оно ближе к 0 — тем сигнал сильнее. Обычно для комфортной работы это число до -50, для видеосвязи — до -65, для VoIP — до -75. Значения ниже -85 и в особенности ниже -90 можно считать крайне слабым уровнем. Число зависит как от мощности передатчика, так и от коэффициента усиления антенны в вашем адаптере (внешние адаптеры имеют усиление 0-12 dB, внешние 1-2-метровые всенаправленные антенны — до 24 dB)
  3. Beacons — число переданных этой точкой доступа «маячков» — пакетов, оповещающих находящихся рядом устройств о существовании этой беспроводной сети, уровне сигнала, её имени (BSSID/ESSID) и прочей информации. Используется для подключения. По умолчанию точки доступа обычно настроены на передачу маячков каждые 100 мсек (10 раз в секунду), но интервал можно увеличить до 1/сек. Отсутствие маячка не говорит об отсутствии беспроводной сети — в скрытом (hidden) режиме точка доступа не передаёт маячков, но к ней можно подключиться, если знать точное имя сети. О способе обнаружения таких сетей — ниже.
  4. #Data — число пакетов с данными, которые пришли от этой точки доступа. Это может быть HTTP-трафик, ARP-запросы, запросы на авторизацию (handshake) и прочее. Если к сети не подключен ни один клиент или если он ничего не передаёт, то это значение не меняется и может быть 0.
  5. #/s — число пакетов с данными в секунду. #Data делённое на время наблюдения за этой сетью.
  6. CH — номер канала. Как уже было описано выше, весь доступный спектр Wi-Fi разделён на 14 каналов; точка доступа и, соответственно, клиенты, передают данные на определённом канале и этот столбец указывает, к какому каналу привязана эта точка доступа и её клиенты
  7. MB — скорость передачи (ширина канала) в Мбит/с. Точка в конце обозначает, что точка доступа поддерживает короткую преамбулу (short preamble). Можно увидеть значения 11, 54, 54e. Нас это обычно мало волнует
  8. ENC — тип беспроводной сети — OPN (открытая), WEP, WPA, WPA2. На основании этого параметра мы выбираем подходящую схему атаки.
  9. CIPHER — тип шифрования данных после handshake. Может быть TKIP и CCMP (см. обзор в первой части).
  10. AUTH — механизм аутентификации для передачи временного ключа. Может быть PSK (обыная авторизация по единому паролю для WPA(2)), MGT (WPA(2) Enterprise с отдельным сервером с ключами RADIUS), OPN (открытая).
  11. ESSID — имя беспроводной сети. Именно его вы видите в «Диспетчере беспроводных сетей» в Windows и указываете в настройках точки доступа. Так как это пользовательское имя, то оно может не быть уникальным, и для всех внутренних операций используется BSSID (то есть MAC-адрес адаптера в точке доступа), а это — просто отображаемое название.

Иногда в некоторых столбцах можно увидеть числа -1, а в последнем столбце — <length: 0>. Это признаки беспроводной сети, которая не транслирует свои данные в открытом виде, а отвечает лишь когда клиент сделал явный запрос на подключение с указанием корректного ESSID и пароля. Кроме этого, точка доступа может вообще не транслировать маячки и станет активна только, когда к ней подключится клиент, знающий её имя. Если оставить airodump-ng запущенным достаточно долгое время и если в этом промежутке к скрытой сети подключится новый клиент, то строка, соответствующую «скрытой» сети, будет автоматически раскрыта и там появится номер канала, ESSID и данные о защите. При этом может быть нужно зафиксировать канал, чтобы не упустить момент подключения (см. ниже).

Столбцы второй таблицы с беспроводными клиентами:

  1. BSSID — MAC-адрес точки доступа, к которой подключен клиент (см. первую таблицу). Если указано (not associated) — клиент отключен от всех сетей, но адаптер работает (возможно, он ищет доступные сети).
  2. STATION — MAC-адрес клиента. Когда-то эти адреса были вшиты в адаптер на фабрике и не могли быть изменены, но сегодня может быть настроен в подавляющем большинстве случаев. В Linux/Mac для этого есть штатные средства., в Windows с этим сложнее и поддержка зависит от драйвера. MAC-адрес точно так же, как и в проводных сетях, передаётся буквально в каждом пакете от этого клиента и это основная причина, почему фильтрация по MAC почти бесполезна.
  3. PWR — уровень сигнала от клиента. Чем ближе к 0, тем клиент ближе/сигнал мощнее (см. первую таблицу).
  4. Rate — когда airodump-ng запущен с фиксацией канала (см. ниже), этот столбец покажет частоту передачи пакетов с данными от точки доступа к клиенту (слева от дефиса) и от клиента обратно (справа).
  5. Lost — число потерянных пакетов, которые наша система (не клиент) не зарегистрировала. Это легко вычислить, так как в передаваемых пакетах есть счётчик.
  6. Frames или Packets — число пакетов с данными, которые мы уловили от этого клиента (см. #Data в первой таблице).
  7. Probe — список ESSID-имён беспроводных сетей, к которым клиент пытался подключиться. Здесь могут быть перечислены совсем не те сети, которые вы видите вокруг, а те, к которым клиент подключался ранее, или же скрытые сети. На основе этого можно организовать атаку типа Karma, как упомянуто ранее.

Параметры запуска airodump-ng (можно комбинировать; более детально в следующих частях):

  • airodump-ng -c 3 mon0 — зафиксировать канал №3 — полный приём пакетов без потерь при переключении на другие каналы (из-за перекрывающихся частот в список могут попасть соседние каналы).
  • airodump-ng -w captures.pcap mon0 — записывать все принятые пакеты в файл captures.pcap — используется для offline-атаки на перебор пароля WEP/WPA (будет освещено в следующей части).
  • airodump-ng --essid "Имя сети" mon0 — фильтровать принимаемые (записываемые/отображаемые) пакеты по принадлежности к заданному имени сети. Обычно используется для уменьшения размера файла, так как на качество перехвата это никак не влияет.
  • airodump-ng --bssid 01:02:03:AA:AA:FF mon0 — фильтрация по MAC-адресу точки доступа (BSSID). Аналогично --essid.

Скрытые сети… такие скрытые




Часто в быту можно услышать, что скрытые сети очень сложно обнаружить/подключиться/взломать/унести (нужное подчеркнуть). Однако как уже было показано, «скрытая» сеть — не что иное, как сеть, не передающая маячки о своём существовании 10 раз в секунду, либо передающие их, но с пустым ESSID и другими полями. На этом разница заканчивается.

Как только к такой сети подключается клиент, он передаёт её ESSID и пароль, и если такая сеть существует в радиусе действия — точка доступа отвечает на запрос и проводит все обычные процедуры по авторизации и передаче данных. А если клиент уже был подключен ранее — его можно увидеть в списке активных адаптеров… и отключить.

Каждый подключенный клиент общается с базовой станцией по её BSSID — и это именно то, что мы видим в обеих таблицах airodump-ng. Мы можем «отключить» клиента от сети, после чего он должен будет подключиться вновь — и в этот момент airodump-ng перехватит рукопожатие со всеми идентификаторами и ключами. Либо мы можем просто оставить ноутбук включенным на пару часов с airodump-ng на нужном канале и подождать. Кстати, при успешном «вскрытии» в правом верхнем углу появится сообщение вида [ Decloak: 00:00:11:11:22:22 ] с BSSID точки доступа, конспирацию которой мы раскрыли.


Отключение клиентов предусмотрено во всех беспроводных стандартах и делается с помощью aireplay-ng (все три уже знакомые нам утилиты — часть проекта Aircrack-ng, который содержит в своём наборе всевозможные инструменты для работы с тонкими материями):
aireplay-ng wlan0 --deauth 5 -a AP_BSSID -c CLIENT_BSSID

Внимание: эта команда — исключение и принимает идентификатор реального беспроводного адаптера, а не mon0, созданного с помощью airmon-ng.

Если при запуске появилась ошибка о незафиксированном канале и/или airodump-ng показывает в правом верхнем углу [ fixed channel -1 ] — значит, какая-то программа или сервис заставляет адаптер перескакивать с канала на канал (это может быть тот же airodump-ng) и их нужно закрыть с помощью airmon-ng check kill, как было описано в начале.

Команда выше имитирует ситуацию, когда точка доступа сообщает клиенту, что старый ключ недействительный (и что его следует обновить, повторив handshake, то есть передав пароль и имя сети заново). На адрес клиента отправляются сообщения якобы от точки доступа о том, что следует отключиться от сети и обновить данные сессии. Так как этот тип пакетов не защищён шифрованием (то есть команда может быть выполнена ещё до аутентификации), то противодействовать ему невозможно по той простой причине, что невозможно установить «личность» того, кто это рассылает — MAC-адреса в пакетах поддельные и установлены в те значения, которые мы передали после -a и -c. Можно только отслеживать слишком частые отключения и принимать какие-то меры.

После --deauth идёт число пакетов деавторизации, которые будут посланы в оба конца. Обычно хватает 3-5, можно указывать и 30 и больше. Для краткости --deauth можно заменить на -0 (ноль).

Итак, допустим во второй таблице airodump-ng мы видим следующую строчку:

BSSID              STATION            PWR   Rate    Lost    Frames  Probe
4F:B1:A4:05:5C:21  5B:23:15:00:C8:57  -54    0 - 1      0     1266  homenet, XCom

Первый столбец — значение для -a (MAC базовой станции), второй — для -c (MAC клиента). Перезапустим airodump-ng и зафиксируем его на канале 5 (это канал нашей атакуемой станции), после чего выполним отключение клиента в соседнем окне терминала:

airodump-ng -c5 mon0
aireplay mon0 -0 5 -a 4F:B1:A4:05:5C:21 -c 5B:23:15:00:C8:57  

Если сигнал достаточно сильный, число пакетов велико и клиент/точка доступа нас услышали — они отключатся друг от друга, затем передадут информацию о сети вновь при подключении и airodump-ng покажет их и строчку [ Decloak ].

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

Также, -c (клиентский MAC) можно не указывать — тогда от имени точки доступа будут разосланы широковещательные (broadcast) пакеты об отключении всех клиентов. Однако сегодня это редко работает — драйвера игнорируют такие пакеты, так как правомерно считают, что дело нечисто — точка доступа всегда знает, кто к ней подключен, и рассылает направленные пакеты для конкретного клиента.

Фильтрация по MAC — ведь это так просто




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

В самом деле, каждый клиент — подключенный к сети или нет — раскрывает свой MAC-адрес при передаче любого пакета. В таблице airodump-ng эти адреса видны в столбце STATION. Соответственно, как только мы увидели сеть, куда нам почему-то не попасть (Linux обычно рапортует об Unspecified failure на этапе подключения, а Windows долго думает, после чего сообщает о неизвестной ошибке), и тут же в списке видим связанного с этой сетью клиента — мы можем взять его MAC-адрес и поменять свой на него. Последствия могут быть разными и может даже стукнуть. Если сделаем это при активном клиенте — в сети появится клон и клиента может «заглючить», так как он будет получать ответы на пакеты, которые он не отправлял. В итоге может отключиться, а может продолжать работать, предупредив о проблеме пользователя — или нет. Но вариант лучше — записать его MAC и подключится, когда он уйдёт.

В Linux изменить MAC своего адаптера можно следующим образом (работает как для проводных сетей, так и для беспроводных):

ifconfig wlan0 down 
ifconfig wlan0 hw ether 00:11:22:AA:AA:AA 
ifconfig wlan0 up

Предварительно нужно отключить любые mon-интерфейсы. Проверить, заработала ли подмена, можно вызвав ifconfig wlan0 — в строке Hwaddr должен быть указанный выше MAC.

Кроме того, в *nix есть macchanger — с его помощью можно выставить себе случайный MAC. Если поставить его в init.d, то неприятель будет совершенно сбит с толку, так как при каждой загрузке наш MAC будет другим (работает для любых проводных и беспроводных адаптеров, как и ifconfig).
# Случайный MAC:
macchanger -r wlan0 
# Определённый MAC:
macchanger -m 11:22:33:AA:BB:CC wlan0 
# Показать MAC:
macchanger -s wlan0 

В Windows нужно провести кое-какие манипуляции с реестром, но по этой теме лучше проконсультироваться с Google. (Читатели в лице alexeywolf подсказывают инструмент TMAC, который делает это в автоматическом режиме.)

WhooPS


Мы сделали всё правильно и наша точка доступа использует непробиваемые WPA2-PSK-CCMP с 63-значным паролем из /dev/urandom. Достаточно ли этого? Нет, если у нас — роутер с WPS, особенно если он старый.


Диаграмма выше описывает процесс подключения клиента к точке доступа с помощью PIN-кода. PIN — 8 цифр, которые обычно наклеены на самом роутере. Клиенты, поддерживающие WPS, могут подключиться к сети либо по обычному паролю WEP/WPA, либо с помощью PIN, причём введя последний клиент получает пароль сети в чистом виде.

По стандарту, последняя цифра в PIN — это контрольная сумма, то есть её можно вычислить исходя из остальных цифр. Таким образом, если бы мы хотели перебрать все возможные комбинации, то это потребовало бы 107 попыток (в основании — число возможных символов (0-9 — десять), в степени — длина строки) — 10 миллионов, что есть около 116 дней, если мы пробуем один код в секунду. Обычно скорость в несколько раз ниже, поэтому на подбор бы ушло больше года.
Логотип WPS
Однако в стандарте допущена ошибка. Процесс авторизации проходит в несколько этапов. Если переданный нами PIN — верный, то точка доступа сообщает об успехе. Если первые четыре цифры PIN — верные, а цифры 4-7 — нет, то точка доступа сообщит об этом после передачи нами пакета M6. В случае же ошибки в первых четырёх цифрах мы узнаем об этом раньше — после пакета M4. Эта проблема была найдена в конце 2011 и описана здесь. По горячим следам авторами исследования был создан reaver-wps, опубликованный затем на Google Code. Там же можно найти документ оригинального описания уязвимости.

Итак, допустим наш PIN — 99741624. Мы пытаемся подключиться, используя PIN 99740000 — получаем отказ в авторизации после передачи пакета M6 (так как первая половина кода верна). Если же мы подключимся с 00001624 — отказ будет после M4.

Как видим, основная проблема в том, что мы можем узнать о правильности одной части кода даже при том, что во второй содержится ошибка. Что это даёт? Теперь вместо 10 миллионов комбинаций нам нужно попробовать всего лишь 104 + 103 = 11 000. Это более чем реально сделать не то что за неделю — за 15 часов, а обычно быстрее.

Обратите внимание: цифр для подбора именно 7, а не 8, так как последняя — контрольная сумма и мы её рассчитываем сами, поэтому её подбирать не нужно. В примерах ниже это #.

Посмотрим ещё раз. Мы начинаем перебор с 0000000#. Отказ после M4 (ошибка в первых 4 цифрах). Меняем на 0001000#. Отказ после M4. 0002000#. M4. Доходим до 9974000#. О! Отказ после М6. Первые 4 цифры угаданы.

Дальше — точно так же. Имея половину кода постепенно увеличиваем вторую. 9974001#. Отказ. 9974002#. Отказ. <...> 99741624. Принято.

Вот в этом и суть Wi-Fi Unprotected Setup «Защищённой настройки Wi-Fi».



Reaver

А вот теперь мы проверим, насколько добросовестно ваша точка доступа выполняет свои обязанности. Если у вас нет роутера с WPS — всегда можно протестировать соседский вам эта атака не грозит.

Для эксплуатации уязвимости в WPS у Kali есть несколько утилит, но на мой взгляд самая наглядная и гибкая — тот самый reaver. Синтаксис вызова:
reaver -i mon0 -c 5 -b AP_BSSID -va

Кроме этого мы можем указать:

  • -m OUR_MAC — если вы меняли MAC-адрес своего адаптера (см. выше про MAC-фильтрацию), то укажите этот параметр с новым (не фабричным) MAC.
  • -e ESSID — при атаке на скрытую сеть reaver должен знать её имя, а не только BSSID; если сеть отправляет маячки — ESSID будет автоматически получен из них, но для скрытых сетей вы должны передать его явно.
  • -p PIN — если вы хотите вручную передать 8-мизначный код WPS, который нужно попробовать применить к этой сети (этот код можно прочитать и изменить в веб-интерфейсе устройства). Если он верный — утилита выведет сам пароль сети.
  • -vv — для показа принятых/переданных пакетов, в том числе тех самых M4 и M6. Полезно для отслеживания активности при плохом соединении.

reaver перебирает 11 000 комбинаций, пока не обнаружит, что точка доступа приняла одну из них. Скорость перебора сильно зависит от силы сигнала/расстояния до базовой станции и может колебаться от 3 до 30 в секунду. Обычно на одну сеть уходит до 10-15 часов.

Прервать reaver можно с помощью Ctrl+C, при этом он сохранит текущий прогресс для этой сети и при повторном запуске начнёт с прерванного PIN. Если вы работаете в live-режиме (read only), то данные сессии можно переписать с /etc/reaver/ на постоянный носитель и при следующей загрузке записать их обратно. В этой папке хранятся текстовые файлы с именами вида AP_MAC.wpc и списком всех номеров для перебора внутри (первая строка — номер строки с PIN, с которого начать перебор при повторном запуске).

Про WPS ещё два года назад писали на Хабре и не только, так что легко можно найти больше информации.

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

Что делать?

На сегодняшний день единственный вариант — отключить WPS. Если у вас или ваших знакомых сложности с «настройкой» сети (во что с трудом верится) — включайте WPS только в момент подключения нового устройства. Правда, не все роутеры/прошивки вообще дают эту возможность, но будь у меня такой не глядя пошёл бы менять на другой.

Однако же не всё так плохо. Более новые прошивки ограничивают возможность подбора с помощью rate limiting — после нескольких неудачных попыток авторизации WPS автоматически отключается. Некоторые модели увеличивают время отключения ещё больше, если за короткий интервал были сделаны ещё неудачные попытки войти. Тем не менее, полагаться на это можно только после тщательной проверки в вашем конкретном случае — может получиться, что время отключения короткое или оно увеличивается недостаточно — помните, что 11 000 комбинаций это очень мало и даже делая по одной попытке в минуту на весь диапазон уйдёт максимум 8 дней. И при этом PIN меняется отдельно от пароля сети, поэтому последний вы можете обновлять сколь угодно часто, никак не усложняя перебор PIN.

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

Перечисление сетей

Напоследок несколько слов о вечном об альтернативах reaver.

reaver будет пытаться атаковать любую сеть, которую вы ему передадите в виде параметра BSSID, но она может не поддерживать WPS — в этом случае программа зависнет над Waiting for beacon... и через полминуты сообщит о том, что сеть не обнаружена.

Проверить, какие сети в округе поддерживают WPS, можно несколькими способами.

  • Некоторые версии airodump-ng имеют отдельный столбец WPS, который заполнен для сетей, поддерживающих эту технологию (там даже указана модель роутера)
  • wash -i mon0 выводит удобно отформатированную таблицу всех WPS-enabled сетей, при этом продолжая работать, пока не будет явно закрыт через Ctrl+C. Очень полезен и тем, что сообщает, когда сеть поддерживает WPS, но возможность заблокирована (см. про rate limiting выше)
  • iwlist wlan0 scan выводит множество информации по всем доступным в радиусе сетям, в том числе расширенные данные поддержки WPS с именами устройств
  • wifite — автоматический сканер сетей и универсальный взломщик; однако на мой взгляд он слишком универсальный, поэтому сложно понять, что он делает и на какой стадии этот процесс находится. А вот вывод сетей у него очень удобный: показано наличие подключенных клиентов и поддержка WPS

Кроме того, есть очень любимый многими kismet (и аналог для Macintosh — KisMAC), но на мой взгляд он слишком навороченный. В обоих есть интеграция с GPS, что может быть полезно для тех, кто исследует сети на большой территории (wardriving).

На этом с «читерскими» методами проникновения всё. В третьей части — о перехвате рукопожатий клиентов при подключении к сети и подборе паролей к WPA(2) с помощью CPU и GPU.

Отдельное спасибо товарищу chem_ua за полезные замечания при вычитке статьи.
Диаграммы были нарисованы на gliffy.com.

Как обычно, комментарии по делу — приветствуются.

Оглавление:
1) Матчасть
2) Kali. Скрытие SSID. MAC-фильтрация. WPS
3) WPA. OpenCL/CUDA. Статистика подбора
Tags:
Hubs:
+165
Comments 39
Comments Comments 39

Articles