DCP1964/soc-detection-engineering-ssh-bruteforce
GitHub: DCP1964/soc-detection-engineering-ssh-bruteforce
基于Splunk的SSH暴力破解检测用例,结合威胁情报关联实现从日志采集到事件响应的完整SOC工作流演示。
Stars: 0 | Forks: 0
# SOC 检测工程项目 — SSH 暴力破解与威胁情报关联
## 检测输出
### 原始暴力破解日志

### 带威胁情报关联的检测结果

## 1. 项目概述
本项目演示了在 Splunk 中设计并验证安全运营中心 (SOC) 检测用例的过程。该检测旨在识别 SSH 暴力破解活动,并将其与自定义威胁情报数据集进行关联。
实施过程侧重于检测工程原则,包括事件聚合、基于阈值的检测以及使用查找表进行富化。
## 2. 目标
- 检测指示暴力破解攻击的重复失败认证尝试
- 将检测到的活动与已知恶意 IP 地址进行关联
- 模拟攻击数据以验证检测逻辑
- 记录调查和响应工作流程
- 构建结构化、可复用的 SOC 用例
## 3. 架构
### 组件
- Splunk Enterprise (Ubuntu Server VM) — SIEM 平台
- Windows VM — 日志源和数据转发器
- Splunk Universal Forwarder — 日志采集
- 自定义查找表 — 威胁情报模拟
### 数据流
1. 日志在 Windows 系统上生成
2. Universal Forwarder 将日志发送到 Splunk Enterprise
3. Splunk 对数据进行索引和处理
4. 检测逻辑聚合并过滤事件
5. 查找表利用威胁情报丰富事件信息
## 4. 数据源
- 认证日志(失败登录尝试)
- 使用 Splunk SPL 模拟的事件数据
- 威胁情报查找 (known_bad_ips.csv)
## 5. 检测策略
### 检测逻辑
该检测识别产生多次失败认证尝试的 IP 地址,并将其与已知恶意 IP 进行关联。
```
index=security sourcetype=linux_secure ("Failed password" OR "authentication failure")
| stats count, values(user) as attempted_users, min(_time) as first_attempt, max(_time) as last_attempt by src_ip
| where count > 10
| lookup known_bad_ips.csv src_ip OUTPUT src_ip AS matched_ip
| where isnotnull(matched_ip)
| eval duration_minutes = round((last_attempt - first_attempt)/60, 2)
```
此查询使用特定的 index 和 sourcetype 来提高搜索性能,并减少 Splunk 中不必要的数据扫描。这种方法符合 SIEM 优化和成本效益的最佳实践。
### 为什么此检测有效
检测原理
此检测之所以有效,是因为它结合了行为分析与威胁情报关联。暴力破解攻击会产生大量失败的认证尝试,这可以通过聚合操作进行识别。
通过将这些事件与已知恶意 IP 列表关联,检测机制减少了误报,并优先处理高置信度的威胁。
### 高级检测:失败后的成功
```
index=security sourcetype=linux_secure
("Failed password" OR "Accepted password")
| eval status=if(searchmatch("Failed password"), "failed", "success")
| stats count(eval(status="failed")) as failed_count,
count(eval(status="success")) as success_count
by src_ip
| where failed_count > 5 AND success_count > 0
```
此检测识别潜在的账户失陷场景,即源 IP 在进行多次失败认证尝试后成功登录。
这种模式在 SOC 环境中至关重要,因为它表明攻击者可能已成功猜出或获取了有效凭证。
### MITRE ATT&CK 映射
- T1110 — 暴力破解 (Brute Force)
### 核心概念
- 基于阈值的检测 (count > 5)
- 使用 stats 进行事件聚合
- 使用 lookup 进行威胁情报富化
- 通过仅过滤匹配的 IP 来降低噪音
### 检测调优策略
静态阈值(例如 count > 5)在实际环境中可能导致误报。
在生产环境中,阈值应根据以下因素动态调整:
- 每个用户/IP 的基准认证行为
- 时段模式
- 登录失败的标准差
本项目使用固定阈值进行演示,但强调了在真实 SOC 环境中进行自适应检测调优的必要性。
## 6. 模拟与验证
为了验证检测逻辑,我们生成了模拟的暴力破解活动。
```
| makeresults count=10
| eval src_ip="192.168.1.50"
| stats count by src_ip
| where count > 5
| lookup known_bad_ips.csv src_ip OUTPUT src_ip AS matched_ip
| where isnotnull(matched_ip)
```
模拟数据 (192.168.1.50) 用于验证检测逻辑,同时分析来自环境的真实认证日志以展示实际的暴力破解行为。
### 验证结果
- 源 IP: 192.168.1.50
- 失败尝试次数: 10
- 威胁情报匹配: 已确认
检测成功识别并关联了恶意活动。
## 7. 威胁情报自动化(未来增强)
当前实现使用静态 CSV 查找表 (known_bad_ips.csv) 进行威胁情报富化。
在生产 SOC 环境中,此过程将实现自动化,以确保实时的准确性和可扩展性。
潜在的自动化方法包括:
- 与威胁情报 API 集成(例如 VirusTotal, AlienVault OTX)
- 使用 Python 脚本定期获取和更新恶意 IP 源
- 使用计划任务或 cron 作业刷新 Splunk 中的查找表
- 与 SIEM 威胁情报平台集成
此增强将减少人工操作,提高检测准确性,并确保威胁情报关联保持最新。
## 8. 调查工作流
检测触发后,执行以下调查步骤:
1. 验证检测准确性和阈值
2. 分析失败的认证日志
3. 识别受影响的账户和系统
4. 检查是否存在成功登录尝试
5. 关联来自同一 IP 的其他活动
6. 使用威胁情报源验证 IP 信誉
针对常见用户名(如 root 或无效用户)的重复失败登录尝试表明这是自动化暴力破解活动,而非正常用户行为。
## 9. 误报缓解
- 排除已知的管理 IP 地址(内部网络)
- 根据基准认证行为调整阈值
- 过滤掉会产生预期登录失败的服务账户
- 仅与威胁情报关联以减少噪音
- 监控重复模式而非单一事件
## 10. 响应措施
- 在网络层面封锁恶意 IP
- 禁用或加固受影响的账户
- 强制执行更强的认证控制
- 监控重复或分布式尝试
- 若存在失陷指标则进行升级处理
## 11. 检测局限
此检测可能无法识别:
- 分布式暴力破解攻击(多个 IP 攻击一个账户)
- 长时间内的“低频慢速”攻击
- 使用有效凭证且未产生失败尝试的攻击
- 此方法符合 SIEM 优化和成本效益的最佳实践。
## 12. 项目结构
```
case_studies/
playbooks/
lookups/
queries/
screenshots/
```
## 13. 展示的关键技能
- SPL 查询开发
- 检测工程
- 威胁情报集成
- 日志分析与关联
- SOC 调查方法论
- 安全用例验证
## 14. 假设与局限
- 检测基于模拟和有限的日志数据
- 阈值在生产环境中可能有所不同
- 查找表代表简化的威胁情报源
- Index 和字段名称在不同环境中可能存在差异
## 15. 未来改进
- 集成来自 Linux 系统的真实认证日志
- 添加地理位置富化
- 实施基于风险的评分
- 使用基线分析调优检测阈值
- 自动化告警和响应工作流
## 16. 结论
本项目展示了完整的 SOC 检测工作流,涵盖从数据摄取、检测逻辑到验证和响应的全过程。它突出了使用 Splunk 进行检测工程技术的实际应用,并提供了一个可复用的框架,用于识别经威胁情报富化的暴力破解攻击。
## 17. 证据
请参阅 screenshots 目录以获取检测结果和验证输出。
标签:CCTV/网络接口发现, IP 地址批量处理, SPL 查询, SSH暴力破解, 关联分析, 凭证填充, 威胁情报, 安全运营中心, 开发者工具, 异常行为检测, 数据 enrichment, 渗透测试防御, 网络安全, 网络映射, 阈值检测, 防御 evasion, 隐私保护