进程的隐藏
隐藏进程并不被查杀
工作接到的第一个任务(如何让一个进程隐藏,并且不被杀毒软件查杀掉,并且是在64位的操作系统上)
典型的进程隐藏的技术有:
- 进程的伪装
- 基于系统服务的进程隐藏技术
- 基于API HOOK的进程隐藏技术
- 基于 DLL 的进程隐藏技术:远程注入Dll技术
- 基于远程线程注入代码的进程隐藏技术
- Rootkit方式
一、进程的伪装
对病毒木马来说,最简单的进程伪装方式就是修改进程名,例如将本地文件名修改成services.exe等系统进程名,从而不被用户发现。进程伪装指的是可以修改任意指定进程信息,即该进程信息再系统中显示的是另一个进程的信息。这样指定进程和伪装进程相同,但实际,执行的操作是不同的。
二、基于系统服务的进程隐藏技术
在win9x系列操作系统中,系统进程列表中不能看到任何系统服务进程, 因此只需要将指定进程注册为系统服务就能够使该进程从系统进程列表中隐形。(Windows 9x是指对Windows 95及Windows 98、Windows ME等以Windows 95作基础的微软操作系统的通称。)
三、基于API HOOK的进程隐藏技术
API HOOK指的是通过特殊的编程手段截获WINDOWS系统调用的API函数,并将其丢弃或者进行替换。 通过API HOOK编程方法,截获系统遍历进程函数并对其进行替换,可以实现对任意进程的隐藏。(SSDT HOOK也是其中的一种)
四、基于 DLL 的进程隐藏技术:远程注入Dll技术
DLL文件没有程序逻辑,不能独立运行,由进程加载并调用,所以在进程列表中不会出现DLL文件。如果是一个以DLL形式存在的程序,通过某个已有进程进行加载, 即可实现程序的进程隐藏。
在windows系统中, 每个进程都有自己的私有地址空间, 进程不能创建属于另一个进程的内存指针。而远程线程技术正是通过特殊的内核编程手段, 打破进程界限来访问另一进程的地址空间, 以达到对自身进行隐藏的目的。
远程线程注入DLL技术指的是通过在某进程中创建远程线程的方法进入该进程的内存空间, 然后在其内存空间中加载启动DLL程序。
(http://www.cnblogs.com/BoyXiao/archive/2011/08/11/2134367.html)参考文章链接
五、基于远程线程注入代码的进程隐藏技术
这种方法与远程线程注入 DLL 的原理一样,都是通过在某进程中创建远程线程来共享该进程的内存空间。所不同的是,远程线程注入代码通过直接拷贝程序代码到某进程的内存空间来达到注入的目的。因为程序代码存在于内存中, 不仅进程列表中无法检测, 即使遍历进程加载的内存模块也无法找到被隐藏程序的踪迹。
六、Rootkit方式
Intel CPU 有4 个特权级别: Ring 0, Ring 1, Ring 2, Ring 3。Windows 只使用了其中的 Ring 0 和 Ring 3 两个级别。(RING0层拥有最高的权限,RING3层拥有最低的权限。按照Intel原有的构想,应用程序工作在RING3层,只能访问RING3层的数据,操作系统工作在RING0层,可以访问所有层的数据,而其他驱动程序位于RING1、RING2层,每一层只能访问本层以及权限更低层的数据。如果普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信息。)
Rootkit 是攻击者用来隐藏自己的踪迹和保留 root 访问权限的工具,它能使攻击者一直保持对目标机器的访问,以实施对目标计算机的控制。从 Rootkit 运行的环境来看,可将其分为用户级 Rootkit 和内核级Rootkit。
用户态下,应用程序会调用 Win32子系统动态库(包括Kernel32.dll, User32.dll, Gdi32.dll等)提供的Win32 API函数,
它们是 Windows 提供给应用程序与操作系统的接口,运行在Ring 3 级。用户级 Rootkit 通常就是通过拦截 Win32 API,建立系统钩子,插入自己的代码,从而控制检测工具对进程或服务的遍历调用,实现隐藏功能。
内核级Rootkit是指利用驱动程序技术或其它相关技术进入Windows 操作系统内核,通过对 Windows 操作系统内核相关的数据结构或对象进行篡改,以实现隐藏功能。
由于Rootkit 运行在 Ring 0 级别,甚至进入内核空间,因而可以对内核指令进行修改,而用户级检测却无法发现内核操作被拦截。
下面介绍两种使用 Rootkit 技术来实现进程隐藏的方法。注册表来实现启动,因而易于被检测出来。显然,要增强进程的隐蔽性,关键在于增强加载程序文件的隐藏性。
- SSDT Hook(参照下面的链接)
https://www.cnblogs.com/BoyXiao/archive/2011/09/03/2164574.html - DKOM (Direct Kernel Object Manipulation,直接内核对象操作)
使用DKOM方法进行进程隐藏。在Windows操作系统中,系统会为每一个活动进程创建一个进程对象EPROCESS,为进程中的每一个线程创建一个线程对象 ETHREAD。
在 EPROCESS 进程结构中有个双向链表 LIST_ENTRY,LIST_ENTRY结构中有FLINK 和BLINK 两个成员指针,分别指向当前进程的前驱进程和后继进程。
如果要隐藏当前进程,只需把当前进程的前驱进程的BLINK 修改为当前进程的BLINK,再把当前进程的后继进程的FLINK修改为当前进程的FLINK。
七、比较
进程隐藏方法 | 隐蔽性 | 健壮性 | 实现难度 | 加载方式 | 进程存在方式 | 操作系统 |
---|---|---|---|---|---|---|
注册系统服务 | 较差 | 很好 | 简单 | 简单 | 存在于系统服务 | win9x 系列 |
API HOOK | 很好 | 很好 | 较难 | 简单 | 仍以进程存在 | winNT及以上 |
注册表注入DLL | 一般 | 很差 | 简单 | 简单 | 以DLL形式存在于所有加载user32.dll的进程中 | winNT及以上 |
Rundll32加载DLL | 一般 | 好 | 简单 | 简单 | 以DLL形式存在于Rundll32.exe进程中 | winNT及以上 |
远程线程注入DLL | 较好 | 很好 | 较难 | 较复杂 | 以DLL形式存在于任一进程中,包括系统进程 | winNT及以上 |
远程线程注入代码 | 很好 | 较好 | 很难 | 很复杂 | 存在于任一进程的内存空间中,包括系统进程 | winNT及以上 |
参考文献:
- 肖道举,左佳,陈晓苏. 进程隐藏的相关问题研究 [J]. 微处理机. 2008 (02)
- Windows环境木马进程隐藏技术研究