
Sniffer de paquetes multihilo seguro
sniffglue es un sniffer de red escrito en rust. Los paquetes de red se analizan de forma concurrente mediante un grupo de subprocesos para utilizar todos los núcleos de la CPU. Los objetivos del proyecto son que puedas ejecutar sniffglue de forma segura en redes no confiables y que no se bloquee al procesar paquetes. La salida debería ser lo más útil posible por defecto.

# 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
Incluido por primera vez en 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 desde el código fuente, asegúrate de tener libpcap y libseccomp instalados. En sistemas basados en 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
O puedes compilar un paquete Debian mediante cargo-deb:
cargo deb
Puedes compilar sniffglue como una imagen docker para depurar configuraciones de contenedores. La imagen mide actualmente unos 11.1MB. Se recomienda subirla a tu propio registro.
docker build -t sniffglue .
docker run -it --init --rm --net=host sniffglue eth0
scdoc < docs/sniffglue.1.scd > docs/sniffglue.1
Para informar de un problema de seguridad, ponte en contacto con kpcyrd en ircs://irc.hackint.org.
Para garantizar que un proceso comprometido no comprometa el sistema, sniffglue usa seccomp para restringir las syscalls que se pueden utilizar después de que el proceso se haya iniciado. Esto se hace en dos etapas: primero al principio (inmediatamente después de que env_logger se inicialice) y luego una vez que el sniffer se ha configurado, pero antes de que los paquetes se lean de la red.
Durante la segunda etapa, también se aplica cierto endurecimiento general antes
de que se deshabiliten finalmente todas las syscalls innecesarias. Estas son específicas del sistema,
por lo que se lee un archivo de configuración desde /etc/sniffglue.conf. Este archivo
de configuración especifica un directorio vacío para chroot y una cuenta sin privilegios
en user que se utiliza para abandonar los privilegios de root.
Este proyecto incluye una pequeña shell basada en boxxy-rs que se puede utilizar para explorar el sandbox en varias etapas durante y después de la inicialización. Travis también la usa para garantizar que el sandbox realmente bloquee las syscalls.
cargo run --example boxxy
Este proyecto se prueba con reprotest. Actualmente se excluyen las siguientes variaciones:
-time - necesario porque el certificado de crates.io caduca en el futuro-domain_host - requiere root para unshare(2) y se ha excluidoNo olvides instalar las dependencias de compilación.
ci/reprotest.sh
El procesamiento de paquetes de sniffglue se puede someter a fuzzing con cargo-fuzz.
Todo lo que necesitas está en el directorio fuzz/, que se distribuye
junto con su código fuente. Ten en cuenta que este programa enlaza con libpcap,
que no se incluye en la configuración de fuzzing actual.
cargo fuzz run read_packet
GPLv3+