
В данной статье мы поговорим о WiFiBeat, агенте, который может отправлять 802.11 фреймы в Elasticsearch, где мы можем их анализировать, строить графики и обнаруживать атаки. Вся эта система строится полностью на бесплатном ПО.
Введение
→ Официальный сайт утилиты→ GitHub
WiFiBeat позволяет работать с Wi-Fi адаптером в режиме монитора, создавать из фреймов JSON объекты и отправлять в базу данных аналитического движка Elasticsearch. Кроме этого, WiFiBeat может читать фреймы из PCAP файла.
Анализ собранной информации происходит в другом бесплатном продукте от Elastic — визуализаторе Kibana.

WiFiBeat официально стабильно работает на Ubuntu 16.04, но, конечно, его можно запустить и на других дистрибутивах, однако могут возникнуть трудности с зависимостями и несоответствием версий библиотек, под которые писалась утилита. Мы будем использовать 64-битную Ubuntu 16.04, к которой подключен USB Wi-Fi адаптер TP-LINK TL-WN722N в режиме монитора, для запуска WiFiBeat.
Elasticsearch и Kibana будут развернуты на 64-битной Debian 9.
Установка WiFiBeat
Процесс установки детально описан на GitHub.Устанавливаем libtins
wget https://github.com/mfontanini/libtins/archive/v3.5.tar.gz
tar -zxf v3.5.tar.gz
cd libtins-3.5
apt-get install libpcap-dev libssl-dev build-essential libboost-all-dev
mkdir build
cd build
cmake ../ -DLIBTINS_ENABLE_CXX11=1
make
make install
ldconfig
Устанавливаем недостающие пакеты в системуapt-get install libyaml-cpp-dev libpoco-dev rapidjson-dev libtsan0 libboost-all-dev libb64-dev libwireshark-data build-essential libnl-3-dev libnl-genl-3-dev libnl-idiag-3-dev
Устанавливаем Codelite для сборки WiFiBeatapt-get install codelite codelite-plugins
Запускаем codelite и создаем новый workspaceТип C++
Запоминаем директорию
Когда workspace создан, переходим в директорию и скачиваем WiFiBeat и библиотеки с GitHub.
cd /root/WiFiBeat
git clone https://github.com/WiFiBeat/WiFiBeat
git clone https://github.com/WiFiBeat/elasticbeat-cpp
git clone https://github.com/WiFiBeat/simplejson-cpp
Добавляем все 3 проекта в наш workspace в codeliteПосле двойного клика на wifibeat в списке проектов, он должен выделиться
Правым кликом на wifibeat выбираем Build
Выбираем компилятор, если не был выбран, и снова Build
Если все зависимости установлены в системе и Вы все сделали правильно до этого, то в завершении процесса компиляции Вы увидите сообщение об отсутствии ошибок.
====0 errors, 2 warnings, total time: 00:01:13 seconds====
Настройка
Процесс установки Elasticsearch и Kibana не будет рассматриваться в данной статье. На эту тему есть достаточно материалов в сети. Предполагаем, что они работают на машине 192.168.1.30, а WiFiBeat на машине 192.168.1.31. Elasticsearch слушает HTTP порт 9200 и не требует аутентификации.К машине 192.168.1.31 я подключил Wi-Fi адаптер и перевел его в режим монитора.
В системе он отображается как mon0.
Из каталога с WiFiBeat копируем конфигурационный файл в etc и редактируем
cp wifibeat.yml /etc
vi /etc/wifibeat.yml
Этот файл хорошо документирован, коротко пройдемся по основным опциям.Я собираюсь анализировать трафик одной сети, работающей на пятом канале диапазона 2.4 ГГц.
Поэтому в настройках интерфейсов оставляю одну запись. Есть возможность анализировать сразу несколько каналов и для каждого задать время прослушивания.
wifibeat.interfaces.devices:
mon0: [5]
Удаляю все из раздела Output fileВ разделе с PCAP-фильтрами я задам следующее
wifibeat.interfaces.filters:
mon0: type mgt
Здесь указываются фильтры как в Wireshark, и в данном случае я указываю, что меня интересуют только Management фреймы 802.11. К ним относятся:- Authentication frame
- Deauthentication frame
- Association request frame
- Association response frame
- Reassociation request frame
- Reassociation response frame
- Disassociation frame
- Beacon frame
- Probe request frame
- Probe response frame
- Request to Send (RTS) frame
- Clear to Send (CTS) frame
- Acknowledgement (ACK) frame
В разделе Queues ничего менять не буду и в разделе Outputs задам адрес и порт Elasticsearch.
output.elasticsearch:
enabled: true
protocol: "http"
# Array of hosts to connect to.
hosts: [ "192.168.1.30:9200" ]
Сохраняем и переходим в каталог с WiFiBeat и подкаталог Debug. Здесь должен находиться скомпилированный исполняемый файл wifibeat.Запуск
Запускаем Elasticsearch и Kibana на машине 192.168.1.30. Убеждаемся, что прослушивается порт 9200 (Elasticsearch) и Kibana (5601).На машине 192.168.1.31 проверяем, что мы не допустили ошибок в конфигурации
./wifibeat -d
Вы должны увидеть парсинг конфигурационного файла. Если есть ошибки, то wifibeat сообщит о проблеме. Если все хорошо, то запускаем./wifibeat -f
Ключ -f позволяет запустить wifibeat не в режиме демона. Для нас это пока удобнее.Теперь если вы откроете Kibana и проверите индексы, то должны увидеть, что появился новый индекс wifibeat*
Настроим Kibana. Переходим в Management, Index Patterns
Создаем новый шаблон
Отмечаем его как основной
Теперь импортируем Dashboard-ы и Визализации, которые идут в комплекте с WiFiBeat
Выбираем файл kibana.json из каталога WiFiBeat/kibana
Если импорт прошел успешно, можно перейти на вкладку Dashboard и найти там WLAN
Если не использовать фильтры в wifibeat.yml он будет выглядеть так
С фильтрами (в нашем случае), мы не будем видеть данных по Control Frames и Data Frames.
Помимо дэшбордов у нас появились новые визуализации