持久化研究-Time Providers
字数 1689 2025-08-25 22:58:46
Windows Time Providers 持久化技术研究
0x01 Time Providers 概述
Windows时间服务(W32Time服务)负责维护网络中所有客户端和服务器的时间和日期同步。Time Providers是以DLL形式实现的组件,位于System32文件夹中,在Windows启动期间由W32Time服务加载。
关键注册表路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders
包含三个主要子项:
NtpServer:时间服务提供程序服务端NtpClient:时间服务提供程序客户端VMICTimeProvider:时间同步提供程序库
0x02 持久化构建方法
基本步骤
-
生成恶意DLL:创建名为
w32time.dll的恶意DLL文件 -
默认DLL路径:
- NtpClient/NtpServer默认值:
%systemroot%\system32\w32time.dll - VMICTimeProvider默认值:
%SystemRoot%\System32\vmictimeprovider.dll
- NtpClient/NtpServer默认值:
-
修改注册表:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v DllName /t REG_SZ /d "C:\net\w32time.dll" -
重启服务:
sc.exe stop w32time sc.exe start w32time
可选修改项
可修改以下任意一个注册表项实现持久化:
- NtpClient
- NtpServer
- VMICTimeProvider
0x03 隐蔽性增强技术
使用自定义Time Provider
直接修改现有Windows时间提供程序容易被发现,建议使用自定义Time Provider:
-
使用gametime项目:
- GitHub项目:https://github.com/scottlundgren/w32time
- 自定义注册表项名称(示例中为
GameTime)
-
编译生成DLL:
#define GAMETIME_SVC_KEY_NAME L"System\\CurrentControlSet\\Services\\W32Time\\TimeProviders\\GameTime" -
注册自定义Provider:
rundll32.exe gametime.dll,Register -
设置恶意DLL路径:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\GameTime" /v DllName /t REG_SZ /d "C:\net\w32time.dll" -
清理方法:
rundll32.exe gametime.dll,Deregister
Time Provider必须实现的回调函数
TimeProvClose:返回Time provider句柄TimeProvCommand:将命令发送到Time providerTimeProvOpen:关闭Time providers
0x04 防御措施
1. 文件和目录权限限制
- 限制对W32Time DLL文件的修改权限
- 使用组策略阻止对W32Time DLL的添加/修改
2. 注册表权限限制
- 限制对W32Time相关注册表项的修改权限
- 使用组策略配置注册表保护
3. 监控措施
- 监视修改W32Time相关注册表项的进程
- 监控相关API调用:
RegCreateKeyEx、RegSetValueEx - 监控
W32tm.exe程序的执行 - 使用Sysinternals Autoruns工具进行分析
0x05 检测方法
自动检测指标
-
注册表修改:
- 对
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders下任何子项的DllName值的修改
- 对
-
进程行为:
- 异常调用
rundll32.exe加载时间相关DLL - 频繁的W32Time服务重启
- 异常调用
-
文件系统变化:
- System32目录外出现时间服务相关DLL
- 自定义Time Provider DLL的创建
手动检测工具
- 使用
autoruns.exe检查已注册的时间提供程序 - 检查
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders下的所有子项 - 验证所有时间提供程序DLL的签名和位置
技术要点总结
- 持久化机制:利用Windows时间服务的自动启动特性实现持久化
- 权限要求:需要管理员权限修改HKLM注册表项
- 隐蔽方法:自定义Time Provider比修改现有Provider更隐蔽
- 触发时机:系统启动或W32Time服务重启时加载恶意DLL
- 兼容性:适用于所有现代Windows版本
通过这种方法实现的持久化具有较高隐蔽性,因为利用了Windows合法服务机制,且恶意DLL由系统进程加载,不会创建额外进程。