
Sicherer Multithread-Paket-Sniffer
sniffglue ist ein Netzwerk-Sniffer, geschrieben in Rust. Netzwerkpakete werden gleichzeitig mit einem Thread-Pool verarbeitet, um alle CPU-Kerne zu nutzen. Die Projektziele sind, dass sniffglue sicher in nicht vertrauenswürdigen Netzwerken ausgeführt werden kann und dass es beim Verarbeiten von Paketen nicht abstürzen darf. Die Ausgabe sollte standardmäßig so nützlich wie möglich sein.

# Mit Standardfiltern schnüffeln (dhcp, dns, tls, http)
sniffglue enp0s25
# Filterempfindlichkeit erhöhen (arp)
sniffglue -v enp0s25
# Filterempfindlichkeit erhöhen (cjdns, ssdp, dropbox, Pakete mit gültigem UTF-8)
sniffglue -vv enp0s25
# Fast alles
sniffglue -vvv enp0s25
# Alles
sniffglue -vvvv enp0s25
pacman -S sniffglue
brew install sniffglue
Erstmals enthalten 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
Um aus dem Quellcode zu bauen, stellen Sie sicher, dass libpcap und libseccomp installiert sind. Auf Debian-basierten Systemen:
# Abhängigkeiten installieren
sudo apt install libpcap-dev libseccomp-dev
# Rust mit rustup installieren
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# sniffglue installieren und testen
cargo install sniffglue
sniffglue --help
Oder Sie können ein Debian-Paket über cargo-deb erstellen:
cargo deb
Sie können sniffglue als Docker-Image erstellen, um Container-Setups zu debuggen. Das Image ist derzeit etwa 11.1MB. Es wird empfohlen, es in Ihre eigene Registry zu pushen.
docker build -t sniffglue .
docker run -it --init --rm --net=host sniffglue eth0
scdoc < docs/sniffglue.1.scd > docs/sniffglue.1
Um ein Sicherheitsproblem zu melden, kontaktieren Sie bitte kpcyrd auf ircs://irc.hackint.org.
Um sicherzustellen, dass ein kompromittierter Prozess das System nicht gefährdet, verwendet sniffglue seccomp, um die Systemaufrufe einzuschränken, die nach dem Start des Prozesses verwendet werden können. Dies erfolgt in zwei Phasen, zuerst ganz am Anfang (direkt nach der Initialisierung von env_logger) und dann nachdem der Sniffer eingerichtet wurde, aber bevor Pakete aus dem Netzwerk gelesen werden.
Während der zweiten Phase wird auch eine allgemeine Härtung angewendet, bevor alle unnötigen Systemaufrufe endgültig deaktiviert werden. Diese sind systemspezifisch, daher wird eine Konfigurationsdatei aus /etc/sniffglue.conf gelesen. Diese Konfigurationsdatei gibt ein leeres Verzeichnis für chroot und ein unprivilegiertes Konto in user an, mit dem Root-Rechte aufgegeben werden.
Dieses Projekt enthält eine kleine auf boxxy-rs basierende Shell, die verwendet werden kann, um die Sandbox in verschiedenen Phasen während und nach der Initialisierung zu erkunden. Dies wird auch von Travis verwendet, um sicherzustellen, dass die Sandbox tatsächlich Systemaufrufe blockiert.
cargo run --example boxxy
Dieses Projekt wird mit reprotest getestet. Derzeit sind die folgenden Variationen ausgeschlossen:
-time - benötigt, weil das crates.io-Zertifikat in der Zukunft abläuft-domain_host - erfordert root für unshare(2) und wurde ausgeschlossenVergessen Sie nicht, die Build-Abhängigkeiten zu installieren.
ci/reprotest.sh
Die Paketverarbeitung von sniffglue kann mit cargo-fuzz gefuzzt werden. Alles, was Sie benötigen, wird im Verzeichnis fuzz/ bereitgestellt, das zusammen mit dem Quellcode verteilt wird. Beachten Sie, dass dieses Programm mit libpcap verknüpft ist, das nicht in der aktuellen Fuzzing-Konfiguration enthalten ist.
cargo fuzz run read_packet
GPLv3+