持久化研究-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 持久化构建方法

基本步骤

  1. 生成恶意DLL:创建名为w32time.dll的恶意DLL文件

  2. 默认DLL路径

    • NtpClient/NtpServer默认值:%systemroot%\system32\w32time.dll
    • VMICTimeProvider默认值:%SystemRoot%\System32\vmictimeprovider.dll
  3. 修改注册表

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v DllName /t REG_SZ /d "C:\net\w32time.dll"
    
  4. 重启服务

    sc.exe stop w32time
    sc.exe start w32time
    

可选修改项

可修改以下任意一个注册表项实现持久化:

  • NtpClient
  • NtpServer
  • VMICTimeProvider

0x03 隐蔽性增强技术

使用自定义Time Provider

直接修改现有Windows时间提供程序容易被发现,建议使用自定义Time Provider:

  1. 使用gametime项目

    • GitHub项目:https://github.com/scottlundgren/w32time
    • 自定义注册表项名称(示例中为GameTime
  2. 编译生成DLL

    #define GAMETIME_SVC_KEY_NAME L"System\\CurrentControlSet\\Services\\W32Time\\TimeProviders\\GameTime"
    
  3. 注册自定义Provider

    rundll32.exe gametime.dll,Register
    
  4. 设置恶意DLL路径

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\GameTime" /v DllName /t REG_SZ /d "C:\net\w32time.dll"
    
  5. 清理方法

    rundll32.exe gametime.dll,Deregister
    

Time Provider必须实现的回调函数

  • TimeProvClose:返回Time provider句柄
  • TimeProvCommand:将命令发送到Time provider
  • TimeProvOpen:关闭Time providers

0x04 防御措施

1. 文件和目录权限限制

  • 限制对W32Time DLL文件的修改权限
  • 使用组策略阻止对W32Time DLL的添加/修改

2. 注册表权限限制

  • 限制对W32Time相关注册表项的修改权限
  • 使用组策略配置注册表保护

3. 监控措施

  • 监视修改W32Time相关注册表项的进程
  • 监控相关API调用:RegCreateKeyExRegSetValueEx
  • 监控W32tm.exe程序的执行
  • 使用Sysinternals Autoruns工具进行分析

0x05 检测方法

自动检测指标

  1. 注册表修改

    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders下任何子项的DllName值的修改
  2. 进程行为

    • 异常调用rundll32.exe加载时间相关DLL
    • 频繁的W32Time服务重启
  3. 文件系统变化

    • System32目录外出现时间服务相关DLL
    • 自定义Time Provider DLL的创建

手动检测工具

  • 使用autoruns.exe检查已注册的时间提供程序
  • 检查HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders下的所有子项
  • 验证所有时间提供程序DLL的签名和位置

技术要点总结

  1. 持久化机制:利用Windows时间服务的自动启动特性实现持久化
  2. 权限要求:需要管理员权限修改HKLM注册表项
  3. 隐蔽方法:自定义Time Provider比修改现有Provider更隐蔽
  4. 触发时机:系统启动或W32Time服务重启时加载恶意DLL
  5. 兼容性:适用于所有现代Windows版本

通过这种方法实现的持久化具有较高隐蔽性,因为利用了Windows合法服务机制,且恶意DLL由系统进程加载,不会创建额外进程。

Windows Time Providers 持久化技术研究 0x01 Time Providers 概述 Windows时间服务(W32Time服务)负责维护网络中所有客户端和服务器的时间和日期同步。Time Providers是以DLL形式实现的组件,位于System32文件夹中,在Windows启动期间由W32Time服务加载。 关键注册表路径: 包含三个主要子项: NtpServer :时间服务提供程序服务端 NtpClient :时间服务提供程序客户端 VMICTimeProvider :时间同步提供程序库 0x02 持久化构建方法 基本步骤 生成恶意DLL :创建名为 w32time.dll 的恶意DLL文件 默认DLL路径 : NtpClient/NtpServer默认值: %systemroot%\system32\w32time.dll VMICTimeProvider默认值: %SystemRoot%\System32\vmictimeprovider.dll 修改注册表 : 重启服务 : 可选修改项 可修改以下任意一个注册表项实现持久化: NtpClient NtpServer VMICTimeProvider 0x03 隐蔽性增强技术 使用自定义Time Provider 直接修改现有Windows时间提供程序容易被发现,建议使用自定义Time Provider: 使用gametime项目 : GitHub项目:https://github.com/scottlundgren/w32time 自定义注册表项名称(示例中为 GameTime ) 编译生成DLL : 注册自定义Provider : 设置恶意DLL路径 : 清理方法 : Time Provider必须实现的回调函数 TimeProvClose :返回Time provider句柄 TimeProvCommand :将命令发送到Time provider TimeProvOpen :关闭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由系统进程加载,不会创建额外进程。