Изображение


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 APKismet, 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. Заключение




Правовая граница


Мониторинг радиоэфира в России регулируется несколькими нормативными актами. Ключевые: ст. 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 = &quot;Raspberry Pi Foundation&quot; —</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 и сложный пароль не защищают от поддельной точки доступа: пользователь подключится к ней, не имея возможности верифицировать её подлинность.

> 🔍 Радиоэфир честен: скрыть можно имя, но не сам факт присутствия. Задача аудитора — научиться читать то, что присутствует.