Detection rules › Sigma

CobaltStrike Named Pipe Pattern Regex

Status
test
Severity
critical
Log source
product windows, category pipe_created
Author
Florian Roth (Nextron Systems)
Source
github.com/SigmaHQ/sigma

Detects the creation of a named pipe matching a pattern used by CobaltStrike Malleable C2 profiles

MITRE ATT&CK coverage

TacticTechniques
Privilege EscalationT1055 Process Injection
StealthT1055 Process Injection

Event coverage

Rule body yaml

title: CobaltStrike Named Pipe Pattern Regex
id: 0e7163d4-9e19-4fa7-9be6-000c61aad77a
related:
    - id: 85adeb13-4fc9-4e68-8a4a-c7cb2c336eb7 # Patterns
      type: similar
    - id: d5601f8c-b26f-4ab0-9035-69e11a8d4ad2 # Generic
      type: similar
status: test
description: Detects the creation of a named pipe matching a pattern used by CobaltStrike Malleable C2 profiles
references:
    - https://svch0st.medium.com/guide-to-named-pipes-and-hunting-for-cobalt-strike-pipes-dc46b2c5f575
    - https://gist.github.com/MHaggis/6c600e524045a6d49c35291a21e10752
author: Florian Roth (Nextron Systems)
date: 2021-07-30
modified: 2022-12-31
tags:
    - attack.privilege-escalation
    - attack.stealth
    - 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 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:
        - PipeName|re: '\\mojo\.5688\.8052\.(?:183894939787088877|35780273329370473)[0-9a-f]{2}'
        - PipeName|re: '\\wkssvc_?[0-9a-f]{2}'
        - PipeName|re: '\\ntsvcs[0-9a-f]{2}'
        - PipeName|re: '\\DserNamePipe[0-9a-f]{2}'
        - PipeName|re: '\\SearchTextHarvester[0-9a-f]{2}'
        - PipeName|re: '\\mypipe-(?:f|h)[0-9a-f]{2}'
        - PipeName|re: '\\windows\.update\.manager[0-9a-f]{2,3}'
        - PipeName|re: '\\ntsvcs_[0-9a-f]{2}'
        - PipeName|re: '\\scerpc_?[0-9a-f]{2}'
        - PipeName|re: '\\PGMessagePipe[0-9a-f]{2}'
        - PipeName|re: '\\MsFteWds[0-9a-f]{2}'
        - PipeName|re: '\\f4c3[0-9a-f]{2}'
        - PipeName|re: '\\fullduplex_[0-9a-f]{2}'
        - PipeName|re: '\\msrpc_[0-9a-f]{4}'
        - PipeName|re: '\\win\\msrpc_[0-9a-f]{2}'
        - PipeName|re: '\\f53f[0-9a-f]{2}'
        - PipeName|re: '\\rpc_[0-9a-f]{2}'
        - PipeName|re: '\\spoolss_[0-9a-f]{2}'
        - PipeName|re: '\\Winsock2\\CatalogChangeListener-[0-9a-f]{3}-0,'
    condition: selection
falsepositives:
    - Unknown
level: critical

Stages and Predicates

Stage 0: condition

selection

Stage 1: selection

selection:
    - PipeName|re: '\\mojo\.5688\.8052\.(?:183894939787088877|35780273329370473)[0-9a-f]{2}'
    - PipeName|re: '\\wkssvc_?[0-9a-f]{2}'
    - PipeName|re: '\\ntsvcs[0-9a-f]{2}'
    - PipeName|re: '\\DserNamePipe[0-9a-f]{2}'
    - PipeName|re: '\\SearchTextHarvester[0-9a-f]{2}'
    - PipeName|re: '\\mypipe-(?:f|h)[0-9a-f]{2}'
    - PipeName|re: '\\windows\.update\.manager[0-9a-f]{2,3}'
    - PipeName|re: '\\ntsvcs_[0-9a-f]{2}'
    - PipeName|re: '\\scerpc_?[0-9a-f]{2}'
    - PipeName|re: '\\PGMessagePipe[0-9a-f]{2}'
    - PipeName|re: '\\MsFteWds[0-9a-f]{2}'
    - PipeName|re: '\\f4c3[0-9a-f]{2}'
    - PipeName|re: '\\fullduplex_[0-9a-f]{2}'
    - PipeName|re: '\\msrpc_[0-9a-f]{4}'
    - PipeName|re: '\\win\\msrpc_[0-9a-f]{2}'
    - PipeName|re: '\\f53f[0-9a-f]{2}'
    - PipeName|re: '\\rpc_[0-9a-f]{2}'
    - PipeName|re: '\\spoolss_[0-9a-f]{2}'
    - PipeName|re: '\\Winsock2\\CatalogChangeListener-[0-9a-f]{3}-0,'

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
PipeNameregex_match
  • \DserNamePipe[0-9a-f]{2}
  • \MsFteWds[0-9a-f]{2}
  • \PGMessagePipe[0-9a-f]{2}
  • \SearchTextHarvester[0-9a-f]{2}
  • \Winsock2\CatalogChangeListener-[0-9a-f]{3}-0,
  • \f4c3[0-9a-f]{2}
  • \f53f[0-9a-f]{2}
  • \fullduplex_[0-9a-f]{2}
  • \mojo.5688.8052.(?:183894939787088877|35780273329370473)[0-9a-f]{2}
  • \msrpc_[0-9a-f]{4}
  • \mypipe-(?:f|h)[0-9a-f]{2}
  • \ntsvcs[0-9a-f]{2}
  • \ntsvcs_[0-9a-f]{2}
  • \rpc_[0-9a-f]{2}
  • \scerpc_?[0-9a-f]{2}
  • \spoolss_[0-9a-f]{2}
  • \win\msrpc_[0-9a-f]{2}
  • \windows.update.manager[0-9a-f]{2,3}
  • \wkssvc_?[0-9a-f]{2}