LVZFR/H0n3yP0t-S13M-H0M3LAB

GitHub: LVZFR/H0n3yP0t-S13M-H0M3LAB

一个将公网 SSH 蜜罐与自托管 Wazuh SIEM 结合的检测工程实验室,用于采集真实攻击数据并练习安全告警规则编写与紫队验证。

Stars: 0 | Forks: 0

# 蜜罐 & SIEM 家庭实验室 一个暴露在互联网上的 SSH 蜜罐,为自托管的 SIEM 提供数据,旨在收集真实世界的攻击遥测数据并练习检测工程。VPS 运行 [Cowrie](https://github.com/cowrie/cowrie) 以捕获暴力破解和后渗透活动;日志通过私有 WireGuard 隧道传输到运行在家庭实验室硬件上的 [Wazuh](https://wazuh.com/) 服务器,在那里进行解码、触发警报并映射到 MITRE ATT&CK。 ## 为什么做这个项目 我正从运营商级别的网络运营转向网络安全领域,而这个实验室正是我将理论知识与真实对手行为相结合的地方。蜜罐不是简单地重放现成的数据集,而是位于公网 IP 上,记录互联网对暴露的 SSH 端口的实际攻击行为——然后我构建能捕获这些攻击的检测规则。这篇文章同时也是一份构建日志,因此每一个决策背后的原因都清晰可见,而不仅仅是最终的配置。 ## 架构 ``` Internet (attackers) │ ▼ port 22 (bait, IPv4 + IPv6) ┌───────────────────────────────────┐ │ VPS (Ubuntu 24.04) │ │ │ │ Cowrie honeypot ──► JSON logs │ │ Real SSH admin: tunnel-only │ │ Wazuh agent │ └──────────────┬────────────────────┘ │ WireGuard tunnel │ (VPS is public endpoint; │ home dials out — Starlink CGNAT) ▼ ┌───────────────────────────────────┐ ┌──────────────────────────────┐ │ Home lab (HP Pavilion) │◄────────│ Test VM (Oracle Linux 9) │ │ │ agent │ │ │ Wazuh manager + indexer + dash │ over │ Wazuh agent │ │ Detection rules, ATT&CK mapping │ LAN │ Atomic Red Team runner │ │ Alerts ──► Telegram │ │ (purple-team validation) │ └───────────────────────────────────┘ └──────────────────────────────┘ both on the home LAN (``); the VM is disposable — attacks run there, NOT on the honeypot or the manager. ``` ### 设计决策 - **真实 SSH 完全从公共互联网中移除。** 与仅仅将其转移到高端口不同,`sshd` 仅绑定到私有 WireGuard 地址(``);端口 22(在 IPv4 和 IPv6 上)完全通过绑定接口的 `iptables`/`ip6tables` 重定向交给蜜罐。管理访问通过隧道进行。任何从公共端访问到真实 shell 提示符的行为,从定义上讲,都不是我。 - **Wazuh 服务器部署在家里,而不是 VPS 上。** 将 SIEM 保留在暴露主机之外意味着,攻破蜜罐的攻击者永远无法直接访问日志存储或针对其编写的检测规则。VPS 被视为不受信任的。 - **WireGuard 是从家里向 VPS 拨出的。** 家庭连接位于 Starlink CGNAT 之后,没有入站可达性,因此隧道是从家庭端发起的;VPS 作为固定的公共端点,代理流量借此回传。 - **`sshd` 在启动时排在隧道之后**(一个要求 `wg-quick@wg0` 的 systemd drop-in),这样重启就不会导致管理 SSH 无法绑定到其仅限隧道的地址。 - **indexer heap 受到上限限制**,以便 Wazuh stack 能够与同一台家庭机器上现有的本地 LLM 推理工作负载共存。 ## 组件 | 组件 | 角色 | 主机 | |-----------|------|------| | Cowrie | 中等交互的 SSH 蜜罐;记录尝试的凭据和运行的命令 | VPS | | Wazuh agent | 将 Cowrie JSON 和主机遥测数据传送到 manager | VPS | | WireGuard | VPS 与家庭实验室之间的加密传输 | 两者皆有 | | Wazuh manager | 规则引擎、解码器、警报系统 | 家庭实验室 | | Wazuh indexer + dashboard | 存储和可视化 | 家庭实验室 | | 测试 VM (Oracle Linux 9) | 一次性红蓝队测试主机;Wazuh agent + Atomic Red Team | 家庭实验室 | ## 检测工程 该实验室的重点在于检测规则,而不是蜜罐本身。覆盖范围已映射到 MITRE ATT&CK(参见 [`wazuh/rules/local_rules.xml`](wazuh/rules/local_rules.xml)): - **凭据暴力破解 (T1110)** — 单次登录失败是低严重性的原始素材;同一来源在 120 秒内出现 6 次或以上失败将触发高严重性的爆发警报,并按来源 IP 进行分组。 - **有效账户使用 (T1078)** — 登录到 Cowrie 沙箱的“成功”登录(攻击者通过了故意设置弱凭据的关卡)是头号事件,级别为 12。 - **登录后命令捕获 (T1059)** — 在伪 shell 中输入的每条命令都会被解码并显示出来,揭示常见的攻击模式(侦察、有效载荷下载、持久化)。 - **入口工具传输 (T1105)** — 下载到沙箱中的文件被标记。 - **原生 JSON 解码** — Cowrie 的 JSON 由 Wazuh 内置的 `json` 解码器解析,因此规则可以直接匹配字段(`eventid`、`src_ip`、`username`、`input`)。无需自定义解码器([原因](wazuh/decoders/README.md))。 - **紫队验证** — 一个一次性的 Oracle Linux 9 VM 运行 Wazuh agent 和 [Atomic Red Team](https://github.com/redcanaryco/atomic-red-team);在那里执行 ATT&CK 技术并确认其触发了预期的警报,将*执行的技术 → 触发的警报*配对。目前 **T1136.001**(创建账户 → 规则 5902)和 **T1110**(暴力破解 → 规则 5710/5712)已验证 —— 完整结果见[覆盖报告](docs/purple-team-coverage.md)。Atomics 仅在受监控的 VM 上运行,绝不在蜜罐上运行(因为这会污染实时攻击者数据集)。 ### 覆盖范围 规则位于 [`wazuh/rules/local_rules.xml`](wazuh/rules/local_rules.xml)。已通过自测和命中暴露蜜罐的实时扫描器流量验证。 | 规则 | 检测内容 | ATT&CK | 严重性 | 验证状态 | |------|-----------|--------|----------|-----------| | 100100 | 蜜罐上的 SSH 登录失败 | T1110 — 暴力破解 | 5 | ✅ 实时流量 | | 100101 | 暴力破解爆发(≥6 次失败 / 120秒,按来源) | T1110 — 暴力破解 | 10 | ✅ 实时流量 | | 100102 | 成功登录沙箱 | T1078 — 有效账户 | 12 | ✅ `wazuh-logtest` | | 100103 | 在伪 shell 中执行命令 | T1059 — 命令与脚本解释器 | 6 | 🚧 已部署 | | 100104 | 拉入会话的文件下载 | T1105 — 入口工具传输 | 10 | 🚧 已部署 | Wazuh 自动从 `` 标签丰富每条警报 —— 例如,规则 100102 在 ATT&CK 仪表板中表现为*有效账户*,涵盖了防御规避、持久化、权限提升和初始访问战术。 ## 构建进度 - [x] 提供 VPS (Ubuntu 24.04 LTS) - [x] 主机加固 — 真实 SSH 移至仅限隧道访问、密钥认证、启动顺序 - [x] WireGuard 隧道:VPS ↔ 家庭实验室 - [x] 家庭实验室中的 Wazuh 服务器(manager + indexer + dashboard) - [x] 注册 Wazuh agent(VPS + 家庭主机) - [x] 在 VPS 上部署 Cowrie(双栈监听器,公共 22 端口已重定向) - [x] 将 Cowrie 日志传送到 Wazuh(原生 JSON,agent → manager 已验证) - [x] 自定义检测规则 + MITRE ATT&CK 映射(T1110 / T1078 已通过实时验证) - [x] 搭建一次性紫队 VM(Oracle Linux 9,已注册 Wazuh agent) - [x] 紫队验证 — 执行并检测到 T1136.001 和 T1110([覆盖报告](docs/purple-team-coverage.md)) - [x] 在高严重性事件上触发 Telegram 警报 - [ ] 发布 30 天蜜罐分析 ## Ansible 自动化 [`ansible/`](ansible/) 目录包含针对所记录的三主机架构的幂等部署。它用于安装 Cowrie,可选安装 Wazuh agent,部署自定义的 Wazuh 规则,并且可以管理 WireGuard 和公共 SSH 重定向。 在示例清单中,可能导致锁定(lockout-prone)的网络操作被故意禁用。 WireGuard 密钥和其他机密应放在加密的 Ansible Vault 文件中,绝不放入 Git。 有关先决条件、分阶段推出和验证命令,请参见 [`ansible/README.md`](ansible/README.md)。 ## 仓库结构 ``` ansible/ guarded playbooks, roles, example inventory, and CI validation wazuh/ rules/ custom detection rules (local_rules.xml) decoders/ note on why native JSON decoding is used cowrie/ honeypot config (sanitised — overrides only) docs/ architecture notes, build log, analysis tests/ repository safety and Ansible structure tests ``` ## 安全与范围说明 这是一个个人研究实验室。蜜罐在设计上就是一个沙箱,未连接到任何生产系统。此处发布的配置已进行脱敏处理 —— 没有任何密钥、令牌或真实 IP。任何分析中显示的攻击者源数据均已进行汇总,仅用于表征攻击模式。 操作截图被故意排除在公共仓库之外,因为实时仪表板和警报通知可能会泄露源地址、尝试使用的凭据、主机名和 agent 标识符。未来的任何截图都将仅使用经过脱敏处理的合成事件。 *持续更新中的家庭实验室作品集的一部分。配套仓库:[t2-macbook-linux](https://github.com/LVZFR),[home-network-monitoring](https://github.com/LVZFR)。*
标签:AMSI绕过, Wazuh, WireGuard, 威胁检测, 安全运营, 家庭实验室, 扫描框架, 系统提示词, 蜜罐, 证书利用