Беспроводные сети — они везде в наши дни, гдето они открыты, гдето закрыты и нам всегда интересно на сколько надежно они защищены.
Сегодня мы поставили перед собой задачу собрать устройство для взлома WIFI сетей на базе микрокомпьютера Raspberry Pi и Yagi (волновой канал) антены.
О малинке рассказывать думаю нет смысла а подобную антену вы можете приобрести за очень скоромную сумму —
Итак, мы решили смоделировать некоторые инструменты, уже доступные в aircrack-ng избегая при этом использования всего комплекта инструментов. В виду ограниченности ресурсов используемых в Raspberry Pi. В итоге мы создали инструмент WiFi De-authentication Rifle который представляет собой скрипт написаный на Python и позволяет выполнять следующие действия:
- Используя IW команды переводит беспроводную карту в режим монитора и обеспечивает смену каналов для наилучшего захвата пакетов.
- Используя Core Security’s модуль Pcapy захватывать трафик в режиме монитора.
- Используя Core Security’s модуль impacket внутри потоков, выбирать отдельные 802.11 пакеты и выделять из них интересующую нас информацию.
- Urwid Ncurses wrapper модуль оболочки для отображения интерфейса и обрабатыватки нажатия клавиш и обратные вызовы.
- Используя impacket для генерирования беспроводных пакеты и отсылки их через сокеты.
Нам нужно несколько Python модулей которые будут:
Нам нужно несколько модулей питона, которые были:
- urwid — Ncurses оболочкой.
- pcapy — сниффер.
- impacket — генератор пакетов / анализатор
Наконец, вам необходимо установить все это в вашу гостевую ОС.
Функцирование приложения:
Приложение работает в непрерывном цикле, который переводит беспроводную карту в режим монитора и производит переключение между различными WIFI каналами используя IW команды. Следующим шагом является инициализация процесса снифинга пакетов с помощью PCAPY. И наконец передача всех захваченых пакетов обработчику методом нитей.
Переводим беспроводное устройство в режим монитора на вновь созданом интерфейсе:
os.system("iw dev %s interface add mon0 type monitor && ifconfig mon0 up" % interface)
Функция переключения каналов запускается в отдельном процессе.
while True: channel = random.randrange(1,14) os.system("iw dev %s set channel %d" % ("mon0", channel)) setting up the sniffer loop and packet handler. c = pcapy.open_live("mon0", MAX_LEN, PROMISCUOUS, READ_TIMEOUT) c.loop(-1, runThreads)
Следующим логическим шагом для обработчика пакетов, запускаем из нитей, использует ImpactDecoder.RadioTapDecoder(), чтобы декодировать пакеты данных и используем Impacket dot11 Типы, чтобы проверить, какой тип пакета (данные или управление).
Это важно, поскольку захват пакетов управления позволит нам извлечь BSSID и связаный SSID, который в конечном итоге будет заполнять список и отображается в одном из потоков. Интересно отметить, что для захвата пакетов данных, как правило, имеются три присутствующие адреса поля. После некоторых первоначальных исследований, мы обнаружили, что поле address3 содержит BSSID а поле address2 имеет адрес источника MAC-передатчик или MAC-адрес, который, как правило, является MAC-адресом клиента.
Что мы сделали, это убедились — что это отображано во втором окне нашего приложения после того как пользователь выбирает SSID или BSSID, чтобы захватить клиентов, связанные с ним. Переходя к заголовку RadioTap кадров, которая доступна во всех пакетах, мы можем извлечь канал, силу сигнала и другую полезную информацию.
В результате будет захвачена и сохранена информация как указано ниже:
SSIDS = {'BSSID':'SSID'} MACs = {'BSSID':[[CLIENTS],CHANNEL]}
Процесс де-аутентификации (De-authenticationProcess)
Для де-авторизации клиента, вам нужно выбрать BSSID SSID цели. Наш сценарий отображает связанных клиентов (потому что вы должны быть ориентированы на клиента правильно?).
Следующим шагом, чтобы сделать использование Impacket данных, сначала нужно создать RadioTap кадр. Этот первоначальный кадр содержит ряд дополнительных кадров, Dot11 кадр, который содержит Dot11 Management Frame, что, в конце концов содержит Dot11 Management Frame нужны для Де-аутентификации. В сочетании, это генерирует настоящий Dot11 management de-authentication packet, который будет отправлен с помощью сокетов к интерфейсу монитора с назначеным MAC адресом клиента и отображения BSSID как адреса источника.
В случае успеха, произойдет де-аутентификация выбранного клиента, и если был выбран широковещательный адрес, все клиенты к точке доступа будут отключены.
Как создать пакеты де-аутентификации в описанном выше способе?
Создание пакета де-аутентификации с использованием Impacket.
radio = impacket.dot11.RadioTap() radio.set_channel(channel1,channel2)
Создание Dot11 Frame.
dot11 = impacket.dot11.Dot11(FCS_at_end = False) dot11.set_type_n_subtype(impacket.dot11.Dot11Types.DOT11_TYPE_MANAGEMENT_SUBTYPE_DEAUTHENTICATION)
Создание кадра управления (management Frame)
m = impacket.dot11.Dot11ManagementFrame() sequence = random.randint(0, 4096) m.set_source_address(bssid) m.set_bssid(bssid) m.set_destination_address(client) m.set_sequence_number(sequence)
Создание кадра запроса де-аутентификации.
d = impacket.dot11.Dot11ManagementDeauthentication() m.contains(d) dot11.contains(m) radio.contains(dot11)
Отправка пакетов на интерфейс монитора с помощью сокетов
s = socket.socket(socket.AF_PACKET,socket.SOCK_RAW) s.bind(('mon0',0)) s.send(pkt) s.close()
Несмотря на подробное описание, мы также создали видео для большей наглядности:
Исходный код может быть загружен с нашего SensePost Github в WiFi Rifle секции .
Английскую версию статьи вы можете прочитать по ссылке: https://www.sensepost.com/blog/2015/wifi-de-authentication-rifle/
Также наиболее полную информацию о программах для взлома WI-FI вы всегда можете найти по этой ссылке