freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

木马服务启动技术之svchost巧妙利用
2024-01-22 10:58:31

1. 什么是svchost

svchost.exe是一个属于微软Windows操作系统的系统程序,这个程序对系统的正常运行非常重要。windows系统进程分为独立进程和共享进程两种,“svchost.exe”文件存在于“%systemroot%system32”目录下,它属于共享进程。

随着windows系统服务不断增多,为了节省系统资源,微软把很多服务做成共享方式,交由svchost.exe进程来启动。但svchost进程只作为服务宿主,并不能实现任何服务功能,即它只能提供条件让其他服务在这里被启动,而它自己却不能给用户提供任何服务。这些系统服务是以动态链接库(dll)形式实现的,它们把可执行程序指向svchost,由svchost调用相应服务的动态链接库来启动服务。svchost通过系统服务在注册表中设置的参数知道系统服务该调用哪个动态链接库。

由于svchost.exe为微软自带的白名单程序,因此备受黑客喜爱。不仅能够达到规避防御的效果同时对于windows系统的svchost服务机制不熟的人来说,在主机排查侧可以做到很好的隐蔽不被发现。

2. 进程和文件中的svchost

进程列表中的svchost文件。一个svchost对应一个服务,他只是一个宿主程序,仅用来启动加载注册表中的dll。实现服务开机自启动。

1705888890_65adcc7a45a8e74a0aed8.png!small?1705888891392

文件夹中的svchost文件,位于系统目录下。

1705888904_65adcc8849e8858dd61a6.png!small?1705888906280

3. 注册表中看服务

查看本地所有的服务可以通过”services.msc”进行查看,也可以借助其他pe辅助工具进行查看,以下我使用的是processhacker展示出来的所有服务。

1705888931_65adcca306e07bb660e82.png!small?1705888932715

注册表可以理解为本地的数据库,把所有的相关操作进行记录以及关联。通过注册表的形式来观察下服务的展示状态。”HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”如下图所示:

1705888936_65adcca83a8e8d1928241.png!small?1705888936954

使用Svchost启动服务,svchost启动的服务在netsvcs列表内,里面记录的均为服务名称。”HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost ”

1705888943_65adccafaba38ef97dd7f.png!small?1705888945804

4. 实战-svchost服务连接dll文件

这里拿RasMan服务名称定位具体链接库文件为例来进行实战演示。

首先确定服务名称,其次查看对应的命令参数,是否符合svchost启动服务的标准条件,即svchost.exe -k netsvcs。

1705888970_65adccca2b27c40815e60.png!small?1705888971006

接下来打开注册表,进入”HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\”内,并找到RasMan。或者直接进入”计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan”。

随后便可以在下图看到具体的文件路径以及启动参数,便可以直接定位到该svchost服务链接的文件。

1705888979_65adccd33d72f4bdc6473.png!small?1705888980279

5. 实战-手动注册svchost服务

为了更好的理解svchost注册服务启动的原理,在这里进行一遍手动注册实战。

5.1注册一个服务

注册服务的主要目的为,将目标dll写入到注册表服务中,同时又将启动路径参数嵌入其中(svchost -k netsvcs),便于下一步svchost寻找服务名称。

打开注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,创建子项,名称随意,我这里起为TestSvchost。

1705888998_65adcce622b26321e6c9c.png!small?1705888998900

随后在这一项内设置子健值。

以下为子健项值的字段名称及其含义。

名称 含义 
Description 服务描述
DisplayName 服务名
ErrorControl 1:记录错误日志
ImagePath %systemRoot%\system32\svchost.exe -k netsvcs-k netsvcs表示这个服务是属于netsvcs服务组
ObjectNameLocalSystem:表示本地登录
Start2:表示系统启动时由服务控制管理器自动启动该服务程序
Type0x10:表示运行于独立进程的服务程序

1705889017_65adccf982f8b379b2a34.png!small?1705889018407

随后在子项中再添加一项,名称为Parameters,用于存放要注册的dll路径。

1705889025_65adcd015abe13ea96059.png!small?1705889025961

这里要注意,要链接的dll文件必须要满足导出函数包含servicemain,否则无法链接。

1705889032_65adcd08d4346d414326d.png!small?1705889034765

5.2 服务加入svchost服务组netsvcs

完成5.1步骤后,需要将注册到注册表中的服务名加入到svchost服务组netsvcs中,才可以实现svchost启动服务自启动功能。

打开注册表,找到”HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost”,随后打开子项netsvcs。注意这里以右键修改的形式打开。随后将5.1设置的服务名称追加即可。

1705889048_65adcd18c6b8175231fa8.png!small?1705889049593

添加完后在服务列表中观察到,该服务已添加,并实现了对应svchost 服务启动。

1705889062_65adcd26c62bfa9b450b5.png!small?1705889063720

# 黑客 # 网络安全 # 逆向 # 系统安全 # 白利用
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录