"svchost.exe"是 Windows 下最常见的进程,它可能会被认为是恶意的,主要取决于两个因素,一是恶意软件模仿该进程,另一个是任务管理器无法展示 svchost.exe 的详细信息。由于以前的任务管理器从来没有对系统上的进程进行详细的说明,比如 svchost.exe,当通过任务管理器打开后可以看到一堆的 svchost.exe,进程描述为 Windows 服务主进程,没有其他的关于该进程的信息,因此恶意软件只需要两个步骤就可以使自己看起来合法。
首先是恶意软件的名字就是"svchost.exe",然后将其的描述设置为"Windows 服务主进程",看起来就和合法的"svchost.exe"没什么区别了。
01
—
服务控制管理器(services.exe)
服务控制管理器(简称 scm)是运行映像服务的系统进程,在 C:\Windows\System32 中可以看到,简言之,它是一个负责运行和管理系统上的服务的进程。主要跟踪注册表中一个称为 SCM 数据库的键位下的所有服务,注册表的路径为
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
当 SCM 在系统启动时启动,设置为"auto-start"的所有服务以及运行这些服务所需要的所有依赖都会启动。所有这些服务和其他服务都会成为“services.exe”的子进程。当查看 services.exe 进程 的时候,将看到两种进程,一个是 services.exe 和多个 svchost.exe。
02
—
Svchost.exe
微软官方文档中关于“svchost.exe”的描述为 svchost.exe 是一个共享服务进程,从 DLL 文件中加载服务。我们看下正在运行的 svchost.exe,一般会看到如下类似内容
展示的内容并不能说明这个进程运行的服务,但是可以使用 process explorer 等工具查看该进程加载服务,如图所示
K 选项
当 svchost.exe 使用 -k 选项时候,请求将会查询以下注册表项,通过-k 选项发送的键找 到对应的值
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
此注册表项定义所有的svchost.exe允许的服务。每个组中可能包含多个服务,使用"-k"标志后指定启动的服务。当"svchost.exe "进程使用" -k UnistackSvcGroup ",它将在注册表内查找相应的值
一旦它读取了这些值并且没有指定其他标志,它将去加载在其对应的注册表项中引用的每个服务
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[Service Name]
S 选项
当使用 -s 选项的时候,svchost.exe 进程将从选定的组中只加载由标志指定的服务,例如
它只是加载“UnistackSvcGroup”注册表键内的“CDPUserSvc”服务。
P 选项
表示强制执行不同的策略:DynamicCodePolicy 、 BinarySignaturePolicy 和 ExtensionPolicy
原文来自:https://medium.com/@nasbench/demystifying-the-svchost-exe-process-and-its-command-line-options-508e9114e747