COM(组件对象模型)介绍
Windows COM(Component Object Model)是一种面向对象的软件组件技术,用于实现不同软件模块之间的通信和交互。COM 组件可以被其他程序调用,它们可以在不同的进程中运行,而且可以由不同的开发者编写,因此可以提高开发效率和软件复用性。COM 组件是以二进制格式存在的,而且具有自我描述的能力,可以提供接口定义和版本信息,这使得不同的程序可以通过 COM 接口进行通信,而不必了解底层的实现细节。
在 Windows 操作系统中,COM 组件是非常常见的,例如 ActiveX 控件、COM+ 组件等,它们被广泛应用于各种应用程序和系统服务中。滥用COM对象使攻击者能够代表受信任的进程执行任意代码
有多种方法可以实现代码的执行,但有几种情况COM已被用于渗透攻击场景中的持久性,横向移动和防御规避。根据恶意代码将如何执行,COM劫持期间使用各种注册表子键。这些是:
-
InprocServer/InprocServer32
-
LocalServer/LocalServer32
-
TreatAs
-
ProgID
上述子键位于以下注册表配置下:
-
HKEY_CURRENT_USERSoftwareClassesCLSID
-
HKEY_LOCAL_MACHINESoftwareClassesCLSID
利用工具
https://github.com/nccgroup/Accomplice
https://github.com/enigma0x3/Misc-PowerShell-Stuff/blob/master/Get-ScheduledTaskComHandler.ps1
https://github.com/3gstudent/COM-Object-hijacking
https://github.com/tyranid/oleviewdotnet
持久化思路
发现COM Keys – Hijack
识别可用于进行COM劫持的COM Keys,需要使用Process Monitor 来发现缺少CLSID且不需要提升权限(HKCU)的COM服务器。Process Monitor 可以配置以下过滤器:
-
Operation is RegOpenKey
-
Result is NAME NOT FOUND
-
Path ends with InprocServer32
-
Exclude if path starts with HKLM
像标准用户一样打开文件和执行任务将产生一个包含COM键的列表,这些键可以被劫持,以便将任意库加载到受信任的进程。
结果可以直接使用CSV或XML导出
github上开源的com hijacking. acCOMplice项目中 PowerShell脚本包含一个函数Extract-HijackableKeysFromProcmonCSV,该函数可以以CSV格式获取进程监视器结果,以提取可能被劫持的密钥。
Shell |
该工具还有一个功能,可以直接检索系统上存在的缺失库及其CLSID。
Shell |
另一种方法是执行以下PowerShell片段,这可用于枚举可能被劫持的"LocalServer32"类:
Shell |
同样,以下PowerShell代码可以枚举InprocServer32类:
Shell |
执行代码片段将生成一个COM库列表,可以获取到COM劫持的dll信息。
发现COM Keys - 计划任务
开源github脚本:https://github.com/enigma0x3/Misc-PowerShell-Stuff
可以检查主机上所有在用户登录时执行的计划任务,并且获取到容易受到COM劫持的计划任务
参数“PersistenceLocations”将检索易受COM劫持的计划任务,这些任务可用于持久性,并且它们不需要提升的权限。CLSID和相关DLL也将显示在输出中。
Shell |
调用任务"CacheTask"时使用"wininet. dll"并具有以下CLSID:{0358B920-0AC7-461F-98F4-58E32CD89148}
CLSID和关联的DLL也可以从任务的配置文件中获取,该文件存储在以下位置:
Shell |
或者,使用下面的参数从PowerShell控制台调用“schtask”实用程序也可以检索文件的内容。
Shell |
查看任务调度程序将验证任务触发器是否在任何用户登录期间启动。劫持CLSID将在系统上建立持久性条件。
LocalServer32利用
LocalServer32注册表项指定外部COM对象在系统上的位置。这些通常是具有可执行文件形式的应用程序。下面的COM类ID在枚举可劫持键期间已经被检索到,可以用来执行任意可执行文件。
Shell |
将应用程序的默认值替换为任意可执行文件在磁盘上的位置将实现劫持。
还需要通过执行以下PowerShell命令激活ClassID,否则将禁用COM对象。
Shell |
当调用COM对象时,任意可执行文件将运行,并且将与命令和控制系统建立会话。
InprocServer32利用
"InprocServer32"(进程内服务器)注册表项指示COM库在磁盘上的位置并定义线程模型。下图演示了通常存在于"InprocServer32"中的注册表项。
在HKCU中为上面发现的“缓存任务”重新创建注册表项结构,并指向任意DLL而不是“wininet. dll”,将执行代码,因为HKCU中的DLL将在HKLM之前加载。
Shell |
下面的DLL文件将创建一个消息框,该消息框将演示一条消息,以指示在进程“缓存任务”启动时代码已经执行。
Shell |
需要将DLL放入磁盘,并且子键“InprocServer32”需要指向DLL的位置。
由于"CacheTask"在默认情况下计划在登录期间启动,任何用户代码都将跨登录永久执行(持久性)。
Metasploit实用程序"msfvenom"也可以通过执行以下命令生成恶意DLL:
Shell |
用Metasploit在发生劫持的同一注册表路径上生成的DLL替换以前的DLL。
每次用户登录目标系统时,都将执行代码并建立Meterpreter会话。
也可以执行无文件负载,如scriptlet,而不是DLL文件。
Shell |
"ScriptletURL"注册表项定义了任意. sct文件的远程位置,该文件将在调用COM类时被获取和执行。
执行以下命令将调用COM类并直接执行有效负载。
Shell |
TreatAs/ProgID利用
TreatAs是一个注册表项,允许另一个CLSID模拟一个CLSID。这可用于将COM对象重定向到另一个COM对象
滥用“TreatAs”包括以下两个步骤:
-
使用目标COM服务器在HKCU注册表配置单元中创建恶意CLSID。
-
通过添加指向恶意CLSID的"TreatAs"子项来劫持合法CLSID。
“ProgID”是COM对象的友好名称,它不是唯一的。以下注册表项将ProgID解析为CLSID。
-
HKCUSoftwareClasses
-
HKLMSoftwareClasses
这意味着当应用程序(客户端)激活COM对象(类)时,操作系统将通过最初读取以下注册表位置来解析相关的ProgID:
HKCUSoftwareClassesProgID
可以通过它的“ProgID”或“TreatAs”子键来执行规避
该文件将创建用于劫持有效CLSID的所需注册表项。执行下面的命令将文件导入注册表
Shell |
带有"-sta"(单线程单元)开关的"rundll32"实用程序可用于调用恶意的"TreatAs"CLSID或"ProID"。
Shell |
在这两种情况下,任意代码都成功执行并打开会话。
InprocServer32-Internet Explorer利用
Internet Explorer在企业环境中被频繁使用,因为它提供了与具有Web界面的内部应用程序的兼容性
对COMpfunRAT的分析表明,威胁行为者劫持了一个合法的COM对象,以便在调用Internet Explorer进程时在系统上建立持久性。
这是因为Internet Explorer与许多其他Windows应用程序一样,在进程启动时使用以下文件“api-ms-win-downlevel-1×64-l1-0._dl”或“api-ms-win-downlevel-1×86-l1-0._dl”。该文件可以在以下Windows位置找到:
Shell |
可以使用COM对象劫持持久性PowerShell脚本作为这种技术的概念证明,执行该脚本将创建所需的文件夹结构,并将对主机的体系结构执行检查,以便进行必要的注册表修改。
Shell |
当进程“iexpl. exe”启动时,计算器将启动,这将证明劫持是成功的。
使用Metasploit实用程序“msfvenom”生成任意DLL并替换. dl文件以建立Meterpreter会话也很简单。
在注册表中手动创建以下CLSID,并修改键以指向系统上DLL的位置。
当Internet Explorer再次启动时,DLL文件将在受信任的进程下加载。
将打开一个Meterpreter会话,这将证明已经实现了持久性。需要注意的是,直接使用Metasploit生成的DLL可能会导致系统不稳定,Internet Explorer可能会作为进程运行但未打开。这是因为CAccPropServiceClass()将被多次调用,因此需要对DLL文件进行进一步优化。
原文始发于微信公众号(暴暴的皮卡丘):windows持久化后门之COM (组件对象模型)劫持
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论