lasersharkkiller/NortonAntivirusNextGenEDR
GitHub: lasersharkkiller/NortonAntivirusNextGenEDR
这是一款基于 Intel VT-x 虚拟化技术的免费企业级 Windows EDR,集成了内核级监控、反勒索软件、多层欺骗及 APT 检测能力。
Stars: 1 | Forks: 1
# NortonAntivirusNextGenEDR
如果说美国的强大程度是 10,那么这款 NextGen Norton Antivirus EDR 直接将企业级防御提升到了 0(即免费)。由 Norton 打造,传承了植根于网络安全历史的名号,专为应对现代威胁而重塑。
这是一款 Windows 内核模式 EDR,具有基于 Intel VT-x 的管理程序和基于 EPT 的内存监控、Early Launch Anti-Malware (ELAM) 启动驱动分类、通过 EPT 影子页凭证投毒实现的对手欺骗、内核级遥测、Hook 检测、进程与 PE 扫描、带有勒索软件检测的文件系统微过滤驱动、带有端口拦截的 WFP 网络回调、AMSI 绕过检测、用户模式 API 拦截、ETW 集成、YARA/Sigma/Capa 检测引擎,以及 Sysmon/SACL 丰富功能。
## 防御能力
### Hypervisor (Intel VT-x)
- 独立的纯 WDM 内核驱动 (`NortonEDRHypervisor.sys`),使用 Intel VT-x 实现了一个精简的 Type-1 风格 VMM;现有的 Windows 内核作为客户机运行,在 VMX non-root 操作模式下未经修改
- **初始化** — `KeIpiGenericCall` 原子性地广播每个 CPU 的 VMX 设置:CPUID 厂商检查 → `IA32_FEATURE_CONTROL` 锁定验证 → CR0/CR4 固定位调整 → VMXON 区域 + VMCS + MSR bitmap + EPT 分配 → `VMXON` → VMCS 配置 → `VMLAUNCH`;客户机在 MASM 存根中捕获的 `GUEST_RIP` 继续标签处恢复执行
- **VM 退出处理程序** — `HvVmExitStub` (MASM) 在每个 CPU 的主机栈上捕获所有 15 个 GPR,并调用 `HvDoHandleVmExit` (C++),后者根据 `VM_EXIT_REASON` 进行分派:
- **CPUID** — 隐藏 VMX 功能 (CPUID.1:ECX 第 5 位),设置管理程序存在位,在 `0x40000000` 叶暴露自定义 HV 叶,签名为 "NortonEDR HV"
- **CR3 访问** — 拦截并记录每次 CR3 写入(进程切换):`(old CR3 → new CR3, CPU, RIP)` — 这是执行每进程策略强制的基础
- **CR0 写入** — 如果客户机正在清除 `CR0.WP`(写保护)则发出警报(内核 DKOM 防御)
- **MSR 写入 (IA32_LSTAR)** — 在硬件级别检测对 SYSCALL 目标 MSR 的写入,位于所有内核 Hook 之下;发出包含旧值/新值和 RIP 的 Critical 警报
- **MSR 写入 (IA32_EFER)** — 如果正在清除 `NXE`(No-Execute Enable)位则发出警报
- **MSR 写入 (IA32_DEBUGCTL)** — 记录分支跟踪启用/禁用
- **VMCALL** — Hypercall 接口:`PING (0)`、`GET_STATS (1)`(返回每个 CPU 的退出/EPT/MSR 计数)、`PROTECT_PAGE (2)`(将 GPA 限制为 EPT 读取+执行 — 防篡改)、`UNPROTECT_PAGE (3)`
- **EPT 违规** — 委托给 `HvEptHandleViolation`:记录带有 GPA、GVA 和 RIP 的读/写/执行错误;检测 **写入后执行** 模式(页面可写但不可执行 → 执行尝试触发 → Shellcode 分段警报)
- **INVD** — 模拟为 `WBINVD` 以防止缓存损坏
- **XSETBV** — 记录后转发到硬件
- **#GP 异常** — 重新注入客户机(客户机 VMX 指令导致 #GP)
- **扩展页表 (EPT)** — 覆盖所有物理内存范围 (`MmGetPhysicalMemoryRanges`) 的 4 级恒等映射;最初使用 2 MB 大页面以降低开销;`HvEptSplitPage` 将 2 MB PDE 提升为 512 条目 4 KB 页表,以进行页面粒度监控;`HvEptSetPagePermissions` 调整 R/W/X 位并发出 `INVEPT`(单上下文);写入后执行检测连接到违规处理程序中
- **MSR bitmap** — 4 KB 拦截表;选定的 MSR 导致 VM 退出,而无需接触所有 MSR 访问:`IA32_LSTAR`(读+写)、`IA32_SYSENTER_EIP`(写)、`IA32_DEBUGCTL`(写)、`IA32_EFER`(写)
- **MASM 存根** (`HvAsm.asm`) — `VMXON/VMXOFF/VMCLEAR/VMPTRLD/VMREAD/VMWRITE/VMLAUNCH/VMRESUME/INVEPT/VMCALL` 包装器;`HvLaunchVm` 将实时 RSP/RIP 捕获到 VMCS 中,然后执行 `VMLAUNCH`;`HvVmExitStub` 是 HOST_RIP — 保存 15 个 GPR,调用 C 处理程序,恢复寄存器,`VMRESUME`
- **卸载** — IPI 广播设置 `g_HvShutdown`,触发 VMCALL 退出,处理程序在返回前发出 `VMXOFF`,恢复 VMX root 操作;所有 VMX 区域和 EPT 表按 CPU 释放
### Early Launch Anti-Malware (ELAM)
- 独立的纯 WDM 内核驱动 (`NortonEDRElam.sys`),注册时设置 `StartType=0` 和 `LoadOrderGroup=Early-Launch` — 由 Windows 启动加载程序在其他所有启动启动驱动程序之前加载
- **启动驱动回调** — `IoRegisterBootDriverCallback` 注册 `NortonElamBootDriverCallback`;在加载程序初始化每个启动启动驱动程序之前调用一次
- **分类逻辑**(按优先顺序评估):
1. **签名/完整性失败** — `BDCB_IMAGE_FLAG_FAILED_CODE_INTEGRITY` / `BDCB_IMAGE_FLAG_FAILED_IMAGE_HASH` → `KnownBadImage`;如果还设置了 `BDCB_IMAGE_FLAG_SYSTEM_CRITICAL` → `KnownBadImageBootCritical`(触发 BSOD 而不是静默跳过驱动程序)
2. **SHA-256 哈希黑名单** — 已知 LOLDrivers(WinRing0x64、RTCore64、dbutil_2_3、AsrDrv103、gdrv)的 32 字节哈希与 `ImageHash` 匹配;匹配 → `KnownBadImage`
3. **已知良好名称前缀** — Microsoft 启动关键组件 (`ntoskrnl`、`hal`、`classpnp`、`disk`、`volmgr`、`fvevol`、`ndis`、`storport` 等) → `KnownGoodImage`
4. **默认** → `UnknownImage`(由加载程序决定)
- **启动阶段统计** — 在 `BdCbStatusOptionalDriversComplete` 时将总计/良好/不良/未知/验证失败计数器输出到 `DbgPrint`
- **ETW 提供程序** (`A1B2C3D4-E5F6-7890-ABCD-EF1234567890`) — 在驱动程序加载时 `EtwRegister`;三个事件 ID:`BootDriverClassified(1)`、`KnownBadBlocked(2)`、`VerifyFailed(3)`;每个携带镜像名称 (UTF-16) 和分类代码 — 即使 TUI 未运行,xperf、WPA 和 SIEM 收集器也可以访问
- **安全 ETW 事件(接收)** — ELAM 注册的组件通过 `EtwRegisterSecurityProvider` 获得对受保护 ETW 提供程序(例如 `Microsoft-Windows-Threat-Intelligence`)的访问权限;主 `NortonEDRDriver` 在启动后请求 ELAM 交接令牌,以在运行系统中激活完整的 ETW-TI 接收
- ELAM 卸载将最终的启动阶段统计信息写入 `DbgPrint`,并调用 `IoUnregisterBootDriverCallback` + `EtwUnregister`
### 文件系统微过滤驱动 (FsFilter)
- 内核微过滤驱动,通过 `FltRegisterFilter` / `FltStartFiltering` 在高度 **265000**(FSFilter Activity Monitor 范围)向 Windows Filter Manager 注册
- **`IRP_MJ_CREATE`** — 凭证文件访问检测:标记 `SAM`、`SYSTEM`、`SECURITY` 配置单元、`NTDS.dit` 和 LSASS 转储文件的打开;可执行文件投放检测:标记在 `%Temp%`、`%AppData%`、`%ProgramData%`、`Public` 中创建的 `.exe`/`.dll`/`.ps1`/`.vbs`/`.bat`/`.js`/`.hta`
- **`IRP_MJ_WRITE`** — 每个 PID 的滑动窗口写入突发跟踪器(64 槽数组,5 秒窗口,200 次写入阈值);超过阈值会发出 Critical 警报 — 高置信度的勒索软件信号
- **`IRP_MJ_SET_INFORMATION`** — 重命名为勒索软件扩展名检测:将目标扩展名与 15 种以上已知勒索软件扩展名(`.locky`、`.wncry`、`.petya`、`.cerber`、`.ryuk`、`.conti` 等)进行匹配;发出 Critical 警报
- 高度注册表项 (`DefaultInstance`、`Altitude`、`Flags`) 由用户模式安装程序在 `StartService` 之前写入;如果 Filter Manager 不存在,则是非致命的(打印遥测说明,驱动程序继续)
- 所有检测作为带有 `FsFilterCheck` 位的 `KERNEL_STRUCTURED_NOTIFICATION` 呈现,流入 TUI、JSONL 日志和 Elasticsearch
### 内核级遥测
- 用于进程/线程创建、镜像加载、注册表操作和对象访问的内核回调
- 通过替代系统调用处理程序进行系统调用拦截 — 活动处理程序:`NtAllocateVirtualMemory` (RWX)、`NtWriteVirtualMemory`、`NtProtectVirtualMemory`、`NtReadVirtualMemory` (跨进程/lsass)、`NtWriteFile`、`NtQueueApcThread`、`NtQueueApcThreadEx`、`NtSetContextThread`、`NtResumeThread`、`NtContinue` (私有执行区域)
- 利用 VAD 树进行镜像完整性验证
- 影子堆栈 (CET) 验证以确保线程调用堆栈完整性
- 通过线程调用堆栈检查检测代码注入
- **WFP 网络回调** — 在 `FWPM_LAYER_OUTBOUND_TRANSPORT_V4` 上进行 `FwpsCalloutRegister` + `FwpmFilterAdd`;归因于 PID 的连接元组;通过 `--block-ports ` 配置阻止列表;内置的可疑端口启发式算法 (Metasploit 4444、Tor 9001/9002、IRC 6667、Back Orifice 31337 等) 在检测队列、TUI、JSONL 和 Elasticsearch 中作为 Warning 事件呈现
### Hook 检测
- **SSDT 完整性** — 在驱动程序加载时拍摄 `nt!KiServiceTable` 的基线快照;后续扫描将实时条目与快照进行比较,并在任何修改的系统调用调度指针上发出警报
- **内联 Hook** — 跨所有 ntoskrnl 导出的序言扫描,检测 `JMP near` (E9)、`JMP far` (FF 25)、`MOV RAX + JMP RAX` (48 B8 … FF E0) 和 `PUSH + RET` (68 … C3) 蹦床模式
- **EAT Hook** — 内核模块的导出地址表遍历;标记任何解析地址落在模块镜像边界之外的 EAT 条目
- **ETW Hook** — `EtwWrite`、`EtwWriteEx`、`EtwWriteTransfer` 和 `EtwRegister` 的序言扫描;检测用于静默内核遥测的内联补丁
- **替代系统调用处理程序完整性** — 通过注册时使用的相同 `LEA R14,[RIP+]` 扫描解析 `PspAltSystemCallHandlers`;验证槽 1 仍指向驱动程序的 `SyscallHandler`,如果它已被清空或替换则发出警报
所有 Hook 检测都会发出 `KERNEL_STRUCTURED_NOTIFICATION`,严重性为 Critical,包含 Hook 地址、Hook 类型和解析的蹦床目标,并进入驱动程序的通知队列。
### 进程与 PE 扫描
- **反射式 DLL 注入** — 对每个新进程进行 VAD 树遍历;标记包含 MZ/PE 且无文件备份的私有可执行区域
- **匿名 RWX 区域** — 同样的 VAD 遍历将没有 PE 头的私有 `EXECUTE_READWRITE` 区域标记为 Shellcode 分段区域
- **保护缓冲区中的 PE 头** — `NtProtectVirtualMemory` Hook 在内存变为可执行时检查区域内容;如果存在 MZ/PE 头则发出警报
- **跨进程 PE 写入** — `NtWriteVirtualMemory` Hook 在远程写入时检查写入数据的 MZ/PE 签名(进程注入进行中)
- **进程幽灵化** — `SeAuditProcessCreationInfo` 空值检查检测从已删除文件启动的进程
- **PPID 欺骗** — 在进程创建时检测父 PID 与创建线程进程不匹配
- **进程挖空** — VAD/LDR 交叉检查验证主镜像 VAD 起始地址与 PEB 加载器条目匹配
- **节熵分析** — 计算每个节的 Shannon 熵;在 ≥ 7.2 位/字节时发出警报(打包/加密代码)
- **节异常检查** — 可写+可执行节 (W+X),原始大小 < 虚拟大小/2 按节标记
- **TLS 回调检测** — 解析 `IMAGE_DIRECTORY_ENTRY_TLS`;如果 `AddressOfCallBacks` 非零则发出警报(TLS 注入向量)
- **导入哈希 (imphash)** — 计算每个标记 PE 的排序 `module.funcname` 对的 MD5;作为 Info 事件呈现,用于威胁情报关联以及 SHA256
- **LOLDrivers 哈希匹配** — 除文件名查找外,还根据哈希数据库检查加载的 `.sys` 文件的 SHA256;捕获重命名的已知不良驱动程序
### AMSI 集成
#### 内核 — 绕过检测
- **AMSI 导出扫描** — `ImageLoadNotifyRoutine` 拦截 `amsi.dll` 加载事件;立即扫描 `AmsiScanBuffer`、`AmsiOpenSession`、`AmsiInitialize` 和 `AmsiScanString` 序言是否存在已知绕过补丁
- 检测到的补丁模式:`XOR EAX,EAX; RET` (33 C0 C3 / 31 C0 C3)、`XOR RAX,RAX; RET` (48 31 C0 C3)、`MOV EAX,0x80070057; RET` (E_INVALIDARG 补丁)、`JMP near` 蹦床、`JMP far` 间接重定向
- 检测结果作为带有严重性 Critical 和 `AmsiBypassCheck` 方法标志的 `KERNEL_STRUCTURED_NOTIFICATION` 发出
#### 用户模式 — AMSI 提供程序 (`AmsiProvider.dll`)
- 实现 `IAntimalwareProvider` (CLSID `{C18BED31-4E42-4E0F-B00D-A7E3FE09E18D}`) 的 COM 进程内服务器
- 在 `HKLM\SOFTWARE\Microsoft\AMSI\Providers\` 下注册 — 接收来自 PowerShell、VBScript、.NET 和其他支持 AMSI 的主机的每次 `AmsiScanBuffer` 调用
- 关键字检测引擎涵盖:Mimikatz 调用、凭据窃取命令、PowerSploit/PowerView/BloodHound、AMSI 绕过反射模式、Shellcode 分段字符串、Meterpreter/Cobalt Strike 指标
- 通过 `regsvr32 AmsiProvider.dll` 自我注册;通过 `regsvr32 /u AmsiProvider.dll` 自我注销
- 将检测结果记录到二进制文件旁边的 `norton_amsi_detections.log`
### 检测引擎
- YARA 规则引擎,支持从可配置路径递归自动加载
- Sigma-Lite 规则支持,具有完整的布尔逻辑(`selection`、`filter`、`1 of`、`all of`、`and`、`or`、`not`)和字符串运算符(`contains`、`contains|all`、`startswith`、`endswith`)
- 通过缓存的 JSON 数据库进行 LOLDrivers 检测
- **Capa 功能扫描** — 每次内核检测事件,标记的 PE 将提交给 `capa.exe` 工作进程(按路径去重);匹配的功能在 TUI 和 JSONL 遥测中作为 High 严重性事件呈现
- 确定性严重性评分,带有实时 UI 安全评分
- 跨检测方法的 PID 级短窗口关联警报
### ETW 集成
#### 内核作为 ETW 提供程序
- 驱动程序在加载时通过 `EtwRegister` 注册为 ETW 提供程序 (GUID `D6E3E932-B0B9-4E8C-A2C3-F7A9B8C5D4E1`)
- 从内核环形缓冲区出队的每个检测通知都通过 `EtwWrite` 同时写入 ETW — 使外部消费者(xperf、WPA、SIEM)无需运行 TUI 即可使用
- 六个事件 ID 映射到检测系列:Hook(1)、PE/VAD(2)、Process(3)、AMSI(4)、Syscall(5)、Generic(6)
- 每个事件的字段:进程名称、消息、PID、作用域地址
#### ETW-TI 消费者 (Microsoft-Windows-Threat-Intelligence)
- 通过 `StartTrace` + `EnableTraceEx2` 为 `{F4E1897C-BB5D-5668-F1D8-040F4D8DD344}` 启动实时 ETW 会话
- 呈现远程注入操作:`AllocVM-Remote`、`ProtectVM-Remote`、`MapView-Remote`、`QueueUserAPC-Remote`、`SetThreadContext-Remote`、`WriteVM-Remote`、`ReadVM-Remote`
- 如果进程缺少 PPL 或 `SeSystemEnvironmentPrivilege`,则会优雅地回退并显示一条信息性消息
#### 其他 ETW 消费者
- **PowerShell 脚本块日志** — `Microsoft-Windows-PowerShell/Operational` EID 4104;脚本内容通过 Sigma-Lite 规则引擎路由
- **DNS-Client 查询** — `Microsoft-Windows-DNS-Client/Operational` EID 3006;查询名称通过 Sigma 路由以进行 DGA/C2 检测;如果禁用,则自动启用该通道
- **WinRM 横向移动** — `Microsoft-Windows-WinRM/Operational` EID 6、8、91、132;将 WSMan 会话创建和 HTTP 请求标记为 Medium/Low 严重性
- **安全日志(扩展)** — EID 4624/4625(使用类型过滤的登录/失败)、4648(显式凭据登录 / 传递哈希)、4672(SeDebug/SeTcb 特权分配)、4688(带有可疑命令行启发式的进程创建)、4697(服务安装)、4698/4702(计划任务创建/更新)、4720/4726(帐户创建/删除)、4732/4733(管理员组成员身份更改)
- **任务计划程序** — `Microsoft-Windows-TaskScheduler/Operational` EID 106/129/140/141;将计划任务注册和执行呈现为持久性指标
- **Windows Defender** — `Microsoft-Windows-Windows Defender/Operational` EID 1116/1117(威胁检测和操作)、5001(实时保护已禁用 — 篡改检测,Critical 严重性)
- **打印后台处理程序** — `Microsoft-Windows-PrintSpooler/Operational` EID 316;打印机驱动程序安装标记为 High 严重性(PrintNightmare 向量)
- **RDP 登录** — `Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational` EID 1149;成功的 RDP 身份验证,源 IP 作为 Medium 严重性横向移动指标呈现
- **BITS Client** — `Microsoft-Windows-Bits-Client/Operational` EID 3/59/60;后台传输作业创建和完成标记为 T1197 持久性和渗透检测
### 用户模式 API Hook DLL (`HookDll.dll`)
- 独立的可注入 DLL,具有双层 Hook 引擎(IAT 修补 + 内联序言 Hook),针对 13 个 Win32/Native API
- **监控的 API**:`VirtualAlloc` (RWX)、`VirtualAllocEx` (远程)、`WriteProcessMemory`、`CreateRemoteThread`、`CreateRemoteThreadEx`、`LoadLibraryA/W/ExA/ExW`、`ResumeThread` (跨进程)、`SetThreadContext` (跨进程)、`RegSetValueExA/W`
- `WriteProcessMemory` Hook 检查写入数据的 MZ/PE 签名并标记事件
- `SetThreadContext` Hook 从 `CONTEXT` 结构中提取新的 RIP 并呈现它
- `RegSetValueExA/W` Hook 在 High 严重性标记已知的持久性值名称(`Run`、`AppInit_DLLs` 等);所有其他写入为 Info
- **内联 Hook** 使用 14 字节绝对 `JMP [RIP+0]` + 8 字节地址修补每个函数的序言,捕获在运行时通过 `GetProcAddress` 解析 API 的调用者(单独的 IAT 修补会漏掉这些);修补前,`IsSafeToCopy` 拒绝包含相对分支或 RIP 相对内存操作数的序言
- **蹦床** 每个 Hook:置换的序言字节 (14) + `JMP` 回到 `target+14`;在单个 `PAGE_EXECUTE_READWRITE` 池中分配;当内联 Hook 处于活动状态时,`GetCallThrough()` 返回蹦床,以便 IAT 存根不会重新进入修补后的序言
- `SetWindowsHookEx` 故意排除 — 它只到达 GUI 消息循环线程,与目标注入/持久性 API 无关
- 遥测通过命名管道 `\\.\pipe\NortonEDR_HookDll` 使用制表符分隔的行协议 (`SEVERITY\tCALLER_PID\tAPI_NAME\tTARGET_PID\tDETAIL\n`) 报告
- NortonEDR 托管多客户端管道服务器线程;每个客户端连接被分派到一个分离的线程以进行并发处理
- `DllMain` 自动调用 `InstallHooks`/`RemoveHooks`;导出允许显式控制
- **内核 APC 注入** — `DllInjector.cpp` 挂钩 `ImageLoadNotifyRoutine`;在每次 `ntdll.dll` 映射时,加载线程用作 APC 目标 (`PsGetCurrentThread()`);在附加时通过 `ZwAllocateVirtualMemory(NtCurrentProcess())` 在目标进程中分配路径缓冲区;`KeInitializeApc`/`KeInsertQueueApc` 将 `LoadLibraryW(hookDllPath)` 排队以进行用户模式传递;系统进程(`smss`、`csrss`、`wininit`、`lsass`)和 NortonEDR 本身被排除
- **IOCTL `NORTONAV_SET_INJECT_CONFIG`** — 启动时,NortonEDR 将 `LoadLibraryW` VA(在所有进程中均有效 — 共享 DLL 节,仅启动时 ASLR)、HookDll 完整路径和自己的 PID 发送到驱动程序;注入自动针对所有后续进程创建激活
### 对手欺骗
一个四层欺骗堆栈,向攻击者提供虚假数据而不是阻止他们 — 导致凭据窃取工具摄取金丝雀凭据、身份验证失败并触发 SIEM 警报,而对手认为其工具已损坏而不是被检测到。
**金丝雀凭据设计** — 所有注入的凭据都使用 MD4(空字符串) NTLM 哈希 (`31d6cfe0d16ae931b73c59d7e0c089c0`) 和空字符串 LM 哈希 (`aad3b435b51404ee`)。这些哈希被域控制器普遍阻止(身份验证失败)并被 SIEM 标记(使用已知不良哈希的传递哈希尝试),因此任何使用捕获凭据的行为都会产生可审计的失败事件,而攻击者不会收到错误。
**第 1 层 — 蜜罐注册表项** (`NortonEDRDriver/src/Deception.cpp`)
- 驱动程序加载时在 `HKLM\SECURITY\Policy\Secrets`、`HKLM\SYSTEM\...\Services\FakeSvcPassword\Parameters` 和 `HKLM\SAM\...\Users\HoneypotUser` 下创建三个易失性注册表项
- 项包含:偏移量 8 处带有金丝雀 NTLM 哈希的 LSA 密钥 blob;假服务帐户密码 (`BackupAdmin2024!`) 作为 `_SZ`;偏移量 `0x18` 处带有金丝雀哈希的合成 SAM F 值(`samparse` / `impacket` 期望 NT 哈希的位置)
- `Registry.cpp` 中的 `RegOpNotifyCallback` 在每次 `RegNtPreCreateKeyEx` 事件上调用 `DeceptionEngine::IsHoneypotRegistryAccess()`;匹配发出 Critical `DeceptionCheck` 警报并 **允许打开继续**,以便攻击者接收虚假数据
- 帐户名称:`svc_backup_admin`,域:`CORP` — 合理的服务帐户名称,可通过凭据窃取工具中的基本健全性检查
**第 2 层 — 蜜罐文件陷阱** (`NortonEDRDriver/src/Deception.cpp`)
- 监控五种文件名模式:`sam_backup.bak`、`.env.credentials`、`credentials.xml`、`ntds_backup.dit`、`lsass_dump.dmp`
- FsFilter 预创建回调通过 `DeceptionEngine::IsHoneypotFilePath()` 检查文件名;匹配 → Critical 警报;允许文件打开,以便攻击者可以读取诱饵内容
- 警报包括访问进程名称和 PID,以便立即归因
**第 3 层 — 内核 LSASS 读取缓冲区修补** (`NortonEDRDriver/src/SyscallsTracing.cpp`、`HookDll/HookDll.cpp`)
- *内核路径*:`NtReadVmHandler`(`NtReadVirtualMemory` 的替代系统调用预调用 Hook)检测针对 LSASS 的跨进程读取;当输出缓冲区已经是内核映射时,`DeceptionEngine::PatchLsassReadBuffer()` 以 8 字节对齐的 16 字节窗口遍历它,并将匹配 NTLM 哈希启发式(≥8 个非零字节,高字节 ≥5,最大运行 ≤4)的值就地替换为金丝雀哈希
- *用户模式路径*:`HookDll` 的 `Hook_ReadProcessMemory` 在读取后触发(在实际系统调用完成后);`IsLsassHandle()` 确认目标是 lsass.exe;`PatchNtlmHashesInBuffer()` 对用户模式输出缓冲区应用相同的启发式遍历;修补计数通过命名管道报告
- 攻击者的进程接收包含金丝雀哈希而不是真实凭据的缓冲区;Mimikatz 和类似工具可以毫无错误地解析并显示虚假数据
**第 4 层 — Hypervisor EPT 影子页欺骗** (`NortonEDRHypervisor/src/HvDeception.cpp`)
- 使用 EPT Monitor Trap Flag (MTF) 分页 Hook 为 LSASS 凭证缓存页面的任何读取者提供诱饵 4 KB 页面,而 LSASS 本身继续使用真实数据
- **诱饵页面内容**:偏移量 0 处的假 `MSV1_0_PRIMARY_CREDENTIAL` 头(`svc_backup_admin`/`CORP` 的假 UNICODE_STRING 字段);`+0x40` 处的金丝雀 NTLM 哈希;`+0x50` 处的金丝雀 LM 哈希;在每个 `0x230` 字节边界重复(Windows 10 22H2 中结构的大小);`+0x800` 处的 WDigest 假明文 `BackupAdmin2024!`
- **机制**(每次从非 LSASS 进程读取):EPT 将受保护页面标记为仅执行 → EPT 读取违规触发 → 处理程序映射诱饵页面并启用 MTF(Primary Proc Controls 的第 27 位)→ 客户机执行一条读取诱饵的指令 → MTF VM 退出(原因 37)→ 恢复真实映射,清除 MTF → 客户机正常继续使用真实数据
- `HvDeceptionProtectPage()` 注册 GPA;`g_MtfRestoreGpa[64]` 跟踪每个 CPU 待处理的恢复(由于 MTF 在正好一条指令后触发,因此不可能嵌套)
- `HvDeceptionInit()` / `HvDeceptionCleanup()` 从 `HvEntry.cpp` 的 `DriverEntry` / `HvUnload` 调用;EPT 读取违规分派连接到通用 `HvEptHandleViolation` 路径之前的 `HvHandleVmExit`
**NtQuerySystemInformation 进程列表伪造** (`HookDll/HookDll.cpp`)
- `Hook_NtQuerySystemInformation` 拦截类 5 (`SystemProcessInformation`) 调用;遍历 `SYSTEM_PROCESS_INFORMATION` 链接列表,并通过修补 `NextEntryOffset` 取消链接镜像名称与已知 EDR 进程名称(`NortonEDR.exe`、`nortonav.exe`、`MsMpEng.exe`、`SentinelAgent.exe`、`CSFalconService.exe`)匹配的条目;第一个条目移除使用 `MoveMemory` 滑动缓冲区
- 诱饵 `svchost_config.exe` 条目作为蜜罐注入 — 任何专门枚举并与此进程交互的工具都会立即被标记
### Weaver Ant / 中国刀 APT 覆盖范围
针对 Sygnia 记录的 Weaver Ant(中国关联 APT)技术的定向检测:
- **COM 对象监控** — `CoCreateInstance`、`CoCreateInstanceEx` 和 `CLSIDFromProgID` Hook 监控三个类别中的 9 个 CLSID:脚本引擎 (JScript、VBScript、ScriptControl、scrobj Scriptlet)、Shell 执行 (WScript.Shell、Shell.Application) 和 DCOM 横向移动 (MMC20.Application、ShellWindows、ShellBrowserWindow);`CLSIDFromProgID` 监控 16 个 ProgID,包括 XMLHTTP 下载器;Web 服务器主机和 DCOM 远程上下文标记为 Critical
- **Web shell 子进程检测** — 内核进程创建回调标记从 `w3wp.exe`、`httpd.exe`、`nginx.exe`、`tomcat9.exe`、`php-cgi.exe` 或 `iisexpress.exe` 生成的 `cmd.exe`、`powershell.exe`、`certutil.exe`、`csc.exe`(运行时 .NET 编译)、`vbc.exe` 和 34 个其他 LOLBin
- **Web shell 文件投放检测** — FsFilter 监控 Web 可访问目录(`inetpub`、`wwwroot`、`htdocs`、`webapps`)中服务器端脚本文件 (`.aspx`、`.asp`、`.ashx`、`.asmx`、`.jsp`、`.jspx`、`.php`、`.cfm`、`.cshtml`) 的创建/写入;写入 Web shell 文件的 Web 服务器进程标记为 Critical(Web shell 上传 Web shell)
- **Web 服务器出站连接检测** — WFP 分类回调标记从 Web 服务器进程(`w3wp.exe`、`httpd`、`nginx`、`tomcat`、`php-cgi`)到非数据库/非 DNS 端口的出站连接;指示反向 Shell 回调、C2 信标或数据渗透
- **Web shell AMSI 签名** — AMSI 提供程序包括针对中国刀 (`eval(request`)、Godzilla (AES 密码模式)、Behinder/Bingxie (`e45e329feb5d925b` 密钥、`Assembly.Load(Convert.FromBase64String`)、AntSword (`@eval(base64_decode`) 和通用模式(`Runtime.getRuntime().exec`、`ProcessBuilder`、`proc_open`) 的 35 多个内容签名
- **IIS AppPool 持久性** — FsFilter 监控对 `ApplicationHost.config`、`administration.config`、`web.config` 和 `machine.config` 的写入操作;非 IIS 管理员写入者标记为 Critical
- **SMB 隧道数据透视链** — npfs PreCreate 回调跟踪每个 PID 的随机名称管道打开速率;10 秒内 ≥8 个高熵管道名称触发 Critical 警报(Cobalt Strike SMB 信标、Weaver Ant 中继)
- **NTFS ADS 有效负载隐藏** — 增强的 ADS 检测区分写入操作(有效负载分段)和读取;写入模式 ADS 访问升级为 Critical,并带有 Weaver Ant 归因
- **WMI 事件订阅持久性** — `Microsoft-Windows-WMI-Activity/Operational` 上的 ETW 订阅者监控 `__EventFilter` (EID 5859)、`__EventConsumer` (EID 5860) 和 `FilterToConsumerBinding` (EID 5861) 创建;通过 WMI 的无文件持久性标记为 Critical
- **DNS 隧道熵分析** — DNS 客户端回调计算查询名称的 Shannon 熵和子域深度;高熵标签(>3.5 位/字符)且 ≥5 个标签或 ≥40 个字符的标签标记为 Critical(iodine、dnscat2、Cobalt Strike DNS)
- **SOCKS/ORB 中继检测** — WFP 分类回调标记到 SOCKS 代理端口 (1080、9050、9150、3128) 的连接,并带有注入污点交叉引用;污点进程升级为 Critical
- **ETW/AMSI 序言完整性** — `EtwEventWrite`、`EtwEventWriteFull`、`NtTraceEvent`、`advapi32!EventWrite`、`advapi32!EventWriteTransfer`、`advapi32!EventRegister`、`advapi32!ReportEventW`、`advapi32!ReportEventA` 序言已建立基线并定期验证;受损的序言会自动还原
### Sysmon & SACL 集成
- Sysmon 事件摄取,用于基于主机的遥测丰富
- SACL(系统访问控制列表)审核,用于对象级访问可见性
- 进程上下文缓存丰富:父 PID 和镜像路径附加到检测详细信息
### 日志记录与 API
- 持久 JSONL 遥测记录到 `nortonav_events.jsonl`
- 跟踪目标 (`--trace`) 和可选的子进程继承 (`--trace-children`)
- 本地 REST API 在 `127.0.0.1` 上 — 端点:`/api/stats`、`/api/events`、`/api/processes`、`api/reset`
### Elasticsearch 转发
- 后台传送线程批量检测事件并通过 WinHTTP POST 到 Elasticsearch `/_bulk` 端点
- 事件作为 **ECS (Elastic Common Schema)** 文档发出 — `@timestamp`、`agent.name`、`host.name`、`event.kind/category/severity/action`、`process.pid`、`rule.name`、`message`、`nortonav.method`、`nortonav.details`
- 严重性映射到 ECS 数字等级:Critical=100、High=75、Medium=50、Low=25、Info=10
- 可配置的批次大小(50 个事件)和刷新间隔(5 秒);队列上限为 1000 个事件
- 支持 **API 密钥** 身份验证 (`--elastic-api-key`) 或 **HTTP Basic** 身份验证 (`--elastic-user` / `--elastic-pass`);可选 TLS 验证跳过 (`--elastic-no-verify`) 用于自签名证书
- 默认索引:`nortonav-edr`;通过 `--elastic-host https://host:9200` 启用
## 要求
### 运行预构建二进制文件 (GitHub Releases)
预编译的二进制文件可在 [Releases](../../releases) 页面上获得。由于驱动程序是测试签名的(而不是生产签名的),因此在加载它们之前,目标计算机必须启用测试签名:
```
bcdedit /set testsigning on
```
运行此命令后重新启动。要在使用后禁用测试签名:
```
bcdedit /set testsigning off
```
**其他运行时要求:**
- Windows 10 20H1 或更高版本 (x64)
- 支持 VT-x 和 EPT 的 Intel CPU(用于 `NortonEDRHypervisor.sys`)
- `PATH` 中或 `NortonEDR.exe` 旁边的 `capa.exe` (FLARE),用于功能扫描
### 从源代码构建
- `TESTSIGNING` 模式下的 Windows 10 20H1–22H2 测试 VM
- Visual Studio 2022、C++20、WDK(或 EWDK)
- 安装了 `yara` 包的 vcpkg
- `PATH` 中或 NortonEDR 二进制文件旁边的 `capa.exe` (FLARE),用于功能扫描
## 免责声明
仅供教育和受控实验室使用。
标签:0day挖掘, AMSI, API拦截, CISA项目, Conpot, EDR, ELAM, EPT, ETW, Hypervisor, Intel VT-x, Sysmon, TCP/UDP协议, Web报告查看器, WFP, Windows安全, XXE攻击, YARA, 云资产可视化, 元数据提取, 内核安全, 反勒索软件, 反恶意软件, 开源安全工具, 时序数据库, 终端检测与响应, 脆弱性评估, 虚拟化技术, 进程保护, 逆向工程平台, 防御欺骗