1. 黑客安全网-互联网安全媒体信息综合平台首页
  2. 分类阅读
  3. 系统安全

利用Windows Telemetry实现权限维持

利用Windows Telemetry实现权限维持

写在前面的话

在这篇文章中,我们将跟大家讨论一种持久化技术,该技术将利用微软过去十年间在Windows系统中引入的各种出色的遥测技术。目前,从Windows 7/2008R2至Windows 10/2019版本的Windows操作系统都将受到该技术的影响。

除此之外,这种持久化技术需要本地管理员权限才能够实现,因为需要写入HKLM(注册表),并且在系统的自动运行菜单中不可见。

大体步骤

如果你不想花时间了解该技术背后的原理,那你可以直接按照下列方法进行操作即可:

  • 确保你的目标设备能够正常联网。
  • 向下列注册表项中添加任意名称的注册表键:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionAppCompatFlagsTelemetryController
  • 在这个新建的注册表键中,创建一个类型为“Reg_SZ”的项,然后设置其名称为“Command”,值设置为一个起始的.exe文件。
  • 创建一个DWORD键用于实现持久化,比如说“Nightly”或“Oobe”然后将它们的值设置为“1”,其中只有“Nightly”需要每24小时运行一次。
  • 接下来,它就可以通过Windows的计划任务每24小时自动运行一次了。
  • 你还可以使用下列命令进行测试,或在计划任务菜单中手都开启:
schtasks /run /tn “MicrosoftWindowsApplication ExperienceMicrosoft Compatibility Appraiser”

为了方便大家理解,我们给出的注册表中的配置图,并将notepad.exe设置为自动运行目标:利用Windows Telemetry实现权限维持

技术原理

首先,“c:windowssystem32CompatTelRunner.exe”是一个二进制文件,用来运行各种遥测任务。就其本身而言,二进制文件并不会收集太多数据。CompatTelRunner会检查一些系统信息,并确保网络已连接,然后通过运行各种命令来执行实际的遥测数据收集,我们可以把它想象成一个遥测管理器。

这个二进制文件似乎是为了易于扩展而创建的,而它将依赖于注册表来指示运行哪些命令。问题是,它将运行任何不受位置或类型限制的任意命令。乍一看,这可能是一个严重的安全问题,但我不认为是这样。如果您已经获得了对系统的管理访问权(执行此过程所必需的),那么您已经有了各种各样的选项可供利用。

当“CompatTelRunner.exe”(当前版本为2020年5月的版本)运行时,它首先会检查一些条件是否通过,然后再继续它的遥测任务。此时,必须满足下列条件之一:

  • 目标系统为Windows 10/Server 2019;
  • 目标系统是一个Windows客户端版本;
  • “HKEY_LOCAL_MACHINE SoftwareMicrosoftWindowsCurrentVersionPoliciesDataCollectionCommercialDataOptIn”是一个DWORD,并且不等于“0”;

有趣的是,这些检查是在Windows Server 2016发布后的某个时候添加的。在“CompatTelRunner.exe”更新之前,它并不会执行这些检测,而且无论目标Windows系统是什么版本,这个可执行文件都将运行注册表项中的命令。

检查执行完成后,命令行参数的存在与否将决定程序的运行模式,这里总共有三种运行模式,分别对应于一些不同的条件。

如果提供了指定DLL/函数的命令行参数,“CompatTelRunner.exe”将根据白名单列表来对它们进行验证。这将导致CompatTelRunner.exe”启动DLL provider并退出。如果没有提供DLL/函数名,程序将继续识别为运行模式。

如果存在HKEY U LOCAL U MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAppCompatFlagsTelemetryControllerOOBE并且未提供“-maintenance”参数,那么程序将以第二种模式-OOBE运行。这个注册表键会在检测完成之后被删除。如果提供了“-maintenance”参数,那么我们将验证是否可以运行并进入运行模式“0”。验证内容包括HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAppCompatFlagsTelemetryControllerTestAllowRun设置为不为零的REG_DWORD或通过系统状态验证。

验证条件如下:

  • “Power Saver”不能处于活动状态,如果处于活动状态,那么程序将无法通过验证;
  • 目标设备必须接通电源,否则程序将无法通过验证;
  • 如果程序已连续四次无法通过验证,并且目标设备的电池状态为未知状态、电池电量大于5%或正在充电的话,程序将通过验证;

验证通过之后,程序将会把注册表键“RunsBlocked”的值重置为“0”.如果验证未通过,程序将会把注册表键“RunsBlocked”的值增加“1”。

如果没有传递命令行参数,那么“CompatTelRunner.exe”将会进入运行模式1(Nightly)。

运行模式识别完成后,程序还会对计划任务执行某些检测。接下来,程序将会在内部调用RunTelemetry,即执行遥测任务。

如果运行模式为0,那么程序还会执行额外的检测,如果这些检测均通过,或运行模式不为0,那么程序将会打开下列注册表项:

HKEY_LOCAL_MACHINE SOFTWAREMicrosoftWindowsNTCurrentVersionAppCompatFlagsTelemetryController

程序将会遍历该目录下的所有子健,然后在初始化调用中用它们来完成数据结构的填充:利用Windows Telemetry实现权限维持

接下来,我们的命令将会加载进如下所示的缓冲区结构中:

char command[520] = {0};

StringCchCatW(command, 260, L”%ls %ls%hs”, this->CommandStr, L”-cv”, );

根据程序的运行模式和计划任务调度模式,我们还可以在命令行中添加“-oobe”或“-fullsync”等参数。最后,这些命令将会以第二个参数传递给“CreateProcessW”,这相当于将其作为shell命令运行。

 

相关推荐: 分析无文件恶意软件 : Cobalt Strike Beacon

今天我们将研究一个由多阶段组成的恶意软件,它的最终目的依然是与Cobalt Strike的C2服务器建立连接。我们将研究此样本所使用的一些酷炫的技术吗,在浏览VirusTotal上的样本时,我碰巧遇到了它的第一阶段网络钓鱼的附件,发现贼因吹斯听。因为通常情况下…

本文为转载文章,源自互联网,由网络整理整理编辑,转载请注明出处:https://www.hacksafe.net/articles/system/3714.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注