天罗地网 | Cobalt Strike 深度检测之命令特征

admin 2021年12月12日05:14:45评论173 views字数 3532阅读11分46秒阅读模式
天罗地网 | Cobalt Strike 深度检测之命令特征

开卷有益 · 不求甚解

天罗地网 | Cobalt Strike 深度检测之命令特征

前言

众所周知,Cobalt Strike中的一些内置命令是操作安全的主要禁区。但为什么它们很糟糕?这篇文章的目的不是教你“好的”操作安全,因为我觉得这有点主观,取决于目标环境的成熟度,也不是“如何检测 Cobalt Strike”。这篇文章的目的是记录一些 Cobalt Strike 技术的幕后情况或从防守者的角度来看。实际上,这篇文章只是直接从 Cobalt Strike 的网站上分解了一个页面,可以在这里找到。我无法在一篇文章中涵盖所有技术和命令,因此这可能是一个由两部分组成的系列。

在进入技术和与它们相关的日志之前,必须回答基线问题:“什么是不良操作?”。同样,这是一个非常主观的问题。如果您在防御和检测能力为零的环境中运行,则没有不良操作安全。虽然本文的目标不是教授“良好的操作安全”,它仍然偏向于某种成熟的环境,某些技术会被检测出来,因为它们往往会触发基线或低效率/默认的警报和检测。我的博客文章检测实验室非常简单:只是在端点上带有 Winlogbeat 和 Sysmon 的 ELK 堆栈,因此我不在这里介绍“高级”检测。

参考Cobalt Strike的操作安全文章,我想指出的第一组内置命令是 "进程执行 "技术,即run、shell和pth。

这三个命令往往会触发几个基线警报。让我们调查一下原因。

Shell

当操作者使用shell在钴行使命令,它通常是直接执行一个DOS命令,诸如dircopymove等引擎盖下,该shell命令的调用cmd.exe /c

天罗地网 | Cobalt Strike 深度检测之命令特征
img

使用 Sysmon 日志记录,这会留下一系列事件,围绕事件代码 1,进程创建。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

我们可以在这里看到该shell命令在父进程下生成 cmd.exe。whoami但是,实际上也是 System32 中的可执行文件,因此 cmd.exe 也将其作为子进程生成。但是,在此之前,conhost.exe 会与 cmd.exe 一起调用。Conhost.exe 是 cmd.exe 与 Explorer.exe 交互所需的进程。独特之处在于 Conhost.exe 的创建方式:

天罗地网 | Cobalt Strike 深度检测之命令特征
img

在这种情况下,Conhost.exe 的参数是0xffffffff -ForceV1,它告诉 Conhost 它应该连接到哪个应用程序 ID。每个微软:

连接到物理控制台的会话的会话标识符。如果没有会话附加到物理控制台(例如,如果物理控制台会话正在附加或分离的过程中),则此函数返回 0xFFFFFFFF。”

天罗地网 | Cobalt Strike 深度检测之命令特征
img

op-sec 的目标是始终最大限度地减少您的活动留下的流量或“足迹”。如您所见,shell生成了相当多的工件,并且检测很常见,因为cmd.exe /c在环境中很少使用。

PTH

PTH 或 pass-the-hash 命令具有比shell.

天罗地网 | Cobalt Strike 深度检测之命令特征
img

来自 Cobalt Strike 的博客https://blog.cobaltstrike.com/2015/12/16/windows-access-tokens-and-alternate-credentials/:

“ pth 命令要求 mimikatz:(1) 创建一个新的登录会话,(2) 使用您提供的域、用户名和密码哈希更新该登录会话中的凭证材料,以及 (3) 复制您的访问令牌并制作副本指的是新的登录会话。然后 Beacon 模拟通过这些步骤生成的令牌,您就可以传递哈希了。”

这会创建多个事件。

首先,创建 Cobalt Strike 配置文件中规定的“spawnto”进程,在我的例子中是 dllhost.exe。这将成为当前进程的子进程。这用作牺牲过程,以便在新的登录会话和凭据中“修补”。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

然后创建一个新的登录会话,事件 ID 4672。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

然后该帐户登录到该新会话并创建另一个 ID 为 4624 的事件。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

在这个新的登录会话中,cmd.exe 作为 dllhost.exe 的子进程生成,一个字符串作为唯一标识符传递到命名管道中。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

现在,根据附加到父进程 (dllhost.exe) 的登录会话,ADMAlice 是登录用户。

最后,由于 cmd.exe 被调用,Conhost.exe 再次被调用。隐藏 cmd.exe 窗口的唯一参数被传递到 Conhost。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

现在,每当操作员尝试登录远程主机时,将首先尝试新的登录会话凭据。

Run

run命令与 PTH 和 Shell 有点不同,它不会生成 cmd.exe,而是直接调用目标可执行文件。

天罗地网 | Cobalt Strike 深度检测之命令特征
img
天罗地网 | Cobalt Strike 深度检测之命令特征
img

但是,再次使用唯一参数调用 Conhost。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

虽然 Conhost 的参数本身并不是恶意的,但它是这些命令的通用标识符。

execute工作方式与 类似run,但不返回任何输出。

Powershell

powershell命令,因为你可能已经猜到,贯穿PowerShell的命令。Powershell.exe 作为子进程生成,但可以使用该ppid命令更改父 PID 。但是,在这种情况下,ppid 保留在原始父进程中。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

再次调用 Conhost。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

powershell命令的主要问题是它总是向命令添加唯一的参数并在 base64 中对命令进行编码。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

这导致了一种高度可签名的技术,因为看到合法的 PowerShell 脚本以带有-exec bypass标志的base64 编码运行并不常见。

Powerpick

Powerpick 是一个使用“fork-and-run”技术的命令,这意味着 Cobalt Strike 创建了一个牺牲进程来运行命令,返回输出,然后终止进程。spawnto 进程的名称在团队服务器上的 Cobalt Strike 配置文件中定义。就我而言,它是 dllhost.exe。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

运行 powerpick 命令时,例如powerpick whoami,会创建三个进程:Dllhost.exe(SpawnTo 进程)、Conhost.exe 和 whoami.exe。

天罗地网 | Cobalt Strike 深度检测之命令特征
img
天罗地网 | Cobalt Strike 深度检测之命令特征
img

虽然 Powerpick 不会生成 powershell.exe,但仍有操作安全方面的考虑。在这种情况下,这种行为看起来有些可疑,因为“whoami.exe”的父进程是“dllhost.exe”。通常,当用户运行“whoami”时,它将在 cmd.exe 或 powershell.exe 的上下文中。

天罗地网 | Cobalt Strike 深度检测之命令特征
img
天罗地网 | Cobalt Strike 深度检测之命令特征
img

图 1:'whoami' 的正常使用是什么样的

这里的操作安全考虑是要了解您的父进程是什么以及您将生成什么进程。始终尝试使父子进程关系尽可能保持“正常”。带有“whoami.exe”子进程的 Dllhost.exe 不正常。

类似地,这些其他命令利用“fork-and-run”技术,您可以期待类似的事件:

  • chromedump
  • covertvpn
  • dcsync
  • execute-assembly
  • hashdump
  • logonpasswords
  • mimikatz
  • net *
  • portscan
  • pth
  • ssh
  • ssh-key

Spawnas

spawnas命令将通过提供他们的凭据和侦听器以另一个用户的身份创建一个新会话。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

由于这实际上只是在主机上重新部署有效负载,因此有几个与之相关的事件。

首先,创建一个特殊的登录会话

天罗地网 | Cobalt Strike 深度检测之命令特征
img
天罗地网 | Cobalt Strike 深度检测之命令特征
img

如果该spawnas命令以提升的用户身份运行,则新会话将具有拆分令牌,这意味着将创建两个会话:一个是特权会话,另一个是非特权会话。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

接下来,将创建一个 4648 事件,通知使用明确提供的凭据登录

天罗地网 | Cobalt Strike 深度检测之命令特征
img

然后将在该新会话下创建一个新进程,即配置文件中设置的 spawnto 进程。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

该进程现在是该登录会话和用户的信标进程。它是原始信标进程的子进程。

天罗地网 | Cobalt Strike 深度检测之命令特征
img

这篇文章中没有涉及的几种技术被认为更“操作安全”友好,因为它们不会像目前所涵盖的那样留下明显的明显事件。其中的一些例子是:

  • Beacon Object Files (BOF)
  • Shinject
  • Execute assembly
  • 仅API调用,如uploadmkdirdownloads,等

我确实计划在以后的帖子中介绍这些检测。

译文早读去留问题

关于 每日早读 的去留问题,设置了一个投票,大家可以参与下。

天罗地网 | Cobalt Strike 深度检测之命令特征

译文申明

  • 文章来源为近期阅读文章,质量尚可的,大部分较新,但也可能有老文章。
  • 开卷有益,不求甚解,不需面面俱到,能学到一个小技巧就赚了。
  • 译文仅供参考,具体内容表达以及含义, 以原文为准 (译文来自自动翻译)
  • 如英文不错的,尽量阅读原文。(点击原文跳转)
  • 每日早读板块,可能会随时取消,正在思索更好的展现模式,可能是发到群里/Slack等,或者 sec.today 形式. 无法加入时,公众号回复: 加群
  • 每日早读文章,可能会定期随机删除
  • 每日早读基本自动化发布,这是一项测试

Follow Me

微信/微博:red4blue

公众号/知乎:blueteams

天罗地网 | Cobalt Strike 深度检测之命令特征



本文始发于微信公众号(甲方安全建设):天罗地网 | Cobalt Strike 深度检测之命令特征

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月12日05:14:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   天罗地网 | Cobalt Strike 深度检测之命令特征http://cn-sec.com/archives/436957.html

发表评论

匿名网友 填写信息