查看注册表中的系统服务文件夹,我们可以发现某些服务的ImagePath显示的是svchost.exe的路径,如下图所示:
svchost.exe
是微软Windows操作系统中的系统文件,微软官方对它的解释是:
svchost.exe
是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。
从系统服务的视角来看,svchost.exe
是共享进程服务的宿主进程。Windows系统服务分为独立进程和共享进程两种,随着系统内置服务的增加,Windows就把很多系统服务变成共享进程的方式,由svchost.exe
统一启动。
Svchost本身只是作为服务宿主,并不实现任何的服务功能。 需要Svchost启动的服务以动态链接库(DLL)形式实现。在安装这些服务时,把服务的可执行程序指向svchost,启动这些服务时由svchost加载相应服务的DLL文件。
从攻击者的角度来说,攻击者可能会将自己的恶意代码包含在一个黑色dll文件中,然后通过svchost.exe加载自己的dll文件,达到自己的目的。这种攻击方法最大的优势在于,恶意代码没有自己的独立进程,更难被用户或者其他系统主题察觉。从这角度来说,svchost是一个藏污纳垢的好地方。
显然,对于这种服务,我们需要分析的对象应该是服务启动时加载的dll文件,而不是ImagePath中的svchost.exe。服务加载的dll文件路径可在服务的子键 Parameters\\ServiceDll
中查看,如下图所示:
文章来源:https://www.toymoban.com/news/detail-479069.html
通过以上分析可知,如果我们查询的服务是通过svchost加载的,我们需要增加一条分支语句,转而分析服务运行时加载的dll文件。查询dll文件的具体方法就是前往子键 Parameters\\ServiceDll
,查看dll文件所在路经,伪代码如下:文章来源地址https://www.toymoban.com/news/detail-479069.html
if(wcsstr(keyData, L".exe") != NULL&&statusData<=2){ //后缀为exe的服务文件,并且是自启动文件
//新的分支语句
if(wcsstr(keyData, L"svchost"){ //这是一个共享进程服务,服务的真正信息存储在它加载的dll文件中
//转而查看子键Parameters\\ServiceDll
RegOpenKeyEx(HKEY_LOCAL_MACHINE,ultraPath+"Parameters",0,KEY_READ,&hkeyInner); //前往子键Parameters
RegQueryValueEx(hkeyInner,_T("ServiceDll"),NULL,&dwType,(BYTE*)&keyData,&dwSize);//查看ServiceDll中描述的dll文件路径
//查询服务加载的dll文件的路径、修改时间、数字签名等信息
}
}
到了这里,关于【WIN】svchost与共享进程服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!