这个问题在这里已有答案:
我问这个的原因是因为我很好奇计算机中是否存在病毒,而我却无法知道它是否存在。更具体地说,是一种没有任何形式的病毒。
这个问题在这里已有答案:
我问这个的原因是因为我很好奇计算机中是否存在病毒,而我却无法知道它是否存在。更具体地说,是一种没有任何形式的病毒。
Answers:
有一类恶意软件可以完全隐藏在被称为a的操作系统之外 rootkit的 。
Rootkit用于隐藏工作中其他恶意软件的证据,并深深嵌入操作系统中。由于它们深度嵌入,它们能够即时操作进程列表,文件系统表和其他重要结构。
通过操纵内存中的文件系统结构,它们可以返回目录的错误或误导性结果,特别是不显示与主要恶意软件本身相关的文件。这些文件存在,然后启动到未受感染的操作系统(如Linux LiveCD)会显示文件,因为它们必须存储在某处。
同样,rootkit可以简单地将某些进程从报告到诸如任务管理器之类的程序中删除。操作系统核心知道它们,因为它需要为了安排它们,它刚刚被阻止让外界知道它们。
所有 正常 程序将出现在那里,但......
svchost
进程(在大多数情况下),因此没有简单的指向在给定的svchost实例下运行的服务。 有一些程序用于检测rootkit。他们这样做是通过检查例如编程执行的线程列表和系统中的进程列表(不属于任何进程的线程是隐藏进程的标志),或者是高级别的文件列表,并将其与手动从磁盘分区读取的文件进行比较。
尽管如此,一旦感染了病毒,病毒就有可能隐藏其存在,以至于几乎无法检测到它。这些通常被称为 APT的 (高级持续威胁)。
操作系统有一个称为内核的组件。内核的(许多)职责之一是管理系统内存(物理内存和虚拟内存)。
作为这样做的一部分,内核将可用内存分成两个不同的区域,称为用户模式和内核模式。内核和驱动程序共享内核模式内存,用户程序和不太关键的系统组件驻留在用户模式内存区域中。
用户模式下的进程通常不能与内核模式下的进程通信,除非通过专门指定和控制的通道。
为了完整起见,应该提到的是,在用户模式下运行的进程也是相互隔离的,但是可以使用操作系统提供的工具更自由地相互通信,前提是程序是为此而设计的。
内核提供了以用户模式启动进程的能力。创建进程时,会将其添加到当前存在的进程的内部列表中。当任务管理器等程序请求进程列表时,它会接收此列表中的信息子集,并按用户权限进行筛选。
恶意软件(如rootkit)隐藏其存在的一种方法是直接从此表中删除自己。完成此操作后,它仍然可以执行,但不会再出现在通过常规方法获得的进程列表中。
由于这些进程实际上仍然存在并且执行,因此可以通过检查其他内核数据结构(例如句柄表,其中包含有关进程已打开的资源的信息(例如文件))或通过检查内存分配来查找它们。在不妨碍软件运行的能力的情况下难以隐藏。
内核模式驱动程序用于许多事情,包括与物理硬件设备交互。它们在必要时在内核的控制下执行,但由于它们不是用户模式进程,因此它们不会出现在进程表中。因此不会出现在任务管理器或其他专门与流程有关的工具中。
能够在内核模式下运行代码是能够有效隐藏执行代码存在的重要一步。在正常情况下,Windows要求内核模式下的代码进行签名才能运行,因此恶意软件可能需要在操作系统,其他软件甚至社交工程中使用漏洞才能到达此处,但一旦代码在内核模式下执行,则隐藏变得更容易
总之,可以隐藏流程存在的证据,可能总会有一些迹象表明流程存在,因为它通常总是需要使用某种形式的资源来做任何设计的事情,有多难检测取决于特定的恶意软件。
病毒现在非常复杂。那里 能够 是一个 您的计算机上有病毒但未在任务管理器中显示 。任务管理器(以及操作系统的其他部分)本身可能会受到攻击,从而隐藏病毒。例如,rootkit。
如果您计划依靠任务管理器来检查病毒,那么您应该立即停止。安装防病毒软件,甚至防病毒软件有时也无法在您的PC上检测到病毒。
除了在其他答案中已经很好地解释的其他方法之外,还有一种更简单的方法来“隐藏病毒”:
受损的DLL(动态链接库)
大量程序 - 几乎所有非常重要的程序 - 都需要运行一个或多个DLL。有些属于操作系统本身(例如hal.dll,它抽象了Windows的硬件访问),有些仅由一个程序使用,可分解为更小的部分(一个.exe文件和更多.dll文件具有核心功能,插件等)你不会像普通的进程或服务一样让你的病毒一直运行,但你的病毒确实很难找到,因为它看起来像一个完全无辜的程序或程序组件。
进一步阅读: http://msitpros.com/?p=2012
对于这种类型的病毒制作,有一件事非常吸引人:有很多网站提供免费(不需要付款)的dll下载,这可能是因为这个或那个原因在你的计算机上丢失了。既然有可能比较原始和的校验和 新 .dll文件非常有限,几乎没有人关心,dll病毒可能会长时间进入并停留在系统中(除非,当然,防病毒程序检测到它们并且用户同意删除 - 你已经看到了模式)。
从我提出的问题我们在这里谈到Windows,但这种技术也可以很好地应用于其他操作系统。
TL; DR: Windows的任务管理器在它能做的事情上非常有限,它不会 曾经 显示系统上运行的每个进程。想要证明吗?计算(大致)任务管理器中显示的进程使用的RAM量,并将其与系统的RAM使用情况进行比较;你应该至少有100MB内存不足,有时它会升至1GB左右,具体取决于你使用的系统。显卡还可以从RAM中获取一些内存以及自己的GDDR RAM。*
为了扩展Pavel Petman的答案,我可能会补充说,许多用于游戏的复杂作弊引擎依赖于将代码注入游戏DLL中以实现其作弊。
这种类型的妥协很难被发现,并且在这个问题中可以应用相同的技术。 例如,如果病毒想要检测不到,它可以构成一个将自身提取到系统目录的类型的Windows更新,病毒可能会覆盖关键系统文件。 大多数防病毒程序都不会检测到这种类型的病毒,这意味着病毒可以继续将病毒代码注入关键的Windows DLL(以及.exes)。
当我的客户端讲述异常行为时,我总是运行Process Explorer(从Microsoft下载)来检测任何正在运行的病毒。 Process Explorer可以准确地告诉您正在运行的进程(甚至是不在任务管理器中的进程),以及它们正在使用的DLL模块。