
Sniffer di pacchetti multithread sicuro
sniffglue è uno sniffer di rete scritto in Rust. I pacchetti di rete vengono analizzati concorrentemente utilizzando un pool di thread per sfruttare tutti i core della CPU. Gli obiettivi del progetto sono che si possa eseguire sniffglue in modo sicuro su reti non affidabili e che non debba crashare durante l'elaborazione dei pacchetti. L'output dovrebbe essere il più utile possibile per impostazione predefinita.

# 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
Incluso per la prima volta in 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
Per compilare dai sorgenti assicurati di avere libpcap e libseccomp installati. Su sistemi basati su 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
Oppure puoi costruire un pacchetto Debian tramite cargo-deb:
cargo deb
Puoi costruire sniffglue come immagine docker per debug delle configurazioni dei container. L'immagine è attualmente di circa 11.1MB. Si consiglia di inviarla al proprio registro.
docker build -t sniffglue .
docker run -it --init --rm --net=host sniffglue eth0
scdoc < docs/sniffglue.1.scd > docs/sniffglue.1
Per segnalare un problema di sicurezza contatta kpcyrd su ircs://irc.hackint.org.
Per garantire che un processo compromesso non comprometta il sistema, sniffglue utilizza seccomp per limitare le syscall che possono essere usate dopo l'avvio del processo. Questo viene fatto in due fasi: prima all'inizio (subito dopo l'inizializzazione di env_logger) e poi dopo che lo sniffer è stato configurato, ma prima che i pacchetti vengano letti dalla rete.
Durante la seconda fase, viene applicato anche un hardening generale prima che tutte le syscall non necessarie vengano finalmente disabilitate. Queste sono specifiche del sistema, quindi un file di configurazione viene letto da /etc/sniffglue.conf. Questo file di configurazione specifica una directory vuota per chroot e un account senza privilegi in user che viene utilizzato per abbandonare i privilegi di root.
Questo progetto include una piccola shell basata su boxxy-rs che può essere utilizzata per esplorare il sandbox in varie fasi durante e dopo l'inizializzazione. Questo viene utilizzato anche da Travis per garantire che il sandbox blocchi effettivamente le syscall.
cargo run --example boxxy
Questo progetto viene testato utilizzando reprotest. Attualmente le seguenti varianti sono escluse:
-time - necessaria perché il certificato di crates.io scade in futuro-domain_host - richiede root per unshare(2) ed è stata esclusaNon dimenticare di installare le dipendenze di build.
ci/reprotest.sh
L'elaborazione dei pacchetti di sniffglue può essere fuzzata usando cargo-fuzz. Tutto ciò di cui hai bisogno è fornito nella directory fuzz/ distribuita insieme al codice sorgente. Nota che questo programma si collega a libpcap che non è incluso nella configurazione di fuzzing corrente.
cargo fuzz run read_packet
GPLv3+