Detection: Cisco IOS XE Tunnel Interface Configuration

Description

This analytic detects creation of a Cisco IOS-XE tunnel interface with tunnel source, tunnel destination, and an IP address in the 10.10.12.0 network. The Salt Typhoon notes identify this tunnel configuration pattern as suspicious.

 1`cisco_ios`
 2facility IN ("HA_EM", "PARSER")
 3mnemonic IN ("LOG", "CFGLOG_LOGGEDCMD")
 4message_text IN ("*interface Tunnel*", "*tunnel source*", "*tunnel destination*", "*ip address 10.10.12.*")
 5
 6| rex field=message_text "^(?:[^:]+:\s+)?(?:catchall:\s+)?(?<eem_command>.+?)\s*$"
 7
 8| rex field=message_text "<enteredCommand><cli>(?<parser_command>.*?)</cli>"
 9
10| rex field=message_text "<user>(?<parser_user>[^<]+)</user>"
11
12| rex field=message_text "<srcIP>(?<parser_src_ip>[^<]+)</srcIP>"
13
14| eval command=lower(trim(coalesce(parser_command, eem_command, "")))
15
16| eval event_type=case(
17    match(command, "^interface\s+tunnel"), "interface_tunnel",
18    match(command, "^tunnel\s+source"), "tunnel_source",
19    match(command, "^tunnel\s+destination"), "tunnel_destination",
20    match(command, "^ip\s+address\s+10\.10\.12\."), "tunnel_ip_address",
21    true(), null())
22
23| where isnotnull(event_type)
24
25| eval user=coalesce(parser_user, user, "unknown")
26
27| eval src_ip=coalesce(parser_src_ip, src_ip, "unknown")
28
29| eval dest=coalesce(host, dvc, dest, "unknown")
30
31| bin _time span=15m
32
33| stats count min(_time) as firstTime
34              max(_time) as lastTime
35              values(event_type) as event_types
36              values(user) as user
37              values(src_ip) as src_ip
38              values(command) as commands
39  by _time dest
40
41| where mvfind(event_types, "interface_tunnel") >= 0
42        AND
43        mvfind(event_types, "tunnel_source") >= 0
44        AND
45        mvfind(event_types, "tunnel_destination") >= 0
46        AND
47        mvfind(event_types, "tunnel_ip_address") >= 0
48
49| `security_content_ctime(firstTime)`
50
51| `security_content_ctime(lastTime)`
52
53| `cisco_ios_xe_tunnel_interface_configuration_filter`

Data Source

Name Platform Sourcetype Source
Cisco IOS Logs Other 'cisco:ios' 'cisco:ios'

Macros Used

Name Value
cisco_ios sourcetype=cisco:ios
cisco_ios_xe_tunnel_interface_configuration_filter search *
cisco_ios_xe_tunnel_interface_configuration_filter is an empty macro by default. It allows the user to filter out any results (false positives) without editing the SPL.

Annotations

Default Configuration

This detection is configured by default in Splunk Enterprise Security to run with the following settings:

Setting Value
Disabled true
Cron Schedule 0 * * * *
Earliest Time -70m@m
Latest Time -10m@m
Schedule Window auto
Creates Finding (Notable) No
Creates Intermediate Finding (Risk Event) Yes
Anomaly detections generate Intermediate Findings (Risk Events). They do not generate a Finding (Notable) directly.

Implementation

Use the Cisco Catalyst Add-on for Splunk (https://splunkbase.splunk.com/app/7538) to Ingest Cisco IOS-XE syslog with sourcetype "cisco:ios" and enable archive/config command logging.

Known False Positives

No false positives have been identified at this time.

Associated Analytic Story

Intermediate Findings

Message Entity Field Entity Type Risk Score
Cisco IOS-XE tunnel interface configuration matching Salt Typhoon notes was observed on $dest$ by $user$. dest system 20

Threat Objects

Field Type
commands command

References

Detection Testing

Test Type Status Dataset Source Sourcetype
Validation Passing N/A N/A N/A
Unit Passing Dataset ctb:catalyst:syslog cisco:ios
Integration ✅ Passing Dataset ctb:catalyst:syslog cisco:ios

Replay any dataset to Splunk Enterprise by using our replay.py tool or the UI. Alternatively you can replay a dataset into a Splunk Attack Range


Source: GitHub | Version: 1