
MacStealer: обход клиентской изоляции Wi-Fi
Этот репозиторий содержит MacStealer. Он позволяет тестировать сети Wi-Fi на наличие обходов клиентской изоляции (CVE-2022-47522). Наша атака может перехватывать (похищать) трафик, направленный другим клиентам на уровне MAC, даже если клиентам запрещено взаимодействовать друг с другом. Эта уязвимость затрагивает сети Wi-Fi с недобросовестными инсайдерами, где наша атака может обойти клиентскую изоляцию, которую иногда также называют изоляцией точки доступа (AP isolation). Атаку также можно использовать для обхода динамической проверки ARP (DAI), и, вероятно, её можно использовать для обхода других методов, предотвращающих атаки клиентов друг на друга. Атака также известна как security context override attack; см. раздел 5 нашей статьи на USENIX Security '23 (репозиторий).
Конкретные примеры сетей, которые могут быть затронуты:
Корпоративные сети, где пользователи могут не доверять друг другу и где для предотвращения атак пользователей друг на друга применяются такие методы, как клиентская изоляция или проверка ARP. Например, корпоративные сети с учётными записями и для гостей, и для сотрудников, такие сети, как eduroam и govroam, и т. д.
Публичные хотспоты, защищённые с помощью Passpoint (ранее Hotspot 2.0). Это хотспоты, к которым можно подключаться автоматически и безопасно. Например, они могут незаметно выполнять аутентификацию с использованием SIM-карты вашего телефона.
Домашние сети WPA2 или WPA3 с включённой клиентской изоляцией. Сюда входят сети с отдельным SSID для гостей или для небезопасных (IoT) устройств. Сюда также входят сети, где для дополнительной изоляции устройств используется несколько паролей — такой подход также известен как Multi-PSK, Identity PSK, per-station PSK, или EasyPSK. Дополнительную информацию см. в обсуждении модели угроз.
Публичные хотспоты на основе WPA3 SAE-PK. Это хотспоты, защищённые общим публичным паролем, но при этом злоумышленник не может злоупотребить этим общеизвестным паролем.
Отметим, что наша атака не позволяет обходить VLAN. Иными словами, по результатам текущих экспериментов, наша атака не может быть использована для атаки на устройство в другом VLAN.
Также доступен репозиторий с другими результатами нашей работы на USENIX Security '23.
Основная идея атаки заключается в том, что способ аутентификации клиентов не связан с тем, как пакеты маршрутизируются к нужному клиенту Wi-Fi. А именно, аутентификация выполняется на основе паролей, имён пользователей, 802.1X-идентификаторов и/или сертификатов, но после подключения клиента маршрутизация пакетов выполняется на основе MAC-адресов. Недобросовестный инсайдер может злоупотребить этим для перехвата данных, направленных клиенту Wi-Fi: отключив жертву и затем подключившись под MAC-адресом жертвы (используя учётные данные злоумышленника). Любые пакеты, которые всё ещё находились в пути к жертве, например данные веб-сайта, который жертва ещё загружала, теперь вместо неё получит злоумышленник.
Если быть точнее, атака состоит из трёх шагов:
Побуждение жертвы запросить данные: Сначала злоумышленник ждёт, пока жертва (клиент)
установит соединение Wi-Fi с уязвимой точкой доступа (AP). Предполагается, что затем жертва
отправит запрос к серверу в Интернете. Например, жертва может отправить
HTTP-запрос к (незашифрованному) веб-сайту example.com. Цель злоумышленника —
перехватить ответ, который отправит веб-сайт.
Подключение под MAC-адресом жертвы: После того как жертва запросила данные, например
отправив пакет HTTP-запроса, злоумышленник принудительно отключит жертву от сети
до того, как ответ поступит на уязвимую точку доступа.
В нашем примере это означает, что жертва будет отключена до того, как ответ от
example.com поступит на точку доступа. После отключения жертвы злоумышленник подделывает
MAC-адрес жертвы и подключается к сети, используя собственные учётные данные.
Это означает, что злоумышленник является недобросовестным инсайдером, который может подключиться к сети
со своими учётными данными, например используя собственные имя пользователя и пароль в
корпоративной сети Wi-Fi.
Перехват ответа: После того как злоумышленник подключился под MAC-адресом жертвы,
точка доступа свяжет вновь сгенерированные ключи шифрования злоумышленника с MAC-адресом жертвы.
В результате, когда ответ от сервера поступит в сеть Wi-Fi, или вообще любой входящий трафик,
направленный жертве, маршрутизатор перешлёт эти входящие пакеты на MAC-адрес жертвы.
В нашем примере это означает, что маршрутизатор перешлёт ответ от example.com
на MAC-адрес жертвы. Однако этот MAC-адрес теперь использует злоумышленник. Это означает, что
точка доступа зашифрует ответ, используя ключи злоумышленника. Иными словами, злоумышленник
теперь получит любой ожидающий трафик, который всё ещё находится в пути к жертве.
Отметим, что перехваченный трафик может быть защищён шифрованием более высокого уровня, таким как TLS и HTTPS. Тем не менее, даже если используется шифрование более высокого уровня, наша атака всё равно раскрывает IP-адрес, с которым взаимодействует жертва. Это, в свою очередь, раскрывает веб-сайты, которые посещает жертва, а это само по себе может быть чувствительной информацией.
По умолчанию атака не перехватывает трафик, отправляемый жертвой, а может перехватывать только трафик, отправляемый жертве. Однако злоумышленник может предпринять последующие атаки, чтобы также перехватывать трафик, отправляемый жертвой. В частности, перехватив DNS-ответ, предназначенный жертве, злоумышленник может подменить DNS-ответ и перехватывать весь IP-трафик — как направленный жертве, так и отправляемый ею.
Выполнять описанную выше атаку имеет смысл только тогда, когда в целевой сети включена клиентская изоляция. В противном случае, если клиентская изоляция отключена, недобросовестный инсайдер может просто напрямую атаковать других клиентов с помощью таких методов, как подделка ARP (ARP spoofing) (см. тесты клиентской изоляции).
Атака идентична для корпоративных сетей WPA1, WPA2 и WPA3. Это связано с тем, что атака не эксплуатирует никаких криптографических свойств Wi-Fi, а вместо этого злоупотребляет тем, как сеть определяет, какому клиенту должны быть отправлены (то есть маршрутизированы) пакеты.
Дополнительные подробности об атаке см. в разделе 5 (security context override attack) нашей статьи Framing Frames: Bypassing Wi-Fi Encryption by Manipulating Transmit Queues.
Для смягчения нашей атаки точка доступа может временно запрещать клиентам подключение, если они используют MAC-адрес, который недавно подключался к этой точке доступа. Это не позволяет злоумышленнику подделать MAC-адрес и перехватить ожидающие или поставленные в очередь кадры, направленные жертве. Когда можно гарантировать, что пользователь, стоящий за MAC-адресом, не изменился, клиенту можно разрешить немедленное повторное подключение. Обратите внимание, что такая проверка должна выполняться на всех точках доступа, входящих в одну распределённую систему (distribution system), и, более конкретно, на всех точках доступа, между которыми клиенты могут перемещаться, сохраняя свой текущий IP-адрес.
Для безопасного распознавания недавно подключавшихся пользователей точка доступа может хранить соответствие между MAC-адресом клиента и его кэшированными ассоциациями безопасности (например, кэшированным PMK). Клиенту можно разрешить немедленное (повторное) подключение под недавно использованным MAC-адресом, если он докажет, что владеет кэшированной ассоциацией безопасности, связанной с этим MAC-адресом, например подключившись с использованием правильного кэшированного PMK.
При использовании multi-PSK, также известного как per-station PSK или Identity PSK, точка доступа может хранить соответствие недавно подключённых MAC-адресов и (уникального) пароля, который они использовали. Когда клиент подключается, точка доступа проверяет, использовался ли его MAC-адрес недавно. Если нет, или если да и клиент использует тот же пароль, что и раньше, клиент может подключиться обычным образом. Однако если тот же MAC-адрес используется с другим паролем, клиент вынужден ждать заданное количество времени, прежде чем сможет успешно подключиться.
При использовании SAE-PK для защиты хотспотов единственный известный нам способ безопасно убедиться в том, что MAC-адрес повторно используется тем же пользователем, что и раньше, — это полагаться на кэшированные ассоциации безопасности (например, кэшированный PMK, связанный с MAC-адресом).
Приведённые выше меры защиты предполагают, что после определённой задержки для жертвы больше не будет поступать ожидающих пакетов. Чтобы предотвратить утечки за пределами этой задержки, клиенты могут использовать сквозное шифрование (например, TLS) с сервисами, с которыми они взаимодействуют.
При использовании аутентификации 802.1X на основе EAP существует альтернативный, более эффективный метод безопасного распознавания недавно подключавшихся пользователей — на основе EAP-идентификатора, который они использовали при аутентификации 802.1X. Точка доступа может безопасно узнать EAP-идентификатор у RADIUS-сервера, который аутентифицировал клиента, и хранить соответствие недавно подключённых MAC-адресов и соответствующих им EAP-идентификаторов. Когда клиент подключается, точка доступа проверяет, использовался ли его MAC-адрес недавно. Если нет, или если да и клиент использует тот же EAP-идентификатор, что и раньше, клиент может подключиться обычным образом. Однако если тот же MAC-адрес используется с другим EAP-идентификатором, клиент вынужден ждать заданное количество времени, прежде чем сможет успешно подключиться.
Одна из проблем заключается в том, что точка доступа может не всегда знать 802.1X-идентификатор клиента из-за соображений конфиденциальности. Например, эта информация может быть доступна только на домашнем AAA-сервере, а точка доступа получит от RADIUS-сервера только Chargeable User Identity. Этот идентификатор не позволяет точке доступа распознать две ассоциации одного и того же устройства/учётных данных, поскольку его значение может постоянно меняться. При этом точка доступа получает анонимный идентификатор в EAP-Response/Identity, например anonymous@realm, и может полагаться на него, чтобы распознавать по крайней мере пользователей из разных доменов (realms).
Чтобы предотвратить атаки пользователей одного домена (realm) друг на друга, не раскрывая точке доступа личность клиента, необходимы взаимодействие и изменения на стороне RADIUS-сервера. В частности, RADIUS-сервер можно доработать так, чтобы он помогал обнаруживать, не был ли MAC-адрес недавно использован другим пользователем в том же домене (в данной локальной сети). В таком случае RADIUS-сервер необходимо уведомлять об отключении клиента, чтобы он знал, когда MAC-адрес последний раз использовался одним из его пользователей, а также уведомлять о MAC-адресе любого клиента, который пытается подключиться.
И последнее замечание: хотя такой подход, основанный на EAP-идентификаторе, предотвратил бы атаки разных пользователей друг на друга, он не предотвратил бы атаку скомпрометированного устройства на другое устройство того же пользователя. То есть предотвращались бы только атаки между разными пользователями, но не между разными устройствами одного и того же пользователя.
Важно отметить, что наша атака не ограничивается перехватом пакетов, направленных клиентам Wi-Fi. Злоумышленник также может попытаться ассоциироваться с MAC-адресом шлюза по умолчанию или другого сервера в локальной сети. Чтобы предотвратить такие атаки, точка доступа или контроллер может запретить клиентам использовать MAC-адрес, совпадающий с MAC-адресом шлюза по умолчанию. В более общем случае при подключении клиента Wi-Fi к сети можно использовать обнаружение дублирующихся MAC-адресов, чтобы не позволять клиентам Wi-Fi использовать MAC-адрес, который также используется другими устройствами в сети.
Использование защиты управляющих кадров (MFP) усложнило бы атаку, но не сделало бы её невозможной. В предыдущей работе мы обнаружили несколько способов, которыми клиенты могут быть отключены/деаутентифицированы, даже когда используется MFP. Основываясь на этом опыте, можно утверждать, что всегда существует какой-либо метод принудительного отключения клиента от сети, даже когда используется MFP. Иными словами, полностью предотвратить атаки с отключением и деаутентификацией сложно. Тем не менее, MFP была бы дополнительным препятствием, которое нужно преодолеть при выполнении атаки на практике, поэтому она может быть полезной мерой защиты, усложняющей атаку (но не делающей её невозможной) на практике.
По результатам предварительных экспериментов атака не работает между разными VLAN. Иными словами, недобросовестный инсайдер, выполняющий атаку, должен находиться в том же VLAN, что и жертва. Поэтому одной из мер защиты является размещение разных групп пользователей в разных VLAN. Однако недобросовестный инсайдер по-прежнему сможет выполнить атаку (то есть обойти клиентскую изоляцию) против других пользователей в том же VLAN.
Обратите внимание, что при использовании multi-PSK (также известного как per-station PSK или identity PSK) можно помещать клиентов в разные VLAN в зависимости от используемого ими пароля. Иными словами, можно использовать отдельный VLAN для каждого пароля. Это предотвращает атаки клиентов с разными паролями друг на друга.
Инструмент MacStealer работает с любой сетевой картой, поддерживаемой Linux. Мы тестировали MacStealer на Ubuntu 22.04. Чтобы установить необходимые зависимости на Ubuntu 22.04, выполните:
sudo apt update
sudo apt install libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev \
libdbus-1-dev git pkg-config build-essential net-tools python3-venv \
aircrack-ng rfkill
Теперь клонируйте этот репозиторий, соберите инструменты и настройте виртуальное окружение python3:
git clone https://github.com/vanhoefm/macstealer.git macstealer
cd macstealer/research
./build.sh
./pysetup.sh
Приведённые выше инструкции нужно выполнить только один раз.
После получения нового кода с помощью git необходимо снова выполнить ./build.sh и ./pysetup.sh.
Подробный обзор обновлений MacStealer с момента начала скоординированного раскрытия уязвимости
см. в журнале изменений.
Каждый раз, когда вы хотите использовать MacStealer, сначала необходимо загрузить виртуальное окружение python3 от имени root. Это можно сделать с помощью:
cd research
sudo su
source venv/bin/activate
Теперь следует отключить Wi-Fi в вашем сетевом менеджере,
чтобы он не мешал работе MacStealer. При желании выполните sudo airmon-ng check, чтобы увидеть,
какие другие процессы могут использовать беспроводную сетевую карту и мешать работе MacStealer.
Следующий шаг — отредактировать client.conf, указав информацию о сети, которую вы хотите протестировать.
Это конфигурация для wpa_supplicant,
которая должна содержать два сетевых блока: один, представляющий жертву, и один, представляющий злоумышленника.
Пример файла конфигурации для тестирования вымышленной сети kuleuven:
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl
network={
# Don't change this field, the script relies on it
id_str="victim"
# Network to test: fill in properties of the network to test
ssid="kuleuven"
key_mgmt=WPA-EAP
eap=PEAP
phase2="auth=MSCHAPV2"
# Victim login: fill in login credentials representing the victim
identity="[email protected]"
password="SuperSecret"
}
network={
# Don't change this field, the script relies on it
id_str="attacker"
# Network to test: you can copy this from the previous block
ssid="kuleuven"
key_mgmt=WPA-EAP
eap=PEAP
phase2="auth=MSCHAPV2"
# Attacker login: fill in login credentials representing the attacker
identity="[email protected]"
password="SomePassword"
}
В части «network to test» (тестируемая сеть) вы должны указать имя тестируемой сети и её конфигурацию безопасности. Документацию по написанию/редактированию файлов конфигурации и примеры сетевых блоков для различных типов сетей Wi-Fi см. в wpa_supplicant.conf. В первом сетевом блоке в разделе «victim login» (учётные данные жертвы) вы должны указать действительные учётные данные, представляющие имитируемую жертву. Во втором сетевом блоке в разделе «network to test» вы можете указать точно такую же информацию, но при этом необходимо указать учётные данные, представляющие имитируемого злоумышленника.
В приведённом выше примере MacStealer протестирует атаку, в которой злоумышленником является [email protected],
и этот злоумышленник попытается перехватить трафик, направленный жертве [email protected].
По умолчанию скрипт использует файл конфигурации client.conf. Вы можете использовать другой файл конфигурации,
указав параметр --config network.conf, где network.conf можно заменить на тот файл конфигурации, который вы
хотите использовать.
Этот репозиторий также содержит следующие примеры файлов конфигурации:
multipsk.conf: Файл конфигурации для тестирования сети, использующей multi-PSK,
где один пароль используется доверенными устройствами, а второй пароль выдаётся гостям.
saepk.conf: Файл конфигурации для тестирования публичного хотспота, использующего SAE-PK.
Обратите внимание, что также можно отредактировать сетевой(ые) блок(и), чтобы протестировать конкретную точку доступа/BSS.
По умолчанию во всех тестах MacStealer отправляет TCP SYN-пакет на 8.8.8.8 (порт 443) — это DNS-сервер Google.
Если вы хотите использовать другой сервер или порт, его можно указать с помощью параметра --server. Например:
./macstealer.py wlan0 --server 208.67.222.222
Вы также можете указать порт, который должен использоваться в TCP SYN-пакетах:
./macstealer.py wlan0 --server 208.67.222.222:80
Замените wlan0 на имя вашего интерфейса Wi-Fi, а IP-адрес — на сервер, который вы хотите использовать.
Этот сервер должен повторно передавать ответы TCP SYN/ACK и, в идеале, отправлять повторный SYN/ACK
более чем через 10 секунд после того, как MacStealer передал исходный TCP SYN. Проверить такое поведение
повторной передачи можно с помощью параметра --ping следующим образом:
./macstealer.py wlan0 --server 208.67.222.222 --ping
Если сервер обладает требуемым поведением повторной передачи, MacStealer выведет следующее:
[22:53:15] Received SYN/ACK 15.265095233917236 seconds after sending SYN.
[22:53:20] >>> Ping test done, everything looks good so far. You can continue with other tests.
Если указанный сервер не отправляет ответы TCP SYN/ACK или не повторяет их достаточно поздно, MacStealer выведет следующее:[22:52:05] Received SYN/ACK 1.0727121829986572 seconds after sending SYN. [22:52:24] >>> Ping test done. Consider using a server that retransmits SYN/ACK for a longer time.
Причина, по которой сервер должен продолжать повторно передавать SYN/ACK более 10 секунд, заключается в том, что иногда повторное подключение в роли имитируемого атакующего может занимать несколько секунд. Этот процесс повторного подключения должен завершиться до того, как сервер отправит последний повторно переданный TCP-пакет SYN/ACK.
В следующей таблице приведены типовые команды, которые вы будете выполнять при тестировании сети, а также краткое описание того, что делает каждая команда. Ниже таблицы подробно объясняется каждая команда.
Если в тестируемой сети используется защита управляемых кадров (802.11w), инструмент предполагает, что противник всё равно может принудительно отключить жертву от сети. Это предположение основано на недавнем исследовании, которое показало, что атаки с разъединением обычно по-прежнему возможны, хотя и менее просты и универсальны, при использовании MFP.
Перед проверкой на уязвимости можно выполнить следующие две команды, чтобы убедиться, что MacStealer может подключаться к сети и в роли жертвы, и в роли атакующего:
./macstealer.py wlan0 --ping: подключается к сети, используя учётные данные жертвы.
После подключения на сервер отправляется TCP SYN (по умолчанию это 8.8.8.8, его можно изменить).
MacStealer проверяет, повторно ли передаётся SYN/ACK и сколько раз. Это можно использовать
для подтверждения правильности учётных данных жертвы и того, что настроенный сервер
корректно повторно передаёт ответы SYN/ACK.
./macstealer.py wlan0 --ping --flip: то же, что и предыдущий тест, но теперь скрипт подключается
с использованием учётных данных атакующего. Это можно использовать для подтверждения правильности
учётных данных атакующего.
./macstealer.py wlan0: проверка варианта атаки по умолчанию для кражи MAC-адреса. Атакующий
переподключится к той же точке доступа/BSS, что и жертва.
./macstealer.py wlan0 --other-bss: атакующий подключится к другой точке доступа/BSS той же сети.
Сеть, уязвимая (также) к этому тесту, легче эксплуатировать на практике. Если в зоне действия радио
находится только одна точка доступа/BSS, скрипт завершится по тайм-ауту при подключении в роли атакующего.
Эксплуатация уязвимости кражи MAC-адреса имеет смысл только при включённой изоляции клиентов или когда для предотвращения атак клиентов друг на друга применяются такие методы, как ARP-инспекция. В противном случае злоумышленник может использовать более простые атаки, например отравление ARP, для перехвата трафика. Чтобы проверить, включена ли изоляция клиентов или используется ли в сети ARP-инспекция, можно выполнить следующие команды:
./macstealer.py wlan0 --c2c wlan1: с этими аргументами MacStealer проверяет, разрешает ли сеть
трафик отравления ARP между клиентами от атакующего (wlan1) к жертве (wlan0).
Здесь wlan1 — второй беспроводной сетевой интерфейс. Затем скрипт проверит, можно ли отправлять
вредоносные ARP-пакеты от атакующего к жертве.
./macstealer.py wlan0 --c2c-eth wlan1: этот тест аналогичен предыдущему, но вместо отправки
вредоносных ARP-пакетов атакующий отправляет жертве DNS-пакеты.
Уязвимость кражи MAC-адреса следует считать реальным риском, если трафик между клиентами блокируется в любом из двух вышеуказанных тестов (то есть когда включена изоляция клиентов или когда применяются другие методы, такие как ARP-инспекция, чтобы не позволить пользователям атаковать друг друга).
По умолчанию MacStealer попытается подключиться к одной и той же точке доступа/BSS через оба интерфейса,
поэтому важно, чтобы обе сетевые карты видели одни и те же сети (то есть убедитесь, что оба сетевых
интерфейса поддерживают одни и те же диапазоны частот и каналы). Если вы хотите, чтобы оба клиента
подключались к разным точкам доступа/BSS, используйте параметр --other-bss.
С помощью параметра --flip-id можно проверить, разрешён ли трафик от жертвы (wlan0) к атакующему (wlan1).
Если MacStealer, похоже, не работает, проверьте следующее:
Убедитесь, что сетевой картой не пользуется другой процесс (например, завершите свой сетевой менеджер).
Если сетевой картой пользуется ещё один процесс, вы можете увидеть вывод kernel reports: match already configured.
Если раньше всё работало, попробуйте отключить Wi-Fi-адаптер, перезагрузить компьютер или виртуальную машину и повторить попытку.
Убедитесь, что вы подключаетесь к правильной сети. Перепроверьте client.conf.
Если вы обновили код через git, снова выполните ./build.sh и ./pysetup.sh (см. Предварительные требования).
Если вы используете виртуальную машину, попробуйте запустить MacStealer из нативной установки Linux.
Запустите MacStealer с дополнительным параметром -dd, чтобы получить дополнительную отладочную информацию от wpa_supplicant
и самого MacStealer.
Стандартные тесты изоляции клиентов проверяют, разрешён ли между клиентами трафик на уровне Ethernet. Также можно проверить, разрешён ли между клиентами трафик на IP-уровне, с помощью следующей команды:
./macstealer.py wlan0 --c2c-ip wlan1 [--flip-id]
Если трафик на IP-уровне между клиентами разрешён, клиенты всё ещё могут атаковать друг друга. Например, атаки с ICMP-редиректом могут оставаться возможными. Такие атаки более сложны, чем ARP-спуфинг, но в идеале их также следует предотвращать, блокируя IP-трафик между клиентами.
Следующие тесты позволяют проверить общие свойства сети. Они не связаны напрямую с уязвимостями, но могут помочь лучше понять поведение сети.
./macstealer.py wlan0 --same-id [--other-bss] [--flip]: проверяет, остаются ли TCP-соединения активными после
отключения и повторного подключения к точке доступа. Если соединения не остаются активными после переподключения,
сеть, скорее всего, не уязвима к атакам кражи MAC-адреса. Однако существенный недостаток такого поведения
заключается в том, что легитимным клиентам приходится устанавливать новые TCP-соединения при каждом
переподключении к этой сети, из-за чего сеть может казаться медленной и ненадёжной (поэтому лучше использовать
более совершенную защиту).
С помощью параметра --other-bss можно переподключиться к другой точке доступа/BSS той же сети.
Аргумент --flip позволяет выполнить этот тест от имени атакующего, а не жертвы.
./macstealer.py wlan0 --flip: проверяет обычную атаку кражи MAC-адреса, но меняет местами
роли атакующего и жертвы. Другими словами, атакующий использует «учётные данные жертвы»,
указанные в файле конфигурации, а жертва — «учётные данные атакующего».
./macstealer.py wlan0 --c2c wlan1 --same-id [--flid-id]: проверяет, разрешён ли трафик между клиентами
двух устройств одного пользователя. Документацию по параметру wlan1 см. в тестах изоляции клиентов.
Аргумент --flip позволяет выполнить этот тест от имени атакующего, а не жертвы.
--delay seconds: С помощью параметра --delay можно задать задержку в секундах перед повторным подключением в роли
атакующего.
-d or -dd: Добавление одного из этих параметров повышает уровень отладочного вывода скрипта
и используемого экземпляра wpa_supplicant.
По умолчанию MacStealer автоматически выбирает точку доступа/BSS сети для подключения и тестирования.
Если в вашей сети несколько точек доступа/BSS, вы можете проверить конкретную, указав её
в блоке network жертвы с помощью ключевого слова bssid. Например, можно использовать:
...
network={
# Don't change this field, the script relies on it
id_str="victim"
# Network to test: fill in properties of the network to test
ssid="kuleuven"
key_mgmt=WPA-EAP
eap=PEAP
phase2="auth=MSCHAPV2"
# Victim login: fill in login credentials representing the victim
identity="[email protected]"
password="SuperSecret"
# This a specific AP/BSS
bssid=00:11:22:33:44:55
}
...
С помощью приведённой выше конфигурации MacStealer проверит 00:11:22:33:44:55. Это означает, что он будет
подключаться к этой точке доступа и в роли жертвы, и в роли атакующего.
Это также можно сочетать с параметром --other-bss. В этом случае жертва подключится к 00:11:22:33:44:55,
а атакующий — к другой точке доступа/BSS той же сети.
Другой вариант — указать явный BSS/AP в блоке network и жертвы, и атакующего.
Обратите внимание: MacStealer будет искать указанную точку доступа/BSS не более 30 секунд. Если он не сможет найти указанную точку доступа/BSS, инструмент завершит работу.
Вы можете протестировать сеть SAE-PK, используя следующий файл конфигурации. Обратите внимание, что для сетей SAE-PK нет разницы в том, как аутентифицируются жертва и атакующий, то есть оба используют один и тот же пароль.
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl
# WPA3/SAE: support both hunting-and-pecking loop and hash-to-element
sae_pwe=2
network={
# Don't change this field, the script relies on it
id_str="attacker"
# Network to test - attacker login
ssid="test-saepk"
psk="7iip-ytnz-qa25"
key_mgmt=SAE
ieee80211w=2
}
network={
# Don't change this field, the script relies on it
id_str="victim"
# Network to test - victim login
ssid="test-saepk"
psk="7iip-ytnz-qa25"
key_mgmt=SAE
ieee80211w=2
}
На практике изоляция клиентов также используется в сетях, защищённых общим паролем. Например, в некоторых маршрутизаторах есть опция создания сети для гостей или небезопасных (IoT) устройств, в которой клиенты изолированы друг от друга, чтобы они не могли атаковать друг друга. Однако преимущество изоляции клиентов с точки зрения безопасности в таком сценарии можно поставить под сомнение. Изоляция клиентов предназначена для того, чтобы не дать вредоносному инсайдеру атаковать других. Но если вредоносный инсайдер знает общий пароль, он может просто создать поддельную копию сети (evil twin), обманом заставить жертв подключиться к этой вредоносной копии, а затем атаковать других клиентов! Другими словами, использование изоляции клиентов в сети, защищённой паролем, не обеспечивает надёжной защиты: вредоносный клиент может создать мошенническую точку доступа и по-прежнему атаковать других клиентов.
Тем не менее можно утверждать, что создание мошеннической точки доступа может быть обнаружено администратором сети, а значит, изоляция клиентов действительно усложняет атаки. Кроме того, если лёгкое устройство скомпрометировано (удалённо), у него может не хватить ресурсов, чтобы (легко) действовать как мошенническая точка доступа. Это усложняет, но не делает невозможными атаки при включённой изоляции клиентов. В целом, хотя изоляция клиентов и не даёт сильных гарантий безопасности в сети, защищённой паролем, можно утверждать, что она повышает практическую сложность выполнения атак.
Наша атака MacStealing выполняется проще, чем создание мошеннической точки доступа. Вредоносному инсайдеру, например лёгкому скомпрометированному IoT-устройству, достаточно подделать MAC-адрес и (пере)подключиться к сети. Такую атаку также сложнее обнаружить. Исходя из этого, наша новая атака ухудшает ситуацию, и поэтому можно утверждать, что её следует учитывать и в сетях, защищённых общим паролем.
Вывод: используя изоляцию клиентов в сети, защищённой паролем, вы исходите из предположения, что вредоносный инсайдер не создаст мошенническую точку доступа. В противном случае использование изоляции клиентов бессмысленно с точки зрения безопасности. Атака MacStealing может быть выполнена без создания мошеннической точки доступа и поэтому делает атаки проще.
Цель нашей атаки — не обход списков запрета/разрешения MAC-адресов на точках доступа. Подделка MAC-адресов для обхода фильтрации по MAC-адресам — это другая и известная атака.
Цель нашей атаки — не перехват чужого платного подключения в Wi-Fi-хотспотах. Например, в некоторых открытых (или защищённых) хотспотах пользователь должен заплатить, прежде чем ему будет разрешён доступ в интернет. Часто платящего абонента распознают по его MAC-адресу, и злоумышленник может подделать MAC-адрес жертвы, чтобы получить доступ в интернет. Это не является целью нашей атаки; цель MacStealer — обход изоляции клиентов.
Наша атака также затрагивает сети, в которых применяется защита от уязвимости Hole 196. Например, сети Passpoint (ранее Hotspot 2.0) обязаны предотвращать уязвимость Hole 196, но по-прежнему уязвимы к нашей атаке.
Наша атака работает в сетях, где применяется защита от ARP-спуфинга. В плохо защищённых сетях Wi-Fi злоумышленник может тривиально выполнить ARP-спуфинг для перехвата трафика жертвы, и наша атака не очень практична. Однако современные сети, в которых могут быть вредоносные инсайдеры, полагаются на изоляцию клиентов или другие методы предотвращения атак типа «человек посередине». Наша атака обходит все эти современные защиты и по-прежнему позволяет злоумышленнику перехватывать трафик, направленный жертве.
Таким образом, наша атака затрагивает сети Wi-Fi, в которых клиентам запрещено атаковать друг друга, что позволяет злоумышленнику перехватывать трафик другого клиента.
Большинство поставщиков используют CVE-2022-47522 для обозначения уязвимости обхода изоляции клиентов Wi-Fi, обсуждаемой в этом git-репозитории. Эта уязвимость соответствует атаке из раздела 5 нашей статьи.
К сожалению, другие поставщики также используют этот CVE для обозначения (строго говоря, не связанной) уязвимости, обсуждаемой в разделе 3 нашей статьи. Фактически фактическое описание CVE, которое можно найти в MITRE, по нашему мнению, описывает только атаку из раздела 3 нашей статьи. На практике похоже, что CVE-2022-47522 используется для обозначения всех атак из нашей статьи, хотя технически они различаются.
Версия 1.2 (в разработке)
Улучшен README: уточнено использование идентификатора CVE.
Улучшен README: вступление сфокусировано на обходе изоляции клиентов, обновлено описание защитных мер с учётом замечаний по 802.1X и предотвращения кражи MAC-адреса шлюза по умолчанию.
Добавлен параметр --delay для задания задержки в секундах перед повторным подключением в роли атакующего.
Версия 1.1 (18 января 2023)
По умолчанию в качестве сервера используется 8.8.8.8 вместо 216.58.208.100 (оба являются серверами Google).
Обновлены тесты изоляции клиентов: по умолчанию тест выполняется с помощью ARP-отравления на уровне Ethernet. Также предоставлена возможность отправки UDP-данных с пересылкой на уровне Ethernet и тест с пересылкой на IP-уровне.
Улучшен README: обновлены типы сетей, которые могут быть затронуты. Добавлено обсуждение того, затрагиваются ли защищённые паролем сети WPA2 или WPA3. Пояснение различных команд для проверки трафика Ethernet или IP между клиентами.
Улучшен README: обсуждение MFP, обсуждение VLAN как меры смягчения, уточнение, на каких точках доступа должен выполняться контроль подлинности, указание порта сервера.
Улучшен вывод MacStealer.
Версия 1.0 (3 января 2023):
| Command | Short description |
|---|
./macstealer.py wlan0 --ping | Подключение в роли жертвы и проверка поведения сервера при повторной передаче. |
./macstealer.py wlan0 --ping --flip | Подключение в роли атакующего и проверка поведения сервера при повторной передаче. |
./macstealer.py wlan0 | Проверка варианта атаки по умолчанию для кражи MAC-адреса. |
./macstealer.py wlan0 --other-bss | Позволяет атакующему подключиться к другой точке доступа, не той, что использует жертва. |
./macstealer.py wlan0 --c2c wlan1 | Проверка трафика Ethernet между клиентами (отравление ARP). |
./macstealer.py wlan0 --c2c-eth wlan1 | Проверка трафика Ethernet между клиентами (DNS). |