README.md

May 3, 2026 · View on GitHub

image

适用 Win7/Win11 x86/x64 用户态和内核态数据采集,XP 未做兼容测试。

v1.0:

单独引擎版本.

v2.x:

v1.0 引擎重构,采集器分离用户态和内核态 lib,HadesSvc 数据引擎消费 lib 生产数据,组织格式为 json 和 protobuf。Duilib 界面完善,Win7/Win11 系统兼容性完善。

Hboat 支持 Windows 插件上报数据解析,GoAgent 统一管理和上报,可作为插件下发。

GoAgent 负责 GRPC 和 Windows 插件管理(跨平台):https://github.com/theSecHunter/Hades-Linux/tree/main

GoServer已合并新项目Hboat(跨平台): https://github.com/theSecHunter/Hboat

rust版本

Windows Rust版本正在开发中

https://github.com/theSecHunter/Hades-Linux/tree/dev-win-plugins-rs/plugins/wdriver-rust

方案:

Kernel

  x64内核探针粗糙分为两类技术方案:

  • 基于Intel-x/d虚拟化技术,绕过PG保护做花式Hook,功能强大-系统无痕。
  • 基于微型过滤框架和注册回调,兼容性好/快速开发/接口完善。

  项目采用过滤驱动+注册回调,方案中规中矩。有想过将VT Hook移植进来,不可控因素较多(不完善),有兴趣的可以跳转:https://github.com/TimelifeCzy/kHypervisorBasic

User

  System数据采集和ETW事件采集。

文档

文档文件名版本
内核文档Documentation/Win_Kernel_Event.mdv2.0
应用层文档Documentation/Win_User_Event.mdv2.0
ETW文档Documentation/Etw_Event_Struct.mdv2.0
WFP文档Documentation/Win_Wfp_Event.mdv1.0
传输结构(c)Documentation/Windows Struct_c.md(see HadesSdk/include/sysinfo.h)v2.0
Hboat插件管理指令(Windows)HboatCommand.mdv2.0

框架:

image

v2.0

内核回调上抛事件 v2.0

事件描述进度
进程进程创建 - 销毁 - 进程数据完成
线程线程创建 - 销毁 - 线程数据完成
注册表删除 - 修改 - 枚举 - 重命名等完成
模块DLL - 驱动完成
会话用户登录/退出/Session切换完成
文件文件读写访问 OS <= Windows7 (Windows8以上修改IoFileObjectType会触发PG)完成

内核接口采集事件 v2.0

事件描述进度
进程 - 线程 - 模块 - 内存系统已运行的进程 - 线程 - 模块(DLL/SYS)完成
IDT系统IDT完成
GDT系统GDT完成
SSDT/SSSDT系统SSDT完成
FSDFastFat/NTFS - 派遣函数内核地址完成
MouseKeyBoard鼠标键盘 - 派遣函数内核地址完成
DpcTimer遍历系统 DpcTimer完成
NetworkNSI提取IP:PORT完成
-
内核回调进程/线程/映像/关机/MINIFILTER/WFP 通知开发中
-
HIVEhive注册表 - 开发中未开发
NTFSntfs文件解析 - 开发中未开发

注:Dpc硬编码,兼容性还未处理.

应用接口采集事件 v2.0

前身:https://github.com/TimelifeCzy/Windows-emergency-servicetools 已集成该项目.

事件描述进度
启动项计划任务、注册表提取完成
网络连接活跃TCP/UDP完成
进程树活跃进程(线程、模块)完成
系统信息系统基础信息(软/硬件信息等)完成
系统日志应用程序日志、安全日志、系统日志数据待定
系统用户系统用户完成
系统软件服务已安装软件/服务完成
-
Rootkit_PERootkit相关PE文件地址解析,提取数据源Offset.开发中
-
文件列举指定目录下文件,可与NTFS数据对比.未开发

用户态ETW事件上抛 v2.0

事件描述进度
文件创建、删除、读写完成
注册表创建、删除、读写完成
进程树进程、线程 - 创建/销毁/模块加载完成
网络tcp/udp五要素完成

Etw事件结构See: etw_event_struct.md

Duilib界面展示 v2.0

事件描述进度
Cpu利用率动态刷新完成
系统内存动态刷新完成
处理器详细静态展示完成
操作系统版本静态展示完成
当前用户静态展示完成
主板型号静态展示完成
显示器型号静态展示完成
电池静态展示完成
摄像头静态展示完成
蓝牙静态展示完成
-
麦克风静态展示未开发
-
GPU动态刷新未开发
磁盘I/O动态刷新未开发
CPU温度动态刷新未开发
主板温度动态刷新未开发
显卡温度动态刷新未开发
硬盘温度动态刷新未开发
流量上传/下载动态刷新未开发

Duilib展示数据不会上报, GoAgent上报CurrentSystemInfo

驱动行为拦截 v2.0:

事件描述进度描述引用代码
进程拦截自定义进程完成基于回调
注册表拦截自定义注册表完成基于回调
目录保护目录和子目录/文件完成基于MiniFilter
流量拦截/重定向TCP完成基于WFP
-
注入检测CreateRemote/内存进行中基于回调https://bbs.pediy.com/thread-193437.htm
https://github.com/huoji120/CobaltStrikeDetected/

HIPS

服务端管理规则随着插件下发,HadesSvc.exe解析规则写入内核. 支持规则热更新(Hboat下发). 开发中预计v2.4之前全部完成。

白名单模式:启动规则后(不包含已存在进程),只允许白名单定义的规则操作。

黑名单模式:启动规则后(不包含已存在进程),不允许黑名单定义的规则操作。

进程黑白名单模式(内核规则匹配)

{
	// 1白名单,2黑名单
	"processRuleMod": 2,
	// 白名单: 生效后只允许执行cmd.exe|powershell.exe等进程
	// 黑名单: 生效后不允许执行cmd.exe|powershell.exe等进程
	"processName": "cmd.exe|powershell.exe|vbs.exe|wscript.exe"
}

See Rule: config/processRuleConfig.json image

注册表黑白名单模式(应用规则匹配)

引擎工作方式:匹配 processName 和 registerValuse 二元组。多组规则情况下,命中某条规则成功后不继续匹配,以命中规则为准。

  • 举例1) 2) cmd.exe配置冲突,1) 允许cmd.exe访问Run, 2) 不允许cmd.exe规则访问 Run,配置冲突,冲突时顺序靠前为准(1为准)。

  • 举例2) 3) cmd.exe既可以是白名单-又可以是黑名单,比如Run注册表不允许cmd.exe访问(黑名单),Settings允许cmd.exe访问(白名单),registerValuse键值不冲突即可。

  • 注:打开是 "删除-创建-设置-查询-重命名操作" 前提,比如修改,必须配置成打开修改(1000100),删除则是打开删除(1010000),如果open为0意味着这个过程中有key_access or key_read标志都会失败。

{

	{ 1) 
		// 仅允许cmd.exe|powershell.exe对regusterValuse打开和修改.
		"registerRuleMod": 1,
		"processName": "cmd.exe|powershell.exe",
		"registerValuse": "\REGISTRY\MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run|\REGISTRY\MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOne",
		// 1000000打开(Create/Open),100000关闭(Close),10000删除(Delete),1000创建(CreteNew), 100设置(SetValue),10查询(QueryValue),1重命名(Rename)
		"permissions": 1000100(打开和修改)
	}
	{ 2)
		// 不允许cmd.exe|vbs.exe|wscript.exe对regusterValuse进行全部操作, 也可以只配禁止打开,这样修改 删除 查询都不可用.
		"registerRuleMod": 2,
		"processName": "cmd.exe|vbs.exe|wscript.exe",
		"registerValuse": "\REGISTRY\MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run|\REGISTRY\MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOne",
		"permissions": 1111111(判定KEY_ALL_ACCESS)
	}

	{  3)
		// 仅允许svchost.exe|cmd.exe对regusterValuse修改重命名操作
		"registerRuleMod": 1,
		"processName": "cmd.exe|svchost.exe",
		"registerValuse": "\Registry\Machine\Software\WOW6432Node\Policies\Microsoft\MUI\Settings",
		"permissions": 1000101(打开修改重命名操作)
	}
}

See Rule: config/registerRuleConfig.json

目录访问黑白名单模式(内核规则匹配)

{
	{
		// 仅允许word.exe|wps.exe访问Directory
		"FileIORuleMod": 1,
		"processName": "word.exe|wps.exe",
		"Directory": "D:\\Document|C:\\System\\AppData",
	}
	{
		// 不允许word.exe|wps.exe访问Directory
		"FileIORuleMod": 2,
		"processName": "word.exe|wps.exe",
		"Directory": "D:\\Document1|C:\\System\\AppData1",
	}
}

See Rule: config/DirectoryRuleConfig.json

应用规则匹配:内核先会根据模式对进程过滤,过滤后上抛至应用层规则逻辑处理,根据引擎结果内核做出拦截或放行。处理方式会牺牲性能,不过对于系统来说可以忽略不计。

GRPC/Protobuf v2.0

考虑 GRPC 编译复杂性和移植成本,v2.0 VS2019 工程默认不编译 HadesSvc 内的 grpc.cpp/grpc.h,GoAgent 负责 GRPC 统一管理;HadesSvc 当前保留 Protobuf 协议和 C++ lib 链接。

Windows对于很多第三方生态逐步容纳,Grpc github cmake编译会出现很多问题,如果使用推荐方式:

vcpkg install grpc

配置vs2019 工具 --> 选项 --> NuGet管理即可,详细可以参考网上教程,连接程序使用MD编译。

C++ Grpc请参考官方文档:https://grpc.io/docs/languages/cpp/basics/

GRPC配置文件: config/client_config

当前 VS2019 工程默认只编译 transfer.pb.cc,grpc.cpp/grpc.h 为历史保留代码。

Minifilter v3.0

任务优先级状态
文件备份: 进程文件落地隔离,脚本命令和IE下载文件备份.
不局限于curl/cmd/powershell/vbs/js等形式.
待定
勒索病毒行为检测:minifilter监控, 诱饵 + 访问控制 + 行为判定待定

WFP v2.0

网络层描述
Established层ProcessInfo
传输层TCP - UDP
网络层IP
数据链路层OS >= Windows10

v2.0基于WFP流量隔离

任务优先级状态
进程/IP:PORT Deny和Redirect完成
DNS访问控制完成

Yaml配置流量规则, 支持基于TCP/UDP协议拦截和重定向, 重定向指定或全局进程, 详细请看示例, DNS优先级大于UDP, Deny优先级大于Redirect.

tc:
  - name: "eguard_egress_test_project"
    address: "192.168.1.1/24"
    protocol: TCP # ALL/TCP/UDP
    ports:        # empty means all ports. 32(single port like 80), 16(range like 8079-8080)
      - 80
      - 8079-8080
    action: DENY  # DENY/LOG
    level: INFO

  - name: "test_tcp_redirect"
    #address: ""
    protocol: TCP   # TCP
    #ports:         # empty means all ports.
    #  - 80
    #  - 8079-8080
    processname: "1.exe|2.exe"    # empty means all process.
    redirectip: "192.168.188.188" # redirect to ipaddress
    redirectport: "88"            # redirect to port
    action: REDIRECT
    level: INFO
dns:
  - name: "eguard_egress_test_dns"
    action: DENY
    domain: "grpc.hades.store"
  - name: "eguard_egress_test_dns_1"
    action: DENY
    domain: "*.baidu.com"
    

规划:

v2.x

版本任务优先级状态
v2.0~v2.3Duilib终端界面完成
v2.0~v2.3ETW和内核态回调监控兼容Win7/Win11 x32/x64版本,稳定性测试完成
v2.0~v2.3采集Lib接口更改为订阅-发布者模式完成
v2.0~v2.3插件模式改造完成
v2.3.2数据采集粒度完善完成
v2.3.4进程保护完成
v2.3.4注册表键值保护完成
v2.3.5目录访问保护完成
v2.3.6.1TCP/UDP流量拦截/重定向完成
-
v2.3.7注入拦截进行中
v2.3.7内核回调枚举进行中
v2.3.7内核钩子检测进行中
-
v2.xETW GUID LOG方式注册,非"NT KERNEL LOG",复杂环境注册冲突被覆盖待定

  致力于提升稳定性和健壮性,以插件形式提供 lib/dll,便于集成至 Windows 终端三方产品,提升软件的安全能力和质量。

历史版本:

v1.0 实现:主要实现引擎探针和上层数据-上报流程打通。

v2.0 重构:代码质量优化,包括win7 - win11等平台的兼容性,局部Edr。

参考:

  • 看雪论坛 & OpenEdr & Netfilter SDK & Sandboxie
  • 项目将零散代码组织在一起,业余投入精力有限。 部分cpp早期学习编写,也有引用代码cpp中有标注。

Contact

Input Hades to get the QR code

Hades has joined 404Starlink

Stargazers over time

Stargazers over time