基于内存搜索的进程检测方法

本文探讨了Rootkit隐藏进程的常见方法,如挂钩NtQuerySystemInformation函数,以及如何通过搜索内存来检测隐藏进程。在Windows系统中,线程的ETHREAD结构包含指向所属进程EPROCESS的指针。通过遍历所有线程的ETHREAD结构,可以获取所有进程信息。文章详细阐述了如何判断内存块是否为线程ETHREAD结构,动态获取系统服务调度表地址,以及如何获取所有进程的EPROCESS结构。虽然这种方法在某些情况下可能存在不准确性,但它提供了一种检测隐藏进程的思路。
摘要由CSDN通过智能技术生成

搜索内存检测进程的原理
1) 问题的提出——进程检测
Rootkit等后门为了在系统中长期驻留,需要隐藏相应的信息。这些信息包括自启动项、文件、进程、模块、端口、注册表、服务等。其中,以进程隐藏特别突出(因为用户经常会打开任务管理器看看是不是有异常的进程在自己的机器上运行)。
隐藏进程的方法有多种,例如挂钩NtQuerySystemInformation函数;从内核EPROCESS结构的ActiveProcessLinks等双向链表上摘除自身;从csrss.exe进程的句柄表上摘除自身;从PspCidTable上摘除自身等等。如果Rootkit用到了其中的某种方法,那么基于此的检测将会失败。比如,hxdef100(黑客守护者)挂钩NtQuerySystemInformation实现隐藏,如果想通过NtQuerySystemInformation函数来获取全部进程信息就会失败。再比如,FU_rootkit通过从内核EPROCESS结构的ActiveProcessLinks双向链表上摘除自身实现隐藏,如果想通过遍历该链表来检测隐藏的FU_rootkit就会失败。现在问题来了,如果上面隐藏进程的方法都用到了,该怎么检测呢?
2)解决的思路之一——搜索内存
在Windows系统中,进程由内存空间、进程打开的各种对象和进程中运行的线程所组成。线程仅仅是一个执行上下文,系统调度的最基本单位,但每一个线程的运行都必须依附(attach)一个进程。
在Windbg中可以使用dt命令来查看线程ETHREAD的结构,命令格式为“dt _ETHREAD 线程地址”。例如:
kd> dt _ETHREAD 8238F3B8
nt!_ETHREAD
+0x000 Tcb              : _KTHREAD
+0x1c0 CreateTime       : _LARGE_INTEGER 0xe4d5cd5`36b71830
……
+0x21c DeviceToVerify   : (null)
+0x220 ThreadsProcess   : 0x8234f718 _EPROCESS
+0x224 StartAddress     : 0x7c810867
+0x228 Win32StartAddress : 0x010027f2
……
+0x254 ForwardClusterOnly : 0 ''
+0x255 DisablePageFaultClustering : 0 ''
在线程控制块的偏移0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值