>
Ноябрь 2017
Пн Вт Ср Чт Пт Сб Вс
« Окт    
 12345
6789101112
13141516171819
20212223242526
27282930  

Как отключить пользователя от 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 кадра с инъекцией 
image

Как видно разделитель кадра (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

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

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

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

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

Имеем

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

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

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

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

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

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

Так мы заставили клиента с 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.

[Всего голосов: 7    Средний: 2.7/5]

Share Button

Вам может быть интересно также:

Last updated by at .

Leave a Reply

You can use these HTML tags

<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">