pathei-kosmos/ghoney

GitHub: pathei-kosmos/ghoney

一个用 Go 编写的轻量级 HTTP 蜜罐,通过暴露逼真的诱饵端点来检测和记录常见 Web 攻击行为。

Stars: 0 | Forks: 0

# 🍯 ghoney ``` _ __ _| |__ ___ _ __ ___ _ _ / _` | '_ \ / _ \| '_ \ / _ \ | | | | (_| | | | | (_) | | | | __/ |_| | \__, |_| |_|\___/|_| |_|\___|\__, | |___/ |___/ ``` **一个部署在互联网喧嚣角落的轻量级 HTTP 蜜罐。**

Go 1.26.5 Docker ready CI status MIT License

**ghoney** 暴露了逼真的诱饵 endpoint,能够检测常见的攻击模式,并将产生的流量转化为结构化日志、[Prometheus](https://prometheus.io/) 指标以及一个本地仪表盘。它刻意保持轻量化和临时性,使用 [Distroless](https://github.com/GoogleContainerTools/distroless) 镜像、非 root 运行时、只读文件系统,并支持可选的 [gVisor](https://gvisor.dev/) 和自定义 [Seccomp](https://en.wikipedia.org/wiki/Seccomp) 隔离。 ![ghoney 仪表盘](https://static.pigsec.cn/wp-content/uploads/repos/cas/44/44e700f048370459a61af9cf506db360117565c2f1e2f0451f7567d328f095d1.png) ## ✨ 它能捕获什么 - 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工具, 安全, 日志审计, 渗透测试框架, 自定义请求头, 蜜罐, 证书利用, 请求拦截, 超时处理, 防御