### 进程隐藏技术是什么，如何检测

**常见的进程隐藏技术**

这些技术通常分为两大类：用户态隐藏和内核态隐藏。

**1. 用户态进程隐藏**

这类技术在用户态运行，主要通过 Hook（钩取）或篡改 API 调用来欺骗进程列表工具

- **API Hooking**：恶意软件可以 Hook 掉用于枚举进程的 Windows API 函数，例如 `CreateToolhelp32Snapshot`、`Process32First` 和 `Process32Next`。当任务管理器或其他进程查看器调用这些函数时，Hook 函数会拦截调用，并过滤掉恶意进程的信息，只返回其余正常进程的列表
- **直接修改内存**：一些恶意软件会直接在内存中找到任务管理器或进程列表工具的进程列表，然后将自身从这个列表中移除。这种方法更具侵略性，但成功率较低，因为不同版本的操作系统或工具，其内存结构可能不同
- **进程名伪装**：这是最简单、最基础的伪装。恶意软件会将自己的进程名修改成系统关键进程的名字，例如 `svchost.exe` 或 `lsass.exe`。这虽然不能隐藏进程，但可以有效迷惑用户和安全人员。

**2. 内核态进程隐藏**

这类技术通常通过加载驱动程序来获得内核权限，从更底层的数据结构中隐藏自己，使其更难被检测

- **DKOM (Direct Kernel Object Manipulation)**：这是最强大的进程隐藏技术之一。在 Windows 内核中，所有进程的信息都存储在一个双向链表 `PsActiveProcessHead` 中。恶意驱动程序可以在内核态直接操作这个链表，将自身的进程对象从链表中移除。由于任务管理器、进程查看器等工具最终都依赖这个链表来获取进程信息，这种方法可以从根本上隐藏进程
- **修改进程对象属性**：除了从链表中移除，恶意驱动还可以直接修改进程对象（`EPROCESS` 结构）中的某些标志，使其看起来像是已终止或不活跃的进程，从而欺骗依赖于这些标志的工具
- **内核 API Hooking**：类似于用户态 Hooking，恶意驱动程序可以 Hook 掉内核中用于进程枚举的函数，例如 `PsLookupProcessByProcessId` 或 `ZwQuerySystemInformation`。这种 Hook 更加底层，也更难被发现

**如何检测进程隐藏技术**

检测进程隐藏是一个复杂的任务，需要使用多层次的方法和工具

**1. 跨进程检测**

- **进程列表比对**：从两个或更多不同的数据源获取进程列表，然后进行比对。例如，同时使用任务管理器和 Sysinternals 工具套件中的 `Process Explorer`。如果某个进程在一个列表中出现，而在另一个列表中没有，那么它很可能被隐藏了
- **命令行工具**：使用命令行工具（如 `tasklist` 或 `wmic`）获取进程列表，并将其结果与图形化工具进行比对

**2. 底层数据结构检查**

- **利用 DKOM 的逆向检测**：反恶意软件工具可以在内核态直接遍历 `PsActiveProcessHead` 链表，并与通过 `ZwQuerySystemInformation` 等高层 API 获取的进程列表进行比对。如果链表中的某个进程没有出现在 API 返回的列表中，就说明存在 DKOM 隐藏
- **检查 `EPROCESS` 结构**：反恶意软件工具可以检查 `EPROCESS` 结构中与隐藏相关的标志，例如进程状态和父进程 ID，来识别异常情况

**3. 行为分析**

- **网络连接监控**：即使进程被隐藏，它仍然需要进行网络通信。通过监控所有网络连接，并将其与已知的进程列表进行比对，可以发现那些没有对应进程的异常网络活动
- **文件句柄和互斥量**：恶意进程可能会创建文件句柄或互斥量。通过枚举这些系统资源，可以发现那些属于隐藏进程的资源
- **CPU 使用率和内存占用**：即使进程被隐藏，它仍然会占用 CPU 和内存。通过监控系统的整体资源使用情况，可以识别出那些没有对应进程的异常资源消耗