Skip to content

Commit f930b52

Browse files
Add New Analytics - February Batch (#3886)
* add percent encoded curl exec * Fix #3916 * Add other calc process names entries * apply formatting * add more color * add cisco sd-wan stuff * update tags * Update cisco_sd_wan___low_frequency_rogue_peer.yml * add ds and maps it --------- Co-authored-by: Bhavin Patel <bhavin.j.patel91@gmail.com>
1 parent 34be5c0 commit f930b52

13 files changed

+490
-34
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
name: Cisco SD-WAN NTCE 1000001
2+
id: 350c4a45-24df-4339-ba57-8b8c09f2865f
3+
version: 1
4+
date: '2026-03-03'
5+
author: Nasreddine Bencherchali, Splunk
6+
description: Data source object for Cisco SD-WAN Notification Event 1000001
7+
source: /var/log/vsyslog
8+
sourcetype: cisco:sdwan:syslog
9+
supported_TA: []
10+
fields:
11+
- _time
12+
- _raw
13+
example_log: 'Feb 20 22:03:33 vSmart-01 VDAEMON_0[2571]: %Viptela-vSmart-VDAEMON_0-5-NTCE-1000001: control-connection-state-change new-state:up peer-type:vmanage peer-system-ip:1.1.1.10 public-ip:192.168.3.20 public-port:12345 domain-id:1 site-id:1005'

detections/endpoint/cisco_nvm___non_network_binary_making_network_connection.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ search: |
1616
`cisco_network_visibility_module_flowdata`
1717
process_name IN (
1818
"notepad.exe", "write.exe", "mspaint.exe", "calc.exe",
19-
"addinutil.exe", "cmstp.exe", "dialer.exe", "eqnedt32.exe", "IMEWDBLD.exe"
19+
"win32calc.exe", "addinutil.exe", "cmstp.exe", "dialer.exe",
20+
"eqnedt32.exe", "IMEWDBLD.exe"
2021
)
2122
NOT dest IN (
2223
"10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10",
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
name: Curl Execution with Percent Encoded URL
2+
id: 9a8d5516-4c5e-11ef-9d42-acde48001122
3+
version: 1
4+
date: '2026-02-02'
5+
author: Nasreddine Bencherchali, Splunk
6+
status: production
7+
type: Anomaly
8+
description: |
9+
The following analytic detects the execution of the curl utility where the command line includes percent-encoded characters and explicit file output options (such as -o or --output).
10+
It leverages process execution telemetry from Endpoint Detection and Response (EDR) data sources to identify curl commands that may be using URL encoding to obfuscate download locations or payload paths.
11+
This behavior is notable because percent-encoded URLs are commonly used by adversaries to evade simple string-based detections, hide malicious infrastructure, or bypass network security controls.
12+
When combined with file download behavior, this activity may indicate malware staging, payload retrieval, or secondary tool deployment.
13+
Analysts should review the decoded URL, destination host, parent process, and downloaded file to determine whether the activity is authorized or malicious.
14+
The analytic calculates the number of percent (%) characters in the curl command line and triggers when a threshold of three or more is met, indicating potential URL encoding.
15+
Adjust the threshold as needed based on your environment and tuning requirements.
16+
data_source:
17+
- CrowdStrike ProcessRollup2
18+
- Sysmon EventID 1
19+
- Sysmon for Linux EventID 1
20+
- Windows Event Log Security 4688
21+
search: |
22+
| tstats `security_content_summariesonly`
23+
count min(_time) as firstTime
24+
max(_time) as lastTime
25+
from datamodel=Endpoint.Processes where
26+
(
27+
Processes.process_name IN ("curl.exe", "curl")
28+
OR
29+
Processes.original_file_name="curl.exe"
30+
)
31+
Processes.process IN (
32+
"* --output *",
33+
"* -o *" /* Covers both options since the search is case insensitive */,
34+
)
35+
Processes.process IN ("*%*")
36+
by Processes.action Processes.dest Processes.original_file_name
37+
Processes.parent_process Processes.parent_process_exec
38+
Processes.parent_process_guid Processes.parent_process_id
39+
Processes.parent_process_name Processes.parent_process_path
40+
Processes.process Processes.process_exec Processes.process_guid
41+
Processes.process_hash Processes.process_id
42+
Processes.process_integrity_level Processes.process_name
43+
Processes.process_path Processes.user
44+
Processes.user_id Processes.vendor_product
45+
46+
| `drop_dm_object_name(Processes)`
47+
48+
```
49+
Count the number of % characters in the process command line.
50+
Change this threshold based on your environment and tuning needs.
51+
```
52+
| eval percent_count = mvcount(split(process, "%")) - 1
53+
| where percent_count >= 3
54+
55+
| `security_content_ctime(firstTime)`
56+
| `security_content_ctime(lastTime)`
57+
| `curl_execution_with_percent_encoded_url_filter`
58+
how_to_implement: |
59+
The detection is based on data that originates from Endpoint Detection
60+
and Response (EDR) agents. These agents are designed to provide security-related
61+
telemetry from the endpoints where the agent is installed. To implement this search,
62+
you must ingest logs that contain the process GUID, process name, and parent process.
63+
Additionally, you must ingest complete command-line executions. These logs must
64+
be processed using the appropriate Splunk Technology Add-ons that are specific to
65+
the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint`
66+
data model. Use the Splunk Common Information Model (CIM) to normalize the field
67+
names and speed up the data modeling process.
68+
known_false_positives: |
69+
No false positives have been identified at this time.
70+
references:
71+
- https://github.com/nasbench/Misc-Research/blob/main/LOLBINs/Curl.md
72+
- https://attack.mitre.org/techniques/T1027/
73+
- https://attack.mitre.org/techniques/T1105/
74+
- https://curl.se/docs/manpage.html
75+
drilldown_searches:
76+
- name: View the detection results for - "$user$" and "$dest$"
77+
search: '%original_detection_search% | search user = "$user$" dest = "$dest$"'
78+
earliest_offset: $info_min_time$
79+
latest_offset: $info_max_time$
80+
- name: View risk events for the last 7 days for - "$user$" and "$dest$"
81+
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user$", "$dest$") starthoursago=168 | stats count min(_time) as firstTime max(_time) as lastTime values(search_name) as "Search Name" values(risk_message) as "Risk Message" values(analyticstories) as "Analytic Stories" values(annotations._all) as "Annotations" values(annotations.mitre_attack.mitre_tactic) as "ATT&CK Tactics" by normalized_risk_object | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`'
82+
earliest_offset: $info_min_time$
83+
latest_offset: $info_max_time$
84+
rba:
85+
message: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ with URL-encoded parameters $process$.
86+
risk_objects:
87+
- field: user
88+
type: user
89+
score: 50
90+
- field: dest
91+
type: system
92+
score: 50
93+
threat_objects:
94+
- field: parent_process_name
95+
type: parent_process_name
96+
- field: process_name
97+
type: process_name
98+
- field: process
99+
type: process
100+
tags:
101+
analytic_story:
102+
- Compromised Windows Host
103+
- Ingress Tool Transfer
104+
- Living Off The Land
105+
asset_type: Endpoint
106+
mitre_attack_id:
107+
- T1027
108+
- T1105
109+
product:
110+
- Splunk Enterprise
111+
- Splunk Enterprise Security
112+
- Splunk Cloud
113+
security_domain: endpoint
114+
tests:
115+
- name: True Positive Test - Sysmon Linux
116+
attack_data:
117+
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1027/url_encoded_curl/linux-sysmon.log
118+
source: Syslog:Linux-Sysmon/Operational
119+
sourcetype: sysmon:linux
120+
- name: True Positive Test - Sysmon Windows
121+
attack_data:
122+
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1027/url_encoded_curl/windows-sysmon.log
123+
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
124+
sourcetype: XmlWinEventLog

detections/endpoint/lolbas_with_network_traffic.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ search: |
7575
"*\\Xwizard.exe"
7676
)
7777
78-
NOT All_Traffic IN (
78+
NOT All_Traffic.dest_ip IN (
7979
"10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10",
8080
"127.0.0.0/8", "169.254.0.0/16", "192.0.0.0/24", "192.0.0.0/29", "192.0.0.8/32",
8181
"192.0.0.9/32", "192.0.0.10/32", "192.0.0.170/32", "192.0.0.171/32", "192.0.2.0/24",

detections/endpoint/windows_dll_side_loading_in_calc.yml

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,37 @@
11
name: Windows DLL Side-Loading In Calc
22
id: af01f6db-26ac-440e-8d89-2793e303f137
3-
version: 9
4-
date: '2026-01-14'
3+
version: 10
4+
date: '2026-02-23'
55
author: Teoderick Contreras, Splunk
66
status: production
77
type: TTP
8-
description: The following analytic detects suspicious DLL modules loaded by calc.exe that are not located in the %systemroot%\system32 or %systemroot%\sysWoW64 directories. This detection leverages Sysmon EventCode 7 to identify DLL side-loading, a technique often used by Qakbot malware to execute malicious DLLs. This activity is significant as it indicates potential malware execution through a trusted process, which can bypass security controls. If confirmed malicious, this could allow attackers to execute arbitrary code, maintain persistence, and escalate privileges within the environment.
8+
description: The following analytic detects the loading of the "WindowsCodecs.dll" by calc.exe from a non-standard location This could be indicative of a potential DLL side-loading technique. This detection leverages Sysmon EventCode 7 to identify the DLL side-loading activity. In previous versions of the "calc.exe" binary, namely on Windows 7, it was vulnerable to DLL side-loading, where an attacker is able to load an arbitrary DLL named "WindowsCodecs.dll". This technique has been observed in Qakbot malware. This activity is significant as it indicates potential malware execution through a trusted process, which can bypass security controls. If confirmed malicious, this could allow attackers to execute arbitrary code, maintain persistence, and escalate privileges within the environment.
99
data_source:
1010
- Sysmon EventID 7
11-
search: '`sysmon` EventCode=7 Image = "*\calc.exe" AND NOT (Image IN ("*:\\windows\\system32\\*", "*:\\windows\\sysWow64\\*")) AND NOT(ImageLoaded IN("*:\\windows\\system32\\*", "*:\\windows\\sysWow64\\*", "*:\\windows\\WinSXS\\*")) | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by Image ImageLoaded dest loaded_file loaded_file_path original_file_name process_exec process_guid process_hash process_id process_name process_path service_dll_signature_exists service_dll_signature_verified signature signature_id user_id vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_dll_side_loading_in_calc_filter`'
11+
search: |
12+
'`sysmon`
13+
EventCode=7
14+
Image="*\\calc.exe"
15+
ImageLoaded="*\\WindowsCodecs.dll"
16+
NOT Image IN ("*:\\Windows\\System32\\*", "*:\\Windows\\SysWOW64\\*")
17+
NOT ImageLoaded IN("*:\\Windows\\System32\\*", "*:\\Windows\\SysWOW64\\*", "*:\\Windows\\WinSXS\\*")
18+
19+
| fillnull
20+
| stats count min(_time) as firstTime max(_time) as lastTime
21+
22+
by Image ImageLoaded dest loaded_file loaded_file_path original_file_name
23+
process_exec process_guid process_hash process_id process_name
24+
process_path service_dll_signature_exists service_dll_signature_verified
25+
signature signature_id user_id vendor_product
26+
27+
| `security_content_ctime(firstTime)`
28+
| `security_content_ctime(lastTime)`
29+
| `windows_dll_side_loading_in_calc_filter`
1230
how_to_implement: To successfully implement this search you need to be ingesting information on processes that include the name of the process responsible for the changes from your endpoints into the `Endpoint` datamodel in the `Processes` and `Filesystem` node. In addition, confirm the latest CIM App 4.20 or higher is installed and the latest TA for the endpoint product.
1331
known_false_positives: No false positives have been identified at this time.
1432
references:
1533
- https://www.bitdefender.com/blog/hotforsecurity/new-qakbot-malware-strain-replaces-windows-calculator-dll-to-infected-pcs/
34+
- https://www.menlosecurity.com/blog/an-anatomy-of-heat-attacks-used-by-qakbot-campaigns
1635
drilldown_searches:
1736
- name: View the detection results for - "$dest$"
1837
search: '%original_detection_search% | search dest = "$dest$"'
@@ -23,7 +42,7 @@ drilldown_searches:
2342
earliest_offset: $info_min_time$
2443
latest_offset: $info_max_time$
2544
rba:
26-
message: a dll modules is loaded by calc.exe in $ImageLoaded$ that are not in common windows OS installation folder on $dest$
45+
message: The [ $image$ ] process loaded the [ $ImageLoaded$ ] DLL from a non-standard location on [ $dest$ ]
2746
risk_objects:
2847
- field: dest
2948
type: system

detections/endpoint/windows_dll_side_loading_process_child_of_calc.yml

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
name: Windows DLL Side-Loading Process Child Of Calc
22
id: 295ca9ed-e97b-4520-90f7-dfb6469902e1
33
version: 10
4-
date: '2026-02-25'
4+
date: '2026-02-23'
55
author: Teoderick Contreras, Splunk
66
status: production
77
type: Anomaly
88
data_source:
99
- Sysmon EventID 1
1010
- Windows Event Log Security 4688
1111
- CrowdStrike ProcessRollup2
12-
description: The following analytic identifies suspicious child processes spawned by calc.exe, indicative of DLL side-loading techniques. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process GUIDs, names, and parent processes. This activity is significant as it is commonly associated with Qakbot malware, which uses calc.exe to load malicious DLLs via regsvr32.exe. If confirmed malicious, this behavior could allow attackers to execute arbitrary code, maintain persistence, and escalate privileges, posing a severe threat to the environment.
13-
search: |-
14-
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
15-
WHERE (
16-
Processes.parent_process_name = "calc.exe"
17-
)
18-
AND Processes.process_name != "win32calc.exe"
19-
BY Processes.action Processes.dest Processes.original_file_name
20-
Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
21-
Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
22-
Processes.process Processes.process_exec Processes.process_guid
23-
Processes.process_hash Processes.process_id Processes.process_integrity_level
24-
Processes.process_name Processes.process_path Processes.user
25-
Processes.user_id Processes.vendor_product
12+
description: The following analytic identifies suspicious child processes spawned by calc.exe, indicative of a potential DLL side-loading technique. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process GUIDs, names, and parent processes. In previous versions of the "calc.exe" binary, namely on Windows 7, it was vulnerable to DLL side-loading, where an attacker is able to load an arbitrary DLL named "WindowsCodecs.dll". This activity was observed in Qakbot malware, back in 2022. If confirmed malicious, this behavior could allow attackers to execute arbitrary code, maintain persistence, and escalate privileges, posing a severe threat to the environment.
13+
search: |
14+
| tstats `security_content_summariesonly`
15+
count min(_time) as firstTime
16+
max(_time) as lastTime
17+
from datamodel=Endpoint.Processes where
18+
Processes.parent_process_name = "calc.exe"
19+
Processes.process_name != "win32calc.exe"
20+
21+
by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
22+
Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
23+
Processes.parent_process_name Processes.parent_process_path Processes.process
24+
Processes.process_exec Processes.process_guid Processes.process_hash
25+
Processes.process_id Processes.process_integrity_level Processes.process_name
26+
Processes.process_path Processes.user Processes.user_id Processes.vendor_product
2627
| `drop_dm_object_name("Processes")`
2728
| `security_content_ctime(firstTime)`
2829
| `security_content_ctime(lastTime)`
@@ -31,6 +32,7 @@ how_to_implement: The detection is based on data that originates from Endpoint D
3132
known_false_positives: No false positives have been identified at this time.
3233
references:
3334
- https://malpedia.caad.fkie.fraunhofer.de/details/win.qakbot
35+
- https://www.menlosecurity.com/blog/an-anatomy-of-heat-attacks-used-by-qakbot-campaigns
3436
drilldown_searches:
3537
- name: View the detection results for - "$dest$"
3638
search: '%original_detection_search% | search dest = "$dest$"'
@@ -41,12 +43,14 @@ drilldown_searches:
4143
earliest_offset: $info_min_time$
4244
latest_offset: $info_max_time$
4345
rba:
44-
message: calc.exe has a child process $process_name$ on $dest$
46+
message: $parent_process_name$ spawned a child process of $process_name$ on $dest$
4547
risk_objects:
4648
- field: dest
4749
type: system
4850
score: 81
49-
threat_objects: []
51+
threat_objects:
52+
- field: process_name
53+
type: process_name
5054
tags:
5155
analytic_story:
5256
- Qakbot

0 commit comments

Comments
 (0)