Protocol Tunneling T1572

Tactic: Command & Control

Adversaries may tunnel network communications to and from a victim system within a separate protocol to avoid detection/network filtering and/or enable access to otherwise unreachable systems. Tunneling involves explicitly encapsulating a protocol within another. This behavior may conceal malicious traffic by blending in with existing traffic and/or provide an outer layer of encryption (similar to a VPN). Tunneling could also enable routing of network packets that would otherwise not reach their intended destination, such as SMB, RDP, or other traffic that would be filtered by network appliances or not routed over the Internet.

Events covered

21 catalog events are tagged with this technique by at least one rule.

Authoring guide

Patterns shared across the 82 rules above: which fields they filter on, what specific values they look for, and what they exclude. The catalog normalizes field names across vendors so Sigma's Image, Elastic's process.name, and Splunk's process_name collapse into one row. Each rule contributes at most once per row.

Fields filtered most (55 distinct)

The fields most rules look at when detecting this technique. The How column shows the operators authors use (eq, wildcard, regex_match, match) and how often each appears. Sample values are concrete examples to start from, not an exhaustive list.

FieldRulesHowSample values
CommandLine29contains 14, match 7, in 5, regex_match 3(?i)(\-\-dns)?((\s+)|(\=))?((server\=)|(host\=))?((\d{1,3..., (?i)(tcp\s+(139|445|3389|5985|5986))|(\.exe\s+|(authtoken..., (?i)\-(L|R|N|D|C)|IdentitiesOnly=yes|StrictHostKeyChecking=no|ssh, *http*, \d{1,5}:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}
process_name21eq 14, in 5, match 5, starts_with 2(?i)ngrok\.exe, (?i)^ssh\.exe, 3proxy, chisel, curl
event.type19eq 19start, change
EventID18eq 17, in 11, 4688, 4104, 17, 18
process.args16eq 11, wildcard 5, in 4, starts_with 4, contains 3, match 2, ends_with 1--preproxy, --proxy, --socks5-hostname, -c, -s
EventType13in 9, eq 4exec, ProcessRollup2, exec_event, connection_attempted
host.os.type12eq 11, in 1
DestinationHostname9ends_with 7, contains 2.localto.net, .localtonet.com, tunnel.ap.ngrok.com, tunnel.au.ngrok.com, tunnel.eu.ngrok.com
Image9ends_with 9\plink.exe, \ssh.exe, \svchost.exe, \3proxy.exe, \httptunnel.exe
Initiated9eq 9true
parent_process_name6in 5, eq 1, starts_with 1, wildcard 1bash, csh, ash, *.sh, .
Type5eq 5
DestinationPort4eq 3, is_not_null 1443, 4500, 7844, 80
dest_ip4cidr_match 2, eq 1, is_not_null 1, ne 1127.0.0.0/8, 10.0.0.0/8, 127.0.0.1, 169.254.0.0/16, ::1
EventCategory3eq 3firewall

Top indicator values (435 distinct)

Specific (field, operator, value) combinations the rules check for, ranked by how many rules under this technique use each one. The Corpus reach column counts how many rules across the entire catalog (any technique) check the same combination. High numbers point to widely-used indicators that are likely noisy on their own; combine them with another condition for useful signal. Blank means the combination is specific to rules under this technique. Click a value to expand the rules under this technique that use it.

FieldKindValueRules (here)Corpus reach
event.typeeq
start
18606
EventTypein
ProcessRollup2
9117
EventTypein
exec
9171
EventTypein
exec_event
9139
EventTypein
start
9134
EventTypein
executed
588
EventTypein
process_started
574
Initiatedeq
true
950
EventIDeq
1
6237
EventIDeq
4688
5313
EventIDeq
4104
4268
parent_process_namein
bash
530
parent_process_namein
csh
526
parent_process_namein
dash
527
parent_process_namein
fish
526
parent_process_namein
ksh
526
parent_process_namein
sh
530
parent_process_namein
tcsh
526
parent_process_namein
zsh
529
parent_process_namein
ash
37
EventTypeeq
exec
4171
CommandLinein
*http*
33
CommandLinematch
(?i)(tcp\s+(139|445|3389|5985|5986))|(\.exe\s+|(authtoken\s|start\s+--all))|(...
33
CommandLinematch
(?i)\-(L|R|N|D|C)|IdentitiesOnly=yes|StrictHostKeyChecking=no|ssh
33
CommandLinematch
\d{1,5}:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}
33
CommandLinematch
\w+@\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
33
CommandLineregex_match
(?i)(\-\-dns)?((\s+)|(\=))?((server\=)|(host\=))?((\d{1,3}\.\d{1,3}\.\d{1,3}\...
33
EventCategoryeq
firewall
37
process.argseq
-s
36
process_namematch
(?i)ngrok\.exe
33

Exclusions (62 distinct)

Field/operator/value combinations excluded by rules under this technique (top-level not() clauses), sorted by how many rules exclude each. These are the false-positive paths the community has learned to filter out. A new rule that ignores the high-count entries here will likely fire on the same noisy paths. Click a value to expand the rules under this technique that exclude it.

FieldKindValueRules excluding
dest_ipcidr_match
10.0.0.0/8
2
dest_ipcidr_match
127.0.0.0/8
2
dest_ipcidr_match
169.254.0.0/16
2
dest_ipcidr_match
172.16.0.0/12
2
dest_ipcidr_match
192.168.0.0/16
2
CommandLinecontains
-blockdev
1
CommandLinecontains
-cdrom
1
CommandLinecontains
type=virt
1
CommandLinecontains
ansible
1
CurrentDirectorycontains
ansible
1
ParentCommandLinein
pve-ha-lrm
1
ParentCommandLinein
pvedaemon
1
ParentImageeq
/usr/sbin/sshd
1
dest_ipeq
corp_dns
1
parent_process_namewildcard
init.ipv6-global
1

Rules under this technique

Every rule in the catalog tagged with this technique, grouped by vendor. Click a rule title for its full predicates, exclusions, and indicators.

Platform (all)
Domain (all)

Sigma 27 rules

Elastic 21 rules

Splunk 26 rules

Kusto 8 rules