1. 项目背景与核心价值
最近在帮某金融客户做安全加固时,发现传统SIEM系统对终端侧的ATT&CK战术覆盖存在明显盲区。我们尝试用ELK Stack构建了一套轻量级威胁狩猎平台,特别针对数据收集(T1119)、外泄(T1041)和破坏(T1485)三类攻击行为设计了检测规则。这套方案在三个月内帮客户发现了17起内部数据违规事件,其中3起涉及核心业务数据。
2. 技术架构设计要点
2.1 ELK组件选型策略
采用7.17版本全家桶(Elasticsearch+Logstash+Kibana),相比商业方案优势在于:
- Filebeat轻量级采集(内存<50MB)
- Logstash的grok插件支持自定义日志解析
- Elasticsearch的runtime fields实现动态字段计算
注意:生产环境务必禁用动态映射(PUT _settings {"index.mapper.dynamic":false}),否则会导致字段爆炸问题
2.2 终端日志采集方案
通过Winlogbeat收集关键事件日志:
winlogbeat.event_logs: - name: Security processors: - script: lang: javascript source: > function process(event) { if (event.get("winlog.event_id") == 4688) { event.Put("process.command_line", event.Get("winlog.event_data.CommandLine")); } }重点监控事件ID:
- 4688(新进程创建)
- 5156(防火墙放行)
- 4104(PowerShell脚本块)
3. 攻击行为检测规则
3.1 数据收集行为识别
{ "query": { "bool": { "must": [ {"match": {"event.code": "4688"}}, {"wildcard": {"process.args": "*Get-Content*"}}, {"terms": {"file.path": ["*.csv", "*.xlsx", "*.db"]}} ] } } }3.2 数据外泄特征检测
通过流量日志识别异常外联:
event.category:network AND destination.ip:(not "10.0.0.0/8" AND not "192.168.0.0/16") AND bytes_out > 1048576 AND user.name:(not "backup_user")3.3 破坏性操作监控
文件删除行为关联检测:
# Logstash filter配置 filter { if [event_id] == 4663 and [object_type] == "File" { grok { match => { "message" => "Accesses: DELETE" } } if "_grokmatchfailure" not in [tags] { mutate { add_tag => ["critical_deletion"] } } } }4. 实战狩猎技巧
4.1 时间窗口分析法
对可疑进程创建事件采用时间膨胀检测:
SELECT parent_process, COUNT(*) as freq FROM win_events WHERE event_id = 4688 GROUP BY parent_process HAVING COUNT(*) > (SELECT AVG(freq)*3 FROM baseline WHERE hour = HOUR(NOW()))4.2 进程树关联技术
通过Elasticsearch的join字段建立进程父子关系:
PUT /process_tree { "mappings": { "properties": { "process_guid": { "type": "keyword" }, "parent_guid": { "type": "join", "relations": { "parent": "child" } } } } }5. 性能优化方案
5.1 Hot-Warm架构配置
# elasticsearch.yml node.roles: ["data_hot"] path.data: /hot_ssd # 30天后自动迁移到warm节点 PUT _ilm/policy/hot_warm_policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "50gb" } } }, "warm": { "min_age": "30d", "actions": { "allocate": { "require": { "data": "warm" } } } } } } }5.2 索引生命周期管理
建议按天分索引并设置保留策略:
# 每天自动创建新索引 PUT _template/threat_hunting { "index_patterns": ["logs-*"], "settings": { "number_of_shards": 3, "lifecycle.name": "30day_retention" } }6. 典型误报处理
遇到最多的三类误报及解决方法:
| 误报类型 | 特征 | 优化方案 |
|---|---|---|
| 备份软件 | 大量读取文档 | 添加白名单路径 |
| 开发测试 | 非常规命令行 | 标记测试环境 |
| 系统更新 | 临时文件删除 | 排除$Windows.~BT目录 |
7. 扩展检测场景
7.1 内存攻击检测
通过Elastic Agent集成Volatility:
inputs: - type: volatility profiles: ["Win10x64_18362"] commands: - malfind - pslist interval: 3600s7.2 横向移动监控
SMB异常登录检测规则:
{ "query": { "bool": { "must": [ {"match": {"event.code": "4624"}}, {"match": {"logon.type": "3"}}, {"range": {"logon.time": {"gte": "now-5m"}}} ], "filter": { "script": { "script": "doc['source.ip'].value != doc['destination.ip'].value" } } } } }实际部署中发现,通过Kibana的Lens可视化可以清晰展示攻击路径。我们特别定制了时间线视图,将进程创建、网络连接、文件操作等事件按时间轴排列,这对分析加密勒索事件特别有效。