我之所以问这个问题,是因为我很好奇计算机中是否存在病毒,而我却根本不知道它的存在。更具体地说,病毒不会发出任何迹象。
答案1
有一类恶意软件可以完全隐藏在操作系统之外,称为根工具包。
Rootkit 用于隐藏其他恶意软件的踪迹,并且深深嵌入操作系统。由于嵌入深度,它们能够实时操纵进程列表、文件系统表和其他重要结构。
通过操纵内存中的文件系统结构,它们可以返回目录的错误或误导性结果,特别是不显示与主要恶意软件本身相关的文件。这些文件就在那里,启动未受感染的操作系统(如 Linux LiveCD)会显示这些文件,因为它们必须存储在某个地方。
类似地,rootkit 可以简单地阻止某些进程向任务管理器等程序报告。操作系统核心知道这些进程,因为它需要这些进程才能调度它们,因此它被阻止让外界知道它们。
答案2
全部普通的程序会出现在那里,但是......
- 如果没有管理员帐户,您将只能看到自己的进程(管理员帐户可以选择查看每个人的进程)
- 根工具包会尝试通过从列表中隐藏其进程、破坏任务管理器(因此它不会显示它)、隐藏在另一个进程地址空间内来隐藏其存在...
- 服务将作为
svchost
进程下的线程运行(大多数情况下),因此无法轻易指出哪个服务在给定的 svchost 实例下运行。
有一些程序专门用于检测 rootkit。它们通过检查例如为执行而编写的线程列表和系统中的进程列表(不属于任何进程的线程是隐藏进程的标志)或在高层看到的文件列表,并将其与手动从磁盘分区读取的文件进行比较来实现检测。
尽管如此,一旦你被感染,病毒就有可能很好地隐藏其存在,几乎不可能被发现。这些通常被称为高级威胁(高级持续性威胁)。
答案3
背景
操作系统有一个称为内核的组件。内核的(许多)职责之一是管理系统内存(物理内存和虚拟内存)。
为此,内核将可用内存分为两个不同的区域,即用户模式和内核模式。内核和驱动程序共享内核模式内存,而用户程序和不太重要的系统组件则驻留在用户模式内存区域。
用户模式下的进程通常无法与内核模式下的进程进行通信,除非通过专门指定和控制的通道。
为了完整起见,应该提到的是,在用户模式下运行的进程也是彼此隔离的,但是如果程序设计为这样做,它们就可以使用操作系统提供的功能更自由地相互通信。
流程
内核提供了在用户模式下启动进程的功能。当创建进程时,它会被添加到当前存在的进程的内部列表中。当任务管理器等程序请求进程列表时,它会收到此列表中的信息子集,这些信息按每个用户的权限进行筛选。
恶意软件(例如 rootkit)隐藏其存在的一种方法是直接从此表中删除自身。这样做之后,它仍然可以执行,但不会再出现在通过正常方式获得的进程列表中。
由于这些进程实际上仍然存在并执行,因此可以通过检查其他内核数据结构(如句柄表,其中包含有关进程打开的资源(例如文件)的信息)来找到它们,或者通过检查内存分配来找到它们,在不妨碍软件运行能力的情况下,很难隐藏它们。
内核模式驱动程序
内核模式驱动程序用于多种用途,包括与物理硬件设备交互。它们根据需要在内核的控制下执行,但由于它们不是用户模式进程,因此不会出现在进程表中。因此不会出现在任务管理器或其他专门处理进程的工具中。
能够在内核模式下运行代码是有效隐藏正在执行的代码存在的重要一步。在正常情况下,Windows 要求内核模式下的代码必须经过签名才能运行,因此恶意软件可能需要利用操作系统、其他软件甚至社会工程中的漏洞才能实现这一点,但一旦代码在内核模式下执行,隐藏就会变得更容易。
概括
总之,隐藏进程存在的证据是可能的,可能总是会有一些迹象表明该进程存在,因为它通常总是需要使用某种形式的资源来完成它设计的任务,检测的难度取决于具体的恶意软件。
答案4
除了其他答案中已经很好地解释过的方法之外,还有一种更简单的“隐藏病毒”的方法:
被感染的 DLL(动态链接库)
许多程序(几乎所有不重要的程序)都需要一个或多个 DLL 才能运行。有些属于操作系统本身(例如 hal.dll,它抽象了 Windows 的硬件访问),有些仅由一个程序使用,该程序被分解为多个小块(一个 .exe 文件和多个具有核心功能、插件等的 .dll 文件)。您不会让您的病毒像普通进程或服务一样一直运行,但您的病毒确实很难被发现,因为它看起来像一个完全无害的程序或程序组件。
进一步阅读:http://msitpros.com/?p=2012
这种病毒制作方式有一个非常吸引人的地方:有很多网站提供免费(无需付费)的 dll 下载,而这些 dll 可能因为这样或那样的原因在你的计算机上丢失。由于可以比较原始和更新的校验和,新的.dll 文件非常有限,几乎没有人关心,dll 病毒可能会进入系统并长期驻留在系统中而不被注意(当然,除非防病毒程序检测到它们并且用户同意删除 - 您已经看到了模式)。
从问题来看,我认为我们这里谈论的是 Windows,但这种技术也可能适用于其他操作系统。