mushorg/glutton
GitHub: mushorg/glutton
Glutton 是一个协议无关的低交互蜜罐,通过覆盖全部 TCP/UDP 端口来捕获和记录恶意流量与侦察活动。
Stars: 306 | Forks: 93
# Glutton
[](https://github.com/mushorg/glutton/actions/workflows/workflow.yml)
[](https://pkg.go.dev/github.com/mushorg/glutton)
[](go.mod)
[](LICENSE)
[](https://discord.gg/xzESEhgPtk)
现代攻击者越来越依赖于隐蔽技术,例如低频度扫描、部分协议握手以及细微的行为异常,以逃避传统蜜罐的检测。由于死板的协议模拟、不完整的日志记录或对预定义攻击特征的依赖,这些系统通常无法捕获此类活动。
Glutton 旨在通过其全包揽的 TCP/UDP 方案来弥合这一差距。它无需为每个服务提供特定的协议实现,即可跨所有 TCP 和 UDP 端口及协议捕获流量。随后,其动态规则引擎会将流量重定向到特定协议的处理器,或通过内置的 TCP proxy 将其转发到上游目标,亦或对其进行通用捕获,从而在协议未知时也能保留 payload。总而言之,这为安全团队提供了洞察可能无法被检测到的侦察活动的能力。
Glutton 的核心专为以下目标而设计:
- **协议无关性:** Glutton 无需完全模拟每个协议,而是使用可配置的规则和通用处理器来处理所有端口上任何基于 TCP/UDP 的交互。
- **详细的日志记录:** Glutton 记录所有连接,包括元数据和 payload,以保留即使是部分的交互内容供进一步分析。
- **可扩展性:** 其灵活的协议处理器映射和可配置的规则使其能够快速适应并支持新协议,而无需进行大规模的架构更改。
除了 Go 处理器之外,Glutton 还包含一个新兴的 Spicy 解析器路径。Spicy 是 Zeek 项目的解析器定义语言;它允许贡献者使用一个小型的 DSL 来描述字节级的协议语法,而无需在 Go 中编写解析器。目前,Glutton 仅将 Spicy 用于 HTTP 解析和 TCP payload 协议检测。
开箱即用,Glutton 提供了用于捕获针对 Citrix ADC (CVE-2019-19781)、VMware vCenter (`hyper/send`) 和 Ethereum JSON-RPC 钱包的漏洞利用探测的处理器,以及用于 SMTP、RDP、SMB 等众多协议的交互处理器,此外还有通用的 TCP/UDP 回退机制和用于其他所有流量的 TCP proxy 转发。完整列表请参见下方的 [Glutton 捕获的内容](#what-glutton-captures)。
## 快速开始
Glutton 需要 Linux、用于 iptables 的 root 权限,以及与 [CI workflow](.github/workflows/workflow.yml) 兼容的构建工具链——目前包括 Go 1.23+、Spicy 1.13.1、clang 17、libpcap、iptables 和 zlib1g。
```
git clone https://github.com/mushorg/glutton.git
cd glutton
# 在 /opt/spicy 下安装 Spicy/HILTI(参见 docs/setup.md),然后:
export PATH=/opt/spicy/bin:$PATH
make spicy
make build
sudo bin/server -i eth0 -c config/ -l /var/log/glutton.log
```
在部署前编辑 `config/config.yaml`。将 `addresses` 设置为主机的公共 IP,并查看 `ports.`*、`producers.`*、`capture_traffic.enabled`、`dial_timeout` 以及 `config/rules.yaml` 中的规则。完整参考请见 [docs/configuration.md](docs/configuration.md)。
有关完整的构建、安装和运行时详细信息——包括 Spicy 设置、权限和操作风险——请参见 [docs/setup.md](docs/setup.md)。
## Docker
该仓库提供了一个 `Dockerfile`。要捕获真实流量,容器需要 host 网络命名空间和 `NET_ADMIN` 权限,因为 TPROXY 需在真实接口上运行:
```
docker build -t glutton .
docker run --rm --network host --cap-add=NET_ADMIN -it glutton
```
这要求主机内核支持 iptables `mangle` 和 `xt_TPROXY` 模块。如果不使用 `--network host`,容器将仅在容器网络命名空间内安装规则,并且永远无法看到外部流量。
有关完整的 Docker、权限和主机部署指南,请参见 [docs/setup.md](docs/setup.md)。
## Glutton 捕获的内容
| 名称 | 捕获内容 |
| --------------------------- | ---------------------------------------- |
| Citrix ADC (CVE-2019-19781) | `GET /vpn/*` RCE 探测 |
| VMware "hyper/send" | `* hyper/send` 请求体漏洞利用 |
| Ethereum JSON-RPC | 包含 `eth_blockNumber` 的 `POST` 请求体 |
| 钱包探测 | 包含 `wallet` 的 URI |
| SMTP | 邮件提交探测 |
| RDP | 远程桌面握手 |
| SMB | Windows 文件共享探测 |
| FTP | 文件传输命令 |
| SIP | VoIP 信令流量 |
| RFB/VNC | 远程帧缓冲认证 |
| Telnet | 交互式登录尝试 |
| MQTT | IoT 发布/订阅消息 |
| iSCSI | 块存储目标探测 |
| BitTorrent | 对等握手流量 |
| Memcache | 键值缓存命令 |
| Jabber/XMPP | 即时消息流 |
| ADB | Android Debug Bridge 探测 |
| MongoDB | wire 协议查询 |
| Hadoop YARN | `POST */cluster/apps/new-application` |
| Docker Engine API | `GET /v1.16/version` |
| HTTP | 通用 Web 请求 |
| 通用 TCP | 无法识别的 TCP payload |
| 通用 UDP | 无法识别的 UDP payload |
生产者事件输出示例:
```
{
"timestamp": "2026-05-15T12:00:00Z",
"transport": "tcp",
"srcHost": "203.0.113.10",
"srcPort": "54321",
"dstPort": 80,
"sensorID": "00000000-0000-0000-0000-000000000000",
"rule": "Rule: tcp",
"handler": "http",
"payload": "R0VUIC8gSFRUUC8xLjENCg0K",
"scanner": "",
"decoded": { "protocol": "http", "fields": {} }
}
```
## 适用场景
Glutton 是一款广度导向的传感器:它牺牲了专业蜜罐对单个协议的深度模拟,换取了对 TCP/UDP 端口空间的广泛覆盖。它不是 SIEM,不是高交互蜜网,也不能在仅限 SSH 的部署中替代 Cowrie。与 Cowrie(SSH/Telnet,高交互 shell)、Dionaea(恶意软件捕获)和 T-Pot(打包发行版)等工具相比,Glutton 的独特之处在于将广泛的协议覆盖集成于单个 Go 二进制文件中,并配备动态规则引擎、`proxy_tcp` 转发以及能随着新协议不断扩展的解析器扩展路径。
## 文档
- [入门指南](docs/setup.md)
- [配置说明](docs/configuration.md)
- [架构](docs/architecture.md)
- [日志与生产者](docs/logging.md)
- [扩展系统](docs/extension-system.md) · [添加协议](docs/protocols/adding-a-protocol.md) · [Spicy 速查表](docs/protocols/spicy-cheatsheet.md)
- [常见问题解答](docs/faq.md)
## 许可证
Glutton 基于 [MIT 许可证](LICENSE) 发布。
标签:EVTX分析, Go, Ruby工具, 低交互蜜罐, 密码管理, 日志审计, 流量捕获, 网络拓扑, 网络流量代理, 蜜罐, 证书利用, 请求拦截, 防御绕过