# Hades-Windows
**Repository Path**: lliuyang/Hades-Windows
## Basic Information
- **Project Name**: Hades-Windows
- **Description**: Windows HIDS/EDR
- **Primary Language**: C
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-05-21
- **Last Updated**: 2022-05-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README


**适用Win7/Win10 x32/x64用户态和内核态数据采集,XP未做兼容测试.**
- v1.0单独引擎版本,存在许多问题,Rootkit接口Win10 1909进行测试。
- v2.0开发中,对v1.0的引擎重构,采集器构建用户态和内核态lib,Svc业务剥离灵活,如Server使用epoll/asio,少量代码就可以同将采集数据推送至不同的Server。
- v2.0修正v1.0存在的诸多问题,添加Duilib界面和完善Win7/Win8/WIn10系统兼容性。
- v2.0 Hades_Win兼容Linux数据上报,添加Go_Server完整数据格式解析处理,采集数据目前通过Grpc上报至Go_server进行解析即可,发布者数据还有很多未清洗。支持Server主动下发采集任务,Rootkit数据采集平台有待完善。支持Server管理Client监控/开启,Go_Server还未引入主分支详细见: https://github.com/theSecHunter/Hades-Linux
#### 方案:
##### Kernel
x64内核探针粗糙分为两类技术方案:
- 第一种基于Intel-x/d虚拟化技术,绕过PG保护做花式Hook,功能强大-系统无痕。
- 第二种基于微型过滤框架和注册回调,兼容性好/快速开发/接口完善。
项目采用过滤驱动+注册回调,这种方案中规中矩。有想过将以前写的VT Hook移植进来,但是不可控因素较多(不完善),有兴趣的可以跳转:https://github.com/TimelifeCzy/kHypervisor_MsrEpt_Hook
##### User
System数据采集和ETW事件采集。
#### 文档
| 文档 | 文件名 | 版本|
| ---------------- | ---------------------------------- |----|
| 内核文档 | win_kernel_event.md |v1.0|
| 应用层文档 | win_user_event.md |v1.0|
| WFP文档 | win_wfp_event.md |v1.0|
| Grpc 传输结构(c) | windows struct_c.md(see sysinfo.h) |v1.0|
#### 框架:

v2.0
##### 内核回调上抛事件 v2.0
| 事件 | 描述 | 进度 |
| :----- | :---- | :---- |
| 进程 | 进程创建 - 销毁 - 进程数据 | 完成 |
| 线程 | 线程创建 - 销毁 - 线程数据 | 完成 |
| 注册表 | 删除 - 修改 - 枚举 - 重命名等(缺少具体的包解析) | 数据未清洗 |
| 模块 | DLL - 驱动 |完成 |
| 会话 | 用户登录/退出/Session切换 |完成 |
| WMI | 待定(应用层etw实现) |ETW实现 |
| 文件 | 文件读写访问 OS <= Windows7 (Windows10 对象回调(文件对象)会有几率触发PG) |完成 |
##### 内核接口采集事件 v2.0
| 事件 | 描述 | 进度 |
| :----------- | :---- | :---- |
| 进程 - 线程 - 模块 - 内存 | 系统已运行的进程 - 线程 - 模块(DLL/SYS) | 完成 |
| 进程详细 | VAD - 内存 | 未开发 |
| IDT | 系统IDT - 内存加载地址 | 完成 |
| MouseKeyBoard | 鼠标键盘 - 派遣函数内核地址 | 完成 |
| DpcTimer | 遍历系统 DpcTimer |完成 |
| Hive | hive注册表 - 开发中 |未开发 |
| Ntfs | ntfs文件解析 - 开发中 |未开发 |
| Network | Nsi提取IP:PORT | 完成 |
| Fsd | FastFat/ntfs - 派遣函数内核地址 | 完成 |
| SSDT | 系统SSDT | 完成 |
| GDT | 系统GDT | 完成 |
| 回调检测 | 枚举系统注册的回调 |开发中 |
**注:Dpc硬编码,兼容性还未处理.**
##### 应用接口采集事件 v2.0
前身:https://github.com/TimelifeCzy/Windows-emergency-servicetools,集成至该项目.
| 事件 | 描述 |进度 |
| ------------ | ------------------------------------------------------------ |------------ |
| 启动项 | 计划任务、注册表提取| 完成 |
| 网络连接 | 活跃TCP/UDP|完成 |
| Session | 用户登录| 开发中|
| 进程树 | 活跃进程(线程、模块)|完成 |
| 系统信息 | 系统基础信息(软/硬件信息等) -- 考虑上线发送非被动|完成 |
| 系统日志 | 应用程序日志、安全日志、系统日志数据|ETW|
| 系统用户 | 系统用户|完成 |
| 系统软件服务 | 已安装软件/服务|完成 |
| 摄像头 | 监控,如果状态改变上报数据 |开发中|
| 麦克风 | 监控,如果状态改变上报数据|开发中|
| 蓝牙 | 监控,如果状态改变上报数据|开发中|
| 文件 | 列举指定目录下文件,可与ntfs数据对比.|未开发|
| Rootkit_PE | Rootkit相关PE文件地址解析,提取数据源Offset.|未开发 - 数据用于和内核提取地址匹配|
##### 用户态ETW事件上抛 v2.0
| 事件 | 描述 |进度 |
| -------- | ------------------------------- |-------- |
| 文件 | 创建、删除、读写 |事件数据未完全解析|
| 注册表 | 创建、删除、读写 |事件数据未完全解析|
| 进程树 | 进程、线程 - 创建/销毁/模块加载 |完成|
| 网络 | tcp/udp五要素 |完成|
**Etw事件结构See: etw_event_struct.md**
##### Duilib界面展示 v2.0
| 事件 | 描述 |进度 |
| -------- | ------------------------------- |-------- |
| Cpu利用率| 动态刷新 |完成|
| 系统内存| 动态刷新|完成|
| GPU| 动态刷新|开发中|
| 磁盘I/O|动态刷新 |开发中|
| CPU温度| 动态刷新|开发中|
| 主板温度| 动态刷新|开发中|
| 显卡温度| 动态刷新|开发中|
| 硬盘温度| 动态刷新|开发中|
| 流量上传/下载|动态刷新 |开发中|
| 处理器详细|静态展示 |完成|
| 操作系统版本|静态展示 |完成|
| 当前用户|静态展示 |完成|
| 主板型号|静态展示 |完成|
| 显示器型号|静态展示 |完成|
| 电池|静态展示 |完成|
**Duilib展示数据不会上报**
##### 恶意行为拦截 v2.0:
| 事件 | 描述 |进度 | 描述 |
| -------- | ------------------------------- |-------- | -------- |
| 进程拦截| Powershell/cmd/vbs/自定义进程 |完成| 回调中Name判断|
| 注册表拦截| 自启动 |开发中| 回调中Name判断 |
| 远程注入检测 | 无文件/远程线程注入 |开发中| 回调中VAD |
| uefi检测 | |开发中| |
**基于回调简单行为拦截,拦截进程配置文件: config/client_config.**
##### GRPC v2.0
Windows对于很多第三方生态逐步容纳,Grpc github cmake编译仍会出现很多问题,最好的办法:
```
vcpkg install grpc
```
配置vs2019 工具 --> 选项 --> NuGet管理即可,详细可以参考网上教程,注意vcpkg 安装的是release grpc,所以debug模式调试会有问题。
C++ Grpc请参考官方文档:https://grpc.io/docs/languages/cpp/basics/
**GRPC配置文件: config/client_config**
**See Code: grpc.h grpc.cpp**
#### 规划:
##### v2.0
| 任务 | 优先级 | 状态 |
| --------------------------------------------------------- | -------------- |-------------- |
| Duilib终端界面| 中|完成 |
| Etw和内核态回调监控兼容Win7/Win10 x32/x64版本,稳定性测试|高|完成 |
| 优化通信:Win下目前使用Grpc,少量代码灵活支持其它接上报接口订阅数据 | 中 |完成|
**Rootkit接口先不考虑兼容性,等完善了数据对比以后在考虑兼容**
##### v3.0
**从v3.0开始,流量和文件不局限于监控分析,有更多的玩法扩展。**
| 任务 | 优先级 |状态|
| ------------------------------------------------------------ | ------ |------|
| 流量隔离:基于WFP对进程/IP:PORT重定向和bypass. | 高 |未开始|
| 文件备份:基于Minfilter对进程文件rwx隔离,对脚本命令和IE下载文件备份.
命令不局限于curl/cmd/powershell/vbs/js等形式. | 高 |未开始|
| 指定进程授权非隔离分析 - 类沙箱做inlinehook来监控运行周期(待定) | 中 |未开发 |
| Rootkit优化/完善| 中|进行中 |
| 勒索病毒行为检测 | minifilter监控,设置诱饵文件来判定 |待定|
##### WFP v3.0
| 网络层 | 描述 |
| :------------ | :-------------- |
| Established层 | ProcessInfo |
| 传输层 | TCP - UDP |
| 网络层 | IP |
| 数据链路层 | OS >= Windows10 |
**v3.0引入WFP流量隔离**
Json配置流量规则(未生效):
```
(流量规则)
Json:
{
Bypass:
1 - 单要素:目标 port 或者 ip
2 - 双要素:目标 ip:port
3 - 重定向标志位 - 暂时不开启(流量隔离)
}
```
**项目处于入门级,很多设计需要时间打磨和重构。关于WFP/Minifilter驱动,仅流量文件监控不会引入,应用层ETW日志弥补。**
**灵活健壮稳定,以插件提供lib/dll,集成至任意终端产品,包括办公软件 - 游戏音频,提供更多终端软件第三方安全建设/检测的能力。**
#### 历史版本:
v1.0 实现:主要实现引擎探针和上层数据-上报流程打通。
v2.0 重构:设计模式mvp和代码质量优化,包括xp - win7 - win10等平台的兼容性。
#### 参考:
- Github开源Rootkit工具,但不局限于工具。
- 看雪论坛帖子
- OpenEdr & Netfilter SDK & Sandboxie
```c++
std::cout << "项目将零散代码组织到一起,业余投入精力并不多。部分cpp可能以前学习中编写,遗憾的是时间太久,忘记了具体引用的项目,部分代码中有参考github_url,有兴趣可以去学习一番。" << std::endl
```