一个在Anwendungsentwicklung再培训项目中从零开始构建的个人安全运营中心(SOC)。该套件监控Windows终端的网络异常、资源峰值、进程执行、注册表更改、安全事件日志活动、计划任务更改、DNS查询和电源事件——将所有内容记录到结构化文件中,以便通过Python引擎进行每周分析和关联。

单页Flask仪表盘。12个采集器+关联引擎全部激活,实时资源监控器,出站连接馈送,采集器事件磁贴,以及流式引擎告警。
作为正式IT再培训的同时构建的实践学习项目,该套件将真实的SOC概念——基线收集、异常检测、严重性分类、日志聚合和跨源关联——应用于个人Windows机器。设计过程从一开始就采用对抗式:每个阶段在构建下一阶段之前都经过红队分析的压力测试,由此发现的48条关联规则推动了Python引擎的架构。
开发进展跟踪在roadmap.md中——当前状态、第9阶段取证引擎计划以及长期加固目标。
仪表盘作为Flask服务器运行,并且需要管理员权限以进行采集器进程检测。克隆后在桌面上创建快捷方式:
将 C:\path\to\SOC 替换为您实际的安装路径。
3. 命名为:SOC Dashboard
4. 右键单击快捷方式 → 属性 → 高级 → 勾选以管理员身份运行
5. 单击确定
该快捷方式会启动 Flask,等待其就绪,然后自动打开浏览器。如果 Flask 已在运行,则会跳过启动直接打开浏览器。如果未以管理员权限运行该快捷方式,状态点将显示灰色。
仪表盘强制执行清晰的启动/停止序列,确保审计器书签(早晨完整性检查,傍晚哈希链验证)始终按顺序运行。

所有收集器心跳均为红色(健康文件缺失或已停止)。“关闭仪表盘”按钮隐藏——在结束日运行之前,仪表盘不允许关闭。

启动日运行晨间审计器书签(SHA256日志验证、归档哈希链验证),并启动所有12个收集器及关联引擎。每个收集器报告后,心跳变为绿色。

结束日按顺序停止所有收集器并运行傍晚审计器书签。序列运行期间收集器点保持绿色;状态行显示正在运行审计器傍晚…

傍晚审计完成后,所有收集器点变为红色,状态行显示傍晚审计完成。可安全关闭。,“关闭仪表盘”按钮出现——单击它将干净地终止Flask进程。

浏览器标签页需手动关闭(浏览器未向外部进程暴露关闭API)。
收集器事件磁贴显示每个源最近按严重性标记的事件。引擎告警流实时推送Python引擎的关联发现结果,包含规则编号、置信度分数、完整证据链和SHA256证据哈希。

示例:规则35(原始磁盘读取)在 powershell.exe 打开指向 \Device\HarddiskVolume3 的原始句柄时触发,规则31(DLL加载异常)标记从用户可写路径加载Defender DLL。两者均包含完整的进程来源和文件哈希。
该套件采用三层架构:
采集层 — PowerShell收集器在后台持续运行,每个收集器监控特定数据源,写入结构化、带严重性标签的日志条目。所有收集器都需要管理员权限。
分析层 — PowerShell分析脚本解析收集的日志并生成每周摘要报告。以普通用户身份运行。
关联引擎(阶段7 — 已完成) — Python引擎摄入所有收集器日志,将事件标准化为通用模式,并在所有数据流上运行基于规则和风险评分的关联。三个程序:
通过多轮红队分析定义(参见文档)。在阶段7实施。
所有收集器使用一致的四级严重性系统:
| 级别 | 颜色 | 含义 |
|---|
所有日志遵循一致的格式,便于Python解析器兼容:``` [yyyy-MM-dd HH:mm:ss] [SEVERITY] Event details
**仓库结构:**```
home_SOC_suite/
├── Analysts/ — PowerShell analyst scripts
├── Collectors/ — PowerShell collector scripts
├── Dashboard/ — Flask single-page SOC dashboard (Phase 8)
│ ├── app.py — Flask server, all routes, process detection, DB reads
│ ├── Launch_Dashboard.ps1 — Launcher: checks if Flask running, starts it, opens browser
│ ├── templates/
│ │ └── index.html — Single-page dashboard layout
│ └── static/
│ ├── style.css — Dark terminal aesthetic, severity colours, bar graph tiers
│ └── dashboard.js — All polling, Start Day / End Day sequence, session alert counter
├── Engine/ — Python correlation engine
│ ├── engine.py — Main loop and orchestration
│ ├── log_parser.py — Collector log ingestion
│ ├── normalizer.py — Event normalisation to canonical schema
│ ├── correlator.py — Correlation rules engine
│ ├── alert_manager.py — Alert deduplication, flood detection, log writing
│ ├── db.py — SQLite operations (batch ingest, query, retention)
│ ├── health_db.py — Heartbeat SQLite store (collector_status, heartbeats tables)
│ ├── config.py — All thresholds and time windows in one place
│ ├── test_parser.py — Log parser test suite (7 tests)
│ ├── test_normalizer.py — Normaliser test suite (32 tests)
│ └── test_correlator.py — Correlator test suite (135 tests)
└── Documentation/ — Research documents, red team analysis, and dashboard screenshots
运行时生成(不在仓库中跟踪):``` Logs/ — Active collector log files │ └── Archives/ — 7-day rotated log archives Reports/ — Weekly analyst report output Config/ — Baseline JSON files and Sysmon config Engine/hocsoc.db — SQLite operational database Engine/hocsoc_health.db — Heartbeat and collector status store (engine correlation use only)
## 支持的操作系统语言
Steward 会自动检测以下操作系统语言的正确 CPU 性能计数器路径:
| 语言 | 计数器路径 |
|---|---|
| 英语 | \Process(*)\% Processor Time |
| 德语 | \Prozess(*)\Prozessorzeit (%) |
| 法语 | \Processus(*)\% temps processeur |
| 西班牙语 | \Proceso(*)\% de tiempo de procesador |
| 意大利语 | \Processo(*)\% Tempo processore |
| 葡萄牙语 | \Processo(*)\% de Tempo do Processador |
| 俄语 | \Процесс(*)\% загруженности процессора |
| 简体中文 | \Process(*)\% Processor Time (通常是英语) |
要添加对其他语言的支持,请将本地化计数器路径添加到 `Steward.ps1` 中 `Get-WorkingCounterPath` 函数的 `$PathsToTry` 数组中。
---
## 文档与研究
`Documentation/` 文件夹包含了推动本套件设计的完整研究与规划记录。该套件是采用对抗性方式构建的——每一层在构建前都针对威胁模型进行规划,并在下一层开始前通过红队分析进行压力测试。
| 文档 | 用途 |
|---|---|
| `home_soc_pre_coding_architecture_guide.pdf` | 预构建决策框架。规范数据模型、信任模型、基线生命周期、测试策略及跨收集器验证机会。在编写任何代码之前完成。 |
| `Home_Soc_Architecture_And_Engine_Design.pdf` | 目标架构规范。三程序 Python 引擎设计、SQLite 模式、混合检测模型(确定性规则 + 风险评分)、告警升级逻辑。 |
| `HomSOC_Implementation_Guide.pdf` | 分阶段构建计划。所有收集器的骨架代码、每周工作计划、PowerShell 快速参考模式。PowerShell 层的施工手册。 |
| `RedTeam_Analysis_HomSOC_Final.pdf` | 主要红队参考。11 轮对抗(Claude + Gemini + 真实参与模拟),全部 26 条关联规则及完整检测逻辑、绕过发现及应用于构建的缓解措施。 |
| `Home_SOC_Red_Team_Analysis_Pro.pdf` | 架构级红队。11 个攻击场景,针对结构性弱点:基线污染、关联绕过、噪声泛洪、收集器压制、存档篡改、日志注入、重放攻击和身份滥用。 |
| `Home_SOC_Red_Team_Whitepaper.pdf` | 执行摘要。完整攻击场景表、系统对比(基线 vs 加固)、关键架构改进及检测模型设计概览。 |
---
## 主要特性
- **对抗性设计** —— 在构建 Python 引擎之前,通过多轮红队分析定义了 48 条关联规则。检测逻辑基于真实攻击链,而非假设场景
- **行为基线收集** —— 所有收集器随时间建立基线,能够根据观察到的正常行为而非静态规则进行异常检测
- **地理位置监控** —— 按国家跟踪出站连接、入站连接、认证源 IP 和 DoH 连接,并在地理定位失败时触发 TELEMETRY_GAP 告警
- **进程指纹** —— 每个网络、端口、进程和认证事件均记录完整进程路径,检测伪装和 LOLBin 攻击
- **套件自我保护** —— Warden 通过 SHA256 FIM 监控所有脚本和配置,采用三层保护链:清单完整性、外部计划任务和 CityGuard 任务监控
- **零信任白名单** —— 所有白名单初始为空。在授予任何豁免前需要 30 天的基线收集
- **严重性标记日志** —— 结构化日志条目设计用于 Python 解析器兼容及未来 SIEM 集成
- **7 天日志轮转** —— 通过 Auditor.ps1 在早/晚书签处进行自动归档,附带 SHA256 校验及归档哈希链完整性检查
- **多语言 Windows 兼容性** —— 启动时自动检测 8 种操作系统语言的性能计数器路径
- **单页 SOC 仪表板** —— 基于 Flask 的实时可视化,取代所有单独的 PowerShell 窗口。包括套件启动器(开始日 / 结束日)、实时 Steward 资源监控器、Sentinel 连接馈送、三状态心跳点(绿色活跃 / 琥珀色未启动 / 红色关闭——直接从收集器健康 JSON 文件读取,独立于引擎状态)、SUSPICIOUS/CRITICAL 事件卡片、可滚动的引擎告警馈送、会话告警计数器以及一键式周报生成。结束日会停止所有收集器并运行晚间 Auditor 书签——随后会出现“关闭仪表板”按钮以干净地终止 Flask 进程。浏览器标签页必须手动关闭(浏览器不会向外部进程暴露关闭 API)
---
## 当前状态 —— 第 8 阶段完成
Python 关联引擎已构建完成,并实时运行在所有 12 个收集器上,包括 SysmonWatcher(Sysmon 内核级事件)。
**引擎流水线:**
`log_parser.py` → `normalizer.py` → `correlator.py` → `alert_manager.py`
所有摄取、标准化和关联步骤均使用批量 SQLite 事务。三个测试套件共 174 项测试——全部通过。
**已实现规则:** 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 16, 17, 18, 21, 22, 41, 42,
43, 44, 45, 46, 47, 48(第 1 层单事件和第 2 层窗口关联)以及规则 28–39(由 SysmonWatcher 处理的 Sysmon 内核事件)。规则 12, 14, 15, 20 推迟至第 4 层(需要 30 天基线数据)。规则 23, 24, 25 因缺少专用收集器而受阻。
**检测模型:** 混合型——对清晰攻击链使用确定性规则,对累积弱信号使用风险评分,对收集器静默和摄取质量下降使用可见性告警。
**后续阶段:**
| 阶段 | 程序 | 状态 |
|---|---|---|
| 8 | SOC 仪表板 —— Flask 单页实时可视化 | 已完成 |
| 9 | 取证引擎 —— 事后调查,仅追加的证据数据库 | 计划中 |
| 9 | 取证仪表板 —— 汇总发现、报告生成、证据导航 | 计划中 |
请参见 [`roadmap.md`](https://github.com/nate-ryan-7690/home_soc_suite/blob/main/roadmap.md) 了解完整开发时间线。
---
## 已知噪音告警 —— 在加固前
在新安装的系统上,某些告警类型会频繁触发,直到应用针对机器的加固措施。这是预期行为,不代表真实检测。
| 收集器 | 告警 | 原因 |
|---|---|---|
| Sentinel | CRITICAL 环境违规 | 任何安装在默认可信区域路径(Windows、Program Files)之外的第三方软件——云同步客户端、通信应用及安装到 AppData 的供应商实用工具是常见来源 |
| Sentinel | SUSPICIOUS TELEMETRY_GAP | IPv6 环回和链路本地地址无法进行地理定位查找——当前版本已修复 |
| SysmonWatcher | 规则 31, 33, 34 触发 SUSPICIOUS/CRITICAL | 防病毒和端点安全软件在正常操作中会定期执行 LSASS 读取、原始磁盘读取以及从用户可写路径加载 DLL |
| SysmonWatcher | 规则 28 触发 SUSPICIOUS | 附加到浏览器进程进行调试的开发工具会触发浏览器调试器附加规则 |
| Bulwark | SUSPICIOUS GeoIP 失败 | 私有和保留 IP 范围内的连接无法进行地理定位——在加入白名单前会产生 TELEMETRY_GAP |
| Bloodhound | SUSPICIOUS DGA 检测 | 在滚动基线稳定前,短寿命或低样本数的 DNS 查询会触发熵检查 |
| Warden | SUSPICIOUS MANIFEST_MISSING | 首次运行时不存在 FIM 清单——初始设置后使用 `.\Warden.ps1 -BuildManifest` 构建 |
| Warden | SUSPICIOUS COLLECTOR_DOWN | 尚未部署的收集器没有心跳文件——在完整套件运行前属正常现象 |
| DoH_Detector | 浏览器 DoH 触发的 CRITICAL | 配置使用 DNS-over-HTTPS 的浏览器会触发,直到将其添加到允许进程列表为止 |
针对机器的加固措施(可信进程列表、路径白名单、已知安全条目)在本地应用,不包含在此仓库中。
---
## 注意事项
- 在每个脚本中将 `$RootPath` 设置为 SOC 套件的安装文件夹。默认值为 `Desktop\SOC`
- 脚本需要将 PowerShell 执行策略设置为 Bypass
- 收集器脚本需要管理员权限以获取完整的系统可见性
- 分析师脚本以标准用户身份运行
- 地理位置由 ip-api.com 免费层提供
- 在运行 Bloodhound.ps1 之前,必须启用 DNS 客户端事件日志:
`wevtutil sl "Microsoft-Windows-DNS-Client/Operational" /e:true`
---
## 学习背景
2026 年在德国 Fachinformatiker 应用程序开发再培训期间构建。目标职业方向:网络防御和威胁情报。在 AI 辅助下作为学习工具构建。每个设计决策、调试环节和架构选择均由开发人员主导,并完全理解底层概念。
| 程序 | 阶段 | 角色 |
|---|
| 关联引擎 | 7 — 已完成 | 摄入、标准化、关联、告警(SQLite操作存储) |
| SOC仪表盘 | 8 — 已完成 | 实时可见性 — 收集器健康、告警、证据链(Flask) |
| 取证引擎 | 9 — 已规划 | 事后调查 — 超级时间线、进程谱系、信标分析、持久性审计、仅追加证据数据库 |
| 取证仪表盘 | 9 — 已规划 | 汇总取证结论 — 颜色编码状态、报告生成、证据导航 |
| 阶段 | 脚本 | 昵称 | 功能 |
|---|
| 1 | Sentinel.ps1 | 网络守卫 | 出站TCP连接(含地理位置)、进程路径验证和累积传输跟踪 |
| 1 | Bulwark.ps1 | 夜巡者 | 入站监听端口 — 基线差异检测、新建/关闭端口检测、地理位置异常 |
| 1 | Steward.ps1 | 军需官 | 使用Windows性能计数器按进程监控CPU、内存和磁盘I/O,支持8种语言自动检测 |
| 1 | CityGuard.ps1 | 城卫 | 计划任务添加、删除和修改 — 操作和触发器变更检测 |
| 1 | Watchman.ps1 | 守望者 | 电源事件 — 启动、睡眠、唤醒、意外关机及非工作时间活动 |
| 2A | Registry_Warden.ps1 | — | 注册表运行键、RunOnce、服务基线差异检测,SAM RID完整性检查 |
| 2B | Harbinger.ps1 | — | WMI/CIM事件驱动进程创建监控 — 高风险路径检测、父进程跟踪 |
| 3 | Bloodhound.ps1 | — | DNS查询监控 — 通过香农熵检测DGA、TXT记录标记、ICMP流量突增检测 |
| 4 | Warden.ps1 | — | 套件看门狗 — SHA256脚本FIM、日志大小回归、收集器健康、维护标志、自监视计划任务 |
| 5 | SecEventLog.ps1 | — | Windows安全事件日志 — 登录异常、账户操作、权限提升、服务安装、暴力破解检测 |
| 6 | DoH_Detector.ps1 | — | DNS-over-HTTPS绕过检测器 — 来自非白名单进程到28个已知DoH解析器IP的TCP连接 |
| 7 | SysmonWatcher.ps1 | — | Sysmon内核级事件监控 — 进程注入、LSASS访问、原始磁盘读取、未签名驱动加载、WMI持久化、浏览器调试器附加(22个事件ID) |
| 脚本 | 昵称 | 功能 |
|---|
| Investigator.ps1 | 审计报告员 | 每周分析Sentinel出站连接日志 |
| Crow.ps1 | 总司令 | 每周分析Bulwark入站端口日志 |
| Ledger.ps1 | 学士 | 每周分析Steward资源日志(含内存趋势检测) |
| Castellan.ps1 | 城堡总管 | 每周分析CityGuard计划任务日志 |
| Auditor.ps1 | — | 晨间/傍晚书签完整性审计 — SHA256日志验证、归档哈希链验证 |
| # | 规则 | 严重性 | 来源 |
|---|
| 1 | 疑似数据泄露 | 高 | Steward + Sentinel |
| 2 | 疑似C2信标 | 高 | Sentinel + Bulwark |
| 3 | 持久化+C2回呼 | 严重 | CityGuard + Sentinel |
| 4 | 非工作时间入侵 | 严重 | Watchman + Sentinel |
| 5 | 数据暂存 | 高 | Bulwark + Steward |
| 6 | LOLBin网络活动 | 严重 | Sentinel |
| 7 | 疑似进程挖空 | 严重 | Harbinger + Sentinel |
| 8 | 疑似DoH绕过 | 严重 | DoH_Detector |
| 9 | 疑似WMI持久化 | 高 | Harbinger + CityGuard |
| 10 | 账户篡改 | 严重 | SecEventLog |
| 11 | 突发泄露模式 | 高 | Sentinel |
| 12 | 欠阈值持续进程 | 可疑 | Sentinel + Steward |
| 13 | 疑似初始访问 | 严重 | Harbinger + Sentinel |
| 14 | 可信二进制异常 | 可疑→严重 | Sentinel |
| 15 | 统计抖动检测器 | 高 | Sentinel |
| 16 | 上下文完整性违反 | 严重 | Harbinger + Sentinel |
| 17 | 身份/RID劫持 | 严重 | Registry_Warden + SecEventLog |
| 18 | 关联引擎健康 | 中 | Python Core |
| 19 | 自我保护/脚本FIM | 严重 | Warden |
| 20 | 统计时间漂移 | 中 | Steward + Sentinel |
| 21 | 解释器锁定/BYOI | 高 | Harbinger |
| 22 | 云API异常 | 高 | Sentinel |
| 23 | HID注入检测器 | 严重 | WMI设备事件 |
| 24 | 邪恶双子/WiFi幽灵 | 严重 | 网络监控 |
| 25 | 焦点窃取/窗口劫持 | 高 | Win32 API |
| 26 | 访问完整性检查 | 高 | 所有收集器 |
| 27 | 延迟初始访问 | 严重 | Harbinger + Sentinel (SQLite监视列表) |
| 28 | 浏览器调试器附加 | 严重 | SysmonWatcher (事件ID 10) |
| 29 | 内核进程注入 | 严重 | SysmonWatcher (事件ID 8) |
| 30 | 未签名驱动加载 | 严重 | SysmonWatcher (事件ID 6) |
| 31 | 可疑镜像加载 | 可疑 | SysmonWatcher (事件ID 7) |
| 32 | WMI订阅绑定 | 严重 | SysmonWatcher (事件ID 19/20/21) |
| 33 | 疑似LSASS访问 | 严重 | SysmonWatcher (事件ID 10) |
| 34 | 原始磁盘读取 | 严重 | SysmonWatcher (事件ID 9) |
| 35 | 创建可执行文件 | 可疑 | SysmonWatcher (事件ID 11) |
| 36 | AMSI提供程序篡改 | 严重 | SysmonWatcher (事件ID 12) |
| 37 | 命名管道可疑 | 可疑 | SysmonWatcher (事件ID 17/18) |
| 38 | 已下载可执行文件 | 高 | SysmonWatcher (事件ID 15) |
| 39 | 进程挖空确认 | 严重 | SysmonWatcher (事件ID 25) |
| 40 | 持续欠阈值CPU负载 | 可疑 | Steward + Sentinel |
| 41 | 盲窗口利用 | 高/严重 | Python引擎(收集器DOWN+并发事件) |
| 42 | 协调收集器抑制 | 严重 | Python引擎(≥2个收集器同时DOWN) |
| 43 | 意外脚本引擎生成 | 可疑 | Harbinger(已知恶意父进程→脚本引擎) |
| 44 | 来自高风险路径的脚本 | 高 | Harbinger(43 + 引擎二进制位于用户可写路径) |
| 45 | 脚本引擎网络回调 | 严重 | Harbinger + Sentinel(43 + 出站连接) |
| 46 | 完整供应链执行链 | 严重 | Harbinger + Sentinel(恶意父进程+释放+回调) |
| 47 | 混淆/编码执行 | 高 | Harbinger(-EncodedCommand / Hidden+Bypass组合) |
| 48 | 已知恶意父子对 | 严重 | Harbinger(特定高置信度配对,零合法用途) |
| 正常 | 绿色 | 匹配已知基线,无需操作 |
| 未知 | 黄色 | 尚未建立基线,监控模式 |
| 可疑 | 暗黄色 | 检测到异常,请调查 |
| 严重 | 红色 | 阈值被突破,立即审查 |