pathei-kosmos/ghoney
GitHub: pathei-kosmos/ghoney
一个用 Go 编写的轻量级 HTTP 蜜罐,通过暴露逼真的诱饵端点来检测和记录常见 Web 攻击行为。
Stars: 0 | Forks: 0
# 🍯 ghoney
```
_
__ _| |__ ___ _ __ ___ _ _
/ _` | '_ \ / _ \| '_ \ / _ \ | | |
| (_| | | | | (_) | | | | __/ |_| |
\__, |_| |_|\___/|_| |_|\___|\__, |
|___/ |___/
```
**一个部署在互联网喧嚣角落的轻量级 HTTP 蜜罐。**
**ghoney** 暴露了逼真的诱饵 endpoint,能够检测常见的攻击模式,并将产生的流量转化为结构化日志、[Prometheus](https://prometheus.io/) 指标以及一个本地仪表盘。它刻意保持轻量化和临时性,使用 [Distroless](https://github.com/GoogleContainerTools/distroless) 镜像、非 root 运行时、只读文件系统,并支持可选的 [gVisor](https://gvisor.dev/) 和自定义 [Seccomp](https://en.wikipedia.org/wiki/Seccomp) 隔离。

## ✨ 它能捕获什么
- SQL injection、路径遍历、命令注入、SSRF、LFI/RFI 以及 XML 实体 payload
- 对诱饵路由的请求,例如 `/admin`、`/api/v1/auth` 和 `/.git/config`
未知路由会响应一个可取消的随机 1-3 秒延迟。请求体、日志、指标标签、并发数以及内存中的事件缓冲区均有严格上限。
## 🚀 快速开始
你需要 Git 和一个正在运行的 Docker Engine。
```
git clone https://github.com/pathei-kosmos/ghoney.git
cd ghoney
docker build -t ghoney .
docker run -d --name ghoney_server --cap-drop=ALL --security-opt no-new-privileges -p 8080:8080 -p 127.0.0.1:9090:9090 --restart unless-stopped --read-only --memory=128m --cpus=1 --pids-limit=64 --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 ghoney
```
在 [localhost:9090/dashboard](http://localhost:9090/dashboard) 打开本地仪表盘。
| URL | 用途 |
| --- | --- |
| `localhost:8080/admin` | 诱饵管理员登录 |
| `localhost:8080/api/v1/auth` | 诱饵认证 API |
| `localhost:8080/.git/config` | 诱饵暴露的仓库配置 |
| `localhost:9090/dashboard` | 本地活动仪表盘 |
| `localhost:9090/metrics` | 有限制的 Prometheus 指标 |
| `localhost:9090/health` | 健康检查 |
端口 `8080` 是公开的蜜罐暴露面。端口 `9090` 仅在宿主机的回环地址上发布,因此远程主机无法直接访问该仪表盘。
## 🧪 验证检测
以下请求会为每个受支持的攻击类型生成一个事件:
```
curl -X POST "http://localhost:8080/api/v1/auth" -H "Content-Type: application/x-www-form-urlencoded" --data "u=' OR 1=1 --"
curl "http://localhost:8080/?p=..%2F..%2Fetc%2Fpasswd"
curl -X POST "http://localhost:8080/" -H "Content-Type: application/xml" --data ''
curl "http://localhost:8080/?cmd=whoami%20%26%26%20id"
curl "http://localhost:8080/?url=http://169.254.169.254/latest/meta-data/"
curl "http://localhost:8080/?file=php://filter/read=convert.base64-encode/resource=/etc/passwd"
```
认证 endpoint 会响应 `HTTP 200`。其他请求则指向未定义的 `/` 路由,并在刻意设置的延迟后响应 `HTTP 404`。所有 payload 都会被检测到。
在仪表盘或命令行中查看这些事件:
```
curl http://localhost:9090/api/dashboard-data
docker logs ghoney_server
```
## 🛡️ 多层隔离
**ghoney** 结合了轻量级的应用暴露面与容器级别的安全加固:
| 层级 | 作用 |
| --- | --- |
| **Distroless 镜像** | 提供仅包含服务器的运行环境,没有 shell、包管理器或不必要的工具 |
| **非 root + 只读** | 以 `nonroot` 用户身份运行,不包含可写的应用程序文件系统 |
| **Capabilities + 特权** | 丢弃所有 Linux capability 并防止特权提升 |
| **资源限制** | 限制内存、CPU 和进程消耗 |
| **Docker Seccomp** | 在标准部署中使用 Docker 维护的默认策略 |
| **自定义 Seccomp** | 用 ghoney 更严格的 x86-64 Linux syscall 白名单替代 Docker 的通用策略 |
| **gVisor** | 可选地在 ghoney 和宿主机之间放置一个用户态内核 |
快速入门会自动使用 Docker 的默认 Seccomp 策略;它不需要自定义配置文件或 gVisor。这适用于 Linux 上的 Docker Engine,以及在 Windows 或 macOS 上运行 Linux 容器的 Docker Desktop。ghoney 不会持久化任何应用数据。
为了在 x86-64 Linux 上实现更严格的 syscall 隔离,ghoney 包含了一个[项目专用的 Seccomp 白名单](seccomp.json),该白名单在 Docker 的通用默认配置文件基础之上,进一步缩减了面向内核的攻击面:
```
docker run -d --name ghoney_server \
--cap-drop=ALL \
--security-opt seccomp="$(pwd)/seccomp.json" \
--security-opt no-new-privileges \
-p 8080:8080 \
-p 127.0.0.1:9090:9090 \
--restart unless-stopped \
--read-only \
--memory=128m \
--cpus=1 \
--pids-limit=64 \
--log-driver=json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
ghoney
```
要添加 gVisor,请安装 `runsc`,确认它已出现在 `docker info` 中,然后在上面的命令中添加 `--runtime=runsc`。gVisor 通常无法在 Windows 或 macOS 的 Docker Desktop 中使用。
## 🧹 清理
```
docker stop ghoney_server
docker rm ghoney_server
docker image rm ghoney
```
基于 [MIT License](LICENSE) 发布。
标签:CISA项目, DOE合作, EVTX分析, Go, Ruby工具, 安全, 日志审计, 渗透测试框架, 自定义请求头, 蜜罐, 证书利用, 请求拦截, 超时处理, 防御