понедельник, 15 августа 2016 г.

Как собрать wifi probe requests

Рассылка телефоном probe request

Телефон с включённым WiFi может периодически отправляет в эфир запросы, т.н. probe requests, содержащие MAC самого устройства и имя известной WiFi сети, с которой он соединялся ранее в надежде, что эта сеть ему ответит. Этот механизм, активный поиск, является альтернативным пассивному, когда устройство желая соеденится с сетью слушает эфир ожидая маячковые сообщения (beacon frames) от точки доступа [Passive WiFi Tracking].

Если устройство подключено к сети, то ему не нужно оповещать другие сети о себе. Однако, отключив устройство от точки доступа (например послав фрейм деаутентификации с помощью aireplay-ng: aireplay-ng -0 5 -a <bssid> -c <client_mac> <interface>) можно рассчитывать на то, что устройство будет зондировать эфир рассылая запросы.

Их личного опыта могу сказать, что телефон может отправлять probe request при включении или при выходе из режима "в самолёте" даже если wifi выключен в настройках.

Посмотреть пристальнее на эти пакеты можно в Wireshark используя фильтр wlan.fc.type_subtype == 4

Wireshark packet screenshot
На рисунке прежде всего интересны поля SSID - имя сети и MAC адрес устройства, которое и отправило этот пакет. Стоит отметить, что BSSID точки доступа не передаётся.
Таким образом можно привязать конкретное устройство к wifi сети (с поправкой на то, что сетей с данным именем может быть несколько) и далее попытаться определить географическое положение этой сети. Последнее возможно при помощи геоинформационных сервисов в Интернете, например WiGLE (поиск по сетям доступен после регистрации). Если в Сети данных нет, то можно обойтись собственноручно собранной информацией о местоположении WiFi сетей, например с помощью мобильных приложений (Google Play: Wigle Wifi Wardriving).

Приём probe request

Для того, чтобы принимать probe requests в режиме реального времени, включим на WiFi карте режим монитора:
airmon-ng start wlan0
а затем запустим версию wireshark с текстовым интерфейсом:
tshark -i wlan0 subtype probereq
При желании вывод программы можно настроить:
tshark -i wlan0mon  -Y 'wlan.fc.type_subtype == 4' -T fields -e frame.time -e wlan.sa_resolved -e wlan_mgt.ssid
-i wlan0mon интерфейс - wifi карта в режиме монитора;
-Y 'wlan.fc.type_subtype == 4' фильтр для печати пакетов на экран;
-T fields - определим, какие конкретно данные каждого пакета выводить на экран, приведя отдельные поля после ключа -e:
frame.time - время
wlan.sa_resolved - MAC адрес источника пакета, где половина адреса заменена на название его производителя (vendor). Если необходимости в последнем нет, то печатаем просто MAC: wlan.sa.

wlan_mgt.ssid - самое интересное, SSID сети.

Созерцание вывода программы можно соединить с одновременной записью в файл:
tshark -i wlan0mon  -Y 'wlan.fc.type_subtype == 4' -T fields -e frame.time -e wlan.sa_resolved -e wlan.sa -e wlan_mgt.ssid | tee -a probes.dump

tee - для одновременного вывода и записи в файл. tshark при печати на экран использует буфер, а ключ -l заставляет утилиту очищать буфер при выводе каждого пакета, таким образом печать будет происходить одновременно с обработкой пакета.
Отфильтруем probe request с пустым SSID (широковещательные?) добавив к фильтру выражение wlan_mgt.ssid != 0

tshark -i wlan0mon  -Y 'wlan.fc.type_subtype == 4' -T fields -e frame.time -e wlan.sa_resolved -e wlan.sa -e wlan_mgt.ssid | tee -a probes.dump
Наконец можно направив вывод через grep показывать только определённые устройства или же избавить себя от их упоминания (ключ -v):
tshark ... | grep -v -e "11:11:11:11:11:11" -e "11:11:11:11:11:22"
Сделать задачу мониторинга немного проще призван скрипт shee.sh
./shee.sh -i wlan0mon 

Кроме того, утилита может работать в нескольких режимах. Например ждать появления определённого MAC адреса в эфире и при обнаружении подавать звуковой сигнал:
sudo shee.sh -i wlan0mon -M 1 -m 11:22:33:44:55:66 -s
-M 1 - следить за конкретным MAC адресом
-m тот самый mac адрес
-s - при обнаружении подавать звуковой сигнал

***
Наблюдать устройства посылающие probe requests можно и в airodump-ng.  Утилита показывает активные устройства (мак, время появления, время последнего пакета, ESSID и т.д.). в реальном времени. Если включена запись в файл, то данные об эфире также будут сохранены в CSV файл.

Scapy

Создавать, отправлять и принимать этот тип wifi кадров, можно с помощью мощного пакета Scapy. Он включает утилиту командной строки, в которой можно выполнять операции в интерактивном режиме, и пакет для Python.

Ссылки

WiGLE - ГИС

понедельник, 1 августа 2016 г.

Raspberry Pi Notes


Установка ОС

Будем использовать Raspbian. Подготовка SD карты будут произведена в ОС Ubuntu.


1. скачать образ raspberrypi.org/downloads/raspbian/

2. распаковать
unzip 2018-03-13-raspbian-stretch.zip

3. Записать образ на SD карту.
Определить как называется SD карта в системе
lsblk

Скорее всего это что-то вида mmcblk0p1

от монтировать карту
umount /dev/mmcblk0p1

Записать образ на карту

sudo dd bs=4M if=2018-03-13-raspbian-stretch.img of=/dev/mmcblk0 conv=sync status=progress

Имя устройства должно быть  mmcblk0, не mmcblk0p1

Нижеприведённое справедливо для Raspberry Pi B+ с установленной Raspbian Jessie.

Настройка удалённого доступа

Включение ssh 

Поиск Raspberry Pi в сети

Светодиоды на плате [stackexchange]

Красный светодиод - индикатор питания. Начинает мигать если на вход платы подаётся напряжение менее 4.63 вольта, иначе горит непрерывно.
Проблемы с напряжением могу возникать и при некорректной работе (или некорректном подключении) присоединенной к GPIO переферии.
Зелёный светодиод - индикатор доступа к microSD.

Питание [raspberrypi faq]

Для корректной работы RPi B+ компьютера необходимо 1.8 А, 5 В, но может понадобится и больший (до 2.5 А) если задействованы все 4 USB порта.
Внешние жёсткие диски, без дополнительного питания часто отказываются работать. Проблему можно решить покупкой USB хаба, с собственным источником энергии. 

Первоначальная настройка

После подготовки SD карты (с Raspbian) и загрузки имеет смысл провести начальную конфигурацию запустив программу raspi-config от имени суперпользователя:
sudo raspi-config
Далее в режиме мастера настроить:
- использование всего объёма карты памяти,
- изменить пароль пользователя pi (пароль по умолчанию: raspberry),
- установить язык, раскладку клавиатуры и время,
- и многие другие параметры.

Настроить SSH сервер [Памятка пользователям ssh]

Температура компонентов [cyberciti.biz]

Температура CPU
cat /sys/class/thermal/thermal_zone0/temp
47078
Полученную цифру нужно поделить на 1000 чтобы получить температуру в градусах Цельсия.

Температура GPU
vcgencmd measure_temp
temp=47.1'C
Температура измеряется одним и тем же датчиком ибо CPU и GPU находятся на одном чипе.

GPIO [raspberrypi.org]

GPIO (general-purpose input/output) - интерфейс ввода/вывода общего назначения. При работе с GPIO удобно пользоваться интерактивной картой.

row of GPIO pins along the top edge of the board
numbering of the GPIO pins is rather weird
Самый простой и быстрый способ работы с GPIO на RPi предоставляет утилита raspi-gpio.
Он позволяет установить состояние пина ввод (ip) или вывод (ip). Во втором случае можно управлять напряжением: dl - low, dh - high.
raspi-gpio set 2 op dh  # пин 2 режим вывода, сигнал high

Работа с термодатчиком DS18B20 подключённым к шине 1-wire

Популярная однопроводная шина 1-wire используется для работы со множеством различных сенсоров и устройств. Удобство работы заключается в том, что каждое устройство работающие с этой шиной имеет уникальный идентификатор. Поэтому однотипные устройства можно соединить к шине параллельно и обращаться к ним по идентификатору.
В Raspberry Pi для работы с шиной 1-wire задействован пин GPIO4.

Диапазон измерений датчика DS18B20: от –55°C до +125°C
точность: 0.5°C в диапазоне от –10°C до +85°C. [pdf]

Установленный Raspbian упрощает считывание данных с датчика: можно читать данные из файловой системы.
Для начала работы с шиной 1-wire необходимо провести некоторые приготовления. А именно, отредактировать файл /boot/config.txt добавив в него строку dtoverlay=w1-gpio

Перезагрузив Raspberry Pi попробуем обнаружить датчик по адресу /sys/bus/w1/devices/:
ls -l /sys/bus/w1/devices/
Если датчик функционирует, то в этом каталоге он должен появится как подкаталог с именем вида 28-00000ххххххх. В этом подкаталоге должен находится файл w1_slave, в который и производится запись данных. 

Просмотрим этот файл:
cat /sys/bus/w1/devices/28-000001234567/w1_slave
98 01 4b 46 7f ff 08 10 22 : crc=22 YES
98 01 4b 46 7f ff 08 10 22 t=25500
В последней строке приведена температура. Для перевода её в градусы Цельсия нужно поделить на 1000.

... 

Ссылки