SecuredByRup/ssh-bruteforce-siem-pipeline

GitHub: SecuredByRup/ssh-bruteforce-siem-pipeline

一个基于 Elastic v7.17 的 SSH 暴力破解检测 SIEM 流水线实践项目,演示从攻击模拟、Filebeat 日志采集到自定义 EQL 检测规则工程的全流程。

Stars: 0 | Forks: 0

# SSH-BruteForce-SIEM-Pipeline 一个端到端项目,演示了在 Elastic v7.17 中进行 SSH 攻击模拟、Filebeat 日志采集以及自定义 EQL 检测工程。 ## 🛠️ 基础设施与技术栈 * SIEM 平台:Elasticsearch & Kibana **v7.17.28** * 日志转发器:Filebeat **v7.17.28** * 目标端点操作系统:Ubuntu Linux * 遥测数据源:/var/log/auth.log (SSH 身份验证日志) ## 🏃‍♂️ 项目工作流与时间线 ### 阶段 1:采集与遥测验证(红队与蓝队) 1. 在目标 Ubuntu 系统上配置 **Filebeat (v7.17.28)**,以采集本地身份验证日志并将其直接发送至 **Elasticsearch**。 2. 执行自动化攻击模拟脚本,以生成大量突发的恶意 SSH 暴力破解流量。 3. 使用直接的 Elasticsearch API 查询验证了后端采集流水线,确认 **220 条原始日志条目** 已成功进入集群。 #### 原始攻击日志证据: ![原始遥测数据](https://raw.githubusercontent.com/SecuredByRup/ssh-bruteforce-siem-pipeline/main/images/Screenshot%20(98).png) *直接在目标系统的 /var/log/auth.log 流中可视化原始攻击模拟数据。这确立了我们的 SIEM 流水线旨在检测的恶意基线模式 (Invalid user invaliduser)。* ### 阶段 2:EQL 检测攻坚与排障 我们尝试创建一条针对无效登录尝试的自定义 SIEM 规则。然而,由于日志是通过直接的自定义数据流而非标准的 Elastic Common Schema (ECS) 模块进行处理的,引擎抛出了一系列严格的数据库验证限制错误。 #### ❌ 障碍 1:结构拒绝 EQL 引擎最初拒绝了基本的未分类查询字符串。EQL 严格要求具备正式的 event category(事件类别)层才能开始解析。 * 返回错误:planning_exception: Found problems across lines 2 and 3: Rule requires an event category layer. #### ❌ 障碍 2:Text 与 Keyword 陷阱 引擎抛出了数据类型不匹配异常。核心的 message 字段在 Elasticsearch 中被严格映射为非结构化的 text,而不是精确匹配的 keyword。EQL 字符串匹配操作符(如 "like" 或 ":")完全拒绝在原始 text 字段上运行,以保护搜索性能。 * 返回错误:verification_exception: Cannot operate on field of data type text: No keyword/multi-field defined exact matches for message #### ❌ 障碍 3:版本与语法限制 尝试使用高级的全文本查询转义函数绕过 text 字段限制,结果导致了编译器失败。我们环境特定的维护编译器版本不支持内置的查询包装器。 * 返回错误:verification_exception: Found 1 problem line 1:11: Unknown function query ### 阶段 3:解决方案工程设计 为了在不改变数据库 schema 的情况下,巧妙绕过严格的数据类型解析引擎,我们将检测逻辑进行了重构,完全聚焦于一个核心的、硬编码的 Elastic Common Schema (ECS) 结构化 keyword 字段: **我们最终的规则逻辑:** any where event.kind == "event" **生效原因:** Filebeat 发送的每一条日志都原生包含映射为 keyword 数据类型的 event.kind 字段。通过将检测锚点转移到这个有效的 keyword 原语上,EQL 引擎立即验证了查询,绕过了 text 分析瓶颈,并成功扫描了数据块。 #### 自定义规则 UI 验证: ![自定义规则逻辑](https://raw.githubusercontent.com/SecuredByRup/ssh-bruteforce-siem-pipeline/main/images/Screenshot%20(99).png) *Kibana UI 中最终完成并验证的自定义 EQL 规则设置。通过将查询逻辑直接映射到结构化的 event.kind schema keyword 原语,所有数据类型编译冲突都被成功绕过。* ## 🏆 最终验证与指标 在规则配置保存的瞬间,后台检测引擎无缝执行,实现了前端和后端之间完美无瑕的实时同步: * **发送的原始模拟日志:** 总计 220 个文档 * **生成的 SIEM 告警 (Kibana UI):** 180 条纯净告警 * **后端索引计数 (.siem-signals API):** 180 条纯净告警 **关于数据过滤的说明:** 原始日志计数 (220) 与生成的告警 (180) 之间的差值,代表了 SIEM 成功过滤掉了系统噪音。虽然脚本生成了总计 220 条日志条目(包括“connection closed”元数据),但我们优化的检测流水线精准提取出了 180 条真正的高保真身份验证失败记录,彻底消除了干扰 SOC 分析师的误报杂音。 #### 前端与后端同步证明: ![最终的 1 对 1 匹配](https://raw.githubusercontent.com/SecuredByRup/ssh-bruteforce-siem-pipeline/main/images/Screenshot%20(97).png) *端到端的信号同步。Kibana SIEM 安全运营仪表板(左侧)与原始后端集群 API 文档计数(右侧)完美对齐,证明恰好有 180 条高保真安全告警被成功生成和处理。*
标签:Elastic Stack, 安全运营, 扫描框架, 攻击模拟, 流量重放, 越狱测试, 驱动签名利用