
セキュアなマルチスレッドパケットスニッファ
sniffglue は Rust で書かれたネットワークスニファです。ネットワークパケットは、すべての CPU コアを活用するためにスレッドプールを使って並行して解析されます。このプロジェクトの目標は、信頼できないネットワーク上でも 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
または、cargo-deb を使って Debian パッケージをビルドすることもできます:
cargo deb
コンテナ環境のデバッグに使えるように、sniffglue を Docker イメージとしてビルドできます。イメージは現在約 11.1MB です。自分のレジストリにプッシュすることをお勧めします。
docker build -t sniffglue .
docker run -it --init --rm --net=host sniffglue eth0
scdoc < docs/sniffglue.1.scd > docs/sniffglue.1
セキュリティ問題を報告するには、ircs://irc.hackint.org で kpcyrd に連絡してください。
たとえプロセスが侵害されてもシステム全体が侵害されないようにするため、sniffglue は seccomp を使用して、プロセス起動後に使用できるシステムコールを制限しています。これは2段階で行われます。最初の段階はごく初期(env_logger の初期化直後)で、もう1つの段階はスニファのセットアップ後、ネットワークからパケットを読み取る前です。
第2段階では、不要なシステムコールがすべて最終的に無効化される前に、いくつかの一般的な堅牢化処理も適用されます。これらはシステム固有のため、設定ファイルが /etc/sniffglue.conf から読み込まれます。この設定ファイルは、chroot 用の空ディレクトリと、root 権限を放棄するために使用する非特権アカウントを user に指定します。
このプロジェクトには、初期化中および初期化後のさまざまな段階でサンドボックスを調査するために使える、小さな boxxy-rs ベースのシェルが含まれています。これは、サンドボックスが実際にシステムコールをブロックすることを確認するためにも travis で使用されています。
cargo run --example boxxy
このプロジェクトは reprotest を使ってテストされています。現在、以下のバリエーションは除外されています:
-time - crates.io の証明書が将来失効するため必要-domain_host - unshare(2) に root が必要なため除外済みビルド依存関係のインストールをお忘れなく。
ci/reprotest.sh
sniffglue のパケット処理は、cargo-fuzz を使ってファジングできます。必要なものはすべて、ソースコードと一緒に配布されている fuzz/ ディレクトリ内に用意されています。このプログラムは libpcap にリンクしていますが、現在のファジング設定には含まれていないことに注意してください。
cargo fuzz run read_packet
GPLv3+