Skip to content
Atomic Red Team
atomics
T1559

T1559 - Inter-Process Communication

Description from ATT&CK (opens in a new tab)

Adversaries may abuse inter-process communication (IPC) mechanisms for local code or command execution. IPC is typically used by processes to share data, communicate with each other, or synchronize execution. IPC is also commonly used to avoid situations such as deadlocks, which occurs when processes are stuck in a cyclic waiting pattern.

Adversaries may abuse IPC to execute arbitrary code or commands. IPC mechanisms may differ depending on OS, but typically exists in a form accessible through programming languages/libraries or native interfaces such as Windows Dynamic Data Exchange (opens in a new tab) or Component Object Model (opens in a new tab). Linux environments support several different IPC mechanisms, two of which being sockets and pipes.(Citation: Linux IPC) Higher level execution mediums, such as those of Command and Scripting Interpreter (opens in a new tab)s, may also leverage underlying IPC mechanisms. Adversaries may also use Remote Services (opens in a new tab) such as Distributed Component Object Model (opens in a new tab) to facilitate remote IPC execution.(Citation: Fireeye Hunting COM June 2019)

Atomic Tests


Atomic Test #1 - Cobalt Strike Artifact Kit pipe

Uses the Named Pipes Micro Emulation (opens in a new tab) executable from the Center for Threat Informed Defense to create a named pipe for inter-process communication.

The named pipe executable will pause for 30 seconds to allow the client and server to exchange a message through the pipe.

Supported Platforms: Windows

auto_generated_guid: bd13b9fc-b758-496a-b81a-397462f82c72

Attack Commands: Run with command_prompt!

"PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_executor.exe" --pipe 1

Dependencies: Run with powershell!

Description: Named pipe executors must exist on disk
Check Prereq Commands:
if ((Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_executor.exe") -and (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_client.exe") -and (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_server.exe")) {exit 0} else {exit 1}
Get Prereq Commands:
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction ignore -Force | Out-Null
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
IEX (iwr "https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/Public/Invoke-FetchFromZip.ps1" -UseBasicParsing)
$zipUrl  = "https://github.com/center-for-threat-informed-defense/adversary_emulation_library/raw/master/micro_emulation_plans/src/named_pipes/named_pipes.zip"
Invoke-FetchFromZip $zipUrl "*.exe" "PathToAtomicsFolder\..\ExternalPayloads"


Atomic Test #2 - Cobalt Strike Lateral Movement (psexec_psh) pipe

Uses the Named Pipes Micro Emulation (opens in a new tab) executable from the Center for Threat Informed Defense to create a named pipe for inter-process communication.

The named pipe executable will pause for 30 seconds to allow the client and server to exchange a message through the pipe.

Supported Platforms: Windows

auto_generated_guid: 830c8b6c-7a70-4f40-b975-8bbe74558acd

Attack Commands: Run with command_prompt!

"PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_executor.exe" --pipe 2

Dependencies: Run with powershell!

Description: Named pipe executors must exist on disk
Check Prereq Commands:
if ((Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_executor.exe") -and (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_client.exe") -and (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_server.exe")) {exit 0} else {exit 1}
Get Prereq Commands:
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction ignore -Force | Out-Null
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
IEX (iwr "https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/Public/Invoke-FetchFromZip.ps1" -UseBasicParsing)
$zipUrl  = "https://github.com/center-for-threat-informed-defense/adversary_emulation_library/raw/master/micro_emulation_plans/src/named_pipes/named_pipes.zip"
Invoke-FetchFromZip $zipUrl "*.exe" "PathToAtomicsFolder\..\ExternalPayloads"


Atomic Test #3 - Cobalt Strike SSH (postex_ssh) pipe

Uses the Named Pipes Micro Emulation (opens in a new tab) executable from the Center for Threat Informed Defense to create a named pipe for inter-process communication.

The named pipe executable will pause for 30 seconds to allow the client and server to exchange a message through the pipe.

Supported Platforms: Windows

auto_generated_guid: d1f72fa0-5bc2-4b4b-bd1e-43b6e8cfb2e6

Attack Commands: Run with command_prompt!

"PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_executor.exe" --pipe 3

Dependencies: Run with powershell!

Description: Named pipe executors must exist on disk
Check Prereq Commands:
if ((Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_executor.exe") -and (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_client.exe") -and (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_server.exe")) {exit 0} else {exit 1}
Get Prereq Commands:
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction ignore -Force | Out-Null
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
IEX (iwr "https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/Public/Invoke-FetchFromZip.ps1" -UseBasicParsing)
$zipUrl  = "https://github.com/center-for-threat-informed-defense/adversary_emulation_library/raw/master/micro_emulation_plans/src/named_pipes/named_pipes.zip"
Invoke-FetchFromZip $zipUrl "*.exe" "PathToAtomicsFolder\..\ExternalPayloads"


Atomic Test #4 - Cobalt Strike post-exploitation pipe (4.2 and later)

Uses the Named Pipes Micro Emulation (opens in a new tab) executable from the Center for Threat Informed Defense to create a named pipe for inter-process communication.

The named pipe executable will pause for 30 seconds to allow the client and server to exchange a message through the pipe.

Supported Platforms: Windows

auto_generated_guid: 7a48f482-246f-4aeb-9837-21c271ebf244

Attack Commands: Run with command_prompt!

"PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_executor.exe" --pipe 4

Dependencies: Run with powershell!

Description: Named pipe executors must exist on disk
Check Prereq Commands:
if ((Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_executor.exe") -and (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_client.exe") -and (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_server.exe")) {exit 0} else {exit 1}
Get Prereq Commands:
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction ignore -Force | Out-Null
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
IEX (iwr "https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/Public/Invoke-FetchFromZip.ps1" -UseBasicParsing)
$zipUrl  = "https://github.com/center-for-threat-informed-defense/adversary_emulation_library/raw/master/micro_emulation_plans/src/named_pipes/named_pipes.zip"
Invoke-FetchFromZip $zipUrl "*.exe" "PathToAtomicsFolder\..\ExternalPayloads"


Atomic Test #5 - Cobalt Strike post-exploitation pipe (before 4.2)

Uses the Named Pipes Micro Emulation (opens in a new tab) executable from the Center for Threat Informed Defense to create a named pipe for inter-process communication.

The named pipe executable will pause for 30 seconds to allow the client and server to exchange a message through the pipe.

Supported Platforms: Windows

auto_generated_guid: 8dbfc15c-527b-4ab0-a272-019f469d367f

Attack Commands: Run with command_prompt!

"PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_executor.exe" --pipe 5

Dependencies: Run with powershell!

Description: Named pipe executors must exist on disk
Check Prereq Commands:
if ((Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_executor.exe") -and (Test-Path "PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_client.exe") -and ("Test-Path PathToAtomicsFolder\..\ExternalPayloads\build\namedpipes_server.exe")) {exit 0} else {exit 1}
Get Prereq Commands:
New-Item -Type Directory "PathToAtomicsFolder\..\ExternalPayloads\" -ErrorAction ignore -Force | Out-Null
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
IEX (iwr "https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/Public/Invoke-FetchFromZip.ps1" -UseBasicParsing)
$zipUrl  = "https://github.com/center-for-threat-informed-defense/adversary_emulation_library/raw/master/micro_emulation_plans/src/named_pipes/named_pipes.zip"
Invoke-FetchFromZip $zipUrl "*.exe" "PathToAtomicsFolder\..\ExternalPayloads"

Last updated on