
Sniffer de pacotes multithread seguro
sniffglue é um sniffer de rede escrito em rust. Os pacotes de rede são analisados concorrentemente usando um pool de threads para utilizar todos os núcleos de CPU. Os objetivos do projeto são que você possa executar sniffglue com segurança em redes não confiáveis e que ele não trave ao processar pacotes. A saída deve ser tão útil quanto possível por padrão.

# sniff with default filters (dhcp, dns, tls, http)
sniffglue enp0s25
# increase the filter sensitivity (arp)
sniffglue -v enp0s25
# increase the filter sensitivity (cjdns, ssdp, dropbox, packets with valid utf8)
sniffglue -vv enp0s25
# almost everything
sniffglue -vvv enp0s25
# everything
sniffglue -vvvv enp0s25
pacman -S sniffglue
brew install sniffglue
Incluído pela primeira vez no debian bullseye, ubuntu 21.04.
apt install sniffglue
apk add sniffglue
layman -a pentoo
emerge --ask net-analyzer/sniffglue
nix-env -i sniffglue
guix install sniffglue
dnf copr enable atim/sniffglue -y
dnf install sniffglue
Para compilar a partir do código-fonte, certifique-se de ter libpcap e libseccomp instalados. Em sistemas baseados em debian:
# install the dependencies
sudo apt install libpcap-dev libseccomp-dev
# install rust with rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# install sniffglue and test it
cargo install sniffglue
sniffglue --help
Ou você pode compilar um pacote Debian via cargo-deb:
cargo deb
Você pode compilar sniffglue como uma imagem docker para depurar configurações de contêineres. A imagem atualmente tem cerca de 11.1MB. É recomendado enviá-la para o seu próprio registro.
docker build -t sniffglue .
docker run -it --init --rm --net=host sniffglue eth0
scdoc < docs/sniffglue.1.scd > docs/sniffglue.1
Para relatar um problema de segurança, entre em contato com kpcyrd em ircs://irc.hackint.org.
Para garantir que um processo comprometido não comprometa o sistema, o sniffglue usa seccomp para restringir as chamadas de sistema que podem ser usadas após o início do processo. Isso é feito em duas etapas: primeiro bem no início (diretamente após a inicialização do env_logger) e depois que o sniffer foi configurado, mas antes que os pacotes sejam lidos da rede.
Durante o segundo estágio, também há algum endurecimento geral que é aplicado antes que todas as chamadas de sistema desnecessárias sejam finalmente desabilitadas. Essas são específicas do sistema, então um arquivo de configuração é lido de /etc/sniffglue.conf. Este arquivo de configuração especifica um diretório vazio para chroot e uma conta sem privilégios em user que é usada para abandonar os privilégios de root.
Este projeto inclui um pequeno shell baseado em boxxy-rs que pode ser usado para explorar a sandbox em vários estágios durante e após a inicialização. Isso também é usado pelo travis para garantir que a sandbox realmente bloqueie chamadas de sistema.
cargo run --example boxxy
Este projeto é testado usando reprotest. Atualmente, as seguintes variações são excluídas:
-time - necessário porque o certificado do crates.io expira no futuro-domain_host - exige root para unshare(2) e foi excluídoNão se esqueça de instalar as dependências de build.
ci/reprotest.sh
O processamento de pacotes do sniffglue pode ser submetido a fuzzing usando cargo-fuzz. Tudo o que você precisa é fornecido no diretório fuzz/, que é distribuído junto com o código-fonte. Observe que este programa faz link com libpcap, que não está incluída na configuração de fuzzing atual.
cargo fuzz run read_packet
GPLv3+