1. 用 户 态 进 程 检 测 方 法
该 方 法 利 用 WindowsAPI检测进程。但是在实际应用中,该方法几乎无法检测到 Rootkit隐藏进程。
用户态可以通过CreateToolhelp32Snapshot,Process32First,Process32Next遍历进程。
或者通过通过psapi.dll提供的EnumProcesses来枚举进程。
也可以使用Native API 中的ZwQuerySystemInformation的SystemProcessesAndThreadsInformation系统调用枚举进程。
2. 内核态函数进程检测方法
该方法利用内 核导出函数 ZwQuerySystemInformation等检测进 程.但 是 该 方 法 无 法 检 测 到 对 ZwQuerySystemInformation的输出进行劫持或者对进程链表采取 断链操作的隐藏进程。
3. 遍历 EPROCESS双向链表进程检测方法.
进程由 EPROCESS结构体描述,EPROCESS通过 其成员 ActiveProcessLinks够成双向链表.该方法 通过遍历此链表检测进程.但是该方法无法检测到 对进程链表采取断链操作的隐藏进程。
4. 遍历句柄表进程检测方法
所有进程的句 柄保存在 PspCidTable句柄表里.同时,系统在创 建一个新进程时,会把新进程的句柄复制到csrss. exe进程的句柄表中.因此,该方法遍历这两份句柄 表中的任意一份即可检测进程.但是该方法无法检 测到对句柄表进行擦除操作的隐藏进程。
5. 搜索内存进程检测方法
该方法遍历虚拟 内存或物理内存数据,把匹配进程对象特征信息的 内存区域视为 EPROCESS结构,从而获取对应进 程信息.但是该方法无法检测到擦除内存中进程特 征信息的隐藏进程。
6. 基于 HSC(Hook System Call)的进程检测方法
该方法根据进程执行系统调用的行为特征,通过劫持系统调用,检测进程.但是该方法无法检测到只通过中断调用或 调用门进入系统内核的隐藏进程.
7. 遍历调度线程表进程检测方法.系统为每 个处理器维护了不同状态的线程列表.该方法通过 遍历这些线程列表获得操作系统中的线程信息,进 而解析出进程信息.但是,在不同 Windows系统版 本中,线程列表存在较大差异,使得该方法兼容性 差,实现难度大.
8. 基 于 线 程 调 度 的 进 程 检 测 方 法. SwapContext是线程调度的核心函数.该方法通过 劫持此函数获取将要被换入和换出的线程,进而解析出所属进程.但是该方法对操作系统性能影响较大,因为这个函数调用频率非常高。
9. 基于交叉视图的进程检测方法
为检测隐藏 进程,通常采用交叉视图的方法获取可靠进程列表 和非可靠 进 程 列 表,通 过 对 比 两 张 列 表 检 测 隐 藏 进程.
其中非可靠进程列表可以通过用户态进程遍历得到。
可靠进程列表可以在内核中劫持内核入口点,在劫持例程中获取EPROCESS结构列表,获取进程ID。
内核入口点有:KiFastCallEntry,IDT,GDT
为降低对操作系统性能的影响,并非劫持所有IDT 和 GDT 中的服务例 程,仅仅对异常中断服务例程和 GDT 中的调用门 进行劫持.
参考链接:http://journal.bit.edu.cn/zr/ch/reader/create_pdf.aspx?file_no=20150521&year_id=2015&quarter_id=5&falg=1