
1. Введение: зачем искать скрытые сети и поддельные точки доступа
В офисном здании с пятьюдесятью сотрудниками обычно есть две-три авторизованных корпоративных точки доступа. Но если внимательно посмотреть на радиоэфир — там обнаружится гораздо больше: личные точки доступа сотрудников, оставленные незакрытыми, тестовые устройства ИТ-отдела, а иногда — что-то более неожиданное.
Скрытые SSID (hidden networks) — точки доступа, которые не транслируют своё имя в beacon-пакетах. Иногда это легитимная практика сисадмина, желающего скрыть административную сеть от случайных глаз. Иногда — признак несанкционированного устройства, намеренно скрывающегося от мониторинга.
Evil Twin (поддельная точка доступа) — фальшивая точка доступа, копирующая SSID, BSSID или другие параметры легитимной сети. В публичных пространствах это инструмент перехвата трафика ничего не подозревающих пользователей.
Обнаружение обоих типов угроз — задача беспроводного аудита, которая входит в стандартные методологии оценки безопасности сети (NIST SP 800-153, IEEE 802.11i).
| Задача аудита | Применяемый инструмент | Тип анализа |
|---|---|---|
| Обнаружить все точки доступа в эфире | Airodump-ng, Kismet | Пассивный |
| Выявить скрытые SSID через probe-запросы | Airodump-ng, Wireshark | Пассивный |
| Детектировать Evil Twin / Rogue AP | Kismet, Wireshark, скрипты | Пассивный |
| Анализ управляющих фреймов | Wireshark, tshark | Пассивный |
| Долгосрочный мониторинг инфраструктуры | Kismet IDS | Пассивный |
> *💡 Статья написана для специалистов по информационной безопасности, системных администраторов и студентов профильных программ. Все описанные методы применяются исключительно к сетям, находящимся под вашим управлением, или при наличии явного письменного разрешения владельца.*
Оглавление
1. Введение: зачем искать скрытые сети и поддельные точки доступа
2. Правовые основы и область применения: когда аудит законен
3. Как работает скрытый SSID: технический механизм и почему это не защита
4. Как работает Evil Twin: анатомия поддельной точки доступа
5. Подготовка: адаптер, монитор-режим, необходимое железо
6. Инструмент 1 — Airodump-ng: пассивный захват и обнаружение скрытых сетей
7. Инструмент 2 — Kismet: долгосрочный пассивный мониторинг и IDS
8. Инструмент 3 — Wireshark: глубокий анализ управляющих фреймов
9. Обнаружение скрытого SSID: пассивный метод через probe-запросы клиентов
10. Обнаружение Evil Twin и Rogue AP: признаки и методы выявления
11. Python + Scapy: скрипт мониторинга аномалий беспроводной сети
12. Анализ результатов и документирование: что делать с находками
13. Практический кейс: аудит корпоративной Wi-Fi-инфраструктуры
14. FAQ: 12 горячих вопросов об аудите беспроводных сетей
15. Чек-лист: полный аудит Wi-Fi за один сеанс
16. Заключение
2. Правовые основы и область применения: когда аудит законен
Правовая граница
Мониторинг радиоэфира в России регулируется несколькими нормативными актами. Ключевые: ст. 63 Федерального закона «О связи» (тайна связи) и ст. 272 УК РФ (неправомерный доступ к охраняемой компьютерной информации).
text
ЗАКОННО:
✓ Аудит собственной Wi-Fi-инфраструктуры
✓ Аудит клиентской инфраструктуры при наличии письменного договора
✓ Пассивный мониторинг в рамках CTF/лаборатории
✓ Обнаружение несанкционированных устройств в своей сети
✓ Академическое исследование в изолированной тестовой среде
НЕЗАКОННО:
✗ Перехват трафика чужих пользователей без их ведома
✗ Деаутентификация клиентов чужой сети
✗ Создание Evil Twin для перехвата учётных данных
✗ Любые активные атаки на инфраструктуру без разрешения
Минимальный пакет документов для корпоративного аудита
text
Для внутреннего аудита:
✓ Приказ о проведении аудита / распоряжение CISO
✓ Согласование с владельцем инфраструктуры
Для внешнего аудита:
✓ Договор с явным scope (диапазоны частот, локации, временны́е рамки)
✓ Письмо об авторизации
✓ NDA
✓ Координация с провайдером (если применимо)
Только выполняйте беспроводной сниффинг и обнаружение скрытых SSID в сетях, где у вас есть явное разрешение. Несанкционированная слежка может быть незаконной и неэтичной. Хорошо задокументированный scope engagement защищает и тестировщика, и организацию.
Важная оговорка о деаутентификации
В этой статье рассматривается только пассивный аудит — пассивное прослушивание и анализ. Деаутентификация клиентов чужой сети (aireplay-ng -0) для принудительного раскрытия скрытого SSID — активная атака, применимая только к собственной сети для её же тестирования. В данном руководстве акцент сделан на пассивных методах, работающих без вмешательства в трафик.
3. Как работает скрытый SSID: технический механизм и почему это не защита
Что происходит с обычной точкой доступа
Обычная (не скрытая) точка доступа регулярно (каждые 100 мс) транслирует beacon-фреймы — управляющие пакеты, содержащие: SSID (имя сети), BSSID (MAC-адрес точки), поддерживаемые скорости, тип шифрования, канал, временну́ю метку.
Что происходит со скрытой точкой доступа
При включении опции «скрыть SSID» точка доступа продолжает транслировать beacon-фреймы, но поле SSID в них — пустое (нулевая длина) или заполнено нулями.
text
Обычный beacon:
BSSID: AA:BB:CC:DD:EE:FF
SSID: "CorpNetwork" ← видно всем
Канал: 6
Скрытый beacon:
BSSID: AA:BB:CC:DD:EE:FF
SSID: "" (пусто) ← SSID не транслируется
Канал: 6
Почему скрытый SSID — иллюзия безопасности
Скрытие SSID не всегда лучший вариант для предотвращения атак, потому что даже при скрытом состоянии атакующий может захватывать зашифрованные фреймы в режиме монитора и узнать SSID.
Причина: когда клиент подключается к скрытой сети, он отправляет probe request с явным указанием SSID — «я ищу сеть X». Точка доступа отвечает probe response, также содержащим SSID. Оба фрейма передаются открыто в эфире.
text
Обмен при подключении клиента к скрытой сети:
Клиент → [Broadcast] Probe Request: SSID="CorpNetwork"
AP → [Клиент] Probe Response: SSID="CorpNetwork"
Клиент → [AP] Authentication Request
AP → [Клиент] Authentication Response
Клиент → [AP] Association Request: SSID="CorpNetwork"
AP → [Клиент] Association Response
На любом из этих шагов SSID виден в эфире.
Таким образом, скрытый SSID «раскрывается» при первом же подключении любого клиента — что в реальной сети происходит постоянно.
Что остаётся после «раскрытия»
В Airodump-ng скрытая точка отображается как:
bssid
PWR Beacons #Data CH MB ENC CIPHER AUTH ESSID
AA:BB:CC:DD:EE:FF -67 124 8 6 54 WPA2 CCMP PSK <length: 11>
`` означает: SSID скрыт, но его длина — 11 символов. Это само по себе информативно.
4. Как работает Evil Twin: анатомия поддельной точки доступа
Что такое Evil Twin
Evil Twin — атака, при которой хакер создаёт фальшивую Wi-Fi-точку доступа, имитирующую легитимный SSID. Её часто проводят в публичных или офисных сетях. Ничего не подозревающие пользователи видят поддельную точку доступа (часто с более сильным сигналом) и подключаются к ней. После этого весь их сетевой трафик маршрутизируется через машину атакующего.
Технические характеристики Evil Twin
text
Характеристики поддельной точки доступа:
✓ Тот же SSID, что и у легитимной AP
✓ Тот же (или похожий) BSSID (MAC)
✓ Часто — тот же канал
✓ Обычно — более высокий сигнал (более мощный передатчик)
✓ Может использовать тот же тип шифрования (или Open)
Признаки в эфире:
→ Два BSSID с одинаковым SSID (нормально для mesh-сетей,
аномально для обычной инфраструктуры)
→ Новый BSSID с известным SSID появляется внезапно
→ BSSID отличается от ожидаемого (другой производитель по OUI)
→ Аномально высокий сигнал относительно расстояния
Почему Rogue AP (несанкционированная точка) ≠ Evil Twin
Rogue AP — несанкционированная точка доступа, добавленная в сеть без ведома ИТ-службы. Это может быть: личная точка доступа сотрудника, подключённая к корпоративной сети; IoT-устройство с Wi-Fi; забытый роутер.
Evil Twin — специально созданная копия существующей сети с вредоносной целью.
При аудите оба типа представляют угрозу и требуют обнаружения.
5. Подготовка: адаптер, монитор-режим, необходимое железо
Требования к беспроводному адаптеру
Стандартный встроенный адаптер ноутбука не подходит для беспроводного аудита. Необходим адаптер с поддержкой:
text
Обязательно:
✓ Monitor mode (режим монитора)
✓ Packet injection (инъекция пакетов — для активных тестов)
Рекомендуемые чипсеты (2026):
Atheros AR9271 — Alfa AWUS036NHA, TP-Link TL-WN722N v1
Ralink RT3070 — Alfa AWUS036H
Realtek RTL8812AU — Alfa AWUS036ACH (802.11ac, двухдиапазонный)
MediaTek MT7612U — широкая поддержка в Kali Linux
Рекомендуемые модели:
Alfa AWUS036ACH — наиболее универсальный для аудита
Alfa AWUS036ACS — компактный, AC600
Hak5 WiFi Pineapple — специализированный аудит-девайс
Перевод адаптера в режим монитора
bash
<h2 id="proverit-dostupnye-besprovodnye-interfeysy">Проверить доступные беспроводные интерфейсы:</h2>
iwconfig
<h2 id="ili">или:</h2>
iw dev
<h2 id="variant-1-cherez-airmon-ng-rekomenduetsya-ubivaet-konfliktuyuschie-protsessy">Вариант 1: через airmon-ng (рекомендуется — убивает конфликтующие процессы):</h2>
sudo airmon-ng check kill # завершить процессы, мешающие мониторингу
sudo airmon-ng start wlan0 # запустить монитор-режим
<h2 id="interfeys-pereimenuetsya-v-wlan0mon">Интерфейс переименуется в wlan0mon</h2>
<h2 id="variant-2-cherez-iw-vruchnuyu">Вариант 2: через iw (вручную):</h2>
sudo ip link set wlan0 down
sudo iw wlan0 set monitor none
sudo ip link set wlan0 up
<h2 id="proverit-chto-monitor-rezhim-aktiven">Проверить, что монитор-режим активен:</h2>
iwconfig wlan0mon
<h2 id="dolzhno-otobrazitsya-mode-monitor">Должно отобразиться: Mode:Monitor</h2>
<h2 id="zafiksirovat-kanal-primer-kanal-6">Зафиксировать канал (пример, канал 6):</h2>
sudo iwconfig wlan0mon channel 6
<h2 id="ili-cherez-iw">или через iw:</h2>
sudo iw wlan0mon set channel 6
Переключение между каналами (channel hopping)
По умолчанию Airodump-ng автоматически переключается по каналам. Для фиксированного канала:
bash
<h2 id="prosmatrivat-tolko-2-4-ggts-kanaly-1-13">Просматривать только 2.4 ГГц (каналы 1–13):</h2>
sudo airodump-ng --band bg wlan0mon
<h2 id="prosmatrivat-tolko-5-ggts">Просматривать только 5 ГГц:</h2>
sudo airodump-ng --band a wlan0mon
<h2 id="zafiksirovat-kanal">Зафиксировать канал:</h2>
sudo airodump-ng -c 6 wlan0mon
<h2 id="skanirovat-neskolko-kanalov">Сканировать несколько каналов:</h2>
sudo airodump-ng -c 1,6,11 wlan0mon
6. Инструмент 1 — Airodump-ng: пассивный захват и обнаружение скрытых сетей
Aircrack-ng suite — набор инструментов для оценки безопасности Wi-Fi-сетей. Включает airodump-ng для захвата пакетов. Kismet — открытый детектор беспроводных сетей, сниффер и система обнаружения вторжений. Эти инструменты, при ответственном и этичном использовании, дают ценные данные о безопасности сети и помогают выявить потенциальные уязвимости.
Базовый запуск Airodump-ng
bash
<h2 id="ustanovka-kali-linux-parrot-os-predustanovleno">Установка (Kali Linux / Parrot OS — предустановлено):</h2>
sudo apt install aircrack-ng
<h2 id="bazovoe-skanirovanie-vseh-kanalov">Базовое сканирование всех каналов:</h2>
sudo airodump-ng wlan0mon
<h2 id="s-sohraneniem-v-fayl-dlya-posleduyuschego-analiza">С сохранением в файл (для последующего анализа):</h2>
sudo airodump-ng -w /tmp/capture/wifi_audit wlan0mon
<h2 id="sozdayot-wifi-audit-cap-wifi-audit-csv-wifi-audit-kismet-csv">Создаёт: wifi_audit.cap, wifi_audit.csv, wifi_audit.kismet.csv</h2>Структура вывода Airodump-ng
bssid
PWR Beacons #Data #/s CH MB ENC CIPHER AUTH ESSID
────────────────────────────────────────────────────────────────────────────────────────
AA:BB:CC:DD:EE:FF -45 342 21 2 6 54e WPA2 CCMP PSK CorpNet_Main
BB:CC:DD:EE:FF:00 -67 124 8 0 6 54 WPA2 CCMP PSK <length: 11> ← скрытый
CC:DD:EE:FF:00:11 -78 89 0 0 11 130 OPN FreeWifi
DD:EE:FF:00:11:22 -71 201 15 3 6 54e WPA2 CCMP PSK CorpNet_Main ← подозрительно!
BSSID STATION PWR Rate Lost Frames Notes Probes
────────────────────────────────────────────────────────────────────────────────────────
AA:BB:CC:DD:EE:FF 11:22:33:44:55:66 -56 54 -54 0 122
BB:CC:DD:EE:FF:00 22:33:44:55:66:77 -61 54 -54 0 43 hidden_ssid_name ← клиент раскрыл!
Что читать в выводе:
pwr
— мощность сигнала (чем ближе к 0, тем сильнее)
Beacons — количество beacon-фреймов
#Data — количество пакетов данных
ENC — тип шифрования (OPN = открытая, WPA2, WPA3)
ESSID — имя сети (пустое или <length: N> = скрытый SSID)
Probes — SSID, который ищет клиент (раскрывает скрытые сети!)
Целевой захват для анализа конкретной AP
bash
<h2 id="sfokusirovatsya-na-konkretnoy-tochke-po-bssid-i-kanalu">Сфокусироваться на конкретной точке (по BSSID и каналу):</h2>
sudo airodump-ng -c 6 --bssid AA:BB:CC:DD:EE:FF \
-w /tmp/capture/target_ap wlan0mon
<h2 id="optsii-vyvoda">Опции вывода:</h2>
sudo airodump-ng --manufacturer \ # показывать производителя по OUI
--uptime \ # аптайм AP из beacon timestamp
--wps \ # WPS-информация
wlan0mon
Обнаружение скрытого SSID через пассивное ожидание
Есть два варианта при мониторинге сети. Можно подождать, пока устройство подключится — это немедленно заполнит SSID вашей сети. При запуске сканирования с фиксацией на конкретной AP через BSSID: как только клиент подключится, SSID появится в столбце ESSID.
bash
<h2 id="fiksatsiya-na-skrytoy-ap-zhdyom-podklyucheniya-klienta">Фиксация на скрытой AP — ждём подключения клиента:</h2>
sudo airodump-ng -c 6 --bssid BB:CC:DD:EE:FF:00 wlan0mon
<h2 id="kogda-klient-podklyuchitsya-ssid-avtomaticheski-otobrazitsya">Когда клиент подключится — SSID автоматически отобразится</h2>
<h2 id="v-pole-essid-i-v-stroke-probes-nizhney-chasti-ekrana">в поле ESSID и в строке PROBES нижней части экрана</h2>Тест собственной скрытой сети: деаутентификация клиента
Этот метод применяется только к собственной сети — для проверки, насколько быстро скрытый SSID раскрывается при переподключении клиента.
bash
<h2 id="na-vashey-sobstvennoy-skrytoy-ap">На ВАШЕЙ собственной скрытой AP:</h2>
<h2 id="1-zafiksirovat-bssid-tochki-i-mac-adres-odnogo-iz-vashih-ustroystv">1. Зафиксировать BSSID точки и MAC-адрес одного из ваших устройств</h2>
<h2 id="2-otpravit-deautentifikatsionnyy-paket-vashemu-ustroystvu">2. Отправить деаутентификационный пакет (вашему устройству):</h2>
sudo aireplay-ng -0 5 \
-a BB:CC:DD:EE:FF:00 \ # BSSID вашей AP
-c 22:33:44:55:66:77 \ # MAC вашего тестового устройства
wlan0mon
<h2 id="3-pri-perepodklyuchenii-ustroystva-ssid-poyavitsya-v-airodump-ng">3. При переподключении устройства SSID появится в airodump-ng</h2>
<h2 id="tsel-testa-ubeditsya-chto-skrytyy-ssid-raskryvaetsya-pri-perepodklyuchenii">Цель теста: убедиться, что скрытый SSID раскрывается при переподключении</h2>7. Инструмент 2 — Kismet: долгосрочный пассивный мониторинг и IDS
Kismet WiFi Tool — мощный открытый детектор беспроводных сетей, сниффер и система обнаружения вторжений (IDS). Разработан для специалистов по безопасности. Kismet пассивно отслеживает беспроводной трафик, обнаруживает скрытые сети и логирует пакеты для детального анализа. В отличие от активных сканеров, Kismet работает, прослушивая все беспроводные пакеты в воздухе, что делает его скрытным и идеальным для тестирования.
Ключевые преимущества Kismet перед Airodump-ng
Kismet предлагает автоматическое обнаружение скрытых SSID через корреляцию поведения probe- и response-пакетов во времени. Он работает как демон и логирует результаты для последующего просмотра. Особенно полезен в средах с высоким трафиком, где предпочтителен пассивный анализ. Kismet отслеживает пары SSID-BSSID во времени. Если инструмент замечает BSSID, изначально транслирующий пустой SSID, но затем видит связанный с ним probe или ассоциацию, он логирует SSID соответственно.
kismet
vs. Airodump-ng:
Kismet:
✓ Пассивный, нет активных пакетов
✓ Долгосрочный мониторинг с базой данных
✓ Встроенные IDS-алерты (Evil Twin, Rogue AP, deauth flood)
✓ Корреляция BSSID-SSID из probe-запросов автоматически
✓ Веб-интерфейс, REST API
✓ GPS-интеграция (wardriving)
✓ Сохраняет в PCAP для последующего Wireshark-анализа
Airodump-ng:
✓ Быстрый, лёгкий
✓ Целевой захват на конкретный BSSID
✓ Прямая совместимость с aircrack-ng утилитами
✗ Нет встроенного IDS
✗ Нет долгосрочного хранения с базой данных
Установка и запуск Kismet
bash
<h2 id="ustanovka-na-kali-linux-debian-ubuntu">Установка на Kali Linux / Debian / Ubuntu:</h2>
sudo apt install kismet
<h2 id="ili-iz-ofitsialnogo-repozitoriya-bolee-novaya-versiya">Или из официального репозитория (более новая версия):</h2>
wget -O - https://www.kismetwireless.net/repos/kismet-release.gpg.key | \
sudo apt-key add -
echo 'deb https://www.kismetwireless.net/repos/apt/release/kali kali main' | \
sudo tee /etc/apt/sources.list.d/kismet.list
sudo apt update && sudo apt install kismet
<h2 id="zapusk-s-interfeysom-v-monitor-rezhime">Запуск с интерфейсом в монитор-режиме:</h2>
sudo kismet -c wlan0mon
<h2 id="s-sohraneniem-logov-v-konkretnuyu-direktoriyu">С сохранением логов в конкретную директорию:</h2>
sudo kismet -c wlan0mon --log-prefix /tmp/kismet_audit/
<h2 id="zapusk-demonom-background">Запуск демоном (background):</h2>
sudo kismet -c wlan0mon --daemonize
<h2 id="veb-interfeys-dostupen-po-adresu">Веб-интерфейс доступен по адресу:</h2>
<h2 id="http-localhost-2501-po-umolchaniyu">http://localhost:2501 (по умолчанию)</h2>Конфигурация kismet.conf для аудита
bash
<h2 id="etc-kismet-kismet-conf-osnovnye-nastroyki">/etc/kismet/kismet.conf — основные настройки:</h2>
<h2 id="istochnik-zahvata">Источник захвата:</h2>
source=wlan0mon
<h2 id="logirovanie">Логирование:</h2>
log_prefix=/var/log/kismet/audit
log_types=kismet,pcapng,json
<h2 id="opovescheniya-alerting">Оповещения (alerting):</h2>
alertemail=security@company.local
alert=APSPOOF,5/min,10/min # Обнаружение поддельных AP
alert=DISASSOCFLOOD,10/sec # Flood деаутентификации
alert=BCASTDISCON,5/min # Broadcast deauth
<h2 id="gps-esli-est-priyomnik">GPS (если есть приёмник):</h2>
gps=gpsd:host=localhost,port=2947
Работа с веб-интерфейсом Kismet
text
Основные разделы веб-интерфейса:
Dashboard → Общий обзор: точки доступа, клиенты, алерты
Networks → Список всех обнаруженных сетей с деталями
Clients → Устройства и их связи с AP
Alerts → Оповещения IDS (⚠️ Evil Twin, Deauth Flood и т.д.)
SSID → Все SSID, включая обнаруженные из probe-запросов
Полезные фильтры в Networks:
☑ Show hidden/cloaked networks → скрытые сети
☑ Filter by SSID → поиск по имени
☑ Show WPS enabled → сети с WPS (уязвимость)
☑ Sort by signal → по силе сигнала
IDS-алерты Kismet для обнаружения атак
Kismet автоматически обнаруживает несколько категорий угроз:
text
Алерт APSPOOF:
Условие: BSSID с известным SSID, но с другим MAC-адресом
Значение: возможный Evil Twin / поддельная AP
Алерт DISASSOCFLOOD / DEAUTHFLOOD:
Условие: поток deauth/disassoc фреймов
Значение: активная атака деаутентификации на клиентов
Алерт BCASTDISCON:
Условие: broadcast deauthentication
Значение: атака направлена на всех клиентов сети
Алерт SSIDMATCH:
Условие: два разных BSSID с одинаковым SSID в одном месте
Значение: возможный Evil Twin или корпоративная mesh-сеть
8. Инструмент 3 — Wireshark: глубокий анализ управляющих фреймов
Wireshark позволяет анализировать захваченные пакеты на уровне отдельных фреймов — незаменим для детального исследования того, что происходит в эфире.
Захват Wi-Fi-трафика через Wireshark
bash
<h2 id="zahvat-napryamuyu-cherez-wireshark-gui">Захват напрямую через Wireshark (GUI):</h2>
<h2 id="zapustit-wireshark-vybrat-interfeys-wlan0mon-start-capture">Запустить Wireshark → выбрать интерфейс wlan0mon → Start Capture</h2>
<h2 id="zahvat-cherez-tshark-cli-versiya-wireshark">Захват через tshark (CLI-версия Wireshark):</h2>
sudo tshark -i wlan0mon -w /tmp/wifi_capture.pcap
<h2 id="chtenie-ranee-zahvachennogo-fayla-iz-airodump-ng">Чтение ранее захваченного файла из airodump-ng:</h2>
wireshark /tmp/capture/wifi_audit.cap
Ключевые Wireshark-фильтры для обнаружения скрытых SSID
Можно использовать Wireshark в сочетании с одним или несколькими фильтрами для анализа файлов захвата данных. SSID включён в эти пакеты для точки доступа:
- `wlan.fc.type_subtype == 0` (association request)
- `wlan.fc.type_subtype == 4` (probe request)
- `wlan.fc.type_subtype == 5` (probe response)
wireshark
── Фильтры управляющих фреймов ───────────────────────────────────────
<h2 id="vse-upravlyayuschie-freymy-beacon-probe-auth-assoc">Все управляющие фреймы (beacon, probe, auth, assoc):</h2>
wlan.fc.type == 0
<h2 id="beacon-freymy-translyatsiya-ap">Beacon-фреймы (трансляция AP):</h2>
wlan.fc.type_subtype == 8
<h2 id="probe-request-klient-ischet-set-soderzhit-ssid">Probe Request (клиент ищет сеть — содержит SSID!):</h2>
wlan.fc.type_subtype == 4
<h2 id="probe-response-ap-otvechaet-klientu-soderzhit-ssid">Probe Response (AP отвечает клиенту — содержит SSID!):</h2>
wlan.fc.type_subtype == 5
<h2 id="association-request-klient-assotsiiruetsya-yavnyy-ssid">Association Request (клиент ассоциируется — явный SSID):</h2>
wlan.fc.type_subtype == 0
<h2 id="association-response">Association Response:</h2>
wlan.fc.type_subtype == 1
── Фильтры для конкретной AP ──────────────────────────────────────────
<h2 id="vse-freymy-ot-k-konkretnomu-bssid">Все фреймы от/к конкретному BSSID:</h2>
wlan.bssid == aa:bb:cc:dd:ee:ff
<h2 id="upravlyayuschie-freymy-konkretnoy-skrytoy-ap">Управляющие фреймы конкретной скрытой AP:</h2>
wlan.bssid == aa:bb:cc:dd:ee:ff && wlan.fc.type == 0
<h2 id="probe-request-s-ssid-konkretnoy-seti">Probe Request с SSID конкретной сети:</h2>
wlan.ssid == "CorpNetwork"
── Фильтры для обнаружения угроз ─────────────────────────────────────
<h2 id="deauthentication-freymy-priznak-ataki">Deauthentication фреймы (признак атаки):</h2>
wlan.fc.type_subtype == 12
<h2 id="disassociation-freymy">Disassociation фреймы:</h2>
wlan.fc.type_subtype == 10
<h2 id="otkrytye-seti-net-shifrovaniya-potentsialnye-evil-twin">Открытые сети (нет шифрования) — потенциальные Evil Twin:</h2>
wlan.fc.protected == 0 && wlan.fc.type_subtype == 8
<h2 id="freymy-s-pustym-ssid-skrytye-ap">Фреймы с пустым SSID (скрытые AP):</h2>
wlan.ssid == ""
Анализ SSID в Wireshark: пошаговый алгоритм
text
Шаг 1: Открыть .cap файл из airodump-ng или .pcap от tshark
Шаг 2: Применить фильтр: wlan.fc.type_subtype == 4
(показывает probe request — клиенты ищут свои сети)
Шаг 3: В колонке Info будет видно: "Probe Request, SN=..., FN=..., Flags=..., SSID=HiddenSSID"
Шаг 4: Записать SSID и BSSID для корреляции
Шаг 5: Применить фильтр: wlan.fc.type_subtype == 5
(probe response — AP отвечает с именем сети)
Шаг 6: Сопоставить BSSID из beacon (пустой SSID) с BSSID из probe response (SSID раскрыт)
Создание отчёта через tshark
bash
<h2 id="izvlech-vse-ssid-iz-zahvachennogo-trafika">Извлечь все SSID из захваченного трафика:</h2>
tshark -r capture.pcap \
-Y "wlan.fc.type_subtype == 4 || wlan.fc.type_subtype == 5" \
-T fields \
-e wlan.sa \
-e wlan.ssid \
-e wlan.fc.type_subtype \
-e frame.time \
| sort -u
<h2 id="nayti-vse-deauth-freymy-priznak-ataki">Найти все deauth-фреймы (признак атаки):</h2>
tshark -r capture.pcap \
-Y "wlan.fc.type_subtype == 12" \
-T fields \
-e frame.time -e wlan.sa -e wlan.da -e wlan_mgt.reason_code
<h2 id="perechislit-vse-unikalnye-ap-s-ssid-i-bssid">Перечислить все уникальные AP с SSID и BSSID:</h2>
tshark -r capture.pcap \
-Y "wlan.fc.type_subtype == 8" \
-T fields \
-e wlan.bssid -e wlan.ssid -e wlan.channel \
| sort -u
9. Обнаружение скрытого SSID: пассивный метод через probe-запросы клиентов
Пассивный метод основан на наблюдении за probe-запросами клиентских устройств. Когда устройство знает сеть и ищет её, оно транслирует probe request с явным SSID — даже если сама сеть скрытая.
Алгоритм пассивного обнаружения
text
Шаг 1: Запустить Airodump-ng или Kismet в режиме сканирования всех каналов
Шаг 2: В секции STATION нижней части экрана airodump-ng наблюдать
столбец Probes
Шаг 3: Когда клиент ищет скрытую сеть:
→ в Probes появится имя сети
→ сопоставить с BSSID из верхней секции
Шаг 4: Если BSSID с пустым SSID + probe request с конкретным SSID
от клиента, подключённого к этому BSSID → SSID раскрыт
Шаг 5: В Wireshark подтвердить через фильтр:
wlan.bssid == XX:XX:XX:XX:XX:XX && wlan.ssid != ""
Корреляция через Kismet
Kismet отслеживает пары SSID и BSSID во времени. Если инструмент замечает BSSID, изначально транслирующий пустой SSID, но позже видит probe или ассоциацию, привязанную к нему, он логирует SSID соответственно. Комбинируйте возможности airodump-ng, Wireshark, tshark и Kismet для получения полной картины. Каждый даёт разный вид, и корреляция их выводов повышает достоверность обнаруженных данных.
Практический пример пассивного обнаружения
text
Наблюдение в airodump-ng:
Верхняя секция (AP):
BB:CC:DD:EE:FF:00 -67 124 6 WPA2 <length: 11> ← скрытая AP, 11 символов
Нижняя секция (Clients):
BB:CC:DD:EE:FF:00 22:33:44:55:66:77 -61 43 HiddenCorpNet ← клиент раскрыл!
Вывод:
AP с BSSID BB:CC:DD:EE:FF:00 → SSID = "HiddenCorpNet"
Длина: 13 символов (совпадает с 11? → нет, проверить кодировку)
10. Обнаружение Evil Twin и Rogue AP: признаки и методы выявления
Основные признаки Evil Twin в эфире
text
Признак 1: Дублирующийся SSID с другим BSSID
Норма: в mesh-сети несколько AP с одним SSID — нормально,
но все они должны быть от одного производителя (OUI)
Аномалия: «новый» BSSID с тем же SSID + другой OUI (производитель)
Пример:
AA:BB:CC:DD:EE:FF CorpNet OUI: Cisco Systems ← легитимная
11:22:33:44:55:66 CorpNet OUI: TP-Link Tech ← подозрительная!
Признак 2: Аномально высокий сигнал
Легитимная AP: -65 dBm (нормально для офиса)
«Новая» AP с тем же SSID: -30 dBm (слишком близко / слишком мощная)
→ Высокий сигнал привлекает клиентов, которые подключатся к ней
Признак 3: Изменение типа шифрования
Легитимная AP: WPA3 Enterprise
Поддельная AP: WPA2 Personal (или Open)
→ Деградация к более слабому шифрованию — признак атаки
Признак 4: Новый BSSID появляется внезапно
AP появилась только сегодня
Нет в историческом списке авторизованных BSSID
→ Занести в базу данных авторизованных AP и сравнивать
База данных авторизованных AP
Ключевой инструмент защиты — ведение списка авторизованных точек доступа:
csv
<h2 id="authorized-aps-csv">authorized_aps.csv</h2>
BSSID,SSID,Channel,Encryption,Location,Added_Date
AA:BB:CC:DD:EE:FF,CorpNet_Main,6,WPA2-CCMP,Office Floor 1,2025-01-15
AA:BB:CC:DD:EE:00,CorpNet_Main,11,WPA2-CCMP,Office Floor 2,2025-01-15
AA:BB:CC:DD:EF:FF,CorpNet_Guest,6,WPA2-CCMP,Lobby,2025-01-15
Любой BSSID с известным SSID, не входящий в этот список — Rogue AP.
Kismet IDS-алерты для Evil Twin
bash
<h2 id="prosmotr-alertov-v-realnom-vremeni-cherez-api-kismet">Просмотр алертов в реальном времени через API Kismet:</h2>
curl http://localhost:2501/alerts/all_alerts.json 2>/dev/null | \
python3 -m json.tool | \
grep -A5 "APSPOOF\|SSIDMATCH\|DISASSOCFLOOD"
<h2 id="ili-cherez-kismet-client">Или через kismet_client:</h2>
kismet_client --server http://localhost:2501/
<h2 id="eksport-alertov-v-fayl">Экспорт алертов в файл:</h2>
curl http://localhost:2501/alerts/all_alerts.json > kismet_alerts.json
Wireshark: фильтрация deauth-атак
wireshark
<h2 id="obnaruzhit-deauth-flood-priznak-aktivnoy-ataki">Обнаружить deauth-flood (признак активной атаки):</h2>
wlan.fc.type_subtype == 12
<h2 id="esli-vidite-mnogo-deauth-freymov-ot-odnogo-istochnika-za-korotkoe-vremya">Если видите много deauth-фреймов от одного источника за короткое время —</h2>
<h2 id="eto-priznak-ataki-deautentifikatsii">это признак атаки деаутентификации.</h2>
<h2 id="proverit">Проверить:</h2>
<h2 id="istochnik-wlan-sa-eto-avtorizovannaya-ap">- Источник (wlan.sa) — это авторизованная AP?</h2>
<h2 id="prichina-wlan-mgt-reason-code-kod-1-9-tipichny-dlya-legitimnyh-otklyucheniy">- Причина (wlan_mgt.reason_code) — код 1-9 типичны для легитимных отключений</h2>
<h2 id="kod-3-deauthenticated-because-sending-sta-is-leaving-mozhet-byt-legitimnym">Код 3 (Deauthenticated because sending STA is leaving) — может быть легитимным</h2>
<h2 id="ochen-mnogo-odinakovyh-deauth-za-sekundy-pochti-vsegda-ataka">Очень много одинаковых deauth за секунды — почти всегда атака</h2>
<h2 id="broadcast-deauth-vse-klienty-srazu">Broadcast deauth (все клиенты сразу):</h2>
wlan.fc.type_subtype == 12 && wlan.da == ff:ff:ff:ff:ff:ff
11. Python + Scapy: скрипт мониторинга аномалий беспроводной сети
Scapy — библиотека Python для работы с пакетами. Позволяет создавать кастомные скрипты мониторинга под конкретные задачи аудита.
bash
<h2 id="ustanovka">Установка:</h2>
pip install scapy
<h2 id="ili-v-kali-linux">или в Kali Linux:</h2>
sudo apt install python3-scapy
python
#!/usr/bin/env python3
"""
wifi_monitor.py — пассивный монитор Wi-Fi для выявления аномалий.
Обнаруживает:
- Скрытые сети (beacon с пустым SSID)
- Раскрытие скрытых SSID через probe-запросы
- Подозрительные дубликаты SSID (Evil Twin)
- Deauthentication-фреймы
Использование:
sudo python3 wifi_monitor.py -i wlan0mon
sudo python3 wifi_monitor.py -i wlan0mon --authorized authorized_aps.csv
ВАЖНО: Запускать только с интерфейсом в монитор-режиме.
Только для авторизованного аудита собственной инфраструктуры.
"""
import argparse
import csv
import sys
from collections import defaultdict
from datetime import datetime
from typing import Optional
try:
from scapy.all import (
Dot11, Dot11Beacon, Dot11Elt, Dot11ProbeReq,
Dot11ProbeResp, Dot11Auth, Dot11Deauth,
RadioTap, sniff
)
except ImportError:
print("Установите scapy: pip install scapy")
sys.exit(1)
<h2 id="globalnoe-sostoyanie-monitoringa">─── Глобальное состояние мониторинга ─────────────────────────────────────</h2>
<h2 id="obnaruzhennye-ap-bssid-ssid-channel-encryption-first-seen-last-seen">Обнаруженные AP: bssid → {ssid, channel, encryption, first_seen, last_seen}</h2>
known_aps: dict = {}
<h2 id="ssid-spisok-bssid-dlya-obnaruzheniya-evil-twin">SSID → список BSSID (для обнаружения Evil Twin)</h2>
ssid_to_bssids: dict = defaultdict(set)
<h2 id="skrytye-ap-bssid-dlina-ssid-pustoy-ssid-no-bssid-izvesten">Скрытые AP: bssid → длина SSID (пустой SSID, но BSSID известен)</h2>
hidden_aps: dict = {}
<h2 id="avtorizovannye-ap-iz-fayla-esli-peredan">Авторизованные AP (из файла, если передан)</h2>
authorized_aps: dict = {}
<h2 id="schyotchik-deauth-po-istochniku">Счётчик deauth по источнику</h2>
deauth_counter: dict = defaultdict(int)
<h2 id="vremya-poslednego-alerta-anti-spam">Время последнего алерта (anti-spam)</h2>
last_alert: dict = {}
ALERT_INTERVAL = 30 # секунд между повторными алертами одного типа
def load_authorized_aps(filepath: str) -> dict:
"""Загрузить базу авторизованных AP из CSV."""
aps = {}
try:
with open(filepath) as f:
reader = csv.DictReader(f)
for row in reader:
bssid = row.get("BSSID", "").upper()
if bssid:
aps[bssid] = row
print(f"[+] Загружено {len(aps)} авторизованных AP из {filepath}")
except FileNotFoundError:
print(f"[!] Файл {filepath} не найден — работаем без белого списка")
return aps
def get_channel(pkt) -> Optional[int]:
"""Извлечь канал из RadioTap-заголовка."""
if pkt.haslayer(RadioTap):
try:
return int(pkt[RadioTap].Channel / 5) - 1000
except Exception:
pass
return None
def get_encryption(pkt) -> str:
"""Определить тип шифрования из beacon-фрейма."""
cap = pkt[Dot11Beacon].cap if pkt.haslayer(Dot11Beacon) else None
if not cap:
return "OPN"
# Упрощённая проверка capability bits
privacy = bool(cap & 0x0010)
return "WPA/WPA2" if privacy else "OPN"
def alert(alert_type: str, message: str):
"""Вывести алерт с защитой от спама."""
now = datetime.now()
key = f"{alert_type}:{message[:40]}"
if key in last_alert:
diff = (now - last_alert[key]).total_seconds()
if diff < ALERT_INTERVAL:
return
last_alert[key] = now
ts = now.strftime("%H:%M:%S")
print(f"\n{'⚠️ '*3} АЛЕРТ [{ts}] — {alert_type}")
print(f" {message}")
def handle_beacon(pkt):
"""Обработать beacon-фрейм от точки доступа."""
bssid = pkt[Dot11].addr2
if not bssid:
return
ssid_elt = pkt.getlayer(Dot11Elt)
ssid = ""
if ssid_elt and ssid_elt.ID == 0:
ssid = ssid_elt.info.decode("utf-8", errors="replace").strip("\x00")
channel = get_channel(pkt)
enc = get_encryption(pkt)
ts = datetime.now()
bssid_up = bssid.upper()
if bssid_up not in known_aps:
known_aps[bssid_up] = {
"ssid": ssid,
"channel": channel,
"encryption": enc,
"first_seen": ts,
"last_seen": ts,
}
status = ""
# Скрытая сеть?
if not ssid:
hidden_aps[bssid_up] = True
status = "HIDDEN"
print(f"[~] Скрытая AP: BSSID={bssid_up} CH={channel} ENC={enc}")
else:
print(f"[+] Новая AP: BSSID={bssid_up} SSID={ssid!r} "
f"CH={channel} ENC={enc}")
# Проверить против белого списка
if authorized_aps and bssid_up not in authorized_aps:
alert("ROGUE_AP",
f"BSSID {bssid_up} (SSID={ssid!r}) не найден в белом списке!")
# Evil Twin: тот же SSID, другой BSSID
if ssid:
ssid_to_bssids[ssid].add(bssid_up)
if len(ssid_to_bssids[ssid]) > 1:
bssid_list = ", ".join(ssid_to_bssids[ssid])
alert("EVIL_TWIN",
f"SSID {ssid!r} транслируется несколькими AP: {bssid_list}")
else:
known_aps[bssid_up]["last_seen"] = ts
# Изменился SSID? (AP перестала скрываться)
if ssid and known_aps[bssid_up]["ssid"] == "":
known_aps[bssid_up]["ssid"] = ssid
hidden_aps.pop(bssid_up, None)
print(f"[!] Скрытый SSID раскрыт из beacon: "
f"BSSID={bssid_up} SSID={ssid!r}")
def handle_probe_request(pkt):
"""Обработать probe request от клиента."""
ssid_elt = pkt.getlayer(Dot11Elt)
if not ssid_elt or ssid_elt.ID != 0:
return
ssid = ssid_elt.info.decode("utf-8", errors="replace").strip("\x00")
if not ssid:
return # broadcast probe (клиент ищет любую сеть)
src = pkt[Dot11].addr2
ts = datetime.now().strftime("%H:%M:%S")
# Клиент ищет скрытую сеть?
for bssid_up, info in known_aps.items():
if info["ssid"] == "" and ssid:
# Клиент подключён к этой AP (адрес из нижней части airodump)
# Здесь упрощённо — просто логируем probe с SSID
pass
print(f"[>] Probe Request: SRC={src} SSID={ssid!r} [{ts}]")
# Проверить: если этот SSID соответствует скрытой AP в нашей базе
for bssid_up, _ in hidden_aps.items():
if bssid_up in known_aps:
print(f" → Возможно раскрывает скрытую AP: {bssid_up}")
def handle_probe_response(pkt):
"""Обработать probe response от AP."""
bssid = pkt[Dot11].addr2
ssid_elt = pkt.getlayer(Dot11Elt)
if not ssid_elt or ssid_elt.ID != 0:
return
ssid = ssid_elt.info.decode("utf-8", errors="replace").strip("\x00")
if not ssid or not bssid:
return
bssid_up = bssid.upper()
if bssid_up in hidden_aps:
known_aps.setdefault(bssid_up, {})["ssid"] = ssid
hidden_aps.pop(bssid_up)
ts = datetime.now().strftime("%H:%M:%S")
print(f"\n[!!!] СКРЫТЫЙ SSID РАСКРЫТ из probe response [{ts}]:")
print(f" BSSID: {bssid_up}")
print(f" SSID: {ssid!r}")
def handle_deauth(pkt):
"""Обработать deauthentication-фрейм."""
src = pkt[Dot11].addr2
dst = pkt[Dot11].addr1
ts = datetime.now().strftime("%H:%M:%S")
if src:
deauth_counter[src] += 1
count = deauth_counter[src]
if count == 5:
alert("DEAUTH_DETECTED",
f"Deauth-фреймы от {src} → {dst} (5+ за сеанс) [{ts}]")
elif count == 20:
alert("DEAUTH_FLOOD",
f"Возможная deauth-атака от {src}: {count}+ фреймов [{ts}]")
def packet_handler(pkt):
"""Общий обработчик пакетов."""
if not pkt.haslayer(Dot11):
return
subtype = pkt[Dot11].subtype
ptype = pkt[Dot11].type
if ptype == 0: # управляющие фреймы
if subtype == 8: handle_beacon(pkt)
elif subtype == 4: handle_probe_request(pkt)
elif subtype == 5: handle_probe_response(pkt)
elif subtype == 12: handle_deauth(pkt)
def print_summary():
"""Вывести итоговую сводку."""
print("\n" + "═" * 60)
print(f" СВОДКА МОНИТОРИНГА")
print("═" * 60)
print(f" Обнаружено AP: {len(known_aps)}")
print(f" Скрытых AP (нераскрытых): {len(hidden_aps)}")
print(f" Уникальных SSID: {len(ssid_to_bssids)}")
if hidden_aps:
print("\n Нераскрытые скрытые AP:")
for bssid in hidden_aps:
print(f" {bssid}")
suspicious = {s: b for s, b in ssid_to_bssids.items() if len(b) > 1}
if suspicious:
print("\n Подозрительные SSID (несколько BSSID):")
for ssid, bssids in suspicious.items():
print(f" {ssid!r}: {', '.join(bssids)}")
if any(c >= 5 for c in deauth_counter.values()):
print("\n Источники deauth-фреймов:")
for src, cnt in sorted(deauth_counter.items(),
key=lambda x: -x[1]):
if cnt >= 5:
print(f" {src}: {cnt} фреймов")
def main():
parser = argparse.ArgumentParser(
description="Пассивный Wi-Fi монитор для аудита беспроводной сети")
parser.add_argument("-i", "--interface", required=True,
help="Беспроводной интерфейс в монитор-режиме (напр. wlan0mon)")
parser.add_argument("--authorized", metavar="FILE",
help="CSV с авторизованными AP (BSSID,SSID,...)")
parser.add_argument("--duration", type=int, default=300,
help="Длительность мониторинга в секундах (по умолчанию 300)")
parser.add_argument("--output", metavar="FILE",
help="Сохранить перехваченные пакеты в PCAP")
args = parser.parse_args()
global authorized_aps
if args.authorized:
authorized_aps = load_authorized_aps(args.authorized)
print(f"[*] Запуск мониторинга на {args.interface}")
print(f"[*] Длительность: {args.duration} сек.")
print("[*] Нажмите Ctrl+C для остановки\n")
try:
sniff(
iface=args.interface,
prn=packet_handler,
store=args.output is not None,
timeout=args.duration,
)
except KeyboardInterrupt:
pass
finally:
print_summary()
if __name__ == "__main__":
main()
bash
<h2 id="zapusk">Запуск:</h2>
sudo python3 wifi_monitor.py -i wlan0mon
<h2 id="s-belym-spiskom-avtorizovannyh-ap">С белым списком авторизованных AP:</h2>
sudo python3 wifi_monitor.py -i wlan0mon --authorized authorized_aps.csv
<h2 id="s-ogranicheniem-vremeni">С ограничением времени:</h2>
sudo python3 wifi_monitor.py -i wlan0mon --duration 600
12. Анализ результатов и документирование: что делать с находками
Категоризация находок
text
Критический приоритет (немедленное расследование):
⚠️⚠️⚠️ Evil Twin — поддельная AP с SSID корпоративной сети
⚠️⚠️⚠️ Deauth flood — активная атака на клиентов
Высокий приоритет (расследование в течение дня):
⚠️⚠️ Rogue AP — неавторизованная точка доступа в периметре сети
⚠️⚠️ Скрытая AP без обоснования в корпоративной инфраструктуре
⚠️⚠️ AP с деградировавшим шифрованием (OPN или WEP)
Средний приоритет (внести в отчёт):
⚠️ Личные точки доступа сотрудников (BYOD без регистрации)
⚠️ AP с включённым WPS (уязвимость)
⚠️ Нестандартный канал для корпоративной AP
Документирование для отчёта
text
Минимальная информация для каждой находки:
- BSSID (MAC-адрес точки доступа)
- SSID (имя сети, если удалось раскрыть)
- Канал
- Тип шифрования
- Мощность сигнала (ориентировочное расстояние)
- Время обнаружения
- Производитель по OUI
- Тип находки (Rogue AP / Evil Twin / Скрытая / Деградация)
- Доказательства (файл захвата, скриншот, pcap-фрагмент)
OUI-поиск по производителю
bash
<h2 id="opredelit-proizvoditelya-po-mac-adresu">Определить производителя по MAC-адресу:</h2>
<h2 id="cherez-nmap">Через nmap:</h2>
nmap --script=address-info -sn TARGET_IP
<h2 id="cherez-onlayn-bazu">Через онлайн-базу:</h2>
<h2 id="macvendors-com-wireshark-org-tools-oui-lookup-html">macvendors.com, wireshark.org/tools/oui-lookup.html</h2>
<h2 id="cherez-airodump-ng-s-flagom-manufacturer">Через Airodump-ng с флагом --manufacturer:</h2>
sudo airodump-ng --manufacturer wlan0mon
<h2 id="primer-esli-ozhidaem-cisco-ap-a-vidim-oui-raspberry-pi-foundation">Пример: если ожидаем Cisco AP, а видим OUI = "Raspberry Pi Foundation" —</h2>
<h2 id="eto-yavnyy-priznak-poddelnoy-tochki-nastroennoy-na-raspberry-pi-ili-podobnom">это явный признак поддельной точки (настроенной на Raspberry Pi или подобном)</h2>13. Практический кейс: аудит корпоративной Wi-Fi-инфраструктуры
Задача: Провести аудит беспроводной сети офиса (100 человек, три этажа). Задокументировать все точки доступа, выявить несанкционированные и скрытые сети.
Шаг 1: Подготовка (15 минут)
bash
<h2 id="perevesti-adapter-v-monitor-rezhim">Перевести адаптер в монитор-режим:</h2>
sudo airmon-ng check kill
sudo airmon-ng start wlan0
<h2 id="zapustit-kismet-dlya-dolgosrochnogo-monitoringa-v-fone">Запустить Kismet для долгосрочного мониторинга (в фоне):</h2>
sudo kismet -c wlan0mon --log-prefix /tmp/audit/ --daemonize
<h2 id="odnovremenno-bystroe-skanirovanie-cherez-airodump-ng">Одновременно — быстрое сканирование через airodump-ng:</h2>
sudo airodump-ng --manufacturer --wps \
-w /tmp/audit/initial_scan wlan0mon
Шаг 2: Первичная инвентаризация (30 минут пассивного сканирования)
text
Результат первичного сканирования:
BSSID PWR ENC SSID Производитель Примечание
AA:BB:CC:DD:EE:00 -45 WPA2 CorpNet_Main Cisco Systems OK
AA:BB:CC:DD:EE:01 -52 WPA2 CorpNet_Main Cisco Systems OK (другой этаж)
AA:BB:CC:DD:EE:02 -61 WPA2 CorpNet_Guest Cisco Systems OK
BB:CC:DD:EE:FF:00 -67 WPA2 <length: 11> Cisco Systems Скрытая!
CC:DD:EE:FF:00:11 -78 OPN FreeWifi TP-Link Tech ⚠️ Открытая!
DD:EE:FF:00:11:22 -71 WPA2 CorpNet_Main Raspberry Pi ⚠️⚠️⚠️ Evil Twin!
Шаг 3: Расследование скрытой сети
bash
<h2 id="fokus-na-skrytoy-ap">Фокус на скрытой AP:</h2>
sudo airodump-ng -c 6 --bssid BB:CC:DD:EE:FF:00 wlan0mon
<h2 id="zhdyom-poyavleniya-klienta-v-stolbtse-station-probes">Ждём появления клиента в столбце STATION/Probes...</h2>
<h2 id="cherez-5-minut">Через 5 минут:</h2>
<h2 id="bb-cc-dd-ee-ff-00-22-33-44-55-66-77-corpnet-admin-raskryto">BB:CC:DD:EE:FF:00 22:33:44:55:66:77 CorpNet_Admin ← раскрыто!</h2>
<h2 id="vyvod-eto-administrativnaya-set-dlya-upravleniya-infrastrukturoy">Вывод: это административная сеть для управления инфраструктурой.</h2>
<h2 id="po-oui-cisco-znachit-skoree-vsego-legitimnaya-no-nuzhno-utochnit-u-it-otdela">По OUI — Cisco, значит скорее всего легитимная, но нужно уточнить у ИТ-отдела.</h2>Шаг 4: Расследование Evil Twin (Raspberry Pi с SSID CorpNet_Main)
bash
<h2 id="fiksatsiya-na-podozritelnoy-ap">Фиксация на подозрительной AP:</h2>
sudo airodump-ng -c 6 --bssid DD:EE:FF:00:11:22 wlan0mon
<h2 id="v-wireshark">В Wireshark:</h2>
<h2 id="filtr-wlan-bssid-dd-ee-ff-00-11-22">Фильтр: wlan.bssid == dd:ee:ff:00:11:22</h2>
<h2 id="rezultat-ap-aktivno-otpravlyaet-beacon-freymy-signal-71-dbm">Результат: AP активно отправляет beacon-фреймы, сигнал -71 dBm</h2>
<h2 id="oui-raspberry-pi-foundation-eto-ne-korporativnoe-oborudovanie">OUI: Raspberry Pi Foundation — это не корпоративное оборудование</h2>
<h2 id="fizicheskoe-rassledovanie-v-odnom-iz-peregovornyh-komnat-obnaruzhen">Физическое расследование: в одном из переговорных комнат обнаружен</h2>
<h2 id="raspberry-pi-podklyuchyonnyy-k-rozetke-za-shkafom-zabytyy-testovyy-stend">Raspberry Pi, подключённый к розетке за шкафом — забытый тестовый стенд.</h2>Итоговый отчёт кейса
text
РЕЗУЛЬТАТЫ АУДИТА Wi-Fi (краткая версия):
✓ 3 авторизованные корпоративные AP (Cisco, WPA2, соответствуют документации)
⚠️ 1 скрытая AP (BSSID: BB:CC:DD:EE:FF:00, SSID: CorpNet_Admin)
→ Выяснено: административная сеть, подтверждена ИТ-отделом
→ Рекомендация: задокументировать в реестре AP
⚠️ 1 открытая AP (CC:DD:EE:FF:00:11, SSID: FreeWifi)
→ Источник: личная точка доступа сотрудника
→ Риск: MITM-атаки на пользователей, нарушение политики BYOD
→ Действие: уведомить владельца, заблокировать на уровне NAC
⚠️⚠️⚠️ 1 несанкционированная AP с SSID корпоративной сети
→ Устройство: Raspberry Pi (тестовый стенд, не Evil Twin в данном случае)
→ Риск: потенциальный перехват клиентов, ошибочное подключение
→ Действие: демонтировать, внедрить NAC с 802.1X
14. FAQ: 12 горячих вопросов об аудите беспроводных сетей
Q 01 Чем режим монитора отличается от обычного (managed) режима?
A В обычном режиме (managed) адаптер принимает только пакеты, адресованные ему или широковещательные. В режиме монитора адаптер принимает все пакеты в эфире на текущем канале, независимо от адресата. Это аналог «режима беспорядочного прослушивания» (promiscuous mode) в проводных сетях, но для беспроводной среды.
Q 02 Можно ли обнаружить скрытый SSID без подключённых клиентов?
A Теоретически — нет, пассивным методом. Если к скрытой AP нет ни одного подключённого клиента и никто не пытается к ней подключиться, SSID в эфире не появится. Практически — в реальной сети клиенты почти всегда есть. При аудите собственной сети можно принудительно переподключить одно из своих устройств и зафиксировать SSID в probe request.
Q 03 Kismet «безопаснее» Airodump-ng с точки зрения незаметности?
A Kismet работает полностью пассивно — не отправляет ни одного пакета в эфир. Airodump-ng тоже преимущественно пассивен. Обнаружить пассивный мониторинг радиоэфира стандартными средствами невозможно — адаптер только принимает сигналы, не излучает. Это принципиальное отличие от активного сканирования.
Q 04 Как Wireshark видит Wi-Fi трафик, если пакеты зашифрованы?
A Управляющие фреймы (beacon, probe request/response, authentication, association) не шифруются в Wi-Fi — они всегда передаются открытым текстом. Это необходимо для работы протокола: устройства должны «видеть» сеть прежде, чем к ней подключиться. Шифруются только фреймы данных. Именно поэтому SSID виден в управляющих фреймах даже у WPA3-сетей.
Q 05 Что означает «length: 11» в Airodump-ng для скрытой AP?
A Это длина SSID в байтах (не символах, если используется UTF-8). Даже при скрытом SSID некоторые точки доступа сохраняют в beacon-фрейме поле длины SSID — 11 означает 11-символьное имя. Это сужает поиск при брутфорсе, но для пассивного аудита важно лишь как подтверждение факта скрытия.
Q 06 Что такое канал 14 и почему он не используется в России?
A Канал 14 в диапазоне 2,4 ГГц разрешён только в Японии. В России (и большинстве стран) разрешены каналы 1–13. Использование канала 14 — редкий, но возможный признак несанкционированного устройства иностранного происхождения.
Q 07 Как отличить Evil Twin от корпоративной mesh-сети с одним SSID?
A В mesh-сети (Cisco Meraki, Ubiquiti UniFi и т.д.) несколько AP с одним SSID — норма, но: все BSSID имеют один OUI (производитель); BSSID отличаются только на 1–2 последних байта (корпоративное именование); сила сигнала распределена логично по помещению. Evil Twin: другой OUI, неожиданно высокий сигнал, появился внезапно. Главный инструмент — авторизованная база BSSID с историей.
Q 08 Нужен ли GPS для Kismet при корпоративном аудите?
A Для стационарного аудита офиса GPS не нужен. GPS полезен при wardriving (мобильном аудите на большой территории) — позволяет привязать обнаруженные сети к географическим координатам и строить карты покрытия. Для офисного аудита достаточно отметить локацию вручную.
Q 09 Как обнаружить Evil Twin с тем же BSSID (MAC-spoofing)?
A Это сложнее — некоторые атакующие клонируют не только SSID, но и BSSID. Признаки: два устройства с одинаковым BSSID создадут конфликт в эфире (клиенты начнут испытывать проблемы с подключением); Kismet обнаружит «перемещение» AP (AP с данным BSSID то появляется с одного направления, то с другого); анализ vendor-специфических information elements в beacon-фреймах (разные модели AP имеют разные поля).
Q 10 Airodump-ng не видит сети 5 ГГц — почему?
A По умолчанию airodump-ng сканирует 2,4 ГГц. Для 5 ГГц нужен адаптер с поддержкой 802.11a/ac/ax и флаг `--band a`: `sudo airodump-ng --band a wlan0mon`. Для одновременного сканирования обоих диапазонов: `--band abg` (или `--band bg` + `--band a` на двух отдельных интерфейсах). Некоторые адаптеры не поддерживают 5 ГГц в монитор-режиме.
Q 11 Как правильно оформить разрешение на беспроводной аудит?
A Разрешение должно содержать: точный адрес объекта аудита, диапазоны частот (2,4 ГГц, 5 ГГц, 6 ГГц), временны́е рамки проведения, разрешённые методы (пассивный мониторинг / активные тесты), список тестируемых SSID и BSSID, подпись уполномоченного лица (владельца инфраструктуры). Без этого документа инструменты из статьи использовать нельзя.
Q 12 Какие технические контрмеры помогут защититься от Evil Twin?
A Несколько уровней защиты: 802.1X-аутентификация (WPA2/WPA3 Enterprise) — клиент проверяет сертификат сервера, Evil Twin без правильного сертификата не пройдёт; Wireless IDS/IPS (Kismet, Cisco Adaptive wIPS) — автоматически обнаруживают несанкционированные AP; NAC (Network Access Control) — только зарегистрированные устройства получают доступ; обучение пользователей — не подключаться к «CorpNet» без проверки сертификата.
15. Чек-лист: полный аудит Wi-Fi за один сеанс
Подготовка (до начала)
- ☐ Получить письменное разрешение на аудит (область применения, временны́е рамки)
- ☐ Подготовить базу авторизованных AP (BSSID, SSID, локации, каналы)
- ☐ Убедиться, что адаптер поддерживает монитор-режим: `iw list | grep "Supported interface modes"`
- ☐ Перевести адаптер в монитор-режим: `sudo airmon-ng check kill && sudo airmon-ng start wlan0`
- ☐ Синхронизировать время (важно для логов): `timedatectl`
Фаза 1: Пассивная инвентаризация (30–60 минут)
- ☐ Запустить Kismet в фоне для долгосрочного мониторинга
- ☐ Запустить Airodump-ng с `--manufacturer --wps` для обнаружения всех AP
- ☐ Сохранить захват: `-w /tmp/audit/scan1`
- ☐ Зафиксировать все обнаруженные AP: BSSID, SSID, канал, шифрование, OUI
Фаза 2: Анализ аномалий
- ☐ Сравнить обнаруженные BSSID с авторизованным списком → Rogue AP?
- ☐ Найти дубликаты SSID с разными BSSID → Evil Twin?
- ☐ Проверить OUI каждого нового BSSID: совпадает ли производитель с ожидаемым?
- ☐ Скрытые AP: зафиксировать BSSID, ждать раскрытия через probe-запросы клиентов
- ☐ Открытые сети (OPN): кому принадлежат? Есть ли обоснование?
Фаза 3: Wireshark-анализ
- ☐ Открыть захваченный .cap/.pcap в Wireshark
- ☐ Применить `wlan.fc.type_subtype == 4` → probe request с SSID (раскрытие скрытых)
- ☐ Применить `wlan.fc.type_subtype == 12` → deauth фреймы (атаки?)
- ☐ Для каждой подозрительной AP: `wlan.bssid == XX:XX:XX:XX:XX:XX`
Фаза 4: Тест собственной инфраструктуры (только своя сеть)
- ☐ Принудительно переподключить одно устройство к скрытой AP → зафиксировать раскрытие SSID
- ☐ Проверить, насколько быстро Kismet обнаруживает новую AP
- ☐ Проверить IDS-алерты Kismet при имитации Evil Twin (в тестовой среде)
Документирование
- ☐ Сохранить все .cap/.pcap файлы как доказательства
- ☐ Составить список всех AP с категоризацией: авторизована / rogue / evil twin / скрытая
- ☐ Зафиксировать хэши pcap-файлов (MD5/SHA256) для цепочки доказательств
- ☐ Подготовить отчёт с рекомендациями по устранению
16. Заключение
Беспроводная среда принципиально отличается от проводной: управляющие фреймы Wi-Fi не шифруются по стандарту и доступны для анализа любым устройством в радиусе приёма. Это делает беспроводной аудит одновременно и мощным инструментом защиты, и поверхностью, требующей постоянного мониторинга.
Ключевые выводы: комбинирование Airodump-ng, Wireshark, tshark и Kismet формирует полную картину — каждый инструмент даёт разный вид, и корреляция их выводов повышает достоверность обнаруженных данных. Kismet — для долгосрочного пассивного мониторинга с IDS; Airodump-ng — для целевого захвата; Wireshark — для детального анализа фреймов; Python/Scapy — для автоматизированных кастомных детекторов.
Практическая рекомендация для корпоративных сетей: ведение базы авторизованных BSSID + постоянный мониторинг через Kismet IDS + внедрение 802.1X (WPA2/WPA3 Enterprise) — это три кита, делающие атаку Evil Twin нецелесообразной. Без 802.1X скрытый SSID и сложный пароль не защищают от поддельной точки доступа: пользователь подключится к ней, не имея возможности верифицировать её подлинность.
> 🔍 Радиоэфир честен: скрыть можно имя, но не сам факт присутствия. Задача аудитора — научиться читать то, что присутствует.