通过命名管道检测Cobalt Strike

常见管道名:

        "MSSE-", 	"postex_", 	"msagent_", 	"status_"    

以及:

interprocess_|samr_|netlogon_|srvsvc_|lsarpc_|wkssvc_|DserNamePipe|SearchTextHarvester|windows.update.manager|scerpc|UIA_PIPE_|CdmHelperPipe|ToServer|netsvc|CVSGX-

  

CobaltStrike 命名管道

检测 CobaltStrike 使用的命名管道的创建

已知的误报

  • 未知

参考

原始规则 

title: CobaltStrike Named Pipe
id: d5601f8c-b26f-4ab0-9035-69e11a8d4ad2
status: experimental
description: Detects the creation of a named pipe as used by CobaltStrike
references:
    - https://twitter.com/d4rksystem/status/1357010969264873472
    - https://labs.f-secure.com/blog/detecting-cobalt-strike-default-modules-via-named-pipe-analysis/
    - https://github.com/Neo23x0/sigma/issues/253
    - https://blog.cobaltstrike.com/2021/02/09/learn-pipe-fitting-for-all-of-your-offense-projects/
date: 2021/05/25
author: Florian Roth, Wojciech Lesicki
tags:
    - attack.defense_evasion
    - attack.privilege_escalation
    - attack.t1055
logsource:
   product: windows
   category: pipe_created
   definition: 'Note that you have to configure logging for Named Pipe Events in Sysmon config (Event ID 17 and Event ID 18). The basic configuration is in popular sysmon configuration (https://github.com/SwiftOnSecurity/sysmon-config), but it is worth verifying. You can also use other repo, e.g. https://github.com/Neo23x0/sysmon-config, https://github.com/olafhartong/sysmon-modular. How to test detection? You can always use Cobalt Strike, but also you can check powershell script from this site https://svch0st.medium.com/guide-to-named-pipes-and-hunting-for-cobalt-strike-pipes-dc46b2c5f575'
detection:
   selection_MSSE:
      PipeName|contains|all: 
         - '\MSSE-'
         - '-server'
   selection_postex:
      PipeName|startswith: '\postex_'
   selection_postex_ssh:
      PipeName|startswith: '\postex_ssh_'
   selection_status:
      PipeName|startswith: '\status_'
   selection_msagent:
      PipeName|startswith: '\msagent_'
   condition: 1 of selection*
falsepositives:
   - Unknown
level: critical

 

命名管道是 Windows 中进程间通信的一种方法。它们主要用于本地进程相互通信。它们还可以促进不同主机上的两个进程之间的通信。此流量封装在 Microsoft SMB 协议中。如果您曾经听到有人将命名管道传输称为 SMB 通道,这就是原因。

Cobalt Strike 在它的几个特性中使用了命名管道。在这篇文章中,我将带您了解 Cobalt Strike 在哪里使用命名管道、默认管道名称是什么以及如何更改它。我还将分享一些技巧,以避免在您的 Cobalt Strike 攻击链中使用命名管道。

Cobalt Strike 在哪里使用命名管道?

Cobalt Strike 的默认 Artifact Kit EXE 和 DLL 使用命名管道以击败大约2014 年的防病毒二进制仿真的方式来清洗 shellcode 。它仍然是默认设置。当您看到\\.\pipe\MSSE-###-server时,这可能是默认的 Cobalt Strike Artifact Kit 二进制文件。您可以通过Artifact Kit更改此设置查看Artifact Kit 中的src-common/bypass-pipe.c以查看实现。

Cobalt Strike 还使用命名管道在跳转 psexec_psh 模块中将其有效负载暂存以进行横向移动。这个管道名是\\.\pipe\status_##您可以通过Malleable C2(设置 pipename_stager)更改管道。

Cobalt Strike 在其SMB Beacon通信中使用命名管道。该产品自2013 年以来一直具有此功能它太酷了。您可以通过配置文件以及在配置 SMB 信标负载时更改管道名称。我还知道一些针对 SMB 信标功能内容的检测。SMB 信标使用 [length][data] 模式,这些 IOC 在流量开始时针对可预测的 [length] 值。smb_frame_header Malleable C2 选项对此进行了反击。默认管道是\\[target]\pipe\msagent_##

Cobalt Strike 对其SSH 会话使用命名管道来链接到父 Beacon。就 Cobalt Strike 而言,Cobalt Strike 中的 SSH 客户端本质上是一个 SMB 信标。您可以通过在配置文件中设置 ssh_pipename 来更改管道名称(从 4.2 开始)。此管道(CS 4.2 及更高版本)的默认名称是\\.\pipe\postex_ssh_####。

Cobalt Strike 在其大部分开发后工作中使用命名管道。我们将命名管道用于注入显式进程(屏幕截图、键盘日志)的 post-ex 工具。我们的 fork&run 工具也主要使用命名管道将结果传回给 Beacon。F-Secure通过命名管道分析检测 Cobalt Strike 默认模块讨论了 Cobalt Strike 命名管道的这一方面。我们在 Cobalt Strike 4.2 中引入了更改这些管道名称的功能。在您的 Malleable C2 配置文件中设置 post-ex -> pipename 在 Cobalt Strike 4.2 及更高版本中这些管道的默认名称是\\.\pipe\postex_####在 4.2 之前,默认名称是 random-ish。

Cobalt Strike 管件

有了以上内容,您现在已经掌握了 Cobalt Strike 在何处使用命名管道的知识。您也有权更改其默认名称。如果您正在寻找候选管道名,请使用Beacon 中的ls \\.\pipe快速查看已安装的 Windows 系统上的命名管道列表。这会给你很多选择。此外,当您设置合理的管道名称时,请注意每个 # 字符也被替换为随机字符 (0-9a-f)。而且,最后一个提示:您可以在 ssh_pipename 和 post-ex -> pipename 配置文件值中指定以逗号分隔的候选管道名称列表。当需要其中一个值时,Cobalt Strike 将从该列表中随机选择。

简化您的管道

Cobalt Strike 在其攻击链的多个部分使用命名管道。这些在很大程度上是可选的,您可以小心避免它们。例如,默认的 Artifact Kit 使用命名管道;但这不是 Artifact Kit 的要求。我们的其他 Artifact Kit 模板不使用命名管道。对于 Beacon 的横向移动和点对点链接TCP Beacon是一种选择。为了避免我们的 SSH 会话中的命名管道,请通过SOCKS 代理枢轴隧道连接外部 SSH 客户端。而且,虽然我们的许多 fork&run 后利用 DLL 使用命名管道来获取结果,但Beacon 对象文件是构建和运行后利用工具的另一种方式在灯塔之上。信标对象文件机制不使用命名管道。

结束的想法

这篇文章专注于命名管道名称,但这里的概念也适用于 Cobalt Strike 的其余部分。在进攻端,了解你的 IOC 以及如何改变或避免它们是成功的关键。我们使用 Cobalt Strike 的目标不是令人惊奇且不断变化的默认管道名称或 IOC。我们的目标是灵活性。我们当前和未来的工作是让您随着时间的推移更好地控制您的攻击链。要了解今天的选项,请阅读工具包、配置文件和脚本……哦,天哪!这篇博文总结了自定义 Cobalt Strike 的方法。我们在 2019 年末的Red Team Operations with Cobalt Strike也将这些想法融入到每场讲座中。

 

 

posted @ 2022-09-29 17:46  bonelee  阅读(306)  评论(0编辑  收藏  举报