
Localisateur de services passif, un sniffer Python qui identifie les serveurs, les clients, les noms et bien plus encore
Localisateur de services passif, un renifleur Python qui identifie les serveurs, les clients, les noms et bien plus encore
Notes rapides pour démarrer avec passer, le renifleur de services passif. Il vous incombe d'obtenir l'autorisation de renifler.
Passer peut fonctionner à partir d'une capture de paquets en direct ou depuis un fichier pcap (paramètre en ligne de commande, voir les exemples ci-dessous). Il signale les services et clients actifs, les cartes Ethernet sur le réseau local, les entrées DNS, les systèmes d'exploitation, et les routeurs - le tout de manière passive !
Si vous utilisez Windows ou si vos chemins vers les fichiers de support ne correspondent pas aux miens pour une autre raison, indiquez-moi où ils se trouvent et je serai ravi de mettre à jour le script.
# 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
Pour installer scapy, consultez le guide d'installation.
Passer est également fourni sous forme d'image Docker. Si vous n'avez pas déjà Docker, voici une méthode rapide et simple pour l'installer sous Linux :
curl -fsSL https://get.docker.com | sh -
Sinon, suivez les instructions d'installation pour votre système d'exploitation.
Pour la plupart des usages, nous recommandons le script passer inclus dans ce dépôt. Ce script gère tous les aspects spécifiques à Docker
wget https://raw.githubusercontent.com/activecm/passer/master/passer
chmod +x passer
Vous pouvez ensuite utiliser ce script exactement comme dans n'importe lequel des exemples ci-dessous. Par exemple :
./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
Afin d'arrêter l'exécution de passer :
docker stop passer
/path/to/passer.py
Ceci capture le trafic de toutes les interfaces réseau et envoie toutes les lignes de sortie vers votre console.
sudo /path/to/passer.py
ou
su - -c '/path/to/passer.py'
/path/to/passer.py -i IfaceName
L'exécution de route devrait afficher quelques interfaces actives que vous pourriez utiliser.
❕
-iest incompatible avec-r.
/path/to/passer.py -r /path/to/packets.pcap
❕
-rest incompatible avec-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...
Cela vous permet de capturer des paquets avec n'importe quel outil capable d'enregistrer des paquets dans un fichier pcap, puis de les traiter ultérieurement avec passer sur un système différent.
/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
Ceci est généralement destiné au processus de développement ; les paquets enregistrés dans ce fichier sont ceux dont les signatures doivent être écrites. Les contributions de paquets inhabituels, les descriptions de services et les correctifs au programme sont acceptés avec gratitude.
Cela devrait être aussi simple que de placer le filtre BPF entre guillemets simples à la fin de la ligne de commande. Depuis la version 1.16, la bibliothèque sous-jacente ne semble pas utiliser avec succès le filtre fourni, mais il existe une solution de contournement. Utilisez tcpdump pour effectuer le filtrage, et transmettez l'ensemble réduit de paquets à passer sur stdin, comme ci-dessus :
tcpdump -r packets.pcap -w - 'icmp or arp' | ./passer.py -r /proc/self/fd/0
Voir la section « Exemples de filtres » ci-dessous pour quelques suggestions de filtres à utiliser, que ce soit pour la capture préalable de paquets ou pour l'analyse en direct.
socket.error: (1, 'Operation not permitted')
Vous essayez probablement de sniffer en direct en tant qu'utilisateur non-root. Soit connectez-vous en tant que root, utilisez sudo/su, ou travaillez avec des fichiers pcap.
Si passer plante ou ne fonctionne pas sur votre système, veuillez créer un ticket qui inclut le message d'erreur, le cas échéant, et tout détail concernant votre système d'exploitation.
La sortie de Passer va vers stdout, et si vous donnez le paramètre
de ligne de commande -l /path/to/logfile, vers ce fichier également. Voici le format :
| 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 |
Les lignes sont séparées par des virgules pour un chargement facile dans un tableur ou une importation SQL. Aucun des champs ne doit contenir de virgules. Il y a un fichier de sortie d'exemple à http://www.stearns.org/passer/passer-sample-log.txt .
Voici quelques exemples pour extraire les données souhaitées à partir de ces lignes :
cat /var/tmp/passer-log | sort -u | less