
안전한 멀티스레드 패킷 스니퍼
sniffglue는 rust로 작성된 네트워크 스니퍼입니다. 네트워크 패킷은 스레드 풀을 사용하여 동시에 파싱되며 모든 CPU 코어를 활용합니다. 프로젝트 목표는 신뢰할 수 없는 네트워크에서도 sniffglue를 안전하게 실행할 수 있고, 패킷을 처리할 때 크래시가 발생하지 않아야 한다는 것입니다. 출력은 기본적으로 가능한 한 유용해야 합니다.

# 기본 필터로 스니핑 (dhcp, dns, tls, http)
sniffglue enp0s25
# 필터 민감도 증가 (arp)
sniffglue -v enp0s25
# 필터 민감도 증가 (cjdns, ssdp, dropbox, 유효한 utf8 패킷)
sniffglue -vv enp0s25
# 거의 모든 것
sniffglue -vvv enp0s25
# 모든 것
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가 설치되어 있어야 합니다. 데비안 계열 시스템에서는:
# 의존성 설치
sudo apt install libpcap-dev libseccomp-dev
# rustup으로 rust 설치
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# sniffglue 설치 및 테스트
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를 사용하여 프로세스 시작 후 사용할 수 있는 syscall을 제한합니다. 이는 두 단계로 수행됩니다. 첫 번째는 맨 처음(env_logger 초기화 직후)이고, 두 번째는 스니퍼가 설정된 후 네트워크에서 패킷을 읽기 전입니다.
두 번째 단계에서는 모든 불필요한 syscall이 최종적으로 비활성화되기 전에 적용되는 일반적인 하드닝도 있습니다. 이는 시스템별로 다르므로 /etc/sniffglue.conf에서 구성 파일을 읽습니다. 이 구성 파일은 chroot용 빈 디렉터리와 root 권한을 내려놓는 데 사용되는 user의 권한 없는 계정을 지정합니다.
이 프로젝트에는 초기화 중 및 초기화 후 다양한 단계에서 샌드박스를 탐색하는 데 사용할 수 있는 작은 boxxy-rs 기반 셸이 포함되어 있습니다. 또한 travis에서 샌드박스가 실제로 syscall을 차단하는지 확인하는 데 사용됩니다.
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+