
Безопасный многопоточный сниффер пакетов
sniffglue — это сетевой сниффер, написанный на Rust. Сетевые пакеты анализируются конкурентно с использованием пула потоков для загрузки всех ядер процессора. Цели проекта: вы можете безопасно запускать sniffglue в ненадёжных сетях, и он не должен аварийно завершаться при обработке пакетов. Вывод по умолчанию должен быть максимально полезным.

# 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
Впервые включён в 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
Для сборки из исходников убедитесь, что у вас установлены libpcap и libseccomp. В системах на основе 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
Или вы можете собрать пакет Debian с помощью cargo-deb:
cargo deb
Вы можете собрать sniffglue как образ Docker для отладки контейнерных сред. Образ в настоящее время занимает около 11,1 МБ. Рекомендуется отправить его в свой собственный реестр.
docker build -t sniffglue .
docker run -it --init --rm --net=host sniffglue eth0
scdoc < docs/sniffglue.1.scd > docs/sniffglue.1
Чтобы сообщить о проблеме безопасности, свяжитесь с kpcyrd на ircs://irc.hackint.org.
Чтобы гарантировать, что скомпрометированный процесс не скомпрометирует систему, sniffglue использует seccomp для ограничения системных вызовов, которые могут быть использованы после запуска процесса. Это делается в два этапа: первый — в самом начале (сразу после инициализации env_logger), и второй — после настройки сниффера, но до чтения пакетов из сети.
На втором этапе также применяется общее укрепление до того, как все ненужные системные вызовы будут окончательно отключены. Это зависит от системы, поэтому читается конфигурационный файл из /etc/sniffglue.conf. Этот файл конфигурации указывает пустую директорию для chroot и непривилегированный аккаунт в user, который используется для сброса привилегий root.
Этот проект включает небольшую оболочку на основе boxxy-rs, которая может быть использована для исследования песочницы на различных этапах во время и после инициализации. Это также используется Travis CI для проверки, что песочница действительно блокирует системные вызовы.
cargo run --example boxxy
Этот проект тестируется с помощью reprotest. В настоящее время исключены следующие вариации:
-time — требуется, так как сертификат crates.io истекает в будущем-domain_host — требует root для unshare(2) и был исключёнНе забудьте установить зависимости сборки.
ci/reprotest.sh
Обработка пакетов sniffglue может быть протестирована с помощью фаззинга с использованием cargo-fuzz. Всё необходимое предоставлено в каталоге fuzz/, который распространяется вместе с исходным кодом. Обратите внимание, что эта программа линкуется с libpcap, который не включён в текущую конфигурацию фаззинга.
cargo fuzz run read_packet
GPLv3+