Loading... ##### 前言 跟踪恶意代码的运行:DLL、进程、线程、使用互斥量的进程间协作、服务、组件对象模型、异常。 ##### 服务 恶意代码执行附加代码的另一种方式是将它作为服务安装。Windows允许通过使用服务,来使任务作为后台应用程序运行,而不是它们自己的进程或线程;代码被Windows服务管理器调度和运行,但是没有用户输入。在Windows操作系统上的任何指定时间,都会有多个服务在运行。 使用服务对恶意代码作者来说有很多优势。其中一个服务通常作为SYSTEM或其它特权账户运行。这并不是一个漏洞,因为你需要管理员访问权限,才能安装一个服务,但是对恶意代码作者来说很方便,因为SYSTEM账户有比管理员或用户账户更多的权限。 服务也提供另一种在系统上维护持久化驻留的方式,因为它们可以被设置成当操作系统启动时自动运行,并且可能甚至不在任务管理器中作为一个进程显示出来。一个用户查找所有运行的应用程序,也不会找到任何可疑的东西,因为恶意代码不是运行在一个独立的进程中。 ``` 注:在命令行使用net start可以列举出正在运行的服务,但是这样做只会显示出运行服务的名字。有些程序,比如Autoruns工具,可以被用来搜集关于运行服务的更多信息。 ``` 服务可以通过一些Windows API函数来进行安装和操作,它们是恶意代码的主要目标。有几个关键函数值得你查找: **OpenSCManager** 返回一个服务控制管理器的句柄,它被用来进行所有后续与服务相关的函数调用。所有要和服务交互的代码会调用这个函数。 **CreateService** 添加一个新服务到服务控制器管理器,并且允许调用者指定服务是否在引导时自动启动,或者必须手动启动。 **StartService** 启动一个服务,并且仅在服务被设置成手动启动时使用。 Windows操作系统支持多种服务类型,它们以独特的方式执行。恶意代码最常使用的是WIN32_SHARE_PROCESS类型,这种类型将这个服务的代码保存在一个DLL中,并且在一个共享的进程中组合多个不同的服务。在任务管理器中,你可以找到一个名为svchost.exe进程的多个实例,它们在运行WIN32_SHARE_PROCESS类型的服务。 WIN32_OWN_PROCESS类型有时也被使用,因为它在一个.exe文件中保存代码,而且作为一个独立进程运行。 最后一个常见的服务类型是KERNEL_DRIVER,它被用来加载代码到内核中执行。 关于本地系统上服务的信息被保存在注册表中。每个服务在HKLM\SYSTEM\CurrentControlSet\Services下面有一个子健。例如,下图显示了HKLM\SYSTEM\CurrentControlSet\Services\VMTools的注册表项。 ![image-20210910112604771.png](http://47.117.131.13/usr/uploads/2021/09/1732629063.png) VMTools服务的代码保存在"C:\Program Files\VMware\VMware Tools\vmtoolsd.exe"中。Type值为0x10,对应IN32_OWN_PROCESS;并且start值为0x2,对应AUTO_START。 SC程序是Windows包含的一个命令行工具,用来调查和操作服务。它包含了添加、删除、启动、停止,以及查询服务的命令。例如,qc命令通过一个更加可读的方式,访问上图中显示注册表项同样的信息,并查询一个服务的配置选项。如下: ![image-20210910113610024.png](http://47.117.131.13/usr/uploads/2021/09/2174510624.png) 这些信息和注册表中保存的内容是一样的,但是它更容易读懂,因为数字值被标记为如WIN32_OWN_PROCESS时,才是更有意义的。SC程序有很多不同的命令,并且不适用任何参数运行SC会显示一个可选命令的列表。 参考:《恶意代码分析实战》 最后修改:2021 年 09 月 10 日 11 : 51 AM © 允许规范转载