В данной статье мы поговорим о WiFiBeat, агенте, который может отправлять 802.11 фреймы в Elasticsearch, где мы можем их анализировать, строить графики и обнаруживать атаки. Вся эта система строится полностью на бесплатном ПО.
Введение
Официальный сайт утилиты — https://www.wlanpros.com/resources/wifi-beat/
GirHub — https://github.com/WiFiBeat/WiFiBeat
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 для сборки WiFiBeat
apt-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
В разделах Local file и Decryption я все закомментировал, ключи шифрования в моем примере мне не понадобятся и читать из PCAP файла я так же не буду.
В разделе 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.
Помимо дэшбордов у нас появились новые визуализации
В заключении
Далее при помощи еще одного компонента пакета Elasitc — X-Pack можно настроить действия при обнаружении, скажем всплеска фреймов деаутентификации, что может означать DoS атаку или попытку заполучить хэндшейк для брутфорса. Таким образом можно собрать систему обнаружения атак на беспроводную сеть.
Автор: antgorka