威胁检测

threat-detection
分类通用
作者Alireza Rezvani
许可MIT
评分4.40/5
使用15.1K

威胁检测 (Threat Detection)

威胁检测技能旨在通过基于假设的猎寻、IOC 分析和行为异常检测,主动发现攻击者活动。这不是事件响应(见 incident-response)或红队行动(见 red-team)——其核心在于寻找那些避开了自动化控制措施的威胁。

---

目录

---

概述

该技能的功能

本技能提供主动威胁检测的方法论和工具——在告警触发之前,通过结构化的猎寻假设、IOC 分析和统计异常检测来发现攻击者活动。

与其他安全技能的区别

| 技能 | 重点 | 方法 |
|-------|-------|----------|
| threat-detection (本技能) | 寻找隐藏威胁 | 主动 —— 在告警前进行猎寻 |
| incident-response | 处理活跃事件 | 被动 —— 遏制并调查已确认的事件 |
| red-team | 攻击模拟 | 进攻 —— 从攻击者视角测试防御能力 |
| cloud-security | 云配置错误 | 态势 —— IAM、S3、网络暴露面 |

前置条件

具备对 SIEM/EDR 遥测数据、端点日志和网络流数据的读取权限。IOC 馈送数据的时效性需在 30 天内,以避免误报。猎寻假设在执行前必须针对具体环境进行范围界定。

---

威胁信号分析器

threat_signal_analyzer.py 工具支持三种模式:hunt(假设评分)、ioc(扫描生成)和 anomaly(统计检测)。

bash
# Hunt 模式:根据 MITRE ATT&CK 覆盖范围对假设进行评分
python3 scripts/threat_signal_analyzer.py --mode hunt \
  --hypothesis "Lateral movement via PtH using compromised service account" \
  --actor-relevance 3 --control-gap 2 --data-availability 2 --json

IOC 模式:从 IOC 馈送文件中生成扫描目标

python3 scripts/threat_signal_analyzer.py --mode ioc \ --ioc-file iocs.json --json

Anomaly 模式:检测遥测事件中的统计离群值

python3 scripts/threat_signal_analyzer.py --mode anomaly \ --events-file telemetry.json \ --baseline-mean 100 --baseline-std 25 --json

列出所有支持的 MITRE ATT&CK 技术

python3 scripts/threat_signal_analyzer.py --list-techniques

IOC 文件格式

json
{
  "ips": ["1.2.3.4", "5.6.7.8"],
  "domains": ["malicious.example.com"],
  "hashes": ["abc123def456..."]
}

遥测事件文件格式

json
[
  {"timestamp": "2024-01-15T14:32:00Z", "entity": "host-01", "action": "dns_query", "volume": 450},
  {"timestamp": "2024-01-15T14:33:00Z", "entity": "host-02", "action": "dns_query", "volume": 95}
]

退出代码

| 代码 | 含义 |
|------|---------|
| 0 | 无高优先级发现 |
| 1 | 中优先级信号 |
| 1 | 检测到警报 |
| 2 | 高优先级确认发现项 |

---

威胁猎寻方法论

结构化威胁猎寻遵循一个五步循环:假设 $\rightarrow$ 数据源识别 $\rightarrow$ 查询执行 $\rightarrow$ 发现项分诊 $\rightarrow$ 反馈至检测工程。

假设评分

| 维度 | 权重 | 描述 |
|--------|--------|-------------|
| 攻击者相关性 | ×3 | 该 TTP 与您所在行业的已知威胁攻击者的匹配程度如何? |
| 控制缺口 | ×2 | 您现有的控制措施中有多少会遗漏此行为? |
| 数据可用性 | ×1 | 您是否拥有测试此假设所需的遥测数据? |

优先级得分 = (攻击者相关性 × 3) + (控制缺口 × 2) + (数据可用性 × 1)

按战术划分的高价值猎寻假设

| 假设 | MITRE ID | 数据源 | 优先级信号 |
|-----------|----------|--------------|-----------------|
| 通过远程执行进行 WMI 横向移动 | T1047 | WMI 日志, EDR 进程遥测 | 由 WINRM 启动的 WMI 进程,异常的父子进程链 |
| 使用 LOLBin 执行以规避防御 | T1218 | 进程创建, 命令行参数 | 具有网络活动的 certutil.exe, regsvr32.exe, mshta.exe |
| 通过高抖动间隔的 C2 信标通信 | T1071.001 | 代理日志, DNS 日志 | 定时 outbound 连接 $\pm 10\%$ 抖动 |
| Pass-the-Hash 横向移动 | T1550.002 | Windows 安全事件 4624 类型 3 | 从非预期源主机到管理共享的 NTLM 认证 |
| LSASS 内存访问 | T1003.001 | EDR 内存访问事件 | 非系统进程对 lsass.exe 执行 OpenProcess |
| Kerberoasting | T1558.003 | Windows 事件 4769 | 针对服务账户的大量 TGS 请求 |
| 计划任务持久化 | T1053.005 | Sysmon 事件 1/11, Windows 4698 | 在非标准目录中创建计划任务 |

---

IOC 分析

IOC 分析用于确定指标是否新鲜,将其映射到所需的扫描目标,并过滤掉产生误报的陈旧数据。

IOC 类型与扫描优先级

| IOC 类型 | 过时阈值 | 扫描目标 | MITRE 覆盖范围 |
|---------|--------------------|--------------|----|
| IP 地址 | 30 天 | 防火墙日志, NetFlow, 代理日志 | T1071, T1105 |
| 域名 | 30 天 | DNS 解析日志, 代理日志 | T1568, T1583 |
| 文件哈希 | 90 天 | EDR 文件创建, AV 扫描日志 | T1105, T1027 |
| URL | 14 天 | 代理访问日志, 浏览器历史记录 | T1566.002 |
| Mutex 名称 | 180 天 | EDR 运行时伪像 | T1055 |

IOC 过时处理

超过阈值的 IOC 将被标记为 stale(陈旧)并从扫描目标生成中排除。针对陈旧 IOC 进行扫描会提高误报率并降低 SOC 的可信度。在每个猎寻周期开始前,请从威胁情报平台(MISP, OpenCTI, 商业 TI)刷新 IOC 馈送。

---

异常检测

统计学异常检测用于识别偏离既定基线的行为,而不依赖于已知的恶意签名。

Z-Score 阈值

| Z-Score | 分类 | 响应 |
|---------|---------------|----------|
| < 2.0 | 正常 | 无需采取行动 |
| 2.0–2.9 | 弱异常 | 记录并监控 —— 增加采样 |
| ≥ 3.0 | 强异常 | 上报至猎寻分析师 —— 调查实体 |

基线要求

有效的异常检测需要至少 14 天的历史遥测数据以建立有效的基线。在以下情况后必须重新计算基线:

  • 安全事件(事件后的行为变化)

  • 重大基础设施变更(云迁移、新...

SaaS 部署)
  • 季节性使用模式变化(季度末、节假日)

高价值异常目标

| 实体类型 | 指标 | 异常指标 |
|-------------|--------|--------------------|
| DNS 解析器 | 每主机每小时查询数 | 信标 (Beaconing)、隧道、DGA |
| 终端 | 每日唯一进程执行数 | 恶意软件安装、LOLBin 滥用 |
| 服务账户 | 每小时认证事件数 | 撞库、横向移动 |
| 邮件网关 | 每小时附件类型数 | 钓鱼攻击激增 |
| 云 IAM | 每身份每小时 API 调用数 | 凭据泄露、数据外泄 |

---

MITRE ATT&CK 信号优先级

每个威胁猎寻假设都映射到一个或多个 ATT&CK 技术。在环境中拥有多个确认信号的技术优先级更高。

战术覆盖矩阵

| 战术 | 关键技术 | 主要数据源 |
|--------|---------------|--------------------|
| 初始访问 | T1190, T1566, T1078 | Web 访问日志、邮件网关、认证日志 |
| 执行 | T1059, T1047, T1218 | 进程创建、命令行、脚本执行 |
| 持久化 | T1053, T1543, T1098 | 计划任务、服务、账户变更 |
| 防御规避 | T1027, T1562, T1070 | 进程镂空 (Process Hollowing)、日志清除、编码 |
| 凭据访问 | T1003, T1558, T1110 | LSASS, Kerberos, 认证失败 |
| 横向移动 | T1550, T1021, T1534 | NTLM 认证、远程服务、内部鱼叉式钓鱼 |
| 收集 | T1074, T1560, T1114 | 暂存目录、归档创建、邮件访问 |
| 外泄 | T1048, T1041, T1567 | 异常出站流量、DNS 隧道、云存储 |
| 命令与控制 | T1071, T1572, T1568 | 信标 (Beaconing)、协议隧道、DNS C2 |

---

欺骗与蜜罐集成

欺骗资产可产生高置信度的告警 —— 与蜜罐的任何交互都是需要调查的明确信号。

欺骗资产类型与部署

| 资产类型 | 部署位置 | 信号 | ATT&CK 技术 |
|-----------|-----------|--------|-----------------|
| 密码库中的蜜罐凭据 | 凭据存储库 | 凭据访问尝试 | T1555 |
| 蜜罐令牌 (伪造 AWS 访问密钥) | Git 仓库, S3 对象 | 侦察或外泄 | T1552.004 |
| 蜜罐文件 (命名为: passwords.xlsx) | 文件共享, 终端 | 收集暂存 | T1074 |
| 蜜罐账户 (休眠 AD 用户) | Active Directory | 横向移动跳板 | T1078.002 |
| 蜜罐网络服务 | DMZ, 扁平网络段 | 网络扫描、服务漏洞利用 | T1046, T1190 |

蜜罐告警绕过标准评分流程 —— 除非证明并非威胁,否则任何命中均自动标记为 SEV2。

---

工作流

工作流 1:快速猎寻 (30 分钟)

用于响应新的威胁情报报告或 CVE 警报:

bash
# 1. 根据环境上下文对假设进行评分
python3 scripts/threat_signal_analyzer.py --mode hunt \
  --hypothesis "Exploitation of CVE-YYYY-NNNNN in Apache" \
  --actor-relevance 2 --control-gap 3 --data-availability 2 --json

2. 根据威胁情报构建 IOC 扫描列表

echo '{"ips": ["1.2.3.4"], "domains": ["malicious.tld"], "hashes": []}' > iocs.json python3 scripts/threat_signal_analyzer.py --mode ioc --ioc-file iocs.json --json

3. 检查过去 24 小时 Web 服务器遥测数据中的异常

python3 scripts/threat_signal_analyzer.py --mode anomaly \ --events-file web_events_24h.json --baseline-mean 80 --baseline-std 20 --json

决策:如果猎寻优先级 $\ge 7$ 或任何 IOC 扫描命中
ts,升级为全面威胁猎捕。

工作流 2:全面威胁猎捕(多日)

第 1 天 — 假设生成:
1. 审查威胁情报源中与行业相关的 TTPs
2. 将过去 30 天的安全告警映射至 ATT&CK 战术以识别盲区
3. 使用 threat_signal_analyzer.py 的 hunt 模式对前 5 个假设进行评分
4. 按分数排序 —— 从最高分开始

第 2 天 — 数据采集与查询执行:
1. 从 SIEM 提取相关遥测数据(时间范围:过去 14 天)
2. 针对实体基线运行异常检测
3. 对 30 天内更新的所有情报源执行 IOC 扫描
4. 审查 references/hunt-playbooks.md 中的猎捕剧本

第 3 天 — 分类处置与报告:
1. 对所有异常发现进行分类处置 —— 确认或排除
2. 将确认的活动升级至事件响应(incident-response)
3. 根据猎捕结果记录新的检测规则
4. 将误报的 IOC 反馈给威胁情报(TI)提供商

工作流 3:持续监控(自动化)

配置针对关键实体基线的定期异常检测,每 6 小时执行一次:

bash
# 每 6 小时运行一次 cron 任务 —— 退出码为 2 时自动升级
python3 scripts/threat_signal_analyzer.py --mode anomaly \
  --events-file /var/log/telemetry/events_6h.json \
  --baseline-mean "${BASELINE_MEAN}" \
  --baseline-std "${BASELINE_STD}" \
  --json > /var/log/threat-detection/$(date +%Y%m%d_%H%M%S).json

退出码为 2(严重异常)时发出告警

if [ $? -eq 2 ]; then send_alert "Hard anomaly detected — threat_signal_analyzer" fi

---

反模式(Anti-Patterns)

1. 无假设猎捕 —— 在没有明确问题的情况下对所有遥测数据运行宽泛查询会产生噪音而非信号。每次猎捕必须始于一个可测试的假设,且范围限定在一两个 ATT&CK 技术内。
2. 使用过时 IOC —— 超过 30 天的 IOC 会产生误报,导致分析师习惯性忽略告警。在扫描前务必检查 IOC 的时效性;在自动化扫描中排除过时指标。
3. 跳过基线建立 —— 没有有效基线的异常检测会在正常的高流量日产生告警。在对任何实体类型启用统计告警前,需确保拥有 14 天以上的基线数据。
4. 仅猎捕已知技术 —— 仅针对记录在案的 ATT&CK 技术进行猎捕会遗漏新型攻击行为。应定期加入开放式异常分析,以挖掘未知的 TTPs。
5. 未闭环至检测工程 —— 确认恶意行为的猎捕结果必须转化为新的检测规则。不能提升检测覆盖率的猎捕没有持久价值。
6. 将所有异常视为确认威胁 —— 高 z-score 仅表示偏离基线,而非确认恶意。所有异常在升级前都需要人工分类处置以确认或排除。
7. 忽略蜜罐告警 —— 与欺骗资产的任何交互都是高置信度信号。将蜜罐告警视为噪音会使整个欺骗防御投资失效。

---

交叉引用

| 技能 | 关系 |
|-------|-------------|
| incident-response | 猎捕确认的威胁将升级至事件响应进行处置和遏制 |
| red-team | 红队演习产生真实的 TTPs,为猎捕假设的优先级提供参考 |
| cloud-security | 云安全态势发现(如开放的 S3、IAM 通配符)为数据外泄 TTPs 提供猎捕目标 |
| security-pen-testing | 渗透测试 |
测试结果识别了在修复后威胁猎捕应持续监控的攻击面。