anujs-27/SpectreGate

GitHub: anujs-27/SpectreGate

SpectreGate 是一个基于 Rust 和 libpcap 的零套接字端口敲门网关,通过被动嗅探加密敲门包并动态修改 nftables 规则来隐藏和保护敏感端口。

Stars: 0 | Forks: 0

# SpectreGate - 一款使用 Rust 编写的异步、零套接字、隐蔽端口授权工具🦀 ## 架构 ### > 客户端 #### 当客户端创建 payload 时,它最初是这样的: ``` packet-beta 0-7: "Timestamp (8 bytes)" 8-9: "Port (2 bytes)" 10-17: "Padding length prefix (8 bytes)" ``` #### 但为了防止网络指纹识别,会添加随机字节填充,使其大小达到 64 字节。 ``` --- title: "Raw Padded Payload Structure" --- packet-beta 0-7: "Timestamp (8 bytes)" 8-9: "Port (2 bytes)" 10-17: "Padding length prefix (8 bytes)" 18-63: "Random bytes (46 bytes)" ``` #### 随后,使用 ChaCha20Poly1305 AEAD 算法和 32 字节长的密钥对该数据包进行加密。此后,传输线路上的数据如下所示: ``` packet-beta 0-11: "NONCE (12 bytes)" 12-75: "Cipher text (64 bytes)" 76-91: "Auth tag (16 bytes)" ``` ### > Daemon 端 #### daemon 在用户空间中持续运行,并使用 libpcap 和 BPF 循环嗅探数据包。它作为网络接口卡 (NIC) 上的被动监听分接,读取原始网络层帧。它会切开帧以提取 IPv4 地址,分离出 UDP 流量头部和原始的加密 payload。它会丢弃损坏或无效的互联网帧。 #### 如果密文被顺利解密且密钥通过验证,则会将时间戳与设定的时间漂移(即 15 秒)进行比较,随后修改 nftables,使该端口在 10 秒的时间窗口内可访问,在此期间,客户端可以访问它。 ## 安全措施 - 零 socket 占用:Daemon 不绑定到 socket,以减少暴露面。 - 固定大小 payload:降低网络指纹识别的风险。 - 存储 NONCE:将已见的 NONCE 存储起来,以防止重放攻击。 ## 工具链 ### Rust - 稳定版 Rust 工具链 - cargo 和 rustc ### Crate 依赖: | Crate | 版本 | 特定架构用途 | | :--- | :--- | :--- | | **`serde`** | `1.0` | 为原生 Rust 结构体提供序列化框架宏 (`#[derive(Serialize, Deserialize)]`)。 | | **`bincode`** | `1.3.3` | 使用显式的尾字节容错配置,处理紧凑、低开销的二进制编码和解码。 | | **`chrono`** | `0.4` | 管理两个主机节点之间的实时时钟捕获和 epoch 验证格式化。 | | **`chacha20poly1305`** | `0.10` | 实现认证加密与关联数据 (AEAD) 标准,以实现防篡改的数据隐私。 | | **`tokio`** | `1.35` | 为异步多线程运行时引擎提供动力,解锁并发的数据包流处理通道。 | | **`rand`** | `0.10.1` | 提供 安全的随机数生成子系统,用于生成 nonce 和 payload 混淆填充。 | | **`clap`** | `4.6.1` | 将声明式命令行输入和参数解析为运行时的类型化配置。 | | **`pcap`** | `2.4.0` | 直接与系统底层的 `libpcap` 库交互,绑定基于原始事件的捕获流。 | | **`futures`** | `0.3` | 扩展异步原语操作,支持异步流处理和数据包迭代。 | | **`etherparse`** | `0.20.2` | 执行零拷贝的网络数据包头部切片,以最高效率提取内部的第 4 层数据块。 | ### 系统依赖 - libpcap 开发头文件 ### Linux 权限 - CAP_NET_RAW 和 CAP_NET_ADMIN 或 - Root 权限 ## 命令行参数 ### Daemon 二进制文件 #### ```--interface```:目标网卡名称。 #### ```--port ```:BPF 过滤器监听的端口。 #### ```--key ```:共享密钥的路径。 ### Client 二进制文件 #### ```--server ```:目标主机的 IP 地址。 #### ```--port ```:指定的 UDP 敲击端口。 #### ```--open-port```:你想要解锁的端口。 #### ```--key ```:共享密钥的路径。 ## 自行测试 #### 创建测试环境: ``` # 初始化一个用于测试的隔离 'client_ns' network namespace 和 veth 对 sudo bash ./test/test_env.sh ``` #### 运行目标服务(主机工作区) ``` nc -nvlp 22 -s 10.0.0.1 ``` #### 运行 daemon(主机工作区) ``` # 生成 32 字节长的 secret key dd if=/dev/urandom of=./secret.key bs=1 count=32 # 运行 daemon sudo ./target/release/spectregate-daemon \ --interface veth_server \ --port 4192 \ --key ./secret.key ``` #### 运行并使用客户端测试 ``` # 向 daemon 发送 knock sudo ip netns exec client_ns ./target/release/spectregate-client \ --server 10.0.0.1 \ --port 4192 \ --open-port 22 \ --key ./secret.key # 使用 nmap 进行测试 sudo ip netns exec client_ns nmap -sU -sS -p U:4192,T:22 10.0.0.1 ``` ## 限制
标签:DNS 反向解析, nftables, Rust, 可视化界面, 目录遍历, 端口敲门, 网络安全, 网络流量审计, 网络隐身, 通知系统, 隐私保护