• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Использование фреймворка WPAxFuzz для автоматизированного выявления уязвимостей в устройствах стандарта Wi-Fi

evdo

Главный редактор
Модератор
Регистрация
18.08.2024
Сообщения
95
Реакции
79
Источник https://xss.pro
Автор evdo

Использование фреймворка WPAxFuzz для автоматизированного выявления уязвимостей в устройствах стандарта Wi-Fi

1. Введение

В 2022 году исследователем Efstratios Chatzoglou опубликован фреймворк, получивший название WPAxFuzz [5] и уязвимости, выявленные при помощи его работы - CVE-2022-32654, CVE-2022-32655, CVE-2022-32656, CVE-2022-32657, CVE-2022-32658, CVE-2022-32659, CVE-2022-46740 и CVE-2022-32666.
В отличие от аналогов типа DragonFuzz [6] и WPA3Fuzz [7], фреймворк WPAxFuzz обеспечивает проведение фаззинга управляющих, контрольных кадров и кадров данных стандарта IEEE 802.11, а также процедуры аутентификации и обмена ключами Simultaneous Authentication of Equals (SAE) WPA3.
Под “фаззингом” понимается метод автоматизированного тестирования программного обеспечения по принципу "черного ящика", направленный на обнаружение ошибок реализации путем инъекции искаженных данных [3, 4].​

2. Структура фреймворка

Фреймворк WPAxFuzz состоит из модуля сетевого мониторинга, модуля фаззинга и модуля атаки.

Модуль сетевого мониторинга обеспечивает:
  • контроль состояния подключенных станций (STA) точки доступа AP в реальном масштабе времени;
  • регистрацию сбоев сетевого соединения и сервисов как возможных признаков уязвимости при работе модуля фаззинга.

Два параллельных потока модуля контролируют появление кадров деаутентификации или диссоциации в отношении STA, а также сетевую доступность STA посредством ping-запросов.
Потоки синхронизированы и могут приостанавливать выполнение модуля фаззинга в зависимости от случая (см. Рисунок 1).
1.png

Рисунок 1 – Схема работы фреймворка WPAxFuzz.
При обнаружении кадров деаутентификации или диссоциации в отношении STA процесс фаззинга приостанавливается, и пользователь должен вручную переподключить STA и при необходимости возобновить фаззинг; цикл фаззинга возобновится с последней предыдущей точки, исключая весь пакет кадров, который вызвал отключение (например, имеющих специфическое поле SSID). Та же категория кадров (с полем SSID в предыдущем примере) исключается из последующих циклов процесса фаззинга.

Вторая функция мониторинга касается случая, когда нет события отключения, но STA переходит в состояние "зомби"; соединение кажется живым, но AP и STA на самом деле не обмениваются данными; в этом случае STA не отвечает на эхо-запросы ICMP. Если такое состояние обнаружено, процесс фаззинга приостанавливается и предлагает пользователю переподключить STA и возобновить работу; предупреждение о "переподключении" появится и будет сохраняться до тех пор, пока пользователь вручную не восстановит соединение или не завершит работу фаззера. Важно отметить, что оба вышеупомянутых процесса мониторинга (потоки) могут выполняться на одном или на разных сетевых интерфейсах по выбору пользователя.

Модуль фаззинга обеспечивает формирование и инъекцию искаженных данных для каждого поля выбранного типа управляющих, контрольных кадров и кадров данных стандарта IEEE 802.11, а также кадров процедуры SAE WPA3 различными методами (описание методов приведено далее).

Модуль атаки содержит две отдельные функции.
Первая функция собирает все кадры, вызвавшие прерывание соединения во время процесса фаззинга, из соответствующих файлов журналов и передает их один за другим; таким образом, сохраняются только действительно проблемные кадры (истинно положительные). В случае, когда кадр признан положительным (например, он вызывает DoS на целевом устройстве), во время работы модуля автоматически формируются рекомендации по созданию эксплойта на основе скриптов-шаблонов из директории exploits (пример такого скрипта представлен в Листинге 1).
Это облегчает исследователю идентификацию потенциальных уязвимостей в конкретном устройстве.

Листинг 1. Пример шаблона эксплойта.​
Код:
from scapy.all import Dot11, RadioTap, sendp

dot11 = Dot11(type=0, subtype={SUBTYPE}, addr1={DESTINATION_MAC}, addr2={SOURCE_MAC}, addr3={AP_MAC})
MAC_header = RadioTap()/dot11
payload = {SEED}
frame = MAC_header / payload

print('\n- - - - - - - - - - - - - - - -')
print('Testing the exploit')
print('- - - - - - - - - - - - - - - - ')

while True:
 sendp(frame, count=1, iface={ATT_INTERFACE}, verbose=0)

Вторая функция передает в радиоэфир все кадры, которые были отправлены до момента обнаружения прерывания соединения на стороне STA. Это может быть использовано для отслеживания последовательностей кадров (по крайней мере, двух кадров одного подтипа), совместное сочетание которых прерывает соединение между AP и STA.​

3. Методы фаззинга

3.1 Фаззинг управляющих кадров

Фреймворк WPAxFuzz способен формировать восемь типов различных управляющих кадров, за исключением кадров деаутентификации и диссоциации.
Манипулируемые поля для каждого подтипа управляющего кадра представлены в Таблице 1.​

Таблица 1. Манипулируемые поля для каждого подтипа управляющего кадра.
Table_1.png

Фаззинг управляющих кадров производится следующим образом.
1. Подтип кадра, выбранный пользователем через CLI, например, “Beacon”, передается набором, состоящим из 128 различных кадров. Первый набор кадров содержит только заголовок MAC-уровня без полезной нагрузки.
2. Для всех последующих наборов, каждая пара кадров в наборе содержит одно и то же значение текущего тестируемого поля, каждый нечетный кадр внутри набора использует новое значение. Таким образом каждый набор из 128 кадров тестирует 64 различных значения тестируемого поля.
3. После того, как все поля кадра последовательно протестированы (например, для кадра аутентификации, который содержит три поля, этот процесс потребует 4×128 кадров), фаззер передает последний набор из 128 кадров, каждый второй из которых содержит различные случайные значения во всех своих полях.
4. Фаззер повторяет этот процесс для того же подтипа кадра до тех пор, пока не будет обнаружено какое-либо прерывание соединения между целевой точкой доступа (AP) и связанной (целевой) станцией (STA). В целях идентификации и регистрации подобных событий для последующего анализа во фреймворке WPAxFuzz реализован модуль сетевого мониторинга, работа которого рассмотрена ранее.

Длина формируемых полей кадров определяется выбранным через интерфейс командной строки (CLI) режимом работы:
1. Standard. Все поля кадров 802.11 имеют длину согласно стандарту IEEE 802.11, что исключает их восприятие устройством-адресатом как некорректных и дальнейшее отбрасывание.
2. Random. Поля, генерируемые с помощью генератора начальных данных, имеют случайную длину значения, которая меньше или больше стандартной.

Для кадров типа “Beacon”, “Probe”, “Association” и “Reassociation” пользователь может через CLI выбрать фаззинг в отношении AP, либо фаззинг в отношении STA. В первом случае (AP) соответствующие кадры содержат в качестве MAC-адресов назначения и источника адреса AP и STA соответственно, во втором случае - наоборот.
При фаззинге AP предполагается, что незапрошенные кадры будут проигнорированы, иначе это формирует уязвимость.
Фаззинг STA, когда злоумышленник выдает себя за AP с помощью поддельных кадров, может вызвать отказ в обслуживании, заставив AP деаутентифицировать STA.​

3.2 Фаззинг контрольных кадров

Помимо управляющих кадров, фреймворк WPAxFuzz также способен фаззить контрольные кадры IEEE 802.11 (см. Таблицу 2). Из-за простоты структуры и небольшого размера контрольных кадров, а также отсутствия полезной нагрузки почти в половине случаев, каждый цикл процесса фаззинга отправляет только три набора кадров для выбранного подтипа.​

Таблица 2. Типы контрольных кадров согласно стандарту IEEE 802.11.
(a) структура каждого подтипа контрольного кадра;
(b) типы контрольных кадров с “расширением” (Control Frame Extension).
table_2.png

Фаззинг контрольных кадров производится в три этапа:
1. Фаззер передает в радиоэфир кадры с 1-байтовыми флагами контроля кадра (Frame Control Flags), имеющими случайно сгенерированные значения. Напомним, что каждые два последовательных кадра идентичны.
2. Фаззер передает в радиоэфир кадры с полезной нагрузкой (payload) согласно их подтипу.
3. Фаззер передает в радиоэфир кадры, заполняя оба поля одновременно.

Наполнение полезной нагрузки определяется выбранным через CLI режимом фаззинга:
1. Standard. Полезная нагрузка генерируется только для тех подтипов кадров, в которых она предусмотрена; размер полезной нагрузки для каждого подтипа кадра фиксирован и соответствует стандарту IEEE 802.11.
2. Random. Полезная нагрузка добавляется независимо от того, предусмотрена ли она согласно стандарту в проверяемом подтипе кадра, размер полезной нагрузки определяется случайным образом.
Этапы повторяются до остановки скрипта со стороны пользователя или до тех пор, пока фаззируемые поля излучаемых кадров не вызовут сбой соединения тестируемых устройств.

Особым типом контрольных кадров являются кадры с так называемым “расширением” (Control Frame Extension), где поле подтипа в поле контроля кадра (Frame Control Field) установлено равным “0x0110” (представлены в Таблице 2b). Типы кадров с “расширением” определяются значениями их флагов контроля (Frame Control Flags). Диапазон значений флагов контроля для кадров с “расширением” установлены стандартом (от 0x02 до 0x0a), остальные значения флагов зарезервированы.
В этой связи процесс фаззинга для этих кадров отличается; флаги контроля кадра неизменяемы, и процесс фаззинга происходит только в отношении полезной нагрузки.

Остальная функциональность фаззинга контрольных кадров идентична функциональности фаззинга управляющих кадров, описанной в предыдущем разделе.​

3.3 Фаззинг кадров данных

Фреймворк WPAxFuzz способен формировать шестнадцать типов различных кадров данных.

Каждый цикл процесса фаззинга отправляет четыре пачки кадров для выбранного подтипа кадров и состоит из следующих этапов:
1. Фаззер транслирует в радиоэфир 16 кадров с 1-байтовым полем контроля кадра (Frame Control Field), имеющим случайно сгенерированное значение;
2. Фаззер транслирует в радиоэфир 16 кадров с 14-битным полем Sequence Control (содержащим Fragment Number и Sequence Number), имеющим случайно сгенерированное значение;
3. Фаззер транслирует в радиоэфир 16 кадров с полезной нагрузкой (payload) согласно подтипу тестируемого кадра;
4. Последний этап объединяет три предыдущих в единый процесс, одновременно генерируя значения всех указанных полей.

Наполнение полезной нагрузки определяется выбранным через CLI режимом фаззинга аналогично реализации данной функции при фаззинге контрольных кадров.​

3.4 Фаззинг кадров процедуры SAE WPA3

Фаззинг кадров процедуры SAE WPA3 реализован в отдельном модуле и фокусируется на кадрах аутентификации типа “SAE Commit” и “SAE Confirm”.
Согласно стандарту [1] и Таблице 1, оба кадра содержат алгоритм аутентификации (3), последовательность аутентификации (“1” для Commit и “2” для Confirm) и код состояния, а именно значение от 0 до 65535, где “0” означает "Успешно". Обратите внимание, что в соответствии с [1] значения кода состояния от 1 до 129 (кроме 4, 8, 9, 20, 21, 26, 29, 36, 48, 66, 69-71, 90-91, 116, 124 и 127) обозначают различные причины сбоя, тогда как остальные значения зарезервированы протоколом.

Модуль фаззинга кадров процедуры SAE реализует отправку кадров в адрес целевой AP (128 кадров) в формате трех циклов:
1. Передача кадров SAE (аутентификации) на радиоканале целевой STA;
2. Передача кадров SAE на радиоканале, отличном от канала целевой STA;
3. Любой из предыдущих, но с включенным режимом пакетной передачи.

Каждый цикл фаззинга выполняется по семи различным вариантам:
1. Пустой кадр аутентификации SAE.
2. Действительный (правильно сформированный) кадр “SAE-Commit”, за которым следует пустой кадр аутентификации SAE.
3. Действительный кадр “SAE-Commit”, за которым следует кадр “SAE-Confirm” с полем “Send-Confirm”, равным “0”. Напомним, что поле “Send-Confirm” содержит счетчик уже отправленных кадров “SAE-Confirm”, таким образом действуя как счетчик защиты от повторного воспроизведения.
4. Как и предыдущем варианте, но значение поля “Send-Confirm” установлено равным “2”. Это конкретное значение выбрано потому, что, при использовании значения от 2 до 65534 для этого поля "AP отключала целевую STA в среднем через 20 секунд", как указано в материалах исследования [2].
5. Действительный кадр “SAE-Commit”.
6. Действительный кадр “SAE-Confirm” с полем “Send-Confirm”, равным “0”.
7. Как и в предыдущем варианте, но значение поля “Send-Confirm” установлено равным “2”.

Модуль фаззинга SAE использует логику фазинга управляющих кадров и разделен на два разных типа процедур фаззинга - Стандартный (Standard) и Расширенный (Extensive).
Стандартный режим присваивает определенные значения полям фреймов SAE в попытке принудительно отключить STA или парализовать AP. Например, поле алгоритма аутентификации заполняется с использованием специфических значений, включая 0, 1, 2 и 200, а не случайных.
Расширенный режим направлен на тестирование каждой допустимой комбинации полей SAE в диапазоне от 0 до 65535, что делает его гораздо более времязатратным по сравнению со Стандартным режимом.

Хотя фаззинг управляющих кадров также формирует кадры аутентификации, существует различие по сравнению с текущим модулем: режим фаззинга управляющих кадров использует генератор для построения начальных значений, тогда как режим фаззинга SAE использует допустимые значения в диапазоне, определенном стандартом IEEE 802.11-2020. Это основная причина, по которой фаззинг управляющих кадров смог обнаружить новые неправильные конфигурации в кадрах аутентификации; модуль фаззинга SAE лишь подтвердил все еще неисправленные проблемы, первоначально выявленные в [2].​

4. Практическое применение фреймворка

Для работы фреймворка со стороны атакующего требуется ОС Linux (протестирован на Kali Linux 2025.1), и две сетевых карты, одна из которых должна быть беспроводной и поддерживать работу в режиме мониторинга («monitor mode»). Тип второй сетевой карты выбирается исходя из того, каким способом предполагается подключаться к AP для проверки соединения исследуемой STA – по проводному или беспроводному интерфейсу.

Целевая станция предпочтительно должна работать на отдельном хосте, например, смартфоне или ноутбуке. Если целевая станция является машиной с операционной системой (ОС) MS Windows, может потребоваться изменить правила работы брандмауэра, чтобы разрешить "пингование" в локальной сети. Это прямое ограничение, учитывая, что фреймворк должен постоянно отслеживать работоспособность целевой станции, проверяя ее с помощью ping-запросов или иным способом.

Для генерации тестовых начальных данных, которые вводятся в определенные поля кадров в процессе фаззинга, WPAxFuzz использует инструмент с открытым исходным кодом Blab [8].
Для установки Blab необходимо выполнить следующие команды:​
Код:
git clone https://haltp.org/git/blab.git
cd blab/
make
cd bin/
cp blab {директория размещения WPAxFuzz}

Перед запуском фреймворка пользователь должен просканировать локальную сеть для обнаружения IP-адресов потенциальных целей, т.е. станций и точек доступа; для этого целесообразно использовать утилиты типа nmap:​
Код:
nmap -sP 192.168.1.*

Далее пользователь должен указать в конфигурационном файле .\src\config.json следующую информацию:
  • MAC-адреса целевых AP и STA,
  • имя беспроводного интерфейса, который будет использоваться для инъекции Wi-Fi кадров;
  • имя сетевого интерфейса мониторинга состояния STA;
  • Service Set Identifier (SSID) целевой точки доступа.
Для работы модуля фаззинга SAE дополнительно необходимо указать альтернативный диапазон вещания AP и соответвующий MAC-адрес AP (при наличии), а также парольную фразу Wi-Fi сети.

Затем необходимо перевести беспроводной интерфейс в режим “monitor” и назначить ему частотный канал целевой AP:​
Код:
sudo ifconfig wlxe84e06020202 down
sudo iwconfig wlxe84e06020202 mode monitor
sudo ifconfig wlxe84e06020202 up
sudo iw wlxe84e06020202 set freq 5280 80MHz

Для экспериментальной проверки возможностей фреймворка используем тестовый стенд, состоящий из следующего оборудования:
– точка доступа Keenetic Ultra KN-1810 (версия прошивки 4.2.6);
– точка доступа Huawei WS7100 (версия прошивки 2.0.15);
– точка доступа TP-Link AX73 (версия прошивки 1.0.1);
– клиентские устройства iPhone 11, OnePlus 11, Samsung Galaxy S20;
– Wi-Fi адаптер для инъекции пакетов EDUP AX1672 на базе чипсета MTK7921AU.

В результате анализа исходного кода фреймворка WPAxFuzz установлено, что функции логирования исключают последующую работу модуля атаки на основании собранных лог-файлов; программные ошибки препятствуют запуску модуля фаззинга SAE.
В этой связи для реальной работы используем модифицированную версию фреймворка WPAxFuzz, не имеющую указанных ограничений (прилагается).​

Для запуска фреймворка используем команду:
Код:
sudo python3 fuzz.py

Далее используем интерактивное меню – для примера выберем п.1 “Fuzz Management Frames” (см. Рисунок 2), режим работы фаззера – “random” (см. Рисунок 3), тип исследуемых кадров – “Authentication Frames” (см. Рисунок 4).
2.png

Рисунок 2 –Выбора режимов работы фреймворка WPAxFuzz.

3.png

Рисунок 3 – Выбор способа фаззинга.

5.png

Рисунок 4 – Выбор типа исследуемых кадров.
Начинается циклический процесс фаззинга выбранного типа кадров (см. Рисунок 5).
4.png

Рисунок 5 – Процесс фаззинга выбранного типа кадров.
При помощи утилиты Wireshark фиксируем состояние беспроводного интерфейса, наличие излучаемых кадров и их содержимое (см. Рисунок 6).

6.jpg
Рисунок 6 – Проверка излучаемых кадров.
При регистрации модулем сетевого мониторинга фреймворка сбоя сетевого соединения между AP и STA процесс фаззинга приостанавливается. фреймворк предлагает пользователю переподключить STA и возобновить работу (см. Рисунок 7).
7.png

Рисунок 7 – Выявление признака уязвимости в процессе фаззинга.
При этом в директории ./Logs/fuzz_mngmt_frames создаются лог-файлы “Aliveness_check_{дата}{время}” и “frames_till_disr_{дата}{время}”, которые содержат сведения о типе и содержании кадров, вызвавших перерывание сетевого подключения между исследуемыми устройствами (см. Рисунки 8 и 9 соответственно).
8.png

Рисунок 8. Содержание лог-файла “Aliveness_check_{дата}__{время}”.

9.png

Рисунок 9. Содержание лог-файла “frames_till_disr_{дата}__{время}”.
Запустим модуль атаки для проверки полученной информации.
Для этого перезапустим фреймворк, выберем режим атаки (“5”) и тип излучаемых кадров: формирующих потенциальную уязвимость (вызвавших сбой соединения), либо предшествовавших этому сбою (см. Рисунок 10), а также формат кадров по стандарту IEEE 802.11 (см. Рисунок 11).
10.png

Рисунок 10. Выбор типа кадров для атаки.

11.png

Рисунок 11. Выбор формата кадров.

12.png

Рисунок 12. Ход выполнения атаки.
Если в процессе выполнения атаки произойдет сбой сетевого соединения, то появится информационное окно фреймворка с рекомендациями по созданию эксплойта на основе скриптов-шаблонов в директории exploits (см. Рисунок 13).​

13.png

Рисунок 13. Рекомендации фреймворка по созданию эксплойта
Работа фреймворка апробирована на тестовом стенде на примере выявления уязвимости CVE-2022-32666, методология проверки которой идентична представленной в статье [9].
Фреймворк существенно облегчает идентификацию потенциальных уязвимостей в конкретном устройстве, удобен и не имеет существенных недостатков в работе.
5. Заключение

В статье подробно описана структура и функциональность фреймворка WPAxFuzz, который обеспечивает проведение фаззинга управляющих, контрольных кадров и кадров данных стандарта IEEE 802.11, а также процедуры аутентификации и обмена ключами SAE WPA3.
Приведены рекомендации по практическому применению модифицированной версии фреймворка, которая обеспечивает полноценную работу модуля атаки и модуля фаззинга SAE в отличие от общедоступной версии [5].
Работа фреймворка апробирована на тестовом стенде на примере выявления уязвимости CVE-2022-32666 согласно материалам предыдущих исследований [9].
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
[1] IEEE Standard for Information Technology–Telecommunications and Information Exchange between Systems - Local and Metropolitan Area Networks - Specific Requirements - Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications. In IEEE Std 802.11-2020 (Revision of IEEE Std 802.11-2016); IEEE: New York, NY, USA, 2021; стр. 1–4379.
URL: http://doi.org/10.1109/IEEESTD.2021.9363693

[2] Chatzoglou, E.; Kambourakis, G.; Kolias, C. How is your Wi-Fi connection today? DoS attacks on WPA3-SAE.
URL: http://dx.doi.org/10.1016/j.jisa.2021.103058

[3] Li, J.; Zhao, B.; Zhang, C. Fuzzing: A survey. Cybersecurity 2018, 1, 6.
URL: http://dx.doi.org/10.1186/s42400-018-0002-y

[4] Manès, V.J.; Han, H.; Han, C.; Cha, S.K.; Egele, M.; Schwartz, E.J.; Woo, M. The Art, Science, and Engineering of Fuzzing: A Survey. IEEE Trans. Softw. Eng. 2021, 47, 2312–2331.
URL: http://dx.doi.org/10.1109/TSE.2019.2946563

[5] The WPAxFuzz Tool.
URL: https://github.com/efchatz/WPAxFuzz.

[6] Nikolai Tschacher. Dragonfuzz.
URL: https://github.com/NikolaiT/dragonfuzz

[7] Marais, S.; Coetzee, M.; Blauw, F. Simultaneous Deauthentication of Equals Attack. In Proceedings of the Security, Privacy, and Anonymity in Computation, Communication, and Storage: SpaCCS 2020 International Workshops, Nanjing, China, 18–20 December 2020; Springer: Berlin/Heidelberg, Germany, 2020; стр. 545–556.
URL: http://dx.doi.org/10.1007/978-3-030-68884-4_45

[8] Aki Helin. Blab—A Grammar-Based Data Generator.
URL: https://gitlab.com/akihe/blab

[9] Evdo. Уязвимость «User interface misrepresentation of critical information in Wi-Fi» CVE-2022-32666.
URL: https://xss.pro/threads/136820/​
 

Вложения

  • WPAxFuzz-mod.zip
    197.3 КБ · Просмотры: 16
Последнее редактирование модератором:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх