
Пассивный определитель сервисов — это сниффер на Python, который идентифицирует серверы, клиентов, имена и многое другое
Пассивный локатор сервисов, python-сниффер, который определяет серверы, клиентов, имена и многое другое
Краткие заметки для начала работы с passer, пассивным сниффером сервисов. Вы несёте ответственность за получение разрешения на сниффинг.
Passer может работать с живым захватом пакетов или из pcap-файла (параметр командной строки, см. примеры ниже). Он сообщает о живых сервисах и клиентах, ethernet-картах в локальной сети, DNS-записях, операционных системах и маршрутизаторах — и всё это пассивно!
Если вы используете Windows или ваши пути к вспомогательным файлам не совпадают с моими по какой-то другой причине, сообщите мне, где они находятся, и я с удовольствием обновлю скрипт.
# Install system dependencies
sudo apt-get install arp-scan ettercap-text-only nmap wireshark
# Install python dependencies
sudo pip install -r requirements.txt
# Prevent Scapy from performing DNS lookups
echo 'noenum = [ Resolve(), TCP_SERVICES, UDP_SERVICES ]' >> ~/.scapy_startup.py
# Install system dependencies
sudo yum install arp-scan ettercap nmap wireshark
# Install python dependencies
sudo pip install -r requirements.txt
# Prevent Scapy from performing DNS lookups
echo 'noenum = [ Resolve(), TCP_SERVICES, UDP_SERVICES ]' >> ~/.scapy_startup.py
Чтобы установить scapy, см. руководство по установке.
Passer также поставляется в виде Docker-образа. Если у вас ещё нет Docker, вот быстрый и простой способ установить его в Linux:
curl -fsSL https://get.docker.com | sh -
В остальных случаях следуйте инструкциям по установке для вашей операционной системы.
Для большинства случаев мы рекомендуем скрипт passer, включённый в этот репозиторий. Этот скрипт обрабатывает все специфичные для Docker
wget https://raw.githubusercontent.com/activecm/passer/master/passer
chmod +x passer
Затем вы можете использовать этот скрипт так же, как в любом из примеров ниже. Например:
./passer -i eth0
# The equivalent without using the included script would be:
docker run --rm --name=passer -i --init --net=host --cap-add=net_raw activecm/passer -i eth0
Чтобы остановить passer, выполните:
docker stop passer
/path/to/passer.py
Перехватывает трафик со всех сетевых интерфейсов и выводит все строки в вашу консоль.
sudo /path/to/passer.py
или
su - -c '/path/to/passer.py'
/path/to/passer.py -i IfaceName
Выполнение route должно показать некоторые активные интерфейсы, которые вы можете использовать.
❕
-iнесовместим с-r.
/path/to/passer.py -r /path/to/packets.pcap
❕
-rнесовместим с-i.
cat packetdata.pcap | ./passer.py -r /proc/self/fd/0
zcat packetdata.pcap.gz | ./passer.py -r /proc/self/fd/0
bzcat packetdata.pcap.bz2 | ./passer.py -r /proc/self/fd/0
tcpdump -i eth0 -qtnp -w - | ./passer.py -r /proc/self/fd/0
# etc...
Это позволяет захватывать пакеты любым инструментом, который умеет сохранять пакеты в файл pcap, а затем обрабатывать их с помощью passer в другой системе.
/path/to/passer.py -l /path/to/networkinfo.txt
/path/to/passer.py 2>/dev/null
/path/to/passer.py -h
/path/to/passer.py -u /path/to/oddpackets.pcap
В основном это предназначено для процесса разработки; пакеты, сохраняемые в этот файл, — это те, для которых нужно записать сигнатуры. Вклады в виде необычных пакетов, описаний сервисов и патчей к программе с благодарностью принимаются.
Это должно быть так же просто, как заключить BPF-фильтр в одинарные кавычки в конце командной строки. Начиная с версии 1.16, базовая библиотека, по-видимому, не использует успешно переданный фильтр, но есть обходной путь. Используйте tcpdump для фильтрации и передайте сокращённый набор пакетов в passer через stdin, как показано выше:
tcpdump -r packets.pcap -w - 'icmp or arp' | ./passer.py -r /proc/self/fd/0
См. раздел «Примеры фильтров» ниже, где приведены некоторые предложения по фильтрам, которые можно использовать как при предварительном захвате пакетов, так и при сниффинге в реальном времени.
socket.error: (1, 'Operation not permitted')
Скорее всего, вы пытаетесь прослушивать трафик в реальном времени как пользователь без прав root. Либо войдите как root, используйте sudo/su, либо работайте с pcap-файлами.
Если passer падает или не работает в вашей системе, пожалуйста, создайте issue, указав сообщение об ошибке, если оно есть, и любые сведения о вашей операционной системе.
Вывод Passer направляется в stdout, а если вы укажете параметр командной строки -l /path/to/logfile, то и в этот файл. Вот формат:
| Type | IPAddr | Proto | State | Optional description (may be empty) |
|---|---|---|---|---|
| 'IP' | IPaddr | 'IP' | dead or live | p0f OS description |
| 'MA' | IPaddr | 'Ethernet' | MacAddr | ManufDescription |
| 'TC' | IPaddr | 'TCP_'Port | closed or open | client description |
| 'TS' | IPaddr | 'TCP_'Port | closed or listening | server description |
| 'UC' | IPaddr | 'UDP_'Port | open or closed | udp client port description |
| 'US' | IPaddr | 'UDP_'Port | open or closed | udp server port description |
| 'DN' | IPaddr | 'A' or 'PTR' | hostname | possible extra info |
| 'RO' | IPaddr | 'TTLEx' | router | possible extra info |
Строки разделены запятыми для удобной загрузки в электронную таблицу или импорта в SQL. Ни одно из полей не должно содержать запятых. Пример выходного файла находится по адресу http://www.stearns.org/passer/passer-sample-log.txt .
Вот несколько примеров того, как извлечь нужные данные из этих строк:
cat /var/tmp/passer-log | sort -u | less
cat /var/tmp/passer-log | sort -t, -k2 -u | less
cat /var/tmp/passer-log | sort -u | egrep '(^DN|^RO)' | less
cat /var/tmp/passer-log | sort -u | grep ',192\.168\.0\.17,' | less
cat /var/tmp/passer-log | sort -u | grep ',192\.168\.' | less