ClementG91/winsight

GitHub: ClementG91/winsight

WinSight 是一套开源的 Windows 本地安全监控工具,帮助用户发现持久化项、摄像头/麦克风调用、网络连接和 DNS 查询等系统活动。

Stars: 1 | Forks: 0

# WinSight [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/ClementG91/winsight/actions/workflows/ci.yml) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](LICENSE) ![平台: Windows](https://img.shields.io/badge/platform-Windows-informational) ![.NET 8](https://img.shields.io/badge/.NET-8.0-512bd4) **目标:** 让普通的 Windows 用户*看到并控制*他们的机器上实际发生的事情——什么保留了,什么在监视摄像头/麦克风,什么在回传数据——这一切都通过一个屋檐下的、小巧的、单一用途的、可审计的工具来实现。没有遥测,没有账户,没有付费墙。 ## 为什么存在这个项目(已验证现有方案,2026年7月) Objective-See 的 macOS 套件在 Windows 上**没有统一的开源替代品。** 构建基础是存在的,但很分散,而且其中最好的还是闭源的: | Objective-See (macOS) | 功能 | Windows:目前存在什么 | 差距 | |---|---|---|---| | KnockKnock | 枚举持久化 | **Autoruns** (Sysinternals) — *闭源* | OSS 差距 | | BlockBlock | 实时持久化警报/拦截 | — | **无 OSS** | | LuLu | 出站防火墙 | simplewall, Portmaster (OSS, 独立) | 集成差距 | | OverSight | 摄像头/麦克风使用警报 | — (少量闭源免费软件) | **无 OSS** | | RansomWhere? | 勒索软件行为阻止 | — (仅限研究) | **无 OSS** | | TaskExplorer | 进程检查器 | Process Hacker / System Informer (OSS) | 已覆盖 | | Netiquette | 实时连接 | TCPView (Sysinternals) — *闭源* | OSS 差距 | | DNSMonitor | DNS 查询 | — | **无 OSS** | | What's Your Sign | 签名检查 | Sigcheck (Sysinternals) — *闭源* | OSS 差距 | **结论:** 不要重新克隆 Sysinternals 或 Process Hacker。真正的价值在于**四个“无 OSS”缺口**(摄像头/麦克风、勒索软件行为、实时持久化、DNS 可见性)**+ 一个单一、友好、透明的套件 UX**。 ## 范围决策(资深视角,反对过度设计) - **用户模式优先。** MVP 中的所有内容都是用户模式的,建立在 **ETW** (Event Tracing for Windows)、**WFP** (Windows Filtering Platform)、IPHelper、Authenticode 和注册表之上。它发布时不需要内核驱动程序。 - **内核驱动程序是第二阶段,且成本高昂。** 实时*拦截*(BlockBlock,RansomWhere 级别的文件拦截)需要一个 minifilter / WFP callout driver,在现代 Windows 上这需要 **EV 代码签名证书 + Microsoft 证明签名**(真实的资金 + 流程,Secure Boot / driver-signing 强制执行)。我们不让它成为 MVP 的前置条件。通过 ETW 在用户模式下完全可以进行监控/警报;拦截级别的强制执行有意推迟到后续阶段。 - **小型、独立的工具**共享一个核心 + 一个仪表板——而不是一个庞然大物。 - **没有供应商锁定,没有 SaaS。** 仅限本地。可选的 VirusTotal 查找由用户自行选择并通过用户密钥进行。 ## MVP(第一阶段——用户模式,无驱动程序,快速发布) 1. **持久化扫描器**(KnockKnock 级别)——枚举每个自启动向量(Run keys、Scheduled Tasks、Services、WMI 事件订阅、启动文件夹、驱动程序、winlogon/AppInit 等),验证 Authenticode 签名,标记未签名/异常项。 2. **摄像头与麦克风监视器**(OverSight 级别)——当网络摄像头/麦克风变为活动状态时发出托盘警报,并带有每个进程的归属(ETW + `CapabilityAccessManager` 注册表)。 3. **连接与 DNS 监视器**(Netiquette + DNSMonitor 级别)——实时出站连接(IPHelper)和 DNS 查询(ETW `Microsoft-Windows-DNS-Client`)。 4. **统一仪表板** + 一个所有工具共享的 **签名/信誉** 助手(What's Your Sign 级别)。 ## 路线图(后续阶段) - **第二阶段——防火墙**(LuLu 级别),基于 **WFP**,针对应用程序的出站控制。 - **第三阶段——实时持久化**(BlockBlock 级别):将扫描器升级为实时监视器;用于拦截的可选 minifilter(需要证书)。 - **第四阶段——勒索软件金丝雀**(RansomWhere 级别):金丝雀文件 + 熵/重命名启发式算法;用于真正拦截的 minifilter(需要证书)。 ## 技术栈(已锁定——参见 `docs/ARCHITECTURE.md`) - **应用程序 + 用户模式工具:** C# / **.NET 8**,`CsWin32` 用于 P/Invoke,`TraceEvent` 用于 ETW,WinUI 3(或 WPF)托盘/仪表板。覆盖 Win32 最广的最快路径。 - **性能关键核心 / 未来代理:** 如有需要,使用 Rust 或 C++。 - **内核驱动程序(第三/四阶段):** C/C++ KMDF minifilter(或 Rust `windows-drivers`)。 ## 构建约束(当前) 此仓库是在 **Linux** 开发机上搭建的。文档、架构、模块布局和 CI 配置是可移植的,但 .NET/Windows 代码必须在 **Windows**(Windows CI 运行器或虚拟机)上构建和测试。目前尚未在此处编译任何 Windows 原生内容——此次提交是基础 + 计划。 ## 命名 `WinSight` 是一个暂定名称(Objective-See → “查看”正在发生的事情;Windows 的类似物)。Objective-See 的工具使用重叠词(KnockKnock、BlockBlock);此处的每个工具名称可以遵循该规则,也可以保持描述性。在编写代码之前可自由重命名。 ## 状态 第一阶段正在进行中——CI 在 `windows-latest` 上通过。位于一个已签名的 `winsight` 二进制文件(子命令 `persistence | av | net | dns | all`,`--flagged`,`--json`,`--version`,`--help`)背后的模块化工具库: - **持久化**(KnockKnock 级别)——8 个自启动面:Run/RunOnce/RunServices/ Policies\Explorer\Run(HKLM+HKCU × 64/32 位),Services 和驱动程序,Winlogon Shell/Userinit,Scheduled Tasks(Tasks XML),AppInit_DLLs,IFEO 调试器,Active Setup,BootExecute——每个都进行了签名检查,具备针对每个面的弹性扫描。 - **摄像头/麦克风**(OverSight 级别)——哪些应用程序使用了网络摄像头/麦克风以及现在什么是活动的(CapabilityAccessManager ConsentStore),并在设备开启/关闭的瞬间加上实时 `av --watch` 警报。 - **连接**(Netiquette 级别)——通过原生 IP Helper 表(GetExtendedTcpTable/Udp)获取活动的 TCP/UDP(IPv4 + IPv6),归属于拥有它的进程及其签名;标记外部的、已建立的、未签名的所有者。 - **DNS**(DNSMonitor 级别)——来自解析器缓存(MSFT_DNSClientCache)的最近解析的域名 + 答案。 **签名**通过验证目录感知(`ISignatureVerifier` / `AuthenticodeVerifier`)进行验证:批处理的 `Get-AuthenticodeSignature` 正确识别目录签名的 Windows 二进制文件并标记篡改(HashMismatch),并带有永不抛出异常的托管后备。所有工具都发出共享的报告结构(`WinSight.Reporting`),作为人类可读文本或稳定的 `--json` 合约,供未来的 GUI/自动化使用。在 Linux 上创作;在 `windows-latest` 上的 CI 是记录的编译器。 Central Package Management + `.editorconfig`。 请参阅 [CHANGELOG.md](CHANGELOG.md) 了解逐步进展。 下一步:ETW DNS 监视,WFP 防火墙(LuLu 级别),基于 `--json` 合约的 GUI/托盘 shell,以及更多持久化向量(WMI 订阅,启动文件夹)。 原生的 `WTGetSignatureInfo` 验证器是 `ISignatureVerifier` 背后最终的签名性能替代方案。基于驱动的工具(BlockBlock/RansomWhere)是后续阶段(需要 EV 证书)。 ## 许可证 **GPL-3.0-or-later**——Objective-See 的工具是开源的;Copyleft 保持安全工具的可审计性和可分叉性。(完整的 GPLv3 文本将在首次发布前引入到 `LICENSE` 中。)
标签:Mr. Robot, 持久化检测, 终端安全