
Localizador passivo de serviços, um sniffer em python que identifica servidores, clientes, nomes e muito mais
Localizador de serviços passivo, um sniffer em python que identifica servidores, clientes, nomes e muito mais
Notas rápidas para começar com o passer, o sniffer de serviços passivo. Você é responsável por obter permissão para fazer sniffing.
O passer pode funcionar a partir de uma captura de pacotes ao vivo ou de um arquivo pcap (parâmetro de linha de comando, veja exemplos abaixo). Ele reporta serviços e clientes ao vivo, placas ethernet na lan, entradas dns, sistemas operacionais, e roteadores - tudo passivamente!
Se você estiver usando windows ou se os caminhos para os arquivos de suporte não corresponderem aos meus por algum outro motivo, me avise onde eles estão e eu terei prazer em atualizar o 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
Para instalar o scapy, consulte o guia de instalação.
O Passer também está disponível como uma imagem Docker. Se você ainda não tem o Docker, aqui está uma forma rápida e simples de instalá-lo no Linux:
curl -fsSL https://get.docker.com | sh -
Caso contrário, siga as instruções de instalação para o seu sistema operacional.
Para a maioria dos usos, recomendamos o script passer incluído neste repositório. Este script tratará de todos os detalhes específicos do docker
wget https://raw.githubusercontent.com/activecm/passer/master/passer
chmod +x passer
Você pode então usar este script exatamente como faria em qualquer um dos exemplos abaixo. Por exemplo:
./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
Para interromper a execução do passer:
docker stop passer
/path/to/passer.py
Isto captura de todas as interfaces de rede e envia todas as linhas de saída para o seu console.
sudo /path/to/passer.py
ou
su - -c '/path/to/passer.py'
/path/to/passer.py -i IfaceName
Executar route deve mostrar algumas interfaces ativas que você pode usar.
❕
-ié incompatível com-r.
/path/to/passer.py -r /path/to/packets.pcap
❕
-ré incompatível com-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...
Isso permite capturar pacotes com qualquer ferramenta que consiga salvar pacotes em um arquivo pcap e, posteriormente, processá-los com o passer em um sistema diferente.
/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
Isto destina-se geralmente ao processo de desenvolvimento; os pacotes guardados neste ficheiro são aqueles que necessitam de ter assinaturas escritas. Contribuições de pacotes invulgares, descrições de serviços e patches ao programa são aceites com gratidão.
Isto deveria ser tão simples como colocar o filtro BPF entre aspas simples no final da linha de comandos. A partir da versão 1.16, a biblioteca subjacente não parece utilizar com sucesso o filtro fornecido, mas existe uma solução alternativa. Use o tcpdump para fazer a filtragem e entregue o conjunto reduzido de pacotes ao passer via stdin, como acima:
tcpdump -r packets.pcap -w - 'icmp or arp' | ./passer.py -r /proc/self/fd/0
Consulte a seção "Filtros de exemplo", abaixo, para algumas sugestões de filtros a serem usados tanto na captura prévia de pacotes quanto na captura ao vivo.
socket.error: (1, 'Operation not permitted')
Você provavelmente está tentando fazer sniff ao vivo como um usuário não-root. Faça login como root, use sudo/su, ou trabalhe com arquivos pcap.
Se o passer travar ou não funcionar no seu sistema, por favor abra uma issue que inclua a mensagem de erro, se houver, e quaisquer detalhes sobre o seu sistema operacional.
A saída do Passer vai para stdout e, se você fornecer o parâmetro de linha de comando -l /path/to/logfile, também para esse arquivo. Aqui está o formato:
| 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 |
As linhas são separadas por vírgula para facilitar o carregamento em uma planilha ou importação SQL. Nenhum dos campos deve conter vírgulas. Há um arquivo de saída de exemplo em http://www.stearns.org/passer/passer-sample-log.txt .
Aqui estão alguns exemplos de como obter os dados que você deseja a partir dessas linhas:
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