Detection: Detect Large Outbound ICMP Packets

Description

The following analytic identifies outbound ICMP packets with a size larger than 1,000 bytes. It leverages the Network_Traffic data model to detect unusually large ICMP packets that are not blocked and are destined for external IP addresses. This activity is significant because threat actors often use ICMP for command and control communication, and large ICMP packets can indicate data exfiltration or other malicious activities. If confirmed malicious, this could allow attackers to maintain covert communication channels, exfiltrate sensitive data, or further compromise the network.

 1
 2| tstats `security_content_summariesonly` count earliest(_time) as firstTime
 3  latest(_time) as lastTime values(All_Traffic.action) as action values(All_Traffic.bytes) as bytes from
 4  datamodel=Network_Traffic where All_Traffic.action !=blocked  (All_Traffic.protocol=icmp OR All_Traffic.transport=icmp) All_Traffic.bytes
 5  > 1000 AND NOT All_Traffic.dest_ip IN ("10.0.0.0/8","172.16.0.0/12","192.168.0.0/16") by All_Traffic.src_ip  All_Traffic.dest_ip All_Traffic.protocol
 6
 7| `drop_dm_object_name("All_Traffic")`  
 8| iplocation dest_ip  
 9| `security_content_ctime(firstTime)`  
10| `security_content_ctime(lastTime)` 
11| `detect_large_outbound_icmp_packets_filter`

Data Source

Name Platform Sourcetype Source
Palo Alto Network Traffic Network icon Network 'pan:traffic' 'screenconnect_palo_traffic'

Macros Used

Name Value
security_content_ctime convert timeformat="%Y-%m-%dT%H:%M:%S" ctime($field$)
detect_large_outbound_icmp_packets_filter search *
detect_large_outbound_icmp_packets_filter is an empty macro by default. It allows the user to filter out any results (false positives) without editing the SPL.

Annotations

- MITRE ATT&CK
+ Kill Chain Phases
+ NIST
+ CIS
- Threat Actors
ID Technique Tactic
T1095 Non-Application Layer Protocol Command And Control
KillChainPhase.COMMAND_AND_CONTROL
NistCategory.DE_CM
Cis18Value.CIS_13
APT3
BITTER
BackdoorDiplomacy
Ember Bear
FIN6
HAFNIUM
Metador
PLATINUM
ToddyCat

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 Notable Yes
Rule Title %name%
Rule Description %description%
Notable Event Fields user, dest
Creates Risk Event True
This configuration file applies to all detections of type TTP. These detections will use Risk Based Alerting and generate Notable Events.

Implementation

In order to run this search effectively, we highly recommend that you leverage the Assets and Identity framework. It is important that you have a good understanding of how your network segments are designed and that you are able to distinguish internal from external address space. Add a category named internal to the CIDRs that host the company's assets in the assets_by_cidr.csv lookup file, which is located in $SPLUNK_HOME/etc/apps/SA-IdentityManagement/lookups/. More information on updating this lookup can be found here: https://docs.splunk.com/Documentation/ES/5.0.0/Admin/Addassetandidentitydata. This search also requires you to be ingesting your network traffic and populating the Network_Traffic data model

Known False Positives

ICMP packets are used in a variety of ways to help troubleshoot networking issues and ensure the proper flow of traffic. As such, it is possible that a large ICMP packet could be perfectly legitimate. If large ICMP packets are associated with Command And Control traffic, there will typically be a large number of these packets observed over time. If the search is providing a large number of false positives, you can modify the macro detect_large_outbound_icmp_packets_filter to adjust the byte threshold or add specific IP addresses to an allow list.

Associated Analytic Story

Risk Based Analytics (RBA)

Risk Message Risk Score Impact Confidence
Detect Large Outbound ICMP Packets detected from $src_ip$ to $dest_ip$ 25 50 50
The Risk Score is calculated by the following formula: Risk Score = (Impact * Confidence/100). Initial Confidence and Impact is set by the analytic author.

Detection Testing

Test Type Status Dataset Source Sourcetype
Validation Passing N/A N/A N/A
Unit Passing Dataset pan:traffic pan:traffic
Integration ✅ Passing Dataset pan:traffic pan:traffic

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: 6