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), 数据包嗅探, 文件隔离, 无内核驱动安全, 无线安全, 用户态安全, 端点检测与响应, 网络安全, 网络安全审计, 脆弱性评估, 脱壳工具, 自动化响应, 行为检测, 防御绕过分析, 隐私保护