Продвинутое слежение за Wi-Fi устройствами


trackerjacker

Многие программы могут показывать Точки Доступа в диапазоне доступности вашего Wi-Fi адаптера. Специализированные программы могут показывать расширенную информацию о ТД и Клиентах. Я написал небольшой скрипт, который в удобном виде показывает ТД, подключённых к ним клиентов, для всех них определяет производителя устройства и некоторую другую информацию, которая вполне может пригодиться. Упоминаемый скрипт и примеры его запуска вы найдёте по ссылке «Как обнаружить все Wi-Fi устройства в округе?».

В этой статье я расскажу об инструменте trackerjacker, который не только выводит список устройств в округе, но и умеет выполнять различные действия по заданным условиям. К примеру, скрипт может оповещать вас при появлении в непосредственной близости новых устройств, может оповещать вас или выполнять действия если устройства начали активно обмениваться информацией, может следить за определёнными устройствами из списка, может атаковать устройства определённого производителя (например, камеры определённого бренда).

Как установить trackerjacker

Установка trackerjacker в Kali Linux, Debian, Linux Mint, Ubuntu и в любой другой дистрибутив выполняется следующим образом:

sudo apt install python3 python3-pip
sudo pip3 install trackerjacker

В Arch Linux предыдущая команда тоже подходоит.

При установке trackerjacker в BlackArch нужно иметь в виду, что эта программа присутствует в стандартном репозитории и её можно установить так:

sudo pacman -S python-trackerjacker

Но проблема в том, что она не будет работать, поскольку для trackerjacker нужен scapy версии ровно 2.4.0, а в BlackArch (как и в Arch Linux) все пакеты всегда самой последней версии. Поэтому если вам нужно, чтобы программа заработала, то дополнительно выполните эту команду:

sudo pip3 install scapy==2.4.0

Для других дистрибутивов этого не требуется, поскольку при установке с помощью pip3 автоматически устанавливается scapy==2.4.0 в качестве зависимости.

Инструкция по использованию trackerjacker

У этой программы имеется 2 главных режима использования: map mode (режим карты — собирается информация о всех устройствах в округе) и track mode (режим слежения).

В последующих командах вам нужно указать имя своего беспроводного интерфейса — вставьте его вместо wlp0s20f0u1 (это имя Wi-Fi интерфейса в моей системе).

sudo trackerjacker -i wlp0s20f0u1 --map

В стандартный вывод программа будет показывать информацию о переключении каналов и обнаруженных устройствах.

Основной интерес представляет «карта», которая сохраняется в файл формата YAML. Это карта всех близлежащих Wi-Fi сетей и их пользователей. По умолчанию имя файла wifi_map.yaml (имя и расположение файла можно поменять опцией —map-file). Пример такого файла:

Информация о ТД и её клиентах:

Поскольку это формат YAML, то вы с лёгкостью может использовать его в качестве ввода для других скриптов вашей разработки. Автор trackerjacker написал простой скрипт parse_trackerjacker_wifi_map.py. В зависимости от способа установки, этот скрипт может отсутствовать, чтобы его скачать:

wget https://raw.githubusercontent.com/calebmadrigal/trackerjacker/master/helpful_scripts/parse_wifi_map.py

Запуск:

python3 ./parse_wifi_map.py

Пример работы скрипта:

Режим слежения в trackerjacker

Режим слежения позволяет вам указать ряд MAC адресов для наблюдения и предупреждать вас или выполнять указанную программу в случае превышения порога передаваемых данных. Пример запуска команды:


sudo trackerjacker --track -i wlp0s20f0u1 -m 3c:2e:ff:31:32:59 --t 4000 --trigger-command "./alert.sh" --channels-to-monitor 10,11,12,44

В ней:

  • —track — включение режима слежения
  • -i wlp0s20f0u1 — беспроводной интерфейс для использования
  • -m 3c:2e:ff:31:32:59 — MAC адрес за которым нужно следить. Можно указать несколько адресов через запятую или файл со списком адресов (один MAC на одну строку) — это реализовано в одном из плагинов
  • —t 4000 — порог в байтах, при превышении которого показываются предупреждения и выполняется указанная команда
  • —trigger-command "./alert.sh" — команда, которую нужно выполнить в случае наступления события (превышения указанного порога)
  • —channels-to-monitor 10,11,12,44 — каналы, которые нужно мониторить

В этом конкретном примере автор программы trackerjacker наблюдал за камерой безопасности чтобы определить, когда она выгружает видео (это свидетельствует о том, что ей замечено движение). Это, кстати, и было причиной появления проекта: наблюдение за сторонними камерами, к которым нет другого доступа — это позволяло дистанционно определить, что камеры кого-то заметили.

Плагин foxhunt

Плагин foxhunt выводит список всех обнаруженных в округе Wi-Fi устройств в порядке убывания мощности сигнала. В тех случаях, когда возможно, выводится информация о производителях. Плагин можно указать опцией —trigger-plugin после которой нужно указать имя плагина (если он находится в соответствующей поддиректории программы), либо путь до файла плагина. Пример запуска с использованием плагина foxhunt:

sudo trackerjacker -i wlp0s20f0u1 --track --trigger-plugin foxhunt

Будет выведено примерно следующее:

Плагины trackerjacker

Обратите внимание, что foxhunt это встроенный плагин. Встроенных плагинов, на самом деле, всего один. Также имеется несколько примеров плагинов, которые в зависимости от установки могут не попасть в систему.

Эти примеры вы найдёте на странице (там же можете их и скачать): https://github.com/calebmadrigal/trackerjacker/tree/master/plugin_examples

Далее краткое описание каждого плагина:

  • foxhunt.py

Выводит упорядоченный список Wi-Fi устройств, отсортированных на основе мощности их сигнала.

  • count_apples.py

Считает устройства Apple.

wget https://raw.githubusercontent.com/calebmadrigal/trackerjacker/master/plugin_examples/count_apples.py
sudo trackerjacker -i wlp0s20f0u1 --track --trigger-plugin count_apples.py
  • count_manufacturers.py

Подсчёт устройств разных производителей.

Пример запуска:

wget https://raw.githubusercontent.com/calebmadrigal/trackerjacker/master/plugin_examples/count_manufacturers.py
sudo trackerjacker -i wlp0s20f0u1 --track --trigger-plugin count_manufacturers.py

  • deauth_attack.py

Деаутентифицирует Wi-Fi устройства, то есть постоянно отключает их от беспроводных точек доступа, в результате чего они не могут нормально работать. Для этого используется программа aircrack-ng. Атака происходит на основе установленного mac_to_deauth (одного или нескольких адресов для деаутентификации) или vendor_to_deauth (то есть вендора (производителя) — в результате чего отключаются от сети все устройства от указанного производителя.

Будьте осторожны с vendor_to_deauth — атака деаутентификации выполняется в отношении каждого устройства определённого производителя, это определяется на основе его MAC адреса.


Пример вызова:

sudo trackerjacker --track --plugin plugin_examples/deauth_attack.py --plugin-config "{'vendor_to_deauth': 'Apple'}"
  • find_nearby_strangers.py

Найти всех незнакомцев. Будет сообщено о всех новых устройствах, которые появились рядом с вами.

  • monitor_device_list.py

Следит за MAC адресами из списка, указанного в файле.

Пример запуска:

sudo trackerjacker --track --plugin plugin_examples/monitor_device_list.py --plugin-config "{'device_list': 'deepsec_devices.txt'}"

В этом файле (deepsec_devices.txt) список должен иметь один MAC адрес на одну строку.

Отслеживание появления новых электронных устройств в непосредственной близости

Уже упомянутый ранее плагин find_nearby_strangers.py можно использовать в разных интересных сценариях. Допустим, мы хотим узнать об устройствах, которые внезапно появились рядом с нами.

Скачиваем плагин.


wget https://raw.githubusercontent.com/calebmadrigal/trackerjacker/master/plugin_examples/find_nearby_strangers.py

Откройте скаченный файл:

gedit find_nearby_strangers.py

В нём вы найдёте ряд настроек:

# устройства, которые нужно игнорировать
DEVS_TO_IGNORE = {'ff:ff:ff:ff:ff:ff', '00:00:00:00:00:00'}
# показывать только устройства, порог мощности которых выше
POWER_THRESHOLD = -50
# время порога
TIME_THRESHOLD = 15 * 60 # 15 минут
# период сохранения
SAVE_PERIOD = 30 # секунд
# файл для сохранения
SAVE_FILE = 'find_nearby_strangers.pkl'

В первую очередь обратите внимание на переменную POWER_THRESHOLD. Мощность вы можете подобрать опытным путём в зависимости от ваших условий. Это должно быть отрицательное число больше -100. Чтобы показать тех, кто действительно близко (примерно в одной комнате), установите на -30.

Также вы можете дополнить список DEVS_TO_IGNORE — устройства должны быть указаны через запятую.

Для сброса базы данных удалите файл find_nearby_strangers.pkl.

Пример запуска:

sudo trackerjacker -i wlp0s20f0u1 --track --trigger-plugin find_nearby_strangers.py

Примечание: опция —power (порог мощности) в случае с плагином не работает.


Отслеживание появления определённого устройства

Выше уже показано, как отследить, когда определённое устройство или устройства начинают интенсивно обмениваться данными. Также рассказано о плагине для мониторинга списка устройств (monitor_device_list.py). Но предположим, что нас интересует одно определённое устройство — когда оно появляется, когда оно приближается/удаляется или исчезает и т.д.

Пример команды для слежения за устройствомо с MAC-адресом 8c:77:16:45:1d:c3:

sudo trackerjacker -i wlp0s20f0u2 --track -m 8c:77:16:45:1d:c3 --power -70 --channels-to-monitor 1,2,3,4,5,6,7,8,9,10,11,12,13,14

С помощью опции —trigger-cooldown можно указать время, через которое будет выводиться информация (если есть условия для срабатывания триггера). То есть если целевое устройство находится в диапазоне доступности, то информация о его мощности будет выводиться каждую минуту. С помощью указанной опции можно установить другие интервалы времени.

Кстати, в выводимой информации в данном случае очень не хватает времени — если добавить время, то можно сутками мониторить определённый телефон/планшет/компьютер и составить примерно расписание (работа-дом-туалет-балкон).

Значение —power (порог мощности устройства, при котором будет выведена информация о нём) устанавливать необязательно — зависит от сценария использования.

Настройка trackerjacker с помощью конфигурационного файла

Настройки из командной строки можно перенести в конфигурационный файл и запускать trackerjacker с опцией -c, после которой нужно указать путь до конфигурационного файла:

sudo trackerjacker -c my_config.json

Пример такого файла my_config.json:

{
    "iface": "wlan0",
    "devices_to_watch": [
        {"mac": "5f:cb:53:1c:8a:2c", "name": "Bob's iPhone"},
        {"mac": "32:44:1b:d7:a1:5b", "name": "Alice's iPhone"},
        {"mac": "f2:43:2b:e5:c3:6d", "name": "Security camera", "threshold": 20000},
        "44:61:32:C6:34:8F"],
    "aps_to_watch": {"c6:23:ef:33:cc:a2": 500},
    "threshold_window": 10,
    "channels_to_monitor": [1, 6, 11, 52],
    "channel_switch_scheme": "round_robin"
}

Примечания к данному файлу:

  • threshold_bytes — это порог байтов по умолчанию, если обмен данных достигает его, то вызывается функция предупреждения
  • threshold_window — это промежуток времени, за который анализируются threshold_bytes (то есть достигло ли количество threshold_bytes за время threshold_window)
  • devices_to_watch — это список, который может содержать как строки (представляющие MAC адреса) или Python Dictionaries (в этом формате можно указывать name и threshold для данного устройства)
  • name — это просто та надпись, которую вы хотите чтобы выводилась когда увидено это устройство
  • threshold — в "Security camera" это сколько байт должно быть увидено, чтобы был вызван триггер
  • channels_to_monitor — список 802.11 Wi-Fi каналов для мониторинга. Когда запускается trackerjacker, будет напечатан список каналов, которые поддерживает ваша Wi-Fi карта. По умолчанию мониторятся все поддерживаемые каналы.
  • channel_switch_scheme — варианты default, round_robin или traffic_based. Если выбрана traffic_based, то определяются каналы с наибольшим количеством передаваемого трафика и им выделяется больше времени. При варианте round_robin всем каналам выделяется равное количество времени.

Следующая команда покажет опции по умолчанию в виде конфигурационного файла. Вы можете использовать эту команду чтобы сгенерировать конфигурационный файл, который вы можете взять за основу для вашей настройки:

sudo trackerjacker --print-default-config

Будет показано примерно следующее:

{
    "aps_to_watch": [],
    "beep_on_trigger": false,
    "channel_switch_scheme": "default",
    "channels_to_monitor": null,
    "devices_to_watch": [],
    "display_all_packets": false,
    "display_matching_packets": false,
    "do_map": true,
    "do_track": false,
    "iface": null,
    "log_level": "INFO",
    "log_path": null,
    "map_file": "wifi_map.yaml",
    "map_save_interval": 10,
    "plugin_config": null,
    "power": null,
    "remove_unseen_devices": false,
    "threshold": null,
    "threshold_window": 10,
    "time_per_channel": 0.5,
    "trigger_command": null,
    "trigger_cooldown": 30,
    "trigger_plugin": null
}

Включение и отключение режима монитора, переключение Wi-Fi адаптера на определённый канал

Trackerjacker поставляется с несколькими другими простыми функциями, имеющими отношение к Wi-Fi хакингу. Одна из них — это способность включать режим монитора на указанном беспроводном интерфейсе.

Чтобы включить режим монитора:

sudo trackerjacker --monitor-mode-on -i wlan0

Чтобы отключить режим монитора:

sudo trackerjacker --monitor-mode-off -i wlan0mon

Обратите внимание, что trackerjacker автоматически включит/отключит режим монитора по мере необходимости. Эта функциональность полезна если вы просто хотите включить режим монитора на беспроводном интрфейсе для использования с другими приложениями (или для более быстрого запуска trackerjacker, если вы планируете запуск/выход для тестирования чего-то).

Переключение беспроводного адаптера на определённый канал:

sudo trackerjacker --set-channel 11 -i wlan0

Обратите внимание, что trackerjacker будет автоматически переключать каналы по мере необходимости во время обычных действий map/track. Эта опция полезна если вы хотите переключить интерфейс на определённый канал для использования с другими приложениями.

Опции trackerjacker

Другие опции trackerjacker вы сможете найти в карточке программы: https://kali.tools/?p=4956

Рекомендуемое железо

Автор trackerjacker рекомендует следующие Wi-Fi адаптеры:

По своему опыту могу дополнить, что подойдут любые адаптеры из этого списка. Для наибольшей чувствительности рекомендую обязательно выбирать адаптеры с внешней антенной (или несколькими антеннами). Причём чем антенна больше, тем лучше чувствительность.

Смотрите также: Как обнаружить все Wi-Fi устройства в округе?


Рекомендуется Вам:

3 комментария to Продвинутое слежение за Wi-Fi устройствами

  1. Владимир:

    Подскажите пожалуйста, как исправить проблему. pip3 не находит..

    sudo: pip3: command not found

     

  2. Michael:

    При установке на актуальную версию ParrotOS встретил 2 ошибки, привожу пример их устранения

    1. После установки при любом вызове имеем

    Traceback (most recent call last):
     File "/usr/local/bin/trackerjacker", line 5, in <module>
       from trackerjacker.__main__ import main
     File "/usr/local/lib/python3.9/dist-packages/trackerjacker/__main__.py", line 15, in <module>
       import scapy.all as scapy
     File "/usr/local/lib/python3.9/dist-packages/scapy/all.py", line 16, in <module>
       from scapy.arch import *
     File "/usr/local/lib/python3.9/dist-packages/scapy/arch/__init__.py", line 25, in <module>
       from scapy.arch.bpf.core import get_if_raw_addr
     File "/usr/local/lib/python3.9/dist-packages/scapy/arch/bpf/core.py", line 29, in <module>
       LIBC = cdll.LoadLibrary(find_library("libc"))
     File "/usr/lib/python3.9/ctypes/util.py", line 341, in find_library
       _get_soname(_findLib_gcc(name)) or _get_soname(_findLib_ld(name))
     File "/usr/lib/python3.9/ctypes/util.py", line 147, in _findLib_gcc
       if not _is_elf(file):
     File "/usr/lib/python3.9/ctypes/util.py", line 99, in _is_elf
       with open(filename, 'br') as thefile:
    FileNotFoundError: [Errno 2] No such file or directory: b'liblibc.a'

    Чтобы починить выполняем
    cd /usr/lib/x86_64-linux-gnu/
    sudo ln -s -f libc.a liblibc.a

    2. После установки и исправления предыдущей имеем следующую ошибку:

    Traceback (most recent call last):
     File "/usr/local/bin/trackerjacker", line 5, in <module>
       from trackerjacker.__main__ import main
     File "/usr/local/lib/python3.9/dist-packages/trackerjacker/__main__.py", line 15, in <module>
       import scapy.all as scapy
     File "/usr/local/lib/python3.9/dist-packages/scapy/all.py", line 25, in <module>
       from scapy.route import *
     File "/usr/local/lib/python3.9/dist-packages/scapy/route.py", line 191, in <module>
       conf.route=Route()
     File "/usr/local/lib/python3.9/dist-packages/scapy/route.py", line 27, in __init__
       self.resync()
     File "/usr/local/lib/python3.9/dist-packages/scapy/route.py", line 36, in resync
       self.routes = read_routes()
     File "/usr/local/lib/python3.9/dist-packages/scapy/arch/linux.py", line 280, in read_routes
       tmp_route = get_alias_address(iff, dst_int, gw_str, metric)
     File "/usr/local/lib/python3.9/dist-packages/scapy/arch/linux.py", line 195, in get_alias_address
       names = names.tostring()
    AttributeError: 'array.array' object has no attribute 'tostring'
     

    Для исправления оказалось, что рекомендация из статьи с версией scapy 2.4.0 оказалось не подходящей для моей системы. После удаления и обычной установки (на момент написания коментария версия 2.4.4) все запустилось и исправно работало.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *