CroatiaSecurity/Sentinel

GitHub: CroatiaSecurity/Sentinel

一款面向 Windows 的开源用户态 EDR,通过行为检测与多信号关联实现终端威胁的自动发现与响应,适用于蓝队学习、安全研究和个人端点加固。

Stars: 0 | Forks: 0

# Windows Sentinel **Windows 用户态 EDR — 行为检测与自动化响应** ## 它是什么 Windows Sentinel 是一款针对 Windows 的用户态端点检测与响应(EDR)工具。它在运行时检测恶意行为,并通过终止威胁链、隔离二进制文件和移除持久化来进行响应。专为以下场景设计: - 个人端点保护(与 Defender 配合的多层防御) - 蓝队教育与安全研究 - 行为分析与威胁狩猎 - 学习 EDR 内部工作原理 它**不是**商业 EDR 的替代品。它没有内核驱动,这意味着具有足够权限的攻击者(admin + BYOVD)可以绕过它。它只是一个用户态防御层。有关坦诚的绕过分析,请参见 [THREAT_MODEL.md](THREAT_MODEL.md)。 ## 架构 ``` Monitors → TelemetryFusionEngine → DetectionEngine → ResponseEngine → JsonlEventLogger ↓ ↑ EventGraph BehavioralCorrelationEngine (queryable graph) ↑ (composite detections via EmitAsync) ``` ### 总统与长老会 **总统(核心)** — 拥有终止权限的行为检测规则。只有总统才能终止进程。终止决策由封闭的“总统法”片段列表进行门控——这是一组硬编码的规则名称模式,授权在置信度 ≥ 0.85 时执行致命响应。 **长老会(顾问)** — 发出 Tier2 信号的附加检测模块。它们只观察和报告,从不独立执行终止。多个相互印证的长老会信号可以通过行为关联引擎产生组合终止。 ### 遥测融合(v1.0.0+) 所有监控器在进入检测引擎之前,都会将原始遥测数据送入 `TelemetryFusionEngine`。融合层负责: - 构建按进程划分的事件链(所有操作的有序序列) - 维护 `EventGraph`(带有时间边的进程/文件/网络关系) - 生成带有行为速度、事件多样性和多向量标志的 `FusedTelemetryContext` - 实现任何单一规则都无法单独完成的跨源关联 ## 检测理念(v1.1.0) 1. **行为优于静态** — 检测进程“做了什么”,而不是“是什么” 2. **拒绝安全 theater** — 如果某项功能对有能力的攻击者无效,就将其移除 3. **少而坚固的检测 > 多而脆弱的检测** — 每条规则都必须证明其存在的价值 4. **假设攻击者会阅读代码** — 拒绝隐蔽式安全 5. **诚实的文档** — 说明哪些有效,哪些无效 ### 被移除的内容及原因 | 移除项 | 原因 | |---------|--------| | 按键混淆器(虚假击键注入) | 安全 theater — 除了原始记录器外对其他任何东西都无效 | | 占位符哈希列表 | 虚假的 SHA256 值会带来错误的信心。哈希信誉由实时 API 查询处理 | | 基于工具名称的检测触发器 | 通过重命名即可轻易绕过。已降级为仅作元数据使用 | | 学习模式 | 死代码 — 默认激活保护 | | 密码轮换器 | 毫无作用的存根代码 | ## 检测 ### 第 1 层 — 终止权限(总统法) 这些规则可以触发立即终止进程并隔离: | 规则 | 检测内容 | 信号类型 | |------|---------|-------------| | LSASS 凭据转储 | comsvcs MiniDump, sekurlsa, procdump -ma lsass, dump file patterns | 行为(命令行 Token) | | ETW/AMSI 篡改 | AmsiScanBuffer patch, EtwEventWrite patch, NtTraceEvent patch | 行为(内存完整性) | | Syscall 桩完整性 | Sentinel 进程中的 ntdll 函数序言修改 | 行为(自我保护) | | 勒索软件(统一) | 卷影副本删除 + 批量重命名 + I/O 速率 + 100+ 扩展名 | 行为(多信号评分) | | 进程注入(内核) | VirtualAllocEx, VirtualProtect RWX, MapViewOfSection, QueueUserAPC, SetThreadContext | 内核 ETW(API 观察) | | 内存行为 | RWX 区域,无后备可执行文件,shellcode 序言 | 行为(内存扫描) | | 音频/网络摄像头劫持 | 输出到麦克风的重定向,虚拟音频线缆滥用 | 行为(设备状态) | | 自我保护 | AMSI 修复,ETW 修复,DLL 劫持,配置篡改,服务篡改 | 行为(完整性监控) | | 神经行为异常 | 进程行为熵,多向量活动评分 | 行为(统计) | | 蜜罐触发 | 诱饵文件访问检测 | 行为(金丝雀) | ### 第 2 层 — 顾问/佐证(仅记录,馈入关联) 这些从不独立执行终止。在 120 秒内,同一 PID 上的多个 Tier2 信号可以通过 BehavioralCorrelationEngine 产生组合终止: | 规则 | 检测内容 | |------|---------| | LSASS 转储金丝雀 | 在非调试器进程中加载 dbghelp.dll | | 父 PID 欺骗 | ETW 报告的父进程 ≠ 快照报告的父进程 | | Token 完整性提升 | 未经 UAC 同意从 Medium 提升到 High 完整性 | | 凭据金丝雀 | 蜜罐凭据被访问/删除 | | DNS: DGA 域名 | 高熵域名(来自同一进程的 3 次以上命中) | | DNS: 隧道 | 单个进程持续 >30 次查询/分钟 | | 进程注入(命令行) | 命令行参数中的注入 API 名称 | | 可疑的父子进程 | Office/浏览器生成 cmd/powershell | | 哈希信誉 | 多源 API 查询(CIRCL, Cymru, MalwareBazaar) | | 攻击活动 IOC | 已知恶意哈希、IP、域、APT 模式 | | 文件熵 | 加壳/加密文件 | | 剪贴板抓取 | 快速自动剪贴板更改(加密货币替换器,窃密器) | | 剪贴板劫持 | 后台进程静默获取剪贴板所有权 | | 剪贴板锁定 | 进程锁定剪贴板,阻止复制/粘贴 | | 模块注入(运行时) | 基线建立后任何进程中出现新的可疑 DLL | | 幽灵模块 | 已加载 DLL 的文件从磁盘中被删除(释放器模式) | | 模块验证 | DLL 劫持,侧加载 | | 未签名二进制文件 | 暂存路径中的未签名可执行文件 | | 信标(统计) | C2 模式的变异系数分析 | | 键盘记录器检测 | 可疑的键盘钩子 DLL(仅限服务) | ### 组合检测(行为关联引擎) 120 秒时间窗口内的多个弱信号会产生高置信度的组合终止: | 组合项 | 置信度 | 触发条件 | |-----------|-----------|---------| | 活跃勒索软件链 | 0.99 | 卷影副本删除 + 文件重命名 | | 无文件攻击链 | 0.95 | AMSI 绕过 + 编码的 PS + C2 网络 | | 注入的 C2 信标 | 0.98 | 内核观察到的注入 + C2 网络 | | 凭据转储 + 数据渗出 | 0.96 | LSASS 转储 + 出站 C2 | | 释放的负载正在回连 | 0.93 | 未签名的暂存二进制文件 + C2 端口 | | 攻击后侦察 | 0.88 | 120 秒内 3 个以上不同的侦察命令 | | PPID 欺骗 + C2 通道 | 0.96 | 父 PID 欺骗 + C2 网络 | | 已确认的 LSASS 转储 | 0.97 | dbghelp.dll 加载 + 针对 LSASS 的模式 | | 权限提升 + 持久化 | 0.94 | Token 完整性更改 + 持久化安装 | | DGA + C2 信标 | 0.95 | 高熵 DNS + 周期性信标模式 | | 凭据盗窃 + 数据渗出 | 0.97 | 凭据金丝雀触发 + 出站网络 | | 高级攻击链 | 0.98 | 3 选 2:PPID 欺骗 + Token 提升 + 注入 | | 欺骗进程正在回连 | 0.95 | PPID 欺骗 + 任何网络活动 | | 转储工具 + 网络渗出 | 0.94 | dbghelp.dll + 任何出站连接 | | 暂存负载 + 非标准端口 | 0.92 | 来自 temp 的未签名二进制文件 + 非 80/443 端口 | | 大规模文件操作 + DNS | 0.93 | 50 次以上文件写入 + DNS 解析 | | 权限提升 + 网络 | 0.94 | Token 提升 + 任何网络活动 | | 注入工具 + 文件暂存 | 0.91 | 命令行中的注入 API + 文件写入 | | DGA + 文件操作 | 0.94 | DGA DNS 解析 + 任何文件访问 | | 内存植入物 + 网络 | 0.96 | 内存异常(RWX/shellcode)+ 任何网络 | ## 响应 当总统法检测在置信度 0.85 以上触发时: 1. **链追踪** — 回溯父链(取证),收集后代进程 2. **终止进程树** — 叶节点优先,根节点最后 3. **隔离二进制文件** — DPAPI 加密,ACL 强化(仅限 SYSTEM + 管理员) 4. **移除持久化** — 注册表 Run 键,启动文件夹,计划任务,服务 5. **阻止攻击者 IP** — Windows 防火墙 COM API → 注册表回退 6. **收集取证证据** — 内存转储,模块清单,网络快照 **零 LOLBin 依赖。** 所有响应动作均使用原生 C# API。响应路径中不使用 `sc.exe`、`schtasks.exe`、`netsh.exe`、`powershell.exe` 或 `reg.exe`。 ## 误报减少 | 系统 | 如何减少误报 | |--------|-------------------| | AllowlistService | 3 层信任:已签名供应商,开发工具,用户白名单。总统法从不被抑制。 | | ContextualAnalysisEngine | 安装程序/更新/启动/开发/游戏上下文修改器 | | BehavioralBaselineService | 随时间学习正常进程。已建立的进程获得信任加成 | | FalsePositiveTracker | 记录用户恢复的文件。在重复发生误报后自动降低未来的评分 | | ReputationCache | 5 层哈希信誉,带有绑定启动随机数的 DPAPI 持久性 | | CPU 节流 | 作业调度程序在压力下自动降频。从不降低用户体验 | ## 自我保护 | 保护项 | 方法 | |-----------|--------| | DLL 侧加载预防 | CIG, SetDefaultDllDirectories, 安装目录 ACL | | Syscall 桩完整性 | 每 10 秒对照基线监控 ntdll/amsi 函数序言 | | AMSI/ETW 完整性 | 监控系统调用桩,自动修复 | | 自我终止预防 | 所有终止路径拒绝针对自身 PID | | 配置篡改 | 基于哈希的完整性,修改时冻结白名单 | | 跨进程看门狗 | 服务心跳 → 针对停滞状态的代理重启 | | 隔离区安全 | DPAPI 加密 + 限制性 ACL | | 缓存完整性 | 绑定启动随机数的 HMAC(v1.1.0)— 拒绝上一会话的缓存 | | 凭据金丝雀 | 蜜罐凭据检测凭据收割 | ## 安装 ``` # 以 Administrator 身份运行 installer .\WindowsSentinelSetup-1.3.0.exe ``` 安装程序会: 1. 安装到 `%ProgramFiles%\WindowsSentinel`(ACL 强化) 2. 仅为安装目录添加 Defender 排除项 3. 创建 Windows 服务(以 SYSTEM 身份运行,全量遥测) 4. 向用户会话启动代理(仅限看门狗) ## 配置 安装目录中的 `appsettings.json`: ``` { "Sentinel": { "ActiveResponse": true, "LogPath": null, "WatchPath": null } } ``` - `ActiveResponse: true`(默认)— 在触发总统法检测时执行终止 - `ActiveResponse: false` — 仅监控模式,所有检测仅作记录 ## 构建 在 Windows 上需要 .NET 8 SDK。 ``` dotnet build WindowsSentinel.sln dotnet test WindowsSentinel.sln ``` ### 发布安装程序 ``` cd installer .\build.ps1 ``` 输出:`installer\output\WindowsSentinelSetup-1.3.0.exe` ## 限制(坦诚说明) - **没有内核驱动** — 无法阻止 BYOVD、直接系统调用或内核回调。能检测但无法阻止。 - **本地管理员权限决定胜败** — 拥有管理员权限的攻击者可以终止服务。看门狗只会增加秒钟的延迟,并非真正的保护。 - **命令行检测存在局限** — 复杂的工具会完全避免命令行暴露。ETW ThreatIntel 和 MemoryBehaviorAnalyzer 弥补了这一空白。 - **不能替代商业 EDR** — 请与 Windows Defender 配合使用,而不是取代它。 - **单机范围** — 没有集中管理,没有车队遥测,没有云信誉。 - **统计检测需要调优** — 信标、神经行为和熵规则可能需要根据不同环境进行调整。 有关详细的绕过分析,请参见 [THREAT_MODEL.md](THREAT_MODEL.md)。 ## 项目结构 ``` src/ WindowsSentinel.Core/ — Detection engine, rules, monitors, response, hardening WindowsSentinel.Service/ — Windows service host (runs as SYSTEM) WindowsSentinel.Agent/ — User-session watchdog (heartbeat monitor) tests/ WindowsSentinel.Tests/ — 87 unit tests installer/ build.ps1 — Build + publish + compile installer setup.iss — Inno Setup script ``` ## 版本历史 | 版本 | 代号 | 主要变更 | |---------|----------|-------------| | 0.9.0 | False Positive Reduction | AllowlistService、CPU 节流、上下文感知、总统法 | | 1.0.0 | Telemetry Fusion | TelemetryFusionEngine, EventGraph, MemoryBehaviorAnalyzer,移除按键混淆器 | | 1.1.0 | Hardened Foundations | 反 APT 监控器(DNS, PPID 欺骗, syscall 完整性, 凭据金丝雀, Token 完整性, LSASS 转储金丝雀),移除占位符哈希,威胁模型 | | 1.2.0 | Correlated Kill | 6 条新的组合关联规则,将反 APT 监控器连接至授权终止的组合中。总计:12 种组合。没有任何单一监控器单独执行终止。 | | 1.3.0 | Aggressive Correlation | 8 种新的基于锚点的组合:可疑进程 + 任何第二信号 = 终止。总计:20 种组合。 | | 1.4.0 | Clipboard Guardian | ClipboardMonitor, RuntimeModuleIntegrityMonitor(所有进程),3 种新组合(剪贴板+网络,注入+网络,注入+剪贴板),修复事件查看器刷屏。总组合数:23。 | ## 许可证 MIT — 详见 [LICENSE](LICENSE)
标签:BYOVD, Conpot, EDR, IP 地址批量处理, Telemetry, Windows安全, 个人安全防护, 事件图谱, 威胁情报, 安全架构, 开发者工具, 持久化移除, 插件系统, 搜索语句(dork), 数据包嗅探, 文件隔离, 无内核驱动安全, 无线安全, 用户态安全, 端点检测与响应, 网络安全, 网络安全审计, 脆弱性评估, 脱壳工具, 自动化响应, 行为检测, 防御绕过分析, 隐私保护