diff --git a/.github/workflows/unit-testing.yml b/.github/workflows/unit-testing.yml
index 3071d016f9..659db6358f 100644
--- a/.github/workflows/unit-testing.yml
+++ b/.github/workflows/unit-testing.yml
@@ -45,7 +45,7 @@ jobs:
git fetch origin pull/${{ github.event.pull_request.number }}/head:new_branch_for_testing
#We must specifically get the PR's target branch from security_content, not the one that resides in the fork PR's forked repo
git switch new_branch_for_testing
- contentctl test --disable-tqdm --no-enable-integration-testing --container-settings.num-containers 2 --post-test-behavior never_pause mode:changes --mode.target-branch ${{ github.base_ref }}
+ contentctl test --verbose --disable-tqdm --no-enable-integration-testing --container-settings.num-containers 2 --post-test-behavior never_pause mode:changes --mode.target-branch ${{ github.base_ref }}
echo "contentctl test - COMPLETED"
continue-on-error: true
diff --git a/data_sources/aws_cloudwatchlogs_vpcflow.yml b/data_sources/aws_cloudwatchlogs_vpcflow.yml
index 6393155303..71f4357125 100644
--- a/data_sources/aws_cloudwatchlogs_vpcflow.yml
+++ b/data_sources/aws_cloudwatchlogs_vpcflow.yml
@@ -69,5 +69,14 @@ fields:
- vendor_product
- version
- vpcflow_action
+output_fields:
+- action
+- src
+- src_ip
+- src_port
+- dest
+- dest_ip
+- dest_port
+- transport
example_log: 2 123397614277 eni-0b0f9f261f45e6489 10.0.1.30 10.0.1.1 47254 22 17 2
98 1697608042 1697608070 ACCEPT OK
diff --git a/data_sources/crowdstrike_processrollup2.yml b/data_sources/crowdstrike_processrollup2.yml
index b9b50b6070..ec0cb74813 100644
--- a/data_sources/crowdstrike_processrollup2.yml
+++ b/data_sources/crowdstrike_processrollup2.yml
@@ -99,6 +99,27 @@ fields:
- user
- user_id
- vendor_product
+output_fields:
+ - action
+ - dest
+ - original_file_name
+ - parent_process
+ - parent_process_exec
+ - parent_process_guid
+ - parent_process_id
+ - parent_process_name
+ - parent_process_path
+ - process
+ - process_exec
+ - process_guid
+ - process_hash
+ - process_id
+ - process_integrity_level
+ - process_name
+ - process_path
+ - user
+ - user_id
+ - vendor_product
field_mappings:
- data_model: cim
data_set: Endpoint.Processes
diff --git a/data_sources/okta.yml b/data_sources/okta.yml
index 3d83e462b9..64071d80af 100644
--- a/data_sources/okta.yml
+++ b/data_sources/okta.yml
@@ -17,3 +17,7 @@ supported_TA:
- name: Splunk Add-on for Okta Identity Cloud
url: https://splunkbase.splunk.com/app/6553
version: 3.0.0
+output_fields:
+- dest
+- src
+- user
\ No newline at end of file
diff --git a/data_sources/palo_alto_network_threat.yml b/data_sources/palo_alto_network_threat.yml
index be5d270e69..a486085366 100644
--- a/data_sources/palo_alto_network_threat.yml
+++ b/data_sources/palo_alto_network_threat.yml
@@ -27,6 +27,13 @@ field_mappings:
url: Web.url
url_length: Web.url_length
src: Web.src
+output_fields:
+- http_user_agent
+- http_method
+- url
+- url_length
+- src
+- dest
fields:
- _time
- date_hour
diff --git a/data_sources/palo_alto_network_traffic.yml b/data_sources/palo_alto_network_traffic.yml
index 7477b93f66..a2f3147ddc 100644
--- a/data_sources/palo_alto_network_traffic.yml
+++ b/data_sources/palo_alto_network_traffic.yml
@@ -36,6 +36,24 @@ fields:
- splunk_server
- timeendpos
- timestartpos
+output_fields:
+- action
+- app
+- bytes
+- bytes_in
+- bytes_out
+- dest
+- dest_ip
+- dest_port
+- dvc
+- protocol
+- protocol_version
+- src
+- src_ip
+- src_port
+- transport
+- user
+- vendor_product
field_mappings:
- data_model: cim
data_set: All_Traffic
diff --git a/data_sources/powershell_script_block_logging_4104.yml b/data_sources/powershell_script_block_logging_4104.yml
index a92378edf7..7ffb17d150 100644
--- a/data_sources/powershell_script_block_logging_4104.yml
+++ b/data_sources/powershell_script_block_logging_4104.yml
@@ -73,6 +73,19 @@ fields:
- timestartpos
- user_id
- vendor_product
+output_fields:
+- dest
+- signature
+- signature_id
+- user_id
+- vendor_product
+- Guid
+- Opcode
+- Name
+- Path
+- ProcessID
+- ScriptBlockId
+- ScriptBlockText
field_mappings:
- data_model: cim
data_set: Endpoint.Processes
diff --git a/data_sources/sysmon_eventid_1.yml b/data_sources/sysmon_eventid_1.yml
index 82abab53f8..a2c51e613c 100644
--- a/data_sources/sysmon_eventid_1.yml
+++ b/data_sources/sysmon_eventid_1.yml
@@ -117,6 +117,27 @@ fields:
- user
- user_id
- vendor_product
+output_fields:
+ - action
+ - dest
+ - original_file_name
+ - parent_process
+ - parent_process_exec
+ - parent_process_guid
+ - parent_process_id
+ - parent_process_name
+ - parent_process_path
+ - process
+ - process_exec
+ - process_guid
+ - process_hash
+ - process_id
+ - process_integrity_level
+ - process_name
+ - process_path
+ - user
+ - user_id
+ - vendor_product
field_mappings:
- data_model: cim
data_set: Endpoint.Processes
diff --git a/data_sources/sysmon_eventid_10.yml b/data_sources/sysmon_eventid_10.yml
index 8afd1accf9..9a2c613618 100644
--- a/data_sources/sysmon_eventid_10.yml
+++ b/data_sources/sysmon_eventid_10.yml
@@ -98,6 +98,19 @@ fields:
- timestartpos
- user_id
- vendor_product
+output_fields:
+- dest
+- user_id
+- parent_process_name
+- parent_process_guid
+- process_name
+- process_guid
+- process_id
+- signature
+- SourceImage
+- TargetImage
+- GrantedAccess
+- CallTrace
example_log: 10341000x800000000000000015062441215241500x800000000000000066786017141700x800000000000000016216818141800x800000000000000016217320342000x8000000000000000624921342100x800000000000000015164422542200x800000000000000011389223542300x8000000000000000281771354300x8000000000000000156837534500x800000000000000039965644600x800000000000000015708989734700x800000000000000045273824800x8000000000000000362233924900x8000000000000000190607228202000x80000000000000300004000x8000000000000011000410300x402000000000000014087411020410400x402000000000000018261664624201254400x80200000000000003718864625001254400x80100000000000003673484627001255400x80200000000000001862604648001254400x80200000000000003365674662001408000x8010000000000000216231982764663101280000x8020000000000000105258694672001254800x80200000000000001489464703001331700x80200000000000003287614719001356800x80200000000000003535974724001382400x80200000000000002767794725001382400x80200000000000002787714726001382400x80200000000000002792834727001382600x8020000000000000183204880Securityar-win-dc.attackrange.localESX AdminsATTACKRANGEATTACKRANGE\ESX AdminsATTACKRANGE\AdministratoradministratorATTACKRANGE0xe32f0-ESX Admins-
diff --git a/data_sources/windows_event_log_security_4728.yml b/data_sources/windows_event_log_security_4728.yml
index 7880ef1041..90c926d7f1 100644
--- a/data_sources/windows_event_log_security_4728.yml
+++ b/data_sources/windows_event_log_security_4728.yml
@@ -13,4 +13,6 @@ supported_TA:
version: 9.0.1
fields:
- _time
+output_fields:
+- dest
example_log: |-
diff --git a/data_sources/windows_event_log_security_4730.yml b/data_sources/windows_event_log_security_4730.yml
index fb8dfacd98..3d715dab64 100644
--- a/data_sources/windows_event_log_security_4730.yml
+++ b/data_sources/windows_event_log_security_4730.yml
@@ -99,5 +99,7 @@ fields:
- _sourcetype
- _subsecond
- _time
+output_fields:
+- dest
example_log: |-
4730001382600x8020000000000000183203591Securityar-win-dc.attackrange.localESX AdminsATTACKRANGES-1-5-21-560616516-1175754387-3922768235-4211ATTACKRANGE\AdministratoradministratorATTACKRANGE0xe32f0-
diff --git a/data_sources/windows_event_log_security_4731.yml b/data_sources/windows_event_log_security_4731.yml
index 0ebe013f2e..c6f5846d89 100644
--- a/data_sources/windows_event_log_security_4731.yml
+++ b/data_sources/windows_event_log_security_4731.yml
@@ -13,4 +13,6 @@ supported_TA:
version: 9.0.1
fields:
- _time
+output_fields:
+- dest
example_log: |-
diff --git a/data_sources/windows_event_log_security_4732.yml b/data_sources/windows_event_log_security_4732.yml
index 5f312c3965..a3a8b497ff 100644
--- a/data_sources/windows_event_log_security_4732.yml
+++ b/data_sources/windows_event_log_security_4732.yml
@@ -99,4 +99,6 @@ fields:
- vendor
- vendor_privilege
- vendor_product
+output_fields:
+- dest
example_log: 10/09/2020 10:41:26 AM
diff --git a/data_sources/windows_event_log_security_4737.yml b/data_sources/windows_event_log_security_4737.yml
index da1cf8e687..e89bf32f84 100644
--- a/data_sources/windows_event_log_security_4737.yml
+++ b/data_sources/windows_event_log_security_4737.yml
@@ -99,6 +99,8 @@ fields:
- _sourcetype
- _subsecond
- _time
+output_fields:
+- dest
example_log: |-
4737001382600x8020000000000000183186860Securityar-win-dc.attackrange.localESX AdminsATTACKRANGES-1-5-21-560616516-1175754387-3922768235-4211ATTACKRANGE\AdministratoradministratorATTACKRANGE0xe32f0---
diff --git a/data_sources/windows_event_log_security_4738.yml b/data_sources/windows_event_log_security_4738.yml
index b42d8f7fa2..161b28d7b9 100644
--- a/data_sources/windows_event_log_security_4738.yml
+++ b/data_sources/windows_event_log_security_4738.yml
@@ -120,6 +120,8 @@ fields:
- user_name
- vendor
- vendor_product
+output_fields:
+- dest
example_log: 4738001382400x802000000000000063897134739001356900x80200000000000003941764741001382500x80200000000000001434754742001382500x80200000000000009018604768001433900x80100000000000003915624769001433700x80200000000000001485214771001433900x80100000000000003915114776001433600x80100000000000003916154781001382400x80200000000000001487634794001382400x80200000000000008210774798001382400x80200000000000003868604876001280500x8020000000000000153799614886001280500x8020000000000000153799254887001280500x802000000000000018309746095136001408100x802000000000000019973655137001408100x80200000000000001701405141001408100x8020000000000000670908703604000x8080000000000000704004000x8080000000000000704504000x80800000000000002001420010x80000000000000004323-
- | tstats `security_content_summariesonly` values(Authentication.user) AS unique_user_names
- dc(Authentication.user) AS unique_accounts values(Authentication.app) as app count(Authentication.user)
- as total_failures from datamodel=Authentication.Authentication where Authentication.action="failure"
- NOT Authentication.src IN ("-","unknown") by Authentication.src, Authentication.action,
- Authentication.signature_id, sourcetype, _time span=5m | `drop_dm_object_name("Authentication")`
- ```fill out time buckets for 0-count events during entire search length```
- | appendpipe [| timechart limit=0 span=5m count | table _time]
- | fillnull value=0 unique_accounts
- ``` Create aggregation field & apply to all null events```
- | eval counter=src+"__"+sourcetype+"__"+signature_id | eventstats values(counter)
- as fnscounter | eval counter=coalesce(counter,fnscounter)
- ``` stats version of mvexpand ```
- | stats values(app) as app values(unique_user_names) as unique_user_names values(total_failures)
- as total_failures values(src) as src values(signature_id) as signature_id values(sourcetype)
- as sourcetype count by counter unique_accounts _time
- ``` remove duplicate time buckets for each unique source```
- | sort - _time unique_accounts
- | dedup _time counter
- ```Find the outliers```
- | eventstats avg(unique_accounts) as comp_avg , stdev(unique_accounts) as comp_std
- by counter
- | eval upperBound=(comp_avg+comp_std*3)
- | eval isOutlier=if(unique_accounts > 30 and unique_accounts >= upperBound, 1, 0)
- | replace "::ffff:*" with * in src | where isOutlier=1 | foreach *
- [ eval <> = if(<>="null",null(),<>)]
- | table _time, src, action, app, unique_accounts, unique_user_names, total_failures,
- sourcetype, signature_id, counter
- | `detect_password_spray_attempts_filter`
-how_to_implement: >-
- Ensure in-scope authentication data is CIM mapped and the src field is populated
- with the source device. Also ensure fill_nullvalue is set within the macro security_content_summariesonly.
- This search opporates best on a 5 minute schedule, looking back over the past 70
- minutes. Configure 70 minute throttling on the two fields _time and counter.
+search: "| tstats `security_content_summariesonly` values(Authentication.user) AS\
+ \ unique_user_names dc(Authentication.user) AS unique_accounts values(Authentication.app)\
+ \ as app count(Authentication.user) as total_failures from datamodel=Authentication.Authentication\
+ \ where Authentication.action=\"failure\" NOT Authentication.src IN (\"-\",\"unknown\"\
+ ) by Authentication.action Authentication.app Authentication.authentication_method\
+ \ Authentication.dest \n Authentication.signature Authentication.signature_id Authentication.src\
+ \ sourcetype _time span=5m \n| `drop_dm_object_name(\"Authentication\")`\n ```fill\
+ \ out time buckets for 0-count events during entire search length```\n| appendpipe\
+ \ [| timechart limit=0 span=5m count | table _time] | fillnull value=0 unique_accounts\n\
+ \ ``` Create aggregation field & apply to all null events```\n| eval counter=src+\"\
+ __\"+sourcetype+\"__\"+signature_id | eventstats values(counter) as fnscounter\
+ \ | eval counter=coalesce(counter,fnscounter) \n ``` stats version of mvexpand\
+ \ ```\n| stats values(app) as app values(unique_user_names) as unique_user_names\
+ \ values(total_failures) as total_failures values(src) as src values(signature_id)\
+ \ as signature_id values(sourcetype) as sourcetype count by counter unique_accounts\
+ \ _time\n ``` remove duplicate time buckets for each unique source```\n| sort\
+ \ - _time unique_accounts | dedup _time counter\n ```Find the outliers```\n|\
+ \ eventstats avg(unique_accounts) as comp_avg , stdev(unique_accounts) as comp_std\
+ \ by counter | eval upperBound=(comp_avg+comp_std*3) | eval isOutlier=if(unique_accounts\
+ \ > 30 and unique_accounts >= upperBound, 1, 0) | replace \"::ffff:*\" with * in\
+ \ src | where isOutlier=1 | foreach * \n [ eval <> = if(<>=\"\
+ null\",null(),<>)] \n| table _time, src, action, app, unique_accounts, unique_user_names,\
+ \ total_failures, sourcetype, signature_id, counter | `detect_password_spray_attempts_filter`"
+how_to_implement: 'Ensure in-scope authentication data is CIM mapped and the src field
+ is populated with the source device. Also ensure fill_nullvalue is set within the
+ macro security_content_summariesonly. This search opporates best on a 5 minute schedule,
+ looking back over the past 70 minutes. Configure 70 minute throttling on the two
+ fields _time and counter. '
known_false_positives: Unknown
references:
- https://attack.mitre.org/techniques/T1110/003/
@@ -91,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/purplesharp_invalid_users_kerberos_xml/windows-security.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/purplesharp_invalid_users_kerberos_xml/windows-security.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/application/email_files_written_outside_of_the_outlook_directory.yml b/detections/application/email_files_written_outside_of_the_outlook_directory.yml
index 0530cd1aa9..e3a6e01a10 100644
--- a/detections/application/email_files_written_outside_of_the_outlook_directory.yml
+++ b/detections/application/email_files_written_outside_of_the_outlook_directory.yml
@@ -1,6 +1,6 @@
name: Email files written outside of the Outlook directory
id: 8d52cf03-ba25-4101-aa78-07994aed4f74
-version: 7
+version: 8
date: '2025-02-10'
author: Bhavin Patel, Splunk
status: experimental
@@ -19,9 +19,11 @@ search: '| tstats `security_content_summariesonly` count values(Filesystem.file_
as file_path min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Filesystem
where (Filesystem.file_name=*.pst OR Filesystem.file_name=*.ost) Filesystem.file_path
!= "C:\\Users\\*\\My Documents\\Outlook Files\\*" Filesystem.file_path!="C:\\Users\\*\\AppData\\Local\\Microsoft\\Outlook*"
- by Filesystem.action Filesystem.process_id Filesystem.file_name Filesystem.dest
- | `drop_dm_object_name("Filesystem")` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
- `email_files_written_outside_of_the_outlook_directory_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name("Filesystem")`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `email_files_written_outside_of_the_outlook_directory_filter`'
how_to_implement: To successfully implement this search, you must be ingesting data
that records the file-system activity from your hosts to populate the Endpoint.Filesystem
data model node. This is typically populated via endpoint detection-and-response
diff --git a/detections/application/okta_multi_factor_authentication_disabled.yml b/detections/application/okta_multi_factor_authentication_disabled.yml
index 96cda4186d..1f00b30af6 100644
--- a/detections/application/okta_multi_factor_authentication_disabled.yml
+++ b/detections/application/okta_multi_factor_authentication_disabled.yml
@@ -1,6 +1,6 @@
name: Okta Multi-Factor Authentication Disabled
id: 7c0348ce-bdf9-45f6-8a57-c18b5976f00a
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
data_source:
@@ -19,8 +19,8 @@ search: '| tstats `security_content_summariesonly` count max(_time) as lastTime,
as firstTime from datamodel=Change where sourcetype="OktaIM2:log" All_Changes.object_category=User
AND All_Changes.action=modified All_Changes.command=user.mfa.factor.deactivate by
All_Changes.user All_Changes.result All_Changes.command sourcetype All_Changes.src
- | `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `okta_multi_factor_authentication_disabled_filter`'
+ All_Changes.dest | `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `okta_multi_factor_authentication_disabled_filter`'
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
known_false_positives: Legitimate use case may require for users to disable MFA. Filter
@@ -66,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1556.006/okta_mfa_method_disabled/okta_mfa_method_disabled.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1556.006/okta_mfa_method_disabled/okta_mfa_method_disabled.log
source: Okta
sourcetype: OktaIM2:log
diff --git a/detections/application/okta_multiple_accounts_locked_out.yml b/detections/application/okta_multiple_accounts_locked_out.yml
index 4a83589bca..75c71fe9a2 100644
--- a/detections/application/okta_multiple_accounts_locked_out.yml
+++ b/detections/application/okta_multiple_accounts_locked_out.yml
@@ -1,6 +1,6 @@
name: Okta Multiple Accounts Locked Out
id: a511426e-184f-4de6-8711-cfd2af29d1e1
-version: 4
+version: 5
date: '2025-01-21'
author: Michael Haag, Mauricio Velazco, Splunk
data_source:
@@ -18,7 +18,7 @@ search: '| tstats `security_content_summariesonly` count max(_time) as lastTime,
as firstTime values(All_Changes.user) as user from datamodel=Change where All_Changes.change_type=AAA
All_Changes.object_category=User AND All_Changes.action=lockout AND All_Changes.command=user.account.lock
by _time span=5m All_Changes.result All_Changes.command sourcetype All_Changes.src
- | where count > 5 | `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)`
+ All_Changes.dest | where count > 5 | `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `okta_multiple_accounts_locked_out_filter`'
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
@@ -65,7 +65,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110/okta_multiple_accounts_lockout/okta_multiple_accounts_lockout.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110/okta_multiple_accounts_lockout/okta_multiple_accounts_lockout.log
source: Okta
sourcetype: OktaIM2:log
diff --git a/detections/application/okta_multiple_failed_mfa_requests_for_user.yml b/detections/application/okta_multiple_failed_mfa_requests_for_user.yml
index c5659a666c..480bfba483 100644
--- a/detections/application/okta_multiple_failed_mfa_requests_for_user.yml
+++ b/detections/application/okta_multiple_failed_mfa_requests_for_user.yml
@@ -1,6 +1,6 @@
name: Okta Multiple Failed MFA Requests For User
id: 826dbaae-a1e6-4c8c-b384-d16898956e73
-version: 5
+version: 6
date: '2025-01-21'
author: Mauricio Velazco, Splunk
data_source:
@@ -17,8 +17,8 @@ description: The following analytic identifies multiple failed multi-factor auth
search: '`okta` eventType=user.authentication.auth_via_mfa outcome.result=FAILURE
debugContext.debugData.factor!=PASSWORD_AS_FACTOR | bucket _time span=5m | stats
count min(_time) as firstTime max(_time) as lastTime values(displayMessage) values(src_ip)
- as src_ip values(debugContext.debugData.factor) by _time src_user | where count
- >= 10 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ as src_ip values(debugContext.debugData.factor) values(dest) as dest by _time src_user
+ | where count >= 10 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `okta_multiple_failed_mfa_requests_for_user_filter`'
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
@@ -63,7 +63,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1621/okta_multiple_failed_mfa_requests/okta_multiple_failed_mfa_requests.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1621/okta_multiple_failed_mfa_requests/okta_multiple_failed_mfa_requests.log
source: Okta
sourcetype: OktaIM2:log
diff --git a/detections/application/okta_multiple_users_failing_to_authenticate_from_ip.yml b/detections/application/okta_multiple_users_failing_to_authenticate_from_ip.yml
index ba4d1413d8..7a9dd565c7 100644
--- a/detections/application/okta_multiple_users_failing_to_authenticate_from_ip.yml
+++ b/detections/application/okta_multiple_users_failing_to_authenticate_from_ip.yml
@@ -1,6 +1,6 @@
name: Okta Multiple Users Failing To Authenticate From Ip
id: de365ffa-42f5-46b5-b43f-fa72290b8218
-version: 5
+version: 6
date: '2025-01-21'
author: Michael Haag, Mauricio Velazco, Splunk
data_source:
@@ -18,9 +18,10 @@ description: The following analytic identifies instances where more than 10 uniq
search: '| tstats `security_content_summariesonly` count max(_time) as lastTime, min(_time)
as firstTime dc(Authentication.user) as unique_accounts values(Authentication.signature)
as signature values(Authentication.user) as user values(Authentication.app) as app
- values(Authentication.authentication_method) as authentication_method from datamodel=Authentication
- where Authentication.action="failure" AND Authentication.signature=user.session.start
- by _time span=5m Authentication.src sourcetype | where unique_accounts > 9 | `drop_dm_object_name("Authentication")`
+ values(Authentication.authentication_method) as authentication_method values(Authentication.dest)
+ as dest from datamodel=Authentication where Authentication.action="failure" AND
+ Authentication.signature=user.session.start by _time span=5m Authentication.src
+ sourcetype | where unique_accounts > 9 | `drop_dm_object_name("Authentication")`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `okta_multiple_users_failing_to_authenticate_from_ip_filter`'
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
@@ -67,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/okta_multiple_users_from_ip/okta_multiple_users_from_ip.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/okta_multiple_users_from_ip/okta_multiple_users_from_ip.log
source: Okta
sourcetype: OktaIM2:log
diff --git a/detections/application/okta_new_api_token_created.yml b/detections/application/okta_new_api_token_created.yml
index 27e4bf7c50..a99f98dad1 100644
--- a/detections/application/okta_new_api_token_created.yml
+++ b/detections/application/okta_new_api_token_created.yml
@@ -1,6 +1,6 @@
name: Okta New API Token Created
id: c3d22720-35d3-4da4-bd0a-740d37192bd4
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Mauricio Velazco, Splunk
status: production
@@ -18,8 +18,9 @@ data_source:
search: '| tstats `security_content_summariesonly` count max(_time) as lastTime, min(_time)
as firstTime from datamodel=Change where All_Changes.action=created AND All_Changes.command=system.api_token.create
by _time span=5m All_Changes.user All_Changes.result All_Changes.command sourcetype
- All_Changes.src All_Changes.action All_Changes.object_category | `drop_dm_object_name("All_Changes")`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `okta_new_api_token_created_filter`'
+ All_Changes.src All_Changes.action All_Changes.object_category All_Changes.dest
+ | `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `okta_new_api_token_created_filter`'
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
known_false_positives: False positives may be present. Tune Okta and tune the analytic
@@ -63,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.001/okta_new_api_token_created/okta_new_api_token_created.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.001/okta_new_api_token_created/okta_new_api_token_created.log
source: Okta
sourcetype: OktaIM2:log
diff --git a/detections/application/okta_new_device_enrolled_on_account.yml b/detections/application/okta_new_device_enrolled_on_account.yml
index 0b28586594..6522437728 100644
--- a/detections/application/okta_new_device_enrolled_on_account.yml
+++ b/detections/application/okta_new_device_enrolled_on_account.yml
@@ -1,6 +1,6 @@
name: Okta New Device Enrolled on Account
id: bb27cbce-d4de-432c-932f-2e206e9130fb
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Mauricio Velazco, Splunk
status: production
@@ -18,8 +18,9 @@ data_source:
search: '| tstats `security_content_summariesonly` count max(_time) as lastTime, min(_time)
as firstTime from datamodel=Change where All_Changes.action=created All_Changes.command=device.enrollment.create
by _time span=5m All_Changes.user All_Changes.result All_Changes.command sourcetype
- All_Changes.src All_Changes.action All_Changes.object_category | `drop_dm_object_name("All_Changes")`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `okta_new_device_enrolled_on_account_filter`'
+ All_Changes.src All_Changes.action All_Changes.object_category All_Changes.dest
+ | `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `okta_new_device_enrolled_on_account_filter`'
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
known_false_positives: It is possible that the user has legitimately added a new device
@@ -63,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.005/okta_new_device_enrolled/okta_new_device_enrolled.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.005/okta_new_device_enrolled/okta_new_device_enrolled.log
source: Okta
sourcetype: OktaIM2:log
diff --git a/detections/application/okta_successful_single_factor_authentication.yml b/detections/application/okta_successful_single_factor_authentication.yml
index a5a4a3bf14..b3e64eb591 100644
--- a/detections/application/okta_successful_single_factor_authentication.yml
+++ b/detections/application/okta_successful_single_factor_authentication.yml
@@ -1,6 +1,6 @@
name: Okta Successful Single Factor Authentication
id: 98f6ad4f-4325-4096-9d69-45dc8e638e82
-version: 5
+version: 6
date: '2025-02-10'
author: Bhavin Patel, Splunk
data_source:
@@ -18,7 +18,7 @@ search: '`okta` action=success src_user_type = User eventType = user.authentica
OR eventType = user.authentication.auth_via_mfa| stats dc(eventType) values(eventType)
as eventType values(target{}.displayName) as targets values(debugContext.debugData.url)
min(_time) as firstTime max(_time) as lastTime values(authentication_method) by
- src_ip user action | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ src_ip user action dest | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| search targets !="Okta Verify" | `okta_successful_single_factor_authentication_filter`'
how_to_implement: This detection utilizes logs from Okta environments and requires
the ingestion of OktaIm2 logs through the Splunk Add-on for Okta Identity Cloud
@@ -66,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1078.004/okta_single_factor_auth/okta_single_factor_auth.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1078.004/okta_single_factor_auth/okta_single_factor_auth.log
source: okta_log
sourcetype: OktaIM2:log
diff --git a/detections/application/okta_suspicious_activity_reported.yml b/detections/application/okta_suspicious_activity_reported.yml
index 1f2662268e..ebd37b322f 100644
--- a/detections/application/okta_suspicious_activity_reported.yml
+++ b/detections/application/okta_suspicious_activity_reported.yml
@@ -1,6 +1,6 @@
name: Okta Suspicious Activity Reported
id: bfc840f5-c9c6-454c-aa13-b46fd0bf1e79
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -17,7 +17,7 @@ data_source:
- Okta
search: '`okta` eventType=user.account.report_suspicious_activity_by_enduser | stats
count min(_time) as firstTime max(_time) as lastTime values(displayMessage) by user
- eventType client.userAgent.rawUserAgent client.userAgent.browser client.geographicalContext.city client.geographicalContext.country
+ dest src eventType client.userAgent.rawUserAgent client.userAgent.browser client.geographicalContext.city client.geographicalContext.country
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `okta_suspicious_activity_reported_filter`'
how_to_implement: This detection utilizes logs from Okta Identity Management (IM)
environments. It requires the ingestion of OktaIm2 logs through the Splunk Add-on
@@ -64,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1078/okta_suspicious_activity_reported_by_user/okta_suspicious_activity_reported_by_user.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1078/okta_suspicious_activity_reported_by_user/okta_suspicious_activity_reported_by_user.log
source: Okta
sourcetype: OktaIM2:log
diff --git a/detections/application/okta_suspicious_use_of_a_session_cookie.yml b/detections/application/okta_suspicious_use_of_a_session_cookie.yml
index cc38b599fc..1eaa45a784 100644
--- a/detections/application/okta_suspicious_use_of_a_session_cookie.yml
+++ b/detections/application/okta_suspicious_use_of_a_session_cookie.yml
@@ -1,6 +1,6 @@
name: Okta Suspicious Use of a Session Cookie
id: 71ad47d1-d6bd-4e0a-b35c-020ad9a6959e
-version: 5
+version: 6
date: '2025-01-21'
author: Scott Dermott, Felicity Robson, Okta, Michael Haag, Bhavin Patel, Splunk
type: Anomaly
@@ -21,8 +21,8 @@ search: '`okta` eventType IN (policy.evaluate_sign_on) outcome.result IN (ALLOW,
as city, values(client.userAgent.browser) as userAgentBrowser_list, values(device.os_platform)
as okta_device_os, dc(client.userAgent.browser) as dc_userAgentBrowser, dc(client.userAgent.os)
as dc_userAgentOS, dc(client.ipAddress) as dc_src_ip, values(outcome.reason) as
- reason by debugContext.debugData.dtHash, user | where dc_src_ip>1 AND (dc_userAgentOS>1
- OR dc_userAgentBrowser>1) | `okta_suspicious_use_of_a_session_cookie_filter`'
+ reason values(dest) as dest by debugContext.debugData.dtHash, user | where dc_src_ip>1
+ AND (dc_userAgentOS>1 OR dc_userAgentBrowser>1) | `okta_suspicious_use_of_a_session_cookie_filter`'
how_to_implement: This detection utilizes logs from Okta Identity Management (IM)
environments. It requires the ingestion of OktaIm2 logs through the Splunk Add-on
for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
@@ -67,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1539/okta_web_session_multiple_ip/okta_web_session_multiple_ip.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1539/okta_web_session_multiple_ip/okta_web_session_multiple_ip.log
source: Okta
sourcetype: OktaIM2:log
diff --git a/detections/application/okta_threatinsight_threat_detected.yml b/detections/application/okta_threatinsight_threat_detected.yml
index 264bf76c91..5b74baf959 100644
--- a/detections/application/okta_threatinsight_threat_detected.yml
+++ b/detections/application/okta_threatinsight_threat_detected.yml
@@ -1,6 +1,6 @@
name: Okta ThreatInsight Threat Detected
id: 140504ae-5fe2-4d65-b2bc-a211813fbca6
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Mauricio Velazco, Splunk
status: production
@@ -17,8 +17,8 @@ data_source:
search: '`okta` eventType = security.threat.detected | rename client.geographicalContext.country
as country, client.geographicalContext.state as state, client.geographicalContext.city
as city | stats count min(_time) as firstTime max(_time) as lastTime by app src_ip
- signature eventType displayMessage client.device city state country user_agent outcome.reason
- outcome.result severity | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ dest signature eventType displayMessage client.device city state country user_agent
+ outcome.reason outcome.result severity | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `okta_threatinsight_threat_detected_filter`'
how_to_implement: This detection utilizes logs from Okta Identity Management (IM)
environments. It requires the ingestion of OktaIm2 logs through the Splunk Add-on
@@ -65,7 +65,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1078.004/okta_threatinsight_threat_detected/okta_threatinsight_threat_detected.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1078.004/okta_threatinsight_threat_detected/okta_threatinsight_threat_detected.log
source: Okta
sourcetype: OktaIM2:log
diff --git a/detections/application/okta_unauthorized_access_to_application.yml b/detections/application/okta_unauthorized_access_to_application.yml
index eb6bafb02b..256136edbc 100644
--- a/detections/application/okta_unauthorized_access_to_application.yml
+++ b/detections/application/okta_unauthorized_access_to_application.yml
@@ -1,6 +1,6 @@
name: Okta Unauthorized Access to Application
id: 5f661629-9750-4cb9-897c-1f05d6db8727
-version: 4
+version: 5
date: '2025-01-21'
author: Bhavin Patel, Splunk
data_source:
@@ -18,7 +18,7 @@ search: '| tstats values(Authentication.app) as app values(Authentication.action
as action values(Authentication.user) as user values(Authentication.reason) as reason
from datamodel=Authentication where Authentication.signature=app.generic.unauth_app_access_attempt
Authentication.action="failure" by _time Authentication.src Authentication.user
- | `drop_dm_object_name("Authentication")` | `security_content_ctime(firstTime)`
+ Authentication.dest | `drop_dm_object_name("Authentication")` | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | iplocation src | `okta_unauthorized_access_to_application_filter`'
how_to_implement: This detection utilizes logs from Okta Identity Management (IM)
environments and requires the ingestion of OktaIm2 logs through the Splunk Add-on
@@ -66,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.004/okta_unauth_access/okta_unauth_access.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.004/okta_unauth_access/okta_unauth_access.log
source: Okta
sourcetype: OktaIM2:log
diff --git a/detections/application/windows_ad_self_dacl_assignment.yml b/detections/application/windows_ad_self_dacl_assignment.yml
deleted file mode 100644
index 33608327e8..0000000000
--- a/detections/application/windows_ad_self_dacl_assignment.yml
+++ /dev/null
@@ -1,87 +0,0 @@
-name: Windows AD Self DACL Assignment
-id: 16132445-da9f-4d03-ad44-56d717dcd67d
-version: 4
-date: '2025-02-17'
-author: Dean Luxton
-status: production
-type: TTP
-data_source:
-- Windows Event Log Security 5136
-description: Detect when a user creates a new DACL in AD for their own AD object.
-search: "`wineventlog_security` EventCode=5136 | stats min(_time) as _time values(eval(if(OperationType==\"\
- %%14675\",AttributeValue,null))) as old_value values(eval(if(OperationType==\"%%14674\"\
- ,AttributeValue,null))) as new_value values(OperationType) as OperationType by ObjectClass
- ObjectDN OpCorrelationID src_user SubjectLogonId | rex field=old_value max_match=10000
- \"\\((?P.*?)\\)\" | rex field=new_value max_match=10000 \"\\((?P.*?)\\\
- )\" | mvexpand new_ace | where NOT new_ace IN (old_values) | rex field=new_ace
- \"(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$\"\
- \ | rex max_match=100 field=aceAccessRights \"(?P[A-Z]{2})\" | rex
- max_match=100 field=aceFlags \"(?P[A-Z]{2})\" | lookup ace_type_lookup
- ace_type_string as aceType OUTPUT ace_type_value as aceType | lookup ace_flag_lookup
- flag_string as aceFlags OUTPUT flag_value as ace_flag_value | lookup ace_access_rights_lookup
- access_rights_string as AccessRights OUTPUT access_rights_value | lookup msad_guid_lookup
- guid as aceObjectGuid OUTPUT displayName as ControlAccessRights ``` Optional SID
- resolution lookups | lookup identity_lookup_expanded objectSid as aceSid OUTPUT
- downLevelDomainName as user | lookup admon_groups_def objectSid as aceSid OUTPUT
- cn as group ``` | lookup builtin_groups_lookup builtin_group_string as aceSid OUTPUT
- builtin_group_name as builtin_group | eval aceType=coalesce(ace_type_value,aceType),
- aceInheritance=coalesce(ace_flag_value,\"This object only\"), aceAccessRights=if(aceAccessRights=\"\
- CCDCLCSWRPWPDTLOCRSDRCWDWO\",\"Full control\",coalesce(access_rights_value,AccessRights)),
- aceControlAccessRights=if((ControlAccessRights=\"Write member\" OR aceObjectGuid=\"\
- bf9679c0-0de6-11d0-a285-00aa003049e2\") AND (aceAccessRights=\"All validated writes\"\
- \ OR AccessRights=\"SW\"),\"Add/remove self as member\",coalesce(ControlAccessRights,aceObjectGuid)),
- user=coalesce(user, group, builtin_group, aceSid) | stats values(aceType) as aceType
- values(aceInheritance) as aceInheritance values(aceControlAccessRights) as aceControlAccessRights
- values(aceAccessRights) as aceAccessRights values(new_ace) as new_ace values(aceInheritedTypeGuid)
- as aceInheritedTypeGuid by _time ObjectClass ObjectDN src_user SubjectLogonId user
- OpCorrelationID | eval aceControlAccessRights=if(mvcount(aceControlAccessRights)=1
- AND aceControlAccessRights=\"\",\"All rights\",'aceControlAccessRights') | rex field=user
- \"\\\\\\(?P.*?)$\" | where lower(src_user)=lower(nt_user) | `windows_ad_self_dacl_assignment_filter`"
-how_to_implement: Ensure you are ingesting Active Directory audit logs - specifically
- event 5136. See lantern article in references for further on how to onboard AD audit
- data. Ensure the wineventlog_security macro is configured with the correct indexes
- and include lookups for SID resolution if evt_resolve_ad_obj is set to 0.
-known_false_positives: Unknown
-references:
-- https://lantern.splunk.com/Security/Product_Tips/Enterprise_Security/Enabling_an_audit_trail_from_Active_Directory
-drilldown_searches:
-- name: View the detection results for - "$src_user$"
- search: '%original_detection_search% | search src_user = "$src_user$"'
- earliest_offset: $info_min_time$
- latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$src_user$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$src_user$")
- 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)`'
- earliest_offset: $info_min_time$
- latest_offset: $info_max_time$
-rba:
- message: $src_user$ has created a DACL on $ObjectDN$ to grant themselves $aceControlAccessRights$
- across $aceAccessRights$
- risk_objects:
- - field: src_user
- type: user
- score: 80
- threat_objects: []
-tags:
- analytic_story:
- - Sneaky Active Directory Persistence Tricks
- asset_type: Endpoint
- mitre_attack_id:
- - T1484
- - T1098
- product:
- - Splunk Enterprise
- - Splunk Enterprise Security
- - Splunk Cloud
- security_domain: endpoint
-tests:
-- name: True Positive Test
- attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484/aclmodification/windows-security-xml.log
- source: XmlWinEventLog:Security
- sourcetype: XmlWinEventLog
diff --git a/detections/cloud/aws_unusual_number_of_failed_authentications_from_ip.yml b/detections/cloud/aws_unusual_number_of_failed_authentications_from_ip.yml
index 4c59fbe732..03a31cc626 100644
--- a/detections/cloud/aws_unusual_number_of_failed_authentications_from_ip.yml
+++ b/detections/cloud/aws_unusual_number_of_failed_authentications_from_ip.yml
@@ -1,7 +1,7 @@
name: AWS Unusual Number of Failed Authentications From Ip
id: 0b5c9c2b-e2cb-4831-b4f1-af125ceb1386
-version: 7
-date: '2025-02-10'
+version: 10
+date: '2025-03-27'
author: Bhavin Patel, Splunk
status: production
type: Anomaly
@@ -14,15 +14,17 @@ description: The following analytic identifies a single source IP failing to aut
unauthorized access, data breaches, or further exploitation within the AWS environment.
data_source:
- AWS CloudTrail ConsoleLogin
-search: '`cloudtrail` eventName=ConsoleLogin action=failure
- | bucket span=10m _time
- | stats dc(_raw) AS distinct_attempts values(user_name) as tried_accounts values(action) as action values(dest) as dest
- values(vendor_account) as vendor_account values(vendor_region) as vendor_region values(vendor_product) as vendor_product values(user_agent) as user_agent by _time, src
- | eventstats avg(distinct_attempts) as avg_attempts , stdev(distinct_attempts) as ip_std by _time
- | eval upperBound=(avg_attempts+ip_std*3)
- | eval isOutlier=if(distinct_attempts > 10 and distinct_attempts >= upperBound, 1, 0)
- | where isOutlier = 1
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `aws_unusual_number_of_failed_authentications_from_ip_filter`'
+search: '`cloudtrail` eventName=ConsoleLogin action=failure | rename eventName as
+ action, eventSource as dest, userName as user, userAgent as user_agent, sourceIPAddress
+ as src, userIdentity.accountId as vendor_account, awsRegion as vendor_region | bucket
+ span=10m _time | stats dc(_raw) AS distinct_attempts values(user_name) as tried_accounts
+ values(action) as action values(dest) as dest values(vendor_account) as vendor_account
+ values(vendor_region) as vendor_region values(vendor_product) as vendor_product
+ values(user_agent) as user_agent by _time, src | eventstats avg(distinct_attempts)
+ as avg_attempts , stdev(distinct_attempts) as ip_std by _time | eval upperBound=(avg_attempts+ip_std*3)
+ | eval isOutlier=if(distinct_attempts > 10 and distinct_attempts >= upperBound,
+ 1, 0) | where isOutlier = 1 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `aws_unusual_number_of_failed_authentications_from_ip_filter`'
how_to_implement: You must install Splunk Add-on for AWS in order to ingest Cloudtrail.
We recommend the users to try different combinations of the bucket span time and
the calculation of the upperBound field to tune this search according to their environment
@@ -72,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/aws_mulitple_failed_console_login/aws_cloudtrail.json
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/aws_mulitple_failed_console_login/aws_cloudtrail.json
source: aws_cloudtrail
sourcetype: aws:cloudtrail
diff --git a/detections/deprecated/detect_large_outbound_icmp_packets.yml b/detections/deprecated/detect_large_outbound_icmp_packets.yml
index f8bac938a3..0e81ba771f 100644
--- a/detections/deprecated/detect_large_outbound_icmp_packets.yml
+++ b/detections/deprecated/detect_large_outbound_icmp_packets.yml
@@ -15,14 +15,16 @@ description: This analytic has been deprecated in favour of a better named detec
the network.
data_source:
- Palo Alto Network Traffic
-search: "| tstats `security_content_summariesonly` count earliest(_time) as firstTime\n\
- \ latest(_time) as lastTime values(All_Traffic.action) as action values(All_Traffic.bytes)\n\
- as bytes from\n datamodel=Network_Traffic where All_Traffic.action !=blocked (All_Traffic.protocol=icmp\n\
- OR All_Traffic.transport=icmp) All_Traffic.bytes\n > 1000 AND NOT All_Traffic.dest_ip\
- \ IN (\"10.0.0.0/8\",\"172.16.0.0/12\",\"192.168.0.0/16\")\nby All_Traffic.src_ip\
- \ All_Traffic.dest_ip All_Traffic.protocol | `drop_dm_object_name(\"All_Traffic\"\
- )` | iplocation dest_ip | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`\
- \ | `detect_large_outbound_icmp_packets_filter`"
+search: '| tstats `security_content_summariesonly` count earliest(_time) as firstTime
+ latest(_time) as lastTime values(All_Traffic.action) as action values(All_Traffic.bytes)
+ as bytes from datamodel=Network_Traffic where All_Traffic.action !=blocked (All_Traffic.protocol=icmp
+ OR All_Traffic.transport=icmp) All_Traffic.bytes > 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.action All_Traffic.app
+ All_Traffic.bytes All_Traffic.bytes_in All_Traffic.bytes_out All_Traffic.dest All_Traffic.dest_ip
+ All_Traffic.dest_port All_Traffic.dvc All_Traffic.protocol All_Traffic.protocol_version
+ All_Traffic.src All_Traffic.src_ip All_Traffic.src_port All_Traffic.transport All_Traffic.user
+ All_Traffic.vendor_product | `drop_dm_object_name("All_Traffic")` | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | iplocation dest_ip | `detect_large_outbound_icmp_packets_filter`'
how_to_implement: '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
diff --git a/detections/endpoint/7zip_commandline_to_smb_share_path.yml b/detections/endpoint/7zip_commandline_to_smb_share_path.yml
index 052abeb87b..5eb1686278 100644
--- a/detections/endpoint/7zip_commandline_to_smb_share_path.yml
+++ b/detections/endpoint/7zip_commandline_to_smb_share_path.yml
@@ -1,6 +1,6 @@
name: 7zip CommandLine To SMB Share Path
id: 01d29b48-ff6f-11eb-b81e-acde48001123
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -21,9 +21,12 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
OR Processes.process_name = "7za.exe" OR Processes.process_name = "7zr.exe" OR Processes.original_file_name
= "7z.exe" OR Processes.original_file_name = "7za.exe" OR Processes.original_file_name
= "7zr.exe") AND (Processes.process="*\\C$\\*" OR Processes.process="*\\Admin$\\*"
- OR Processes.process="*\\IPC$\\*") by Processes.original_file_name Processes.parent_process_name
- Processes.parent_process Processes.process_name Processes.process Processes.parent_process_id
- Processes.process_id Processes.dest Processes.user | `drop_dm_object_name(Processes)`
+ OR Processes.process="*\\IPC$\\*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `7zip_commandline_to_smb_share_path_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -51,7 +54,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/conti/conti_leak/windows-sysmon_7z.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/conti/conti_leak/windows-sysmon_7z.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/access_lsass_memory_for_dump_creation.yml b/detections/endpoint/access_lsass_memory_for_dump_creation.yml
index 0f261b491b..1b938ec591 100644
--- a/detections/endpoint/access_lsass_memory_for_dump_creation.yml
+++ b/detections/endpoint/access_lsass_memory_for_dump_creation.yml
@@ -1,6 +1,6 @@
name: Access LSASS Memory for Dump Creation
id: fb4c31b0-13e8-4155-8aa5-24de4b8d6717
-version: 7
+version: 8
date: '2025-02-10'
author: Patrick Bareiss, Splunk
status: production
@@ -15,9 +15,13 @@ description: The following analytic detects attempts to dump the LSASS process m
data_source:
- Sysmon EventID 10
search: '`sysmon` EventCode=10 TargetImage=*lsass.exe CallTrace=*dbgcore.dll* OR CallTrace=*dbghelp.dll*
- | stats count min(_time) as firstTime max(_time) as lastTime by dest, TargetImage,
- TargetProcessId, SourceImage, SourceProcessId | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | `access_lsass_memory_for_dump_creation_filter`'
+ | stats count min(_time) as firstTime max(_time) as lastTime by CallTrace EventID
+ GrantedAccess Guid Opcode ProcessID SecurityID SourceImage SourceProcessGUID SourceProcessId
+ TargetImage TargetProcessGUID TargetProcessId UserID dest granted_access parent_process_exec
+ parent_process_guid parent_process_id parent_process_name parent_process_path process_exec
+ process_guid process_id process_name process_path signature signature_id user_id
+ vendor_product | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)`
+ | `access_lsass_memory_for_dump_creation_filter`'
how_to_implement: This search requires Sysmon Logs and a Sysmon configuration, which
includes EventCode 10 for lsass.exe. This search uses an input macro named `sysmon`.
We strongly recommend that you specify your environment-specific configurations
@@ -69,7 +73,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/active_setup_registry_autostart.yml b/detections/endpoint/active_setup_registry_autostart.yml
index 08adcce445..113983dcc4 100644
--- a/detections/endpoint/active_setup_registry_autostart.yml
+++ b/detections/endpoint/active_setup_registry_autostart.yml
@@ -1,6 +1,6 @@
name: Active Setup Registry Autostart
id: f64579c0-203f-11ec-abcc-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Steven Dick, Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_value_name=
"StubPath" Registry.registry_path = "*\\SOFTWARE\\Microsoft\\Active Setup\\Installed
- Components*") BY Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid Registry.dest Registry.user |
- `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
- `active_setup_registry_autostart_filter`'
+ Components*") by Registry.action Registry.dest Registry.process_guid Registry.process_id
+ Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data
+ Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user
+ Registry.vendor_product | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)`| `active_setup_registry_autostart_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -71,7 +72,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/t1547.014/active_setup_stubpath/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/t1547.014/active_setup_stubpath/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/add_defaultuser_and_password_in_registry.yml b/detections/endpoint/add_defaultuser_and_password_in_registry.yml
index 968de4b132..10c68a4f28 100644
--- a/detections/endpoint/add_defaultuser_and_password_in_registry.yml
+++ b/detections/endpoint/add_defaultuser_and_password_in_registry.yml
@@ -1,6 +1,6 @@
name: Add DefaultUser And Password In Registry
id: d4a3eb62-0f1e-11ec-a971-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -15,13 +15,15 @@ description: The following analytic detects suspicious registry modifications th
to maintain persistence and further encrypt the network, leading to significant
data loss and operational disruption.
data_source:
+- Sysmon EventID 12
- Sysmon EventID 13
-- Sysmon EventID 14
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*SOFTWARE\\Microsoft\\Windows
NT\\CurrentVersion\\Winlogon*" AND Registry.registry_value_name= DefaultPassword
- OR Registry.registry_value_name= DefaultUserName) BY Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.dest Registry.registry_value_data Registry.process_guid
+ OR Registry.registry_value_name= DefaultUserName) by Registry.action Registry.dest
+ Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
| `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `add_defaultuser_and_password_in_registry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
@@ -67,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1552.002/autoadminlogon/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1552.002/autoadminlogon/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/add_or_set_windows_defender_exclusion.yml b/detections/endpoint/add_or_set_windows_defender_exclusion.yml
index ca4975ede6..a3d83c5802 100644
--- a/detections/endpoint/add_or_set_windows_defender_exclusion.yml
+++ b/detections/endpoint/add_or_set_windows_defender_exclusion.yml
@@ -1,6 +1,6 @@
name: Add or Set Windows Defender Exclusion
id: 773b66fe-4dd9-11ec-8289-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -20,10 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process = "*Add-MpPreference
*" OR Processes.process = "*Set-MpPreference *") AND Processes.process="*-exclusion*"
- by Processes.dest Processes.user Processes.parent_process Processes.parent_process_name
- Processes.process_name Processes.original_file_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `add_or_set_windows_defender_exclusion_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `add_or_set_windows_defender_exclusion_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -85,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/defender_exclusion_sysmon/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/defender_exclusion_sysmon/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/adsisearcher_account_discovery.yml b/detections/endpoint/adsisearcher_account_discovery.yml
index 67241b0279..41f5c440cd 100644
--- a/detections/endpoint/adsisearcher_account_discovery.yml
+++ b/detections/endpoint/adsisearcher_account_discovery.yml
@@ -1,6 +1,6 @@
name: AdsiSearcher Account Discovery
id: de7fcadc-04f3-11ec-a241-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects the use of the `[Adsisearcher]` type
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*[adsisearcher]*" ScriptBlockText
- = "*objectcategory=user*" ScriptBlockText = "*.findAll()*" | stats count min(_time)
- as firstTime max(_time) as lastTime by EventCode Computer ScriptBlockText UserID
- | rename Computer as dest, UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `adsisearcher_account_discovery_filter`'
+ = "*objectcategory=user*" ScriptBlockText = "*.findAll()*" | fillnull | stats count
+ min(_time) as firstTime max(_time) as lastTime by dest signature signature_id user_id
+ vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `adsisearcher_account_discovery_filter`'
how_to_implement: The following Hunting analytic requires PowerShell operational logs
to be imported. Modify the powershell macro as needed to match the sourcetype or
add index. This analytic is specific to 4104, or PowerShell Script Block Logging.
@@ -29,13 +29,13 @@ references:
- https://www.blackhillsinfosec.com/red-blue-purple/
- https://devblogs.microsoft.com/scripting/use-the-powershell-adsisearcher-type-accelerator-to-search-active-directory/
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -43,13 +43,12 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Powershell process having commandline "AdsiSearcher" used for user enumeration
- on $dest$
+ message: Powershell process have been used for user enumeration on $dest$
risk_objects:
- field: dest
type: system
score: 25
- - field: user
+ - field: user_id
type: user
score: 25
threat_objects: []
@@ -70,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/adsisearcher_powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/adsisearcher_powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/allow_file_and_printing_sharing_in_firewall.yml b/detections/endpoint/allow_file_and_printing_sharing_in_firewall.yml
index 2e11a3aa86..6ac732cc41 100644
--- a/detections/endpoint/allow_file_and_printing_sharing_in_firewall.yml
+++ b/detections/endpoint/allow_file_and_printing_sharing_in_firewall.yml
@@ -1,6 +1,6 @@
name: Allow File And Printing Sharing In Firewall
id: ce27646e-d411-11eb-8a00-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -20,10 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_netsh` Processes.process=
"*firewall*" Processes.process= "*group=\"File and Printer Sharing\"*" Processes.process="*enable=Yes*"
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.parent_process_name
- Processes.original_file_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `allow_file_and_printing_sharing_in_firewall_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `allow_file_and_printing_sharing_in_firewall_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -78,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/allow_inbound_traffic_by_firewall_rule_registry.yml b/detections/endpoint/allow_inbound_traffic_by_firewall_rule_registry.yml
index cf409551e6..797b4f6683 100644
--- a/detections/endpoint/allow_inbound_traffic_by_firewall_rule_registry.yml
+++ b/detections/endpoint/allow_inbound_traffic_by_firewall_rule_registry.yml
@@ -1,6 +1,6 @@
name: Allow Inbound Traffic By Firewall Rule Registry
id: 0a46537c-be02-11eb-92ca-acde48001122
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,10 +18,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\System\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\FirewallRules\\*"
Registry.registry_value_data = "*|Action=Allow|*" Registry.registry_value_data =
- "*|Dir=In|*" Registry.registry_value_data = "*|LPort=*") BY Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid Registry.dest Registry.user | `drop_dm_object_name(Registry)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `allow_inbound_traffic_by_firewall_rule_registry_filter`'
+ "*|Dir=In|*" Registry.registry_value_data = "*|LPort=*") by Registry.action Registry.dest
+ Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `allow_inbound_traffic_by_firewall_rule_registry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -73,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/honeypots/casper/datasets1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/honeypots/casper/datasets1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/allow_inbound_traffic_in_firewall_rule.yml b/detections/endpoint/allow_inbound_traffic_in_firewall_rule.yml
index bf2fda0d4b..4af28169e5 100644
--- a/detections/endpoint/allow_inbound_traffic_in_firewall_rule.yml
+++ b/detections/endpoint/allow_inbound_traffic_in_firewall_rule.yml
@@ -1,6 +1,6 @@
name: Allow Inbound Traffic In Firewall Rule
id: a5d85486-b89c-11eb-8267-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects a suspicious PowerShell command that
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*firewall*" ScriptBlockText
- = "*Inbound*" ScriptBlockText = "*Allow*" ScriptBlockText = "*-LocalPort*" | stats
- count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest | rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `allow_inbound_traffic_in_firewall_rule_filter`'
+ = "*Inbound*" ScriptBlockText = "*Allow*" ScriptBlockText = "*-LocalPort*" | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `allow_inbound_traffic_in_firewall_rule_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the powershell logs from your endpoints. make sure you enable needed
registry to monitor this event.
@@ -27,12 +27,12 @@ known_false_positives: administrator may allow inbound traffic in certain networ
references:
- https://docs.microsoft.com/en-us/powershell/module/netsecurity/new-netfirewallrule?view=windowsserver2019-ps
drilldown_searches:
-- name: View the detection results for - "$user$" and "$dest$"
- search: '%original_detection_search% | search user = "$user$" dest = "$dest$"'
+- name: View the detection results for - "$user_id$" and "$dest$"
+ search: '%original_detection_search% | search user_id = "$user_id$" dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$user$" and "$dest$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user$",
+- name: View risk events for the last 7 days for - "$user_id$" and "$dest$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user_id$",
"$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)
@@ -41,9 +41,9 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Suspicious firewall modification detected on endpoint $dest$ by user $user$.
+ message: Suspicious firewall modification detected on endpoint $dest$ by user $user_id$.
risk_objects:
- - field: user
+ - field: user_id
type: user
score: 3
- field: dest
@@ -64,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021/allow_inbound_traffic_in_firewall_rule/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021/allow_inbound_traffic_in_firewall_rule/windows-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/allow_network_discovery_in_firewall.yml b/detections/endpoint/allow_network_discovery_in_firewall.yml
index 1163a4d168..8e31c586cf 100644
--- a/detections/endpoint/allow_network_discovery_in_firewall.yml
+++ b/detections/endpoint/allow_network_discovery_in_firewall.yml
@@ -1,6 +1,6 @@
name: Allow Network Discovery In Firewall
id: ccd6a38c-d40b-11eb-85a5-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -20,9 +20,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_netsh` Processes.process=
"*firewall*" Processes.process= "*group=\"Network Discovery\"*" Processes.process="*enable*"
- Processes.process="*Yes*" by Processes.dest Processes.user Processes.parent_process
- Processes.original_file_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.parent_process_name | `drop_dm_object_name(Processes)`
+ Processes.process="*Yes*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `allow_network_discovery_in_firewall_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -77,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/allow_operation_with_consent_admin.yml b/detections/endpoint/allow_operation_with_consent_admin.yml
index 626b794c8b..aaa4de15a7 100644
--- a/detections/endpoint/allow_operation_with_consent_admin.yml
+++ b/detections/endpoint/allow_operation_with_consent_admin.yml
@@ -1,6 +1,6 @@
name: Allow Operation with Consent Admin
id: 7de17d7a-c9d8-11eb-a812-acde48001122
-version: 9
+version: 10
date: '2024-12-08'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -19,10 +19,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\Microsoft\\Windows\\CurrentVersion\\Policies\\System*"
Registry.registry_value_name = ConsentPromptBehaviorAdmin Registry.registry_value_data
- = "0x00000000") BY Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid Registry.dest Registry.user |
- `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `allow_operation_with_consent_admin_filter`'
+ = "0x00000000") by Registry.action Registry.dest Registry.process_guid Registry.process_id
+ Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data
+ Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user
+ Registry.vendor_product | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `allow_operation_with_consent_admin_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -73,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/anomalous_usage_of_7zip.yml b/detections/endpoint/anomalous_usage_of_7zip.yml
index 32a9f2d25c..49c4dd5633 100644
--- a/detections/endpoint/anomalous_usage_of_7zip.yml
+++ b/detections/endpoint/anomalous_usage_of_7zip.yml
@@ -1,6 +1,6 @@
name: Anomalous usage of 7zip
id: 9364ee8e-a39a-11eb-8f1d-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name
- IN ("rundll32.exe", "dllhost.exe") Processes.process_name=*7z* by Processes.dest
- Processes.user Processes.parent_process Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `anomalous_usage_of_7zip_filter`'
+ IN ("rundll32.exe", "dllhost.exe") Processes.process_name=*7z* by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
+ `anomalous_usage_of_7zip_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -85,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1560.001/archive_utility/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1560.001/archive_utility/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/any_powershell_downloadfile.yml b/detections/endpoint/any_powershell_downloadfile.yml
index 0cee497f25..b17b566403 100644
--- a/detections/endpoint/any_powershell_downloadfile.yml
+++ b/detections/endpoint/any_powershell_downloadfile.yml
@@ -1,7 +1,7 @@
name: Any Powershell DownloadFile
id: 1a93b7ea-7af7-11eb-adb5-acde48001122
-version: '12'
-date: '2025-02-24'
+version: 13
+date: '2025-03-27'
author: Michael Haag, Splunk
status: production
type: TTP
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_powershell` Processes.process=*DownloadFile*
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.parent_process_name Processes.original_file_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)`| `any_powershell_downloadfile_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`|
+ `any_powershell_downloadfile_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -83,6 +86,7 @@ tags:
- PXA Stealer
- Data Destruction
- Log4Shell CVE-2021-44228
+ - PHP-CGI RCE Attack on Japanese Organizations
asset_type: Endpoint
cve:
- CVE-2021-44228
diff --git a/detections/endpoint/any_powershell_downloadstring.yml b/detections/endpoint/any_powershell_downloadstring.yml
index 7f516361ff..0d81340cfa 100644
--- a/detections/endpoint/any_powershell_downloadstring.yml
+++ b/detections/endpoint/any_powershell_downloadstring.yml
@@ -1,6 +1,6 @@
name: Any Powershell DownloadString
id: 4d015ef2-7adf-11eb-95da-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,11 +18,14 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes where `process_powershell` Processes.process=*.DownloadString* by
- Processes.dest Processes.user Processes.parent_process Processes.parent_process_name
- Processes.process_name Processes.original_file_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)`| `any_powershell_downloadstring_filter`'
+ as lastTime from datamodel=Endpoint.Processes where `process_powershell` Processes.process=*.DownloadString*
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`|
+ `any_powershell_downloadstring_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -81,6 +84,7 @@ tags:
- IcedID
- SysAid On-Prem Software CVE-2023-47246 Vulnerability
- Phemedrone Stealer
+ - PHP-CGI RCE Attack on Japanese Organizations
asset_type: Endpoint
mitre_attack_id:
- T1059.001
@@ -93,7 +97,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/attacker_tools_on_endpoint.yml b/detections/endpoint/attacker_tools_on_endpoint.yml
index b4a9c676c9..5cd7bd05a6 100644
--- a/detections/endpoint/attacker_tools_on_endpoint.yml
+++ b/detections/endpoint/attacker_tools_on_endpoint.yml
@@ -1,7 +1,7 @@
name: Attacker Tools On Endpoint
id: a51bfe1a-94f0-48cc-b4e4-16a110145893
-version: 9
-date: '2025-02-27'
+version: 10
+date: '2025-03-27'
author: Bhavin Patel, Splunk
status: production
type: TTP
@@ -20,10 +20,15 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime values(Processes.process) as process values(Processes.parent_process)
as parent_process from datamodel=Endpoint.Processes where Processes.dest!=unknown
- Processes.user!=unknown by Processes.dest Processes.user Processes.process_name
- Processes.process | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `drop_dm_object_name(Processes)` | lookup attacker_tools attacker_tool_names AS
- process_name OUTPUT description | search description !=false| `attacker_tools_on_endpoint_filter`'
+ Processes.user!=unknown by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `drop_dm_object_name(Processes)` | lookup
+ attacker_tools attacker_tool_names AS process_name OUTPUT description | search description
+ !=false| `attacker_tools_on_endpoint_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -70,6 +75,7 @@ tags:
- SamSam Ransomware
- CISA AA22-264A
- Compromised Windows Host
+ - PHP-CGI RCE Attack on Japanese Organizations
asset_type: Endpoint
mitre_attack_id:
- T1003
@@ -83,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1595/attacker_scan_tools/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1595/attacker_scan_tools/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/attempt_to_add_certificate_to_untrusted_store.yml b/detections/endpoint/attempt_to_add_certificate_to_untrusted_store.yml
index 360d6c472d..0cc6ac4dfa 100644
--- a/detections/endpoint/attempt_to_add_certificate_to_untrusted_store.yml
+++ b/detections/endpoint/attempt_to_add_certificate_to_untrusted_store.yml
@@ -1,6 +1,6 @@
name: Attempt To Add Certificate To Untrusted Store
id: 6bc5243e-ef36-45dc-9b12-f4a6be131159
-version: 13
+version: 14
date: '2025-02-10'
author: Patrick Bareiss, Rico Valdez, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime values(Processes.process)
as process max(_time) as lastTime from datamodel=Endpoint.Processes where `process_certutil`
- (Processes.process=*-addstore*) by Processes.dest Processes.user Processes.parent_process
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)`
- |`security_content_ctime(lastTime)` | `attempt_to_add_certificate_to_untrusted_store_filter`'
+ (Processes.process=*-addstore*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name("Processes")`
+ | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)` | `attempt_to_add_certificate_to_untrusted_store_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -79,7 +82,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1553.004/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1553.004/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/auto_admin_logon_registry_entry.yml b/detections/endpoint/auto_admin_logon_registry_entry.yml
index 193fe03dd9..473a043c49 100644
--- a/detections/endpoint/auto_admin_logon_registry_entry.yml
+++ b/detections/endpoint/auto_admin_logon_registry_entry.yml
@@ -1,6 +1,6 @@
name: Auto Admin Logon Registry Entry
id: 1379d2b8-0f18-11ec-8ca3-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -19,10 +19,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*SOFTWARE\\Microsoft\\Windows
NT\\CurrentVersion\\Winlogon*" AND Registry.registry_value_name=AutoAdminLogon AND
- Registry.registry_value_data=1) BY Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
- Registry.dest | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `auto_admin_logon_registry_entry_filter`'
+ Registry.registry_value_data=1) by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
+ | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `auto_admin_logon_registry_entry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -67,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1552.002/autoadminlogon/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1552.002/autoadminlogon/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/batch_file_write_to_system32.yml b/detections/endpoint/batch_file_write_to_system32.yml
index 0d3a9702cd..bfbb21c1f7 100644
--- a/detections/endpoint/batch_file_write_to_system32.yml
+++ b/detections/endpoint/batch_file_write_to_system32.yml
@@ -1,6 +1,6 @@
name: Batch File Write to System32
id: 503d17cb-9eab-4cf8-a20e-01d5c6987ae3
-version: 9
+version: 10
date: '2025-02-10'
author: Steven Dick, Michael Haag, Rico Valdez, Splunk
status: production
@@ -14,17 +14,16 @@ description: The following analytic detects the creation of a batch file (.bat)
to execute arbitrary commands with elevated privileges, potentially compromising
the entire system.
data_source:
-- Sysmon EventID 1 AND Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name=* by _time span=1h Processes.process_guid Processes.process_name
- Processes.dest Processes.user | `drop_dm_object_name(Processes)` | join process_guid
- [| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*\\system32\\*",
- "*\\syswow64\\*") Filesystem.file_name="*.bat" by _time span=1h Filesystem.dest
- Filesystem.file_create_time Filesystem.file_name Filesystem.file_path Filesystem.process_guid
- | `drop_dm_object_name(Filesystem)`] | table dest user file_create_time, file_name,
- file_path, process_name, firstTime, lastTime | dedup file_create_time | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `batch_file_write_to_system32_filter`'
+- Sysmon EventID 11
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
+ where Filesystem.file_path IN ("*\\system32\\*","*\\syswow64\\*") Filesystem.file_name="*.bat"
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
+ Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product
+ | `drop_dm_object_name(Filesystem)`
+ | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)`
+ | `batch_file_write_to_system32_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node. In addition,
diff --git a/detections/endpoint/bcdedit_command_back_to_normal_mode_boot.yml b/detections/endpoint/bcdedit_command_back_to_normal_mode_boot.yml
index d8c602f6b4..282a6e53ac 100644
--- a/detections/endpoint/bcdedit_command_back_to_normal_mode_boot.yml
+++ b/detections/endpoint/bcdedit_command_back_to_normal_mode_boot.yml
@@ -1,7 +1,7 @@
name: Bcdedit Command Back To Normal Mode Boot
id: dc7a8004-0f18-11ec-8c54-acde48001122
-version: '5'
-date: '2025-03-03'
+version: 6
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: TTP
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = bcdedit.exe
Processes.process="*/deletevalue*" Processes.process="*{current}*" Processes.process="*safeboot*"
- by Processes.process_name Processes.process Processes.parent_process_name Processes.dest
- Processes.user |`drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `bcdedit_command_back_to_normal_mode_boot_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ |`drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `bcdedit_command_back_to_normal_mode_boot_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/bcdedit_failure_recovery_modification.yml b/detections/endpoint/bcdedit_failure_recovery_modification.yml
index 1425eee424..bb8b6ece86 100644
--- a/detections/endpoint/bcdedit_failure_recovery_modification.yml
+++ b/detections/endpoint/bcdedit_failure_recovery_modification.yml
@@ -1,6 +1,6 @@
name: BCDEdit Failure Recovery Modification
id: 809b31d2-5462-11eb-ae93-0242ac130002
-version: 7
+version: 8
date: '2024-12-10'
author: Michael Haag, Splunk
status: production
@@ -19,9 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = bcdedit.exe
- Processes.process="*recoveryenabled*" (Processes.process="* no*") by Processes.process_name
- Processes.process Processes.parent_process_name Processes.dest Processes.user |
- `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ Processes.process="*recoveryenabled*" (Processes.process="* no*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `bcdedit_failure_recovery_modification_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -81,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1490/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1490/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/bits_job_persistence.yml b/detections/endpoint/bits_job_persistence.yml
index eee12eeb44..a223637f63 100644
--- a/detections/endpoint/bits_job_persistence.yml
+++ b/detections/endpoint/bits_job_persistence.yml
@@ -1,6 +1,6 @@
name: BITS Job Persistence
id: e97a5ffe-90bf-11eb-928a-acde48001122
-version: 7
+version: 8
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -20,9 +20,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_bitsadmin` Processes.process
IN (*create*, *addfile*, *setnotifyflags*, *setnotifycmdline*, *setminretrydelay*,
- *setcustomheaders*, *resume* ) by Processes.dest Processes.user Processes.original_file_name
- Processes.parent_process Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
+ *setcustomheaders*, *resume* ) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `bits_job_persistence_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -85,13 +88,11 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/crowdstrike_falcon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/crowdstrike_falcon.log
source: crowdstrike
sourcetype: crowdstrike:events:sensor
diff --git a/detections/endpoint/bitsadmin_download_file.yml b/detections/endpoint/bitsadmin_download_file.yml
index bdab9e207a..20d4f3027f 100644
--- a/detections/endpoint/bitsadmin_download_file.yml
+++ b/detections/endpoint/bitsadmin_download_file.yml
@@ -1,6 +1,6 @@
name: BITSAdmin Download File
id: 80630ff4-8e4c-11eb-aab5-acde48001122
-version: 8
+version: 9
date: '2024-11-13'
author: Michael Haag, Sittikorn S
status: production
@@ -20,9 +20,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_bitsadmin` Processes.process
- IN ("*transfer*", "*addfile*") by Processes.dest Processes.user Processes.parent_process
- Processes.parent_process_name Processes.original_file_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
+ IN ("*transfer*", "*addfile*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `bitsadmin_download_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -89,13 +92,11 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/crowdstrike_falcon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/crowdstrike_falcon.log
source: crowdstrike
sourcetype: crowdstrike:events:sensor
diff --git a/detections/endpoint/certutil_download_with_urlcache_and_split_arguments.yml b/detections/endpoint/certutil_download_with_urlcache_and_split_arguments.yml
index b6d19b0b39..e1fb2a7acf 100644
--- a/detections/endpoint/certutil_download_with_urlcache_and_split_arguments.yml
+++ b/detections/endpoint/certutil_download_with_urlcache_and_split_arguments.yml
@@ -1,6 +1,6 @@
name: CertUtil Download With URLCache and Split Arguments
id: 415b4306-8bfb-11eb-85c4-acde48001122
-version: 10
+version: 11
date: '2024-12-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_certutil` Processes.process="*urlcache*"
- (Processes.process="*/f *" OR Processes.process="*-f *") by Processes.dest Processes.user
- Processes.parent_process Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.original_file_name Processes.parent_process_id |
- `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ (Processes.process="*/f *" OR Processes.process="*-f *") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `certutil_download_with_urlcache_and_split_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -90,7 +93,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/certutil_download_with_verifyctl_and_split_arguments.yml b/detections/endpoint/certutil_download_with_verifyctl_and_split_arguments.yml
index 97a0c24ba9..c2fb4097f7 100644
--- a/detections/endpoint/certutil_download_with_verifyctl_and_split_arguments.yml
+++ b/detections/endpoint/certutil_download_with_verifyctl_and_split_arguments.yml
@@ -1,6 +1,6 @@
name: CertUtil Download With VerifyCtl and Split Arguments
id: 801ad9e4-8bfb-11eb-8b31-acde48001122
-version: 10
+version: 11
date: '2024-12-10'
author: Michael Haag, Splunk
status: production
@@ -19,9 +19,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_certutil` Processes.process="*verifyctl*"
- (Processes.process="*/f *" OR Processes.process="*-f *") by Processes.dest Processes.user
- Processes.original_file_name Processes.parent_process Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ (Processes.process="*/f *" OR Processes.process="*-f *") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `certutil_download_with_verifyctl_and_split_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -87,7 +90,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/certutil_exe_certificate_extraction.yml b/detections/endpoint/certutil_exe_certificate_extraction.yml
index 6dafec9ff9..0c8b7efd41 100644
--- a/detections/endpoint/certutil_exe_certificate_extraction.yml
+++ b/detections/endpoint/certutil_exe_certificate_extraction.yml
@@ -1,6 +1,6 @@
name: Certutil exe certificate extraction
id: 337a46be-600f-11eb-ae93-0242ac130002
-version: 8
+version: 9
date: '2024-12-10'
author: Rod Soto, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=certutil.exe
- Processes.process = "*-exportPFX*" by Processes.dest Processes.user Processes.parent_process
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `certutil_exe_certificate_extraction_filter`'
+ Processes.process = "*-exportPFX*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `certutil_exe_certificate_extraction_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -83,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/suspicious_behaviour/certutil_exe_certificate_extraction/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/suspicious_behaviour/certutil_exe_certificate_extraction/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/certutil_with_decode_argument.yml b/detections/endpoint/certutil_with_decode_argument.yml
index f00b0f4387..d787db6738 100644
--- a/detections/endpoint/certutil_with_decode_argument.yml
+++ b/detections/endpoint/certutil_with_decode_argument.yml
@@ -1,6 +1,6 @@
name: CertUtil With Decode Argument
id: bfe94226-8c10-11eb-a4b3-acde48001122
-version: 7
+version: 8
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_certutil` Processes.process=*decode*
- by Processes.dest Processes.user Processes.parent_process Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `certutil_with_decode_argument_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -90,7 +93,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1140/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1140/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/change_to_safe_mode_with_network_config.yml b/detections/endpoint/change_to_safe_mode_with_network_config.yml
index 75247f707c..29d3da2b0f 100644
--- a/detections/endpoint/change_to_safe_mode_with_network_config.yml
+++ b/detections/endpoint/change_to_safe_mode_with_network_config.yml
@@ -1,7 +1,7 @@
name: Change To Safe Mode With Network Config
id: 81f1dce0-0f18-11ec-a5d7-acde48001122
-version: '5'
-date: '2025-03-03'
+version: 6
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: TTP
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = bcdedit.exe
Processes.process="*/set*" Processes.process="*{current}*" Processes.process="*safeboot*"
- Processes.process="*network*" by Processes.process_name Processes.process Processes.parent_process_name
- Processes.dest Processes.user |`drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `change_to_safe_mode_with_network_config_filter`'
+ Processes.process="*network*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product |`drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `change_to_safe_mode_with_network_config_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/chcp_command_execution.yml b/detections/endpoint/chcp_command_execution.yml
index ea4772bb28..e24a0ed294 100644
--- a/detections/endpoint/chcp_command_execution.yml
+++ b/detections/endpoint/chcp_command_execution.yml
@@ -1,6 +1,6 @@
name: CHCP Command Execution
id: 21d236ec-eec1-11eb-b23e-acde48001122
-version: 5
+version: 6
date: '2025-02-19'
author: Teoderick Contreras, Splunk
status: production
@@ -19,9 +19,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=chcp.com
Processes.parent_process_name = cmd.exe (Processes.parent_process=*/c* OR Processes.parent_process=*/k*)
- by Processes.process_name Processes.process Processes.parent_process_name Processes.parent_process
- Processes.process_id Processes.parent_process_id Processes.dest Processes.user |
- `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `chcp_command_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -79,7 +82,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/simulated_icedid/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/simulated_icedid/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/check_elevated_cmd_using_whoami.yml b/detections/endpoint/check_elevated_cmd_using_whoami.yml
index b5f5648875..2921928934 100644
--- a/detections/endpoint/check_elevated_cmd_using_whoami.yml
+++ b/detections/endpoint/check_elevated_cmd_using_whoami.yml
@@ -1,6 +1,6 @@
name: Check Elevated CMD using whoami
id: a9079b18-1633-11ec-859c-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -19,9 +19,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process = "*whoami*"
Processes.process = "*/group*" Processes.process = "* find *" Processes.process
- = "*12288*" by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `check_elevated_cmd_using_whoami_filter`'
+ = "*12288*" by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `check_elevated_cmd_using_whoami_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -71,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/fin7/fin7_js_2/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/fin7/fin7_js_2/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/child_processes_of_spoolsv_exe.yml b/detections/endpoint/child_processes_of_spoolsv_exe.yml
index b43429e414..946cceb192 100644
--- a/detections/endpoint/child_processes_of_spoolsv_exe.yml
+++ b/detections/endpoint/child_processes_of_spoolsv_exe.yml
@@ -1,6 +1,6 @@
name: Child Processes of Spoolsv exe
id: aa0c4aeb-5b18-41c4-8c07-f1442d7599df
-version: 6
+version: 7
date: '2024-11-13'
author: Rico Valdez, Splunk
status: experimental
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process_name)
as process_name values(Processes.process) as process min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=spoolsv.exe
- AND Processes.process_name!=regsvr32.exe by Processes.dest Processes.parent_process
- Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `child_processes_of_spoolsv_exe_filter`'
+ AND Processes.process_name!=regsvr32.exe by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `child_processes_of_spoolsv_exe_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/clear_unallocated_sector_using_cipher_app.yml b/detections/endpoint/clear_unallocated_sector_using_cipher_app.yml
index 82a73a420c..bed58ac26b 100644
--- a/detections/endpoint/clear_unallocated_sector_using_cipher_app.yml
+++ b/detections/endpoint/clear_unallocated_sector_using_cipher_app.yml
@@ -1,6 +1,6 @@
name: Clear Unallocated Sector Using Cipher App
id: cd80a6ac-c9d9-11eb-8839-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "cipher.exe"
- Processes.process = "*/w:*" by Processes.parent_process_name Processes.parent_process
- Processes.process_name Processes.process Processes.dest Processes.user Processes.process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `clear_unallocated_sector_using_cipher_app_filter`'
+ Processes.process = "*/w:*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `clear_unallocated_sector_using_cipher_app_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -80,7 +83,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/clop_common_exec_parameter.yml b/detections/endpoint/clop_common_exec_parameter.yml
index 3618dec57d..a3dc5b4db9 100644
--- a/detections/endpoint/clop_common_exec_parameter.yml
+++ b/detections/endpoint/clop_common_exec_parameter.yml
@@ -1,6 +1,6 @@
name: Clop Common Exec Parameter
id: 5a8a2a72-8322-11eb-9ee9-acde48001122
-version: 8
+version: 9
date: '2024-12-10'
author: Teoderick Contreras, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name != "*temp.dat*"
- Processes.process = "*runrun*" OR Processes.process = "*temp.dat*" by Processes.dest
- Processes.user Processes.parent_process Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `clop_common_exec_parameter_filter`'
+ Processes.process = "*runrun*" OR Processes.process = "*temp.dat*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `clop_common_exec_parameter_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -81,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/clop/clop_b/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/clop/clop_b/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/cmd_carry_out_string_command_parameter.yml b/detections/endpoint/cmd_carry_out_string_command_parameter.yml
index f2545358d1..cbb0067a2b 100644
--- a/detections/endpoint/cmd_carry_out_string_command_parameter.yml
+++ b/detections/endpoint/cmd_carry_out_string_command_parameter.yml
@@ -1,6 +1,6 @@
name: CMD Carry Out String Command Parameter
id: 54a6ed00-3256-11ec-b031-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Teoderick Contreras, Bhavin Patel, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_cmd` AND Processes.process="*
- /c*" by Processes.dest Processes.user Processes.parent_process_name Processes.parent_process
- Processes.process_name Processes.original_file_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `cmd_carry_out_string_command_parameter_filter`'
+ /c*" by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `cmd_carry_out_string_command_parameter_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/cmd_carry_str_param/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/cmd_carry_str_param/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/cmd_echo_pipe___escalation.yml b/detections/endpoint/cmd_echo_pipe___escalation.yml
index c1b77e4c5b..1a970695c8 100644
--- a/detections/endpoint/cmd_echo_pipe___escalation.yml
+++ b/detections/endpoint/cmd_echo_pipe___escalation.yml
@@ -1,6 +1,6 @@
name: CMD Echo Pipe - Escalation
id: eb277ba0-b96b-11eb-b00e-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_cmd` OR Processes.process=*%comspec%*
- (Processes.process=*echo* AND Processes.process=*pipe*) by Processes.dest Processes.user
- Processes.parent_process Processes.parent_process_name Processes.process_name Processes.original_file_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `cmd_echo_pipe___escalation_filter`'
+ (Processes.process=*echo* AND Processes.process=*pipe*) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `cmd_echo_pipe___escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -85,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/cmlua_or_cmstplua_uac_bypass.yml b/detections/endpoint/cmlua_or_cmstplua_uac_bypass.yml
index deb0daab75..1b3b8140a7 100644
--- a/detections/endpoint/cmlua_or_cmstplua_uac_bypass.yml
+++ b/detections/endpoint/cmlua_or_cmstplua_uac_bypass.yml
@@ -1,6 +1,6 @@
name: CMLUA Or CMSTPLUA UAC Bypass
id: f87b5062-b405-11eb-a889-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,8 +17,10 @@ data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode=7 ImageLoaded IN ("*\\CMLUA.dll", "*\\CMSTPLUA.dll",
"*\\CMLUAUTIL.dll") NOT(process_name IN("CMSTP.exe", "CMMGR32.exe")) NOT(Image IN("*\\windows\\*",
- "*\\program files*")) | stats count min(_time) as firstTime max(_time) as lastTime
- by dest Image ImageLoaded process_name EventCode Signed ProcessId | `security_content_ctime(firstTime)`
+ "*\\program files*")) | 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)` | `cmlua_or_cmstplua_uac_bypass_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name and imageloaded executions from your endpoints. If you
@@ -66,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/darkside_cmstp_com/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/darkside_cmstp_com/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/cobalt_strike_named_pipes.yml b/detections/endpoint/cobalt_strike_named_pipes.yml
index 85ae717a21..acadb477f9 100644
--- a/detections/endpoint/cobalt_strike_named_pipes.yml
+++ b/detections/endpoint/cobalt_strike_named_pipes.yml
@@ -1,6 +1,6 @@
name: Cobalt Strike Named Pipes
id: 5876d429-0240-4709-8b93-ea8330b411b5
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -18,8 +18,9 @@ data_source:
- Sysmon EventID 18
search: '`sysmon` EventID=17 OR EventID=18 PipeName IN (\\msagent_*, \\DserNamePipe*,
\\srvsvc_*, \\postex_*, \\status_*, \\MSSE-*, \\spoolss_*, \\win_svc*, \\ntsvcs*,
- \\winsock*, \\UIA_PIPE*) | stats count min(_time) as firstTime max(_time) as lastTime
- by dest, process_name, process_id process_path, PipeName | `security_content_ctime(firstTime)`
+ \\winsock*, \\UIA_PIPE*) | stats count min(_time) as firstTime max(_time) as lastTime
+ by dest dvc pipe_name process_exec process_guid process_id process_name process_path
+ signature signature_id user_id vendor_product Image PipeName | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `cobalt_strike_named_pipes_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -79,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/common_ransomware_extensions.yml b/detections/endpoint/common_ransomware_extensions.yml
index 14195a6871..c2ed660695 100644
--- a/detections/endpoint/common_ransomware_extensions.yml
+++ b/detections/endpoint/common_ransomware_extensions.yml
@@ -1,7 +1,7 @@
name: Common Ransomware Extensions
id: a9e5c5db-db11-43ca-86a8-c852d1b2c0ec
-version: '13'
-date: '2025-03-25'
+version: 13
+date: '2025-03-27'
author: David Dorsey, Michael Haag, Splunk, Steven Dick
status: production
type: TTP
@@ -17,13 +17,21 @@ data_source:
- Sysmon EventID 11
search: '| tstats `security_content_summariesonly` min(_time) as firstTime max(_time)
as lastTime count latest(Filesystem.user) as user values(Filesystem.file_path) as
- file_path from datamodel=Endpoint.Filesystem by Filesystem.file_name Filesystem.dest
- _time span=1h | `drop_dm_object_name(Filesystem)` | rex field=file_name "(?\.[^\.]+)$"
- | rex field=file_path "(?([^\\\]*\\\)*).*" | stats min(firstTime)
- as firstTime max(lastTime) as lastTime latest(user) as user dc(true_file_path) as
- path_count dc(file_name) as file_count latest(true_file_path) as file_path by dest
- file_name | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`
- | `ransomware_extensions` | where path_count > 1 OR file_count > 20 | `common_ransomware_extensions_filter`'
+ file_path from datamodel=Endpoint.Filesystem by Filesystem.action Filesystem.dest
+ Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
+ Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size
+ Filesystem.process_guid Filesystem.process_id Filesystem.user Filesystem.vendor_product
+ | `drop_dm_object_name(Filesystem)` | rex field=file_name "(?\.[^\.]+)$"
+ | lookup update=true ransomware_extensions_lookup Extensions AS file_extension OUTPUT
+ Extensions Name | search Name !=False | stats min(firstTime) as firstTime max(lastTime)
+ as lastTime dc(file_path) as path_count dc(file_name) as file_count values(action)
+ as action values(file_access_time) as file_access_time values(file_create_time)
+ as file_create_time values(file_hash) as file_hash values(file_modify_time) as file_modify_time
+ values(file_acl) as file_acl values(file_size) as file_size values(process_guid)
+ as process_guid values(process_id) as process_id values(user) as user values(vendor_product)
+ as vendor_product values(file_name) as file_name values(file_extension) as file_extension values(Name) as Name by dest
+ | where path_count > 1 OR file_count > 20
+ | `common_ransomware_extensions_filter`'
how_to_implement: You must be ingesting data that records the filesystem activity
from your hosts to populate the Endpoint Filesystem data model node. To see the
additional metadata, add the following fields, if not already present, please review
@@ -34,13 +42,13 @@ known_false_positives: It is possible for a legitimate file with these extension
references:
- https://github.com/splunk/security_content/issues/2448
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for "$dest$"
+ search: '%original_detection_search% | search dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$","$user$")
- starthoursago=168 | stats count min(_time) as firstTime max(_time) as lastTime
+- name: View risk events for the last 7 days for "$dest$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$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)`
@@ -49,7 +57,7 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: The device $dest$ wrote $file_count$ files to $path_count$ path(s) with
- the $Extensions$ extension. This extension and behavior may indicate a $Name$
+ the $file_extension$ extension. This extension and behavior may indicate a $Name$
ransomware attack.
risk_objects:
- field: user
diff --git a/detections/endpoint/common_ransomware_notes.yml b/detections/endpoint/common_ransomware_notes.yml
index 069996fda3..d8fa6bb2c3 100644
--- a/detections/endpoint/common_ransomware_notes.yml
+++ b/detections/endpoint/common_ransomware_notes.yml
@@ -1,7 +1,7 @@
name: Common Ransomware Notes
id: ada0f478-84a8-4641-a3f1-d82362d6bd71
-version: '8'
-date: '2025-03-03'
+version: 9
+date: '2025-03-27'
author: David Dorsey, Splunk
status: production
type: Hunting
@@ -16,9 +16,12 @@ data_source:
- Sysmon EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime values(Filesystem.user) as user values(Filesystem.dest) as dest values(Filesystem.file_path)
- as file_path from datamodel=Endpoint.Filesystem by Filesystem.file_name | `drop_dm_object_name(Filesystem)`
- | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `ransomware_notes`
- | `common_ransomware_notes_filter`'
+ as file_path from datamodel=Endpoint.Filesystem by Filesystem.action Filesystem.dest
+ Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
+ Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size
+ Filesystem.process_guid Filesystem.process_id Filesystem.user Filesystem.vendor_product
+ | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`
+ | `ransomware_notes` | `common_ransomware_notes_filter`'
how_to_implement: You must be ingesting data that records file-system activity from
your hosts to populate the Endpoint Filesystem data-model node. This is typically
populated via endpoint detection-and-response product, such as Carbon Black, or
diff --git a/detections/endpoint/connectwise_screenconnect_path_traversal.yml b/detections/endpoint/connectwise_screenconnect_path_traversal.yml
index abdafa951b..1b15ea96bd 100644
--- a/detections/endpoint/connectwise_screenconnect_path_traversal.yml
+++ b/detections/endpoint/connectwise_screenconnect_path_traversal.yml
@@ -18,8 +18,10 @@ description: The following analytic detects attempts to exploit the ConnectWise
a severe security risk.
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*\\ScreenConnect\\App_Extensions\\*")
- Filesystem.file_name IN ("*.aspx","*.ashx") by Filesystem.file_create_time Filesystem.process_id
- Filesystem.process_guid Filesystem.file_name Filesystem.file_path Filesystem.dest
+ Filesystem.file_name IN ("*.aspx","*.ashx") by Filesystem.action Filesystem.dest
+ Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
+ Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size
+ Filesystem.process_guid Filesystem.process_id Filesystem.user Filesystem.vendor_product
| `drop_dm_object_name(Filesystem)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `connectwise_screenconnect_path_traversal_filter`'
how_to_implement: This analytic utilizes the Endpoint datamodel Filesystem node to
@@ -74,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1190/screenconnect/sysmon_app_extensions.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1190/screenconnect/sysmon_app_extensions.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/conti_common_exec_parameter.yml b/detections/endpoint/conti_common_exec_parameter.yml
index 68ddb073f8..96760dea35 100644
--- a/detections/endpoint/conti_common_exec_parameter.yml
+++ b/detections/endpoint/conti_common_exec_parameter.yml
@@ -1,6 +1,6 @@
name: Conti Common Exec parameter
id: 624919bc-c382-11eb-adcc-acde48001122
-version: 7
+version: 8
date: '2024-12-10'
author: Teoderick Contreras, Splunk
status: production
@@ -20,8 +20,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process = "*-m local*"
OR Processes.process = "*-m net*" OR Processes.process = "*-m all*" OR Processes.process
- = "*-nomutex*" by Processes.process_name Processes.process Processes.parent_process_name
- Processes.parent_process Processes.dest Processes.user Processes.process_id Processes.process_guid
+ = "*-nomutex*" by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `conti_common_exec_parameter_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -82,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/conti/inf1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/conti/inf1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/control_loading_from_world_writable_directory.yml b/detections/endpoint/control_loading_from_world_writable_directory.yml
index 34c0fe2491..7997499fba 100644
--- a/detections/endpoint/control_loading_from_world_writable_directory.yml
+++ b/detections/endpoint/control_loading_from_world_writable_directory.yml
@@ -1,6 +1,6 @@
name: Control Loading from World Writable Directory
id: 10423ac4-10c9-11ec-8dc4-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -20,10 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=control.exe
OR Processes.original_file_name=CONTROL.EXE) AND Processes.process IN ("*\\appdata\\*",
- "*\\windows\\temp\\*", "*\\programdata\\*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.original_file_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `control_loading_from_world_writable_directory_filter`'
+ "*\\windows\\temp\\*", "*\\programdata\\*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `control_loading_from_world_writable_directory_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -89,7 +92,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.002/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.002/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/create_or_delete_windows_shares_using_net_exe.yml b/detections/endpoint/create_or_delete_windows_shares_using_net_exe.yml
index 43cc11f1f7..cba2a526d6 100644
--- a/detections/endpoint/create_or_delete_windows_shares_using_net_exe.yml
+++ b/detections/endpoint/create_or_delete_windows_shares_using_net_exe.yml
@@ -1,6 +1,6 @@
name: Create or delete windows shares using net exe
id: 743a322c-9a68-4a0f-9c17-85d9cce2a27c
-version: 12
+version: 13
date: '2025-02-10'
author: Bhavin Patel, Splunk
status: production
@@ -21,10 +21,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.user) as
user values(Processes.parent_process) as parent_process min(_time) as firstTime
max(_time) as lastTime from datamodel=Endpoint.Processes where `process_net` by
- Processes.process Processes.process_name Processes.parent_process_name Processes.original_file_name
- Processes.dest | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | search process IN ("*share* /delete*", "*share*
- /REMARK:*", "*share* /CACHE:*") | `create_or_delete_windows_shares_using_net_exe_filter`'
+ Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | search process IN ("*share* /delete*", "*share* /REMARK:*", "*share* /CACHE:*")
+ | `create_or_delete_windows_shares_using_net_exe_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -85,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070.005/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070.005/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/create_remote_thread_in_shell_application.yml b/detections/endpoint/create_remote_thread_in_shell_application.yml
index 5a9e5a6de1..c11da36f0a 100644
--- a/detections/endpoint/create_remote_thread_in_shell_application.yml
+++ b/detections/endpoint/create_remote_thread_in_shell_application.yml
@@ -1,6 +1,6 @@
name: Create Remote Thread In Shell Application
id: 10399c1e-f51e-11eb-b920-acde48001122
-version: 6
+version: 7
date: '2024-12-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,9 +16,12 @@ description: The following analytic detects suspicious process injection in comm
data_source:
- Sysmon EventID 8
search: '`sysmon` EventCode=8 TargetImage IN ("*\\cmd.exe", "*\\powershell*", "*\\pwsh.exe")
- | stats count min(_time) as firstTime max(_time) as lastTime by TargetImage TargetProcessId
- SourceProcessId EventCode StartAddress SourceImage dest |rename SourceImage as
- process_name| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | stats count min(_time) as firstTime max(_time) as lastTime by EventID Guid NewThreadId
+ ProcessID SecurityID SourceImage SourceProcessGuid SourceProcessId StartAddress
+ StartFunction StartModule TargetImage TargetProcessGuid TargetProcessId UserID dest
+ parent_process_exec parent_process_guid parent_process_id parent_process_name parent_process_path
+ process_exec process_guid process_id process_name process_path signature signature_id
+ user_id vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `create_remote_thread_in_shell_application_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -67,7 +70,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/simulated_icedid/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/simulated_icedid/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/create_remote_thread_into_lsass.yml b/detections/endpoint/create_remote_thread_into_lsass.yml
index fbc0310759..2d022e8a2b 100644
--- a/detections/endpoint/create_remote_thread_into_lsass.yml
+++ b/detections/endpoint/create_remote_thread_into_lsass.yml
@@ -1,6 +1,6 @@
name: Create Remote Thread into LSASS
id: 67d4dbef-9564-4699-8da8-03a151529edc
-version: 7
+version: 8
date: '2025-02-10'
author: Patrick Bareiss, Splunk
status: production
@@ -16,8 +16,12 @@ description: The following analytic detects the creation of a remote thread in t
data_source:
- Sysmon EventID 8
search: '`sysmon` EventID=8 TargetImage=*lsass.exe | stats count min(_time) as firstTime
- max(_time) as lastTime by dest, EventCode, TargetImage, TargetProcessId | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | `create_remote_thread_into_lsass_filter`'
+ max(_time) as lastTime by EventID Guid NewThreadId ProcessID SecurityID SourceImage
+ SourceProcessGuid SourceProcessId StartAddress StartFunction StartModule TargetImage
+ TargetProcessGuid TargetProcessId UserID dest parent_process_exec parent_process_guid
+ parent_process_id parent_process_name parent_process_path process_exec process_guid
+ process_id process_name process_path signature signature_id user_id vendor_product
+ | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)` | `create_remote_thread_into_lsass_filter`'
how_to_implement: This search needs Sysmon Logs with a Sysmon configuration, which
includes EventCode 8 with lsass.exe. This search uses an input macro named `sysmon`.
We strongly recommend that you specify your environment-specific configurations
@@ -67,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/creation_of_lsass_dump_with_taskmgr.yml b/detections/endpoint/creation_of_lsass_dump_with_taskmgr.yml
index 2a7706b86a..69b728d266 100644
--- a/detections/endpoint/creation_of_lsass_dump_with_taskmgr.yml
+++ b/detections/endpoint/creation_of_lsass_dump_with_taskmgr.yml
@@ -15,9 +15,9 @@ description: The following analytic detects the creation of an lsass.exe process
data_source:
- Sysmon EventID 11
search: '`sysmon` EventID=11 process_name=taskmgr.exe TargetFilename=*lsass*.dmp |
- stats count min(_time) as firstTime max(_time) as lastTime by dest, object_category,
- process_name, TargetFilename | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `creation_of_lsass_dump_with_taskmgr_filter`'
+ stats count min(_time) as firstTime max(_time) as lastTime by action dest file_name
+ file_path process_guid process_id user_id vendor_product process_name TargetFilename | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `creation_of_lsass_dump_with_taskmgr_filter`'
how_to_implement: This search requires Sysmon Logs and a Sysmon configuration, which
includes EventCode 11 for detecting file create of lsass.dmp. This search uses an
input macro named `sysmon`. We strongly recommend that you specify your environment-specific
@@ -68,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/creation_of_shadow_copy.yml b/detections/endpoint/creation_of_shadow_copy.yml
index ce5b148d77..a3ec742a46 100644
--- a/detections/endpoint/creation_of_shadow_copy.yml
+++ b/detections/endpoint/creation_of_shadow_copy.yml
@@ -1,6 +1,6 @@
name: Creation of Shadow Copy
id: eb120f5f-b879-4a63-97c1-93352b5df844
-version: 7
+version: 8
date: '2025-02-10'
author: Patrick Bareiss, Splunk
status: production
@@ -20,10 +20,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=vssadmin.exe
Processes.process=*create* Processes.process=*shadow*) OR (Processes.process_name=wmic.exe
- Processes.process=*shadowcopy* Processes.process=*create*) by Processes.dest Processes.user
- Processes.process_name Processes.process Processes.parent_process_name Processes.parent_process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `creation_of_shadow_copy_filter`'
+ Processes.process=*shadowcopy* Processes.process=*create*) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `creation_of_shadow_copy_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -82,13 +86,11 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/crowdstrike_falcon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/crowdstrike_falcon.log
source: crowdstrike
sourcetype: crowdstrike:events:sensor
diff --git a/detections/endpoint/creation_of_shadow_copy_with_wmic_and_powershell.yml b/detections/endpoint/creation_of_shadow_copy_with_wmic_and_powershell.yml
index 78b7c0d9dd..8f46b39247 100644
--- a/detections/endpoint/creation_of_shadow_copy_with_wmic_and_powershell.yml
+++ b/detections/endpoint/creation_of_shadow_copy_with_wmic_and_powershell.yml
@@ -1,6 +1,6 @@
name: Creation of Shadow Copy with wmic and powershell
id: 2ed8b538-d284-449a-be1d-82ad1dbd186b
-version: 9
+version: 10
date: '2025-02-10'
author: Patrick Bareiss, Splunk
status: production
@@ -19,8 +19,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_wmic` OR `process_powershell`
- Processes.process=*shadowcopy* Processes.process=*create* by Processes.user Processes.process_name
- Processes.original_file_name Processes.parent_process_name Processes.process Processes.dest
+ Processes.process=*shadowcopy* Processes.process=*create* by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
| `creation_of_shadow_copy_with_wmic_and_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -79,7 +83,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/credential_dumping_via_copy_command_from_shadow_copy.yml b/detections/endpoint/credential_dumping_via_copy_command_from_shadow_copy.yml
index a443947f7e..68b426ca73 100644
--- a/detections/endpoint/credential_dumping_via_copy_command_from_shadow_copy.yml
+++ b/detections/endpoint/credential_dumping_via_copy_command_from_shadow_copy.yml
@@ -1,6 +1,6 @@
name: Credential Dumping via Copy Command from Shadow Copy
id: d8c406fe-23d2-45f3-a983-1abe7b83ff3b
-version: 7
+version: 8
date: '2025-02-10'
author: Patrick Bareiss, Splunk
status: production
@@ -20,9 +20,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_cmd` (Processes.process=*\\system32\\config\\sam*
OR Processes.process=*\\system32\\config\\security* OR Processes.process=*\\system32\\config\\system*
- OR Processes.process=*\\windows\\ntds\\ntds.dit*) by Processes.dest Processes.user
- Processes.process_name Processes.process Processes.parent_process Processes.original_file_name
- Processes.process_id Processes.parent_process_id Processes.parent_process_name
+ OR Processes.process=*\\windows\\ntds\\ntds.dit*) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
| `credential_dumping_via_copy_command_from_shadow_copy_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -78,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/credential_dumping_via_symlink_to_shadow_copy.yml b/detections/endpoint/credential_dumping_via_symlink_to_shadow_copy.yml
index ac524c6b29..85b4a297cf 100644
--- a/detections/endpoint/credential_dumping_via_symlink_to_shadow_copy.yml
+++ b/detections/endpoint/credential_dumping_via_symlink_to_shadow_copy.yml
@@ -1,6 +1,6 @@
name: Credential Dumping via Symlink to Shadow Copy
id: c5eac648-fae0-4263-91a6-773df1f4c903
-version: 7
+version: 8
date: '2025-02-10'
author: Patrick Bareiss, Splunk
status: production
@@ -20,10 +20,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_cmd` Processes.process=*mklink*
- Processes.process=*HarddiskVolumeShadowCopy* by Processes.dest Processes.user Processes.process_name
- Processes.process Processes.parent_process Processes.parent_process_name Processes.original_file_name
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `credential_dumping_via_symlink_to_shadow_copy_filter`'
+ Processes.process=*HarddiskVolumeShadowCopy* by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `credential_dumping_via_symlink_to_shadow_copy_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/csc_net_on_the_fly_compilation.yml b/detections/endpoint/csc_net_on_the_fly_compilation.yml
index 39211a947c..34cc953708 100644
--- a/detections/endpoint/csc_net_on_the_fly_compilation.yml
+++ b/detections/endpoint/csc_net_on_the_fly_compilation.yml
@@ -1,6 +1,6 @@
name: CSC Net On The Fly Compilation
id: ea73128a-43ab-11ec-9753-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -20,8 +20,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_csc` Processes.process
= "*/noconfig*" Processes.process = "*/fullpaths*" Processes.process = "*@*" by
- Processes.dest Processes.user Processes.parent_process_name Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `csc_net_on_the_fly_compilation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -53,7 +56,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/vilsel/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/vilsel/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/curl_download_and_bash_execution.yml b/detections/endpoint/curl_download_and_bash_execution.yml
index 0fd2ed2163..58a9d66e17 100644
--- a/detections/endpoint/curl_download_and_bash_execution.yml
+++ b/detections/endpoint/curl_download_and_bash_execution.yml
@@ -1,6 +1,6 @@
name: Curl Download and Bash Execution
id: 900bc324-59f3-11ec-9fb4-acde48001122
-version: 7
+version: 8
date: '2024-12-10'
author: Michael Haag, Splunk, DipsyTipsy
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=curl
(Processes.process="*-s *") AND (Processes.process="*|*" AND Processes.process="*bash*")
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `curl_download_and_bash_execution_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `curl_download_and_bash_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -88,7 +92,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/linux-sysmon_curlwget.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/linux-sysmon_curlwget.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/delete_shadowcopy_with_powershell.yml b/detections/endpoint/delete_shadowcopy_with_powershell.yml
index 9e9208a89a..f4818dc3e7 100644
--- a/detections/endpoint/delete_shadowcopy_with_powershell.yml
+++ b/detections/endpoint/delete_shadowcopy_with_powershell.yml
@@ -15,10 +15,10 @@ description: The following analytic detects the use of PowerShell to delete shad
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText= "*ShadowCopy*" (ScriptBlockText
- = "*Delete*" OR ScriptBlockText = "*Remove*") | stats count min(_time) as firstTime
- max(_time) as lastTime by Opcode Computer UserID EventCode ScriptBlockText |rename
- Computer as dest |rename UserID as user | `security_content_ctime(firstTime)` |
- `security_content_ctime(lastTime)` | `delete_shadowcopy_with_powershell_filter`'
+ = "*Delete*" OR ScriptBlockText = "*Remove*") | fillnull | stats count min(_time)
+ as firstTime max(_time) as lastTime by dest signature signature_id user_id vendor_product
+ EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `delete_shadowcopy_with_powershell_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the powershell logs from your endpoints. make sure you enable needed
registry to monitor this event.
@@ -27,12 +27,12 @@ references:
- https://www.mandiant.com/resources/shining-a-light-on-darkside-ransomware-operations
- https://www.techtarget.com/searchwindowsserver/tutorial/Set-up-PowerShell-script-block-logging-for-added-security
drilldown_searches:
-- name: View the detection results for - "$user$" and "$dest$"
- search: '%original_detection_search% | search user = "$user$" dest = "$dest$"'
+- name: View the detection results for - "$user_id$" and "$dest$"
+ search: '%original_detection_search% | search user_id = "$user_id$" dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$user$" and "$dest$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user$",
+- name: View risk events for the last 7 days for - "$user_id$" and "$dest$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user_id$",
"$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)
@@ -42,9 +42,9 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: An attempt to delete ShadowCopy was performed using PowerShell on $dest$
- by $user$.
+ by $user_id$.
risk_objects:
- - field: user
+ - field: user_id
type: user
score: 81
- field: dest
@@ -69,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/deleting_shadow_copies.yml b/detections/endpoint/deleting_shadow_copies.yml
index 10f73b29f8..87d92740f1 100644
--- a/detections/endpoint/deleting_shadow_copies.yml
+++ b/detections/endpoint/deleting_shadow_copies.yml
@@ -21,8 +21,12 @@ search: '| tstats `security_content_summariesonly` count values(Processes.proces
as process values(Processes.parent_process) as parent_process min(_time) as firstTime
max(_time) as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=vssadmin.exe
OR Processes.process_name=wmic.exe) Processes.process=*delete* Processes.process=*shadow*
- by Processes.user Processes.process_name Processes.parent_process_name Processes.dest |
- `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
| `deleting_shadow_copies_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
diff --git a/detections/endpoint/detect_azurehound_command_line_arguments.yml b/detections/endpoint/detect_azurehound_command_line_arguments.yml
index df661b9c10..b174064306 100644
--- a/detections/endpoint/detect_azurehound_command_line_arguments.yml
+++ b/detections/endpoint/detect_azurehound_command_line_arguments.yml
@@ -1,6 +1,6 @@
name: Detect AzureHound Command-Line Arguments
id: 26f02e96-c300-11eb-b611-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,8 +18,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process IN ("*invoke-azurehound*")
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.parent_process_name Processes.process Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `detect_azurehound_command_line_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -85,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/sharphound/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/sharphound/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_azurehound_file_modifications.yml b/detections/endpoint/detect_azurehound_file_modifications.yml
index af89e009cd..9917d12d16 100644
--- a/detections/endpoint/detect_azurehound_file_modifications.yml
+++ b/detections/endpoint/detect_azurehound_file_modifications.yml
@@ -1,6 +1,6 @@
name: Detect AzureHound File Modifications
id: 1c34549e-c31b-11eb-996b-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,8 +18,10 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Filesystem where Filesystem.file_name IN ("*-azurecollection.zip",
"*-azprivroleadminrights.json", "*-azglobaladminrights.json", "*-azcloudappadmins.json",
- "*-azapplicationadmins.json") by Filesystem.file_create_time Filesystem.process_id Filesystem.file_name
- Filesystem.file_path Filesystem.dest Filesystem.user | `drop_dm_object_name(Filesystem)`
+ "*-azapplicationadmins.json") by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_azurehound_file_modifications_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on file modifications that include the name of the process, and file, responsible
@@ -75,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/sharphound/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/sharphound/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_certify_command_line_arguments.yml b/detections/endpoint/detect_certify_command_line_arguments.yml
index ac2d074956..7cf359cb5b 100644
--- a/detections/endpoint/detect_certify_command_line_arguments.yml
+++ b/detections/endpoint/detect_certify_command_line_arguments.yml
@@ -1,6 +1,6 @@
name: Detect Certify Command Line Arguments
id: e6d2dc61-a8b9-4b03-906c-da0ca75d71b8
-version: 5
+version: 6
date: '2024-12-10'
author: Steven Dick
status: production
@@ -21,10 +21,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where Processes.process IN ("* find
*","* auth *","* request *","* req *","* download *",) AND Processes.process IN
("* /vulnerable*","* /enrolleeSuppliesSubject *","* /json /outfile*","* /ca*", "*
- -username *","* -u *") by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
- `detect_certify_command_line_arguments_filter`'
+ -username *","* -u *") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `detect_certify_command_line_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -81,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1649/certify_abuse/certify_esc1_abuse_sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1649/certify_abuse/certify_esc1_abuse_sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_certify_with_powershell_script_block_logging.yml b/detections/endpoint/detect_certify_with_powershell_script_block_logging.yml
index 5b22224e3d..04398a2116 100644
--- a/detections/endpoint/detect_certify_with_powershell_script_block_logging.yml
+++ b/detections/endpoint/detect_certify_with_powershell_script_block_logging.yml
@@ -1,6 +1,6 @@
name: Detect Certify With PowerShell Script Block Logging
id: f533ca6c-9440-4686-80cb-7f294c07812a
-version: 6
+version: 7
date: '2025-02-10'
author: Steven Dick
status: production
@@ -19,12 +19,11 @@ search: '`powershell` EventCode=4104 (ScriptBlockText IN ("*find *") AND ScriptB
IN ("* /vulnerable*","* -vulnerable*","* /enrolleeSuppliesSubject *","* /json /outfile*"))
OR (ScriptBlockText IN (,"*auth *","*req *",) AND ScriptBlockText IN ("* -ca *","*
-username *","* -u *")) OR (ScriptBlockText IN ("*request *","*download *") AND
- ScriptBlockText IN ("* /ca:*")) | stats count min(_time) as firstTime max(_time)
- as lastTime list(ScriptBlockText) as command Values(OpCode) as reason values(Path)
- as file_name values(UserID) as user by _time Computer EventCode | `security_content_ctime(firstTime)`
+ ScriptBlockText IN ("* /ca:*")) | fillnull | stats count min(_time) as firstTime
+ max(_time) as lastTime by dest signature signature_id user_id vendor_product EventID
+ Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | eval file_name = case(isnotnull(file_name),file_name,true(),"unknown")
- | eval signature = substr(command,0,256) | rename Computer as dest,EventCode as
- signature_id | `detect_certify_with_powershell_script_block_logging_filter`'
+ | eval signature = substr(command,0,256) | `detect_certify_with_powershell_script_block_logging_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell..
@@ -33,13 +32,13 @@ references:
- https://github.com/GhostPack/Certify
- https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -52,7 +51,7 @@ rba:
- field: dest
type: system
score: 90
- - field: user
+ - field: user_id
type: user
score: 90
threat_objects: []
@@ -72,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1649/certify_abuse/certify_esc1_abuse_powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1649/certify_abuse/certify_esc1_abuse_powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_certipy_file_modifications.yml b/detections/endpoint/detect_certipy_file_modifications.yml
index 48a6a3129b..7706d5ec81 100644
--- a/detections/endpoint/detect_certipy_file_modifications.yml
+++ b/detections/endpoint/detect_certipy_file_modifications.yml
@@ -1,6 +1,6 @@
name: Detect Certipy File Modifications
id: 7e3df743-b1d8-4631-8fa8-bd5819688876
-version: 5
+version: 6
date: '2024-11-13'
author: Steven Dick
status: production
@@ -14,21 +14,15 @@ description: The following analytic detects the use of the Certipy tool to enume
malicious, this could lead to unauthorized access to sensitive AD CS information,
enabling further attacks or privilege escalation within the network.
data_source:
-- Sysmon EventID 1 AND Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` count min(_time) AS firstTime max(_time)
- AS lastTime values(Processes.process_current_directory) as process_current_directory
- FROM datamodel=Endpoint.Processes where Processes.action="allowed" BY _time span=1h
- Processes.user Processes.dest Processes.process_id Processes.process_name Processes.process
- Processes.process_path Processes.parent_process_name Processes.parent_process Processes.process_guid
- Processes.action |`drop_dm_object_name(Processes)` | join max=0 dest process_guid
- [| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Filesystem where Filesystem.file_name IN ("*_certipy.zip",
- "*_certipy.txt", "*_certipy.json", "*.ccache") by Filesystem.file_create_time Filesystem.process_id
- Filesystem.process_guid Filesystem.file_name Filesystem.file_path Filesystem.dest
- | `drop_dm_object_name(Filesystem)` ] | fields firstTime lastTime user dest file_create_time
- file_name file_path parent_process_name parent_process process_name process_path
- process_current_directory process process_guid process_id | where isnotnull(file_name)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_certipy_file_modifications_filter`'
+- Sysmon EventID 11
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from
+ datamodel=Endpoint.Filesystem where Filesystem.file_name IN ("*_certipy.zip","*_certipy.txt", "*_certipy.json", "*.ccache")
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
+ Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product
+ | `drop_dm_object_name(Filesystem)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_certipy_file_modifications_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints as well as file creation or deletion events.
@@ -61,8 +55,6 @@ rba:
threat_objects:
- field: file_name
type: file_name
- - field: process_name
- type: process_name
tags:
analytic_story:
- Windows Certificate Services
diff --git a/detections/endpoint/detect_computer_changed_with_anonymous_account.yml b/detections/endpoint/detect_computer_changed_with_anonymous_account.yml
index 0b55a03dbe..0da8ae363c 100644
--- a/detections/endpoint/detect_computer_changed_with_anonymous_account.yml
+++ b/detections/endpoint/detect_computer_changed_with_anonymous_account.yml
@@ -1,6 +1,6 @@
name: Detect Computer Changed with Anonymous Account
id: 1400624a-d42d-484d-8843-e6753e6e3645
-version: 5
+version: 6
date: '2024-11-13'
author: Rod Soto, Jose Hernandez, Splunk
status: experimental
@@ -16,8 +16,10 @@ data_source:
- Windows Event Log Security 4624
- Windows Event Log Security 4742
search: '`wineventlog_security` EventCode=4624 OR EventCode=4742 TargetUserName="ANONYMOUS
- LOGON" LogonType=3 | stats count values(host) as host, values(TargetDomainName)
- as Domain, values(user) as user | `detect_computer_changed_with_anonymous_account_filter`'
+ LOGON" LogonType=3 | stats count min(_time) as firstTime max(_time) as lastTime
+ by action app authentication_method dest dvc process process_id process_name process_path
+ signature signature_id src src_port status subject user user_group vendor_product
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_computer_changed_with_anonymous_account_filter`'
how_to_implement: This search requires audit computer account management to be enabled
on the system in order to generate Event ID 4742. We strongly recommend that you
specify your environment-specific configurations (index, source, sourcetype, etc.)
diff --git a/detections/endpoint/detect_copy_of_shadowcopy_with_script_block_logging.yml b/detections/endpoint/detect_copy_of_shadowcopy_with_script_block_logging.yml
index 0cf2e7f6aa..a4c458f7ab 100644
--- a/detections/endpoint/detect_copy_of_shadowcopy_with_script_block_logging.yml
+++ b/detections/endpoint/detect_copy_of_shadowcopy_with_script_block_logging.yml
@@ -16,9 +16,10 @@ data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText IN ("*copy*","*[System.IO.File]::Copy*")
AND ScriptBlockText IN ("*System32\\config\\SAM*", "*System32\\config\\SYSTEM*","*System32\\config\\SECURITY*")
- | stats count min(_time) as firstTime max(_time) as lastTime by Opcode Computer
- UserID EventCode ScriptBlockText | rename Computer as dest | rename UserID as user
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_copy_of_shadowcopy_with_script_block_logging_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_copy_of_shadowcopy_with_script_block_logging_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -29,12 +30,12 @@ references:
- https://github.com/GossiTheDog/HiveNightmare
- https://github.com/JumpsecLabs/Guidance-Advice/tree/main/SAM_Permissions
drilldown_searches:
-- name: View the detection results for - "$user$" and "$dest$"
- search: '%original_detection_search% | search user = "$user$" dest = "$dest$"'
+- name: View the detection results for - "$user_id$" and "$dest$"
+ search: '%original_detection_search% | search user_id = "$user_id$" dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$user$" and "$dest$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user$",
+- name: View risk events for the last 7 days for - "$user_id$" and "$dest$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user_id$",
"$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)
@@ -44,9 +45,9 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: PowerShell was identified running a script to capture the SAM hive on endpoint
- $dest$ by user $user$.
+ $dest$ by user $user_id$.
risk_objects:
- - field: user
+ - field: user_id
type: user
score: 80
- field: dest
@@ -70,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.002/detect_copy_of_shadowcopy_with_script_block_logging/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.002/detect_copy_of_shadowcopy_with_script_block_logging/windows-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_credential_dumping_through_lsass_access.yml b/detections/endpoint/detect_credential_dumping_through_lsass_access.yml
index d407bbd637..7731eec61f 100644
--- a/detections/endpoint/detect_credential_dumping_through_lsass_access.yml
+++ b/detections/endpoint/detect_credential_dumping_through_lsass_access.yml
@@ -1,6 +1,6 @@
name: Detect Credential Dumping through LSASS access
id: 2c365e57-4414-4540-8dc0-73ab10729996
-version: 7
+version: 8
date: '2025-02-10'
author: Patrick Bareiss, Splunk
status: production
@@ -16,9 +16,13 @@ description: The following analytic detects attempts to read LSASS memory, indic
data_source:
- Sysmon EventID 10
search: '`sysmon` EventCode=10 TargetImage=*lsass.exe (GrantedAccess=0x1010 OR GrantedAccess=0x1410)
- | stats count min(_time) as firstTime max(_time) as lastTime by dest, SourceImage,
- SourceProcessId, TargetImage, TargetProcessId, EventCode, GrantedAccess | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | `detect_credential_dumping_through_lsass_access_filter`'
+ | stats count min(_time) as firstTime max(_time) as lastTime by CallTrace EventID
+ GrantedAccess Guid Opcode ProcessID SecurityID SourceImage SourceProcessGUID SourceProcessId
+ TargetImage TargetProcessGUID TargetProcessId UserID dest granted_access parent_process_exec
+ parent_process_guid parent_process_id parent_process_name parent_process_path process_exec
+ process_guid process_id process_name process_path signature signature_id user_id
+ vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_credential_dumping_through_lsass_access_filter`'
how_to_implement: This search needs Sysmon Logs and a sysmon configuration, which
includes EventCode 10 with lsass.exe. This search uses an input macro named `sysmon`.
We strongly recommend that you specify your environment-specific configurations
@@ -69,7 +73,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_empire_with_powershell_script_block_logging.yml b/detections/endpoint/detect_empire_with_powershell_script_block_logging.yml
index 4c5e71523a..422a44ca2c 100644
--- a/detections/endpoint/detect_empire_with_powershell_script_block_logging.yml
+++ b/detections/endpoint/detect_empire_with_powershell_script_block_logging.yml
@@ -1,6 +1,6 @@
name: Detect Empire with PowerShell Script Block Logging
id: bc1dc6b8-c954-11eb-bade-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects suspicious PowerShell execution indi
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText=*system.net.webclient* AND
- ScriptBlockText=*frombase64string*) | stats count min(_time) as firstTime max(_time)
- as lastTime by Opcode Computer UserID EventCode ScriptBlockText | rename UserID
- as user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `detect_empire_with_powershell_script_block_logging_filter`'
+ ScriptBlockText=*frombase64string*) | fillnull | stats count min(_time) as firstTime
+ max(_time) as lastTime by dest signature signature_id user_id vendor_product EventID
+ Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `detect_empire_with_powershell_script_block_logging_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -49,12 +49,12 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: The following behavior was identified and typically related to PowerShell-Empire
- on $Computer$ by $user$.
+ on $dest$ by $user_id$.
risk_objects:
- - field: user
+ - field: user_id
type: user
score: 81
- - field: Computer
+ - field: dest
type: system
score: 81
threat_objects: []
@@ -74,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/empire.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/empire.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_exchange_web_shell.yml b/detections/endpoint/detect_exchange_web_shell.yml
index 88759b8cbe..1dc25eace0 100644
--- a/detections/endpoint/detect_exchange_web_shell.yml
+++ b/detections/endpoint/detect_exchange_web_shell.yml
@@ -14,18 +14,16 @@ description: The following analytic identifies the creation of suspicious .aspx
attackers could gain unauthorized access, execute arbitrary commands, and potentially
escalate privileges within the Exchange environment.
data_source:
-- Sysmon EventID 1 AND Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name=System by _time span=1h Processes.process_guid Processes.process_name
- Processes.process Processes.dest Processes.user | `drop_dm_object_name(Processes)`
- | join process_guid, _time [| tstats `security_content_summariesonly` count min(_time)
- as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path
- IN ("*\\HttpProxy\\owa\\auth\\*", "*\\inetpub\\wwwroot\\aspnet_client\\*", "*\\HttpProxy\\OAB\\*")
- Filesystem.file_name IN( "*.aspx", "*.ashx") by _time span=1h Filesystem.process_guid
- Filesystem.user Filesystem.dest Filesystem.file_create_time Filesystem.file_name
- Filesystem.file_path | `drop_dm_object_name(Filesystem)` ] | dedup file_create_time
- | table _time dest user file_create_time file_name file_path process_name process
- process_guid | `detect_exchange_web_shell_filter`'
+- Sysmon EventID 11
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime
+ FROM datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*\\HttpProxy\\owa\\auth\\*", "*\\inetpub\\wwwroot\\aspnet_client\\*", "*\\HttpProxy\\OAB\\*")
+ Filesystem.file_name IN( "*.aspx", "*.ashx")
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
+ Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product
+ | `drop_dm_object_name(Filesystem)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_exchange_web_shell_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node and `Filesystem`
diff --git a/detections/endpoint/detect_html_help_renamed.yml b/detections/endpoint/detect_html_help_renamed.yml
index a772c50bad..ba01055d7a 100644
--- a/detections/endpoint/detect_html_help_renamed.yml
+++ b/detections/endpoint/detect_html_help_renamed.yml
@@ -1,6 +1,6 @@
name: Detect HTML Help Renamed
id: 62fed254-513b-460e-953d-79771493a9f3
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name!=hh.exe
- AND Processes.original_file_name=HH.EXE by Processes.dest Processes.user Processes.parent_process_name
- Processes.original_file_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `detect_html_help_renamed_filter`'
+ AND Processes.original_file_name=HH.EXE by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_html_help_renamed_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -53,7 +56,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_html_help_url_in_command_line.yml b/detections/endpoint/detect_html_help_url_in_command_line.yml
index 4e07b994f9..d4b5b7b318 100644
--- a/detections/endpoint/detect_html_help_url_in_command_line.yml
+++ b/detections/endpoint/detect_html_help_url_in_command_line.yml
@@ -1,6 +1,6 @@
name: Detect HTML Help URL in Command Line
id: 8c5835b9-39d9-438b-817c-95f14c69a31e
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_hh` Processes.process=*http*
- by Processes.dest Processes.user Processes.parent_process_name Processes.parent_process
- Processes.original_file_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `detect_html_help_url_in_command_line_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_html_help_url_in_command_line_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -86,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_html_help_using_infotech_storage_handlers.yml b/detections/endpoint/detect_html_help_using_infotech_storage_handlers.yml
index 3ab1a666ab..debacbc490 100644
--- a/detections/endpoint/detect_html_help_using_infotech_storage_handlers.yml
+++ b/detections/endpoint/detect_html_help_using_infotech_storage_handlers.yml
@@ -1,6 +1,6 @@
name: Detect HTML Help Using InfoTech Storage Handlers
id: 0b2eefa5-5508-450d-b970-3dd2fb761aec
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_hh` Processes.process
- IN ("*its:*", "*mk:@MSITStore:*") by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `detect_html_help_using_infotech_storage_handlers_filter`'
+ IN ("*its:*", "*mk:@MSITStore:*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_html_help_using_infotech_storage_handlers_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -84,7 +87,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_mimikatz_with_powershell_script_block_logging.yml b/detections/endpoint/detect_mimikatz_with_powershell_script_block_logging.yml
index d3616fae42..31718bff40 100644
--- a/detections/endpoint/detect_mimikatz_with_powershell_script_block_logging.yml
+++ b/detections/endpoint/detect_mimikatz_with_powershell_script_block_logging.yml
@@ -1,6 +1,6 @@
name: Detect Mimikatz With PowerShell Script Block Logging
id: 8148c29c-c952-11eb-9255-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects the execution of Mimikatz commands v
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText IN (*mimikatz*, *-dumpcr*, *sekurlsa::pth*,
- *kerberos::ptt*, *kerberos::golden*) | stats count min(_time) as firstTime max(_time)
- as lastTime by Opcode Computer UserID EventCode ScriptBlockText | rename UserID
- as user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `detect_mimikatz_with_powershell_script_block_logging_filter`'
+ *kerberos::ptt*, *kerberos::golden*) | fillnull | stats count min(_time) as firstTime
+ max(_time) as lastTime by dest signature signature_id user_id vendor_product EventID
+ Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `detect_mimikatz_with_powershell_script_block_logging_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -47,12 +47,12 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: The following behavior was identified and typically related to MimiKatz
- being loaded within the context of PowerShell on $Computer$ by $user$.
+ being loaded within the context of PowerShell on $dest$ by $user_id$.
risk_objects:
- - field: user
+ - field: user_id
type: user
score: 90
- - field: Computer
+ - field: dest
type: system
score: 90
threat_objects: []
@@ -77,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/credaccess-powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/credaccess-powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_mshta_inline_hta_execution.yml b/detections/endpoint/detect_mshta_inline_hta_execution.yml
index cc64c91a1d..eb1250df05 100644
--- a/detections/endpoint/detect_mshta_inline_hta_execution.yml
+++ b/detections/endpoint/detect_mshta_inline_hta_execution.yml
@@ -1,6 +1,6 @@
name: Detect mshta inline hta execution
id: a0873b32-5b68-11eb-ae93-0242ac130002
-version: 14
+version: 15
date: '2025-02-10'
author: Bhavin Patel, Michael Haag, Splunk
status: production
@@ -20,10 +20,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process)
as process values(Processes.parent_process) as parent_process min(_time) as firstTime
max(_time) as lastTime from datamodel=Endpoint.Processes where `process_mshta` (Processes.process=*vbscript*
- OR Processes.process=*javascript* OR Processes.process=*about*) by Processes.user
- Processes.process_name Processes.original_file_name Processes.parent_process_name
- Processes.dest | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | `detect_mshta_inline_hta_execution_filter`'
+ OR Processes.process=*javascript* OR Processes.process=*about*) by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `detect_mshta_inline_hta_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -86,7 +90,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_mshta_renamed.yml b/detections/endpoint/detect_mshta_renamed.yml
index 8edd8c5256..5e9ed9f6d3 100644
--- a/detections/endpoint/detect_mshta_renamed.yml
+++ b/detections/endpoint/detect_mshta_renamed.yml
@@ -1,6 +1,6 @@
name: Detect mshta renamed
id: 8f45fcf0-5b68-11eb-ae93-0242ac130002
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name!=mshta.exe
- AND Processes.original_file_name=MSHTA.EXE by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.original_file_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `detect_mshta_renamed_filter`'
+ AND Processes.original_file_name=MSHTA.EXE by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_mshta_renamed_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -51,7 +54,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_mshta_url_in_command_line.yml b/detections/endpoint/detect_mshta_url_in_command_line.yml
index c33a2bd047..f5588bf53f 100644
--- a/detections/endpoint/detect_mshta_url_in_command_line.yml
+++ b/detections/endpoint/detect_mshta_url_in_command_line.yml
@@ -1,6 +1,6 @@
name: Detect MSHTA Url in Command Line
id: 9b3af1e6-5b68-11eb-ae93-0242ac130002
-version: 10
+version: 11
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,8 +19,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process)
as process values(Processes.parent_process) as parent_process min(_time) as firstTime
max(_time) as lastTime from datamodel=Endpoint.Processes where `process_mshta` (Processes.process="*http://*"
- OR Processes.process="*https://*") by Processes.user Processes.process_name Processes.parent_process_name
- Processes.original_file_name Processes.dest | `drop_dm_object_name(Processes)`
+ OR Processes.process="*https://*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `detect_mshta_url_in_command_line_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -86,7 +90,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_outlook_exe_writing_a_zip_file.yml b/detections/endpoint/detect_outlook_exe_writing_a_zip_file.yml
index 95d80c9749..75d969f3d3 100644
--- a/detections/endpoint/detect_outlook_exe_writing_a_zip_file.yml
+++ b/detections/endpoint/detect_outlook_exe_writing_a_zip_file.yml
@@ -1,6 +1,6 @@
name: Detect Outlook exe writing a zip file
id: a51bfe1a-94f0-4822-b1e4-16ae10145893
-version: 10
+version: 11
date: '2025-02-10'
author: Bhavin Patel, Splunk
status: experimental
@@ -14,21 +14,38 @@ description: The following analytic identifies the execution of `outlook.exe` wr
the security of the affected system and network.
data_source:
- Sysmon EventID 1 AND Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` min(_time) as firstTime max(_time)
- as lastTime FROM datamodel=Endpoint.Processes where Processes.process_name=outlook.exe
- by _time span=5m Processes.parent_process_id Processes.process_id Processes.dest
- Processes.process_name Processes.parent_process_name Processes.user | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | rename
- process_id as malicious_id| rename parent_process_id as outlook_id| join malicious_id
- type=inner[| tstats `security_content_summariesonly` count values(Filesystem.file_path)
- as file_path values(Filesystem.file_name) as file_name FROM datamodel=Endpoint.Filesystem
+search: '| tstats prestats=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes where Processes.process_name=outlook.exe
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | tstats prestats=t append=t `security_content_summariesonly`
+ count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
where (Filesystem.file_path=*.zip* OR Filesystem.file_name=*.lnk ) AND (Filesystem.file_path=C:\\Users*
- OR Filesystem.file_path=*Local\\Temp*) by _time span=5m Filesystem.process_id Filesystem.file_hash
- Filesystem.dest | `drop_dm_object_name(Filesystem)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | rename process_id as malicious_id| fields
- malicious_id outlook_id dest file_path file_name file_hash count file_id] | table
- firstTime lastTime user malicious_id outlook_id process_name parent_process_name
- file_name file_path | where file_name != "" | `detect_outlook_exe_writing_a_zip_file_filter`'
+ OR Filesystem.file_path=*Local\\Temp*) by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
+ | table action dest original_file_name parent_process parent_process_exec parent_process_guid
+ parent_process_id parent_process_name parent_process_path process process_exec process_guid
+ process_hash process_id process_integrity_level process_name process_path user user_id
+ vendor_product file_access_time file_create_time file_hash file_modify_time file_name
+ file_path file_acl file_size firstTime lastTime | stats values(action) as action
+ values(parent_process) as parent_process values(dest) as dest values(original_file_name)
+ as original_file_name values(parent_process) as parent_process values(parent_process_exec)
+ as parent_process_exec values(parent_process_guid) as parent_process_guid values(parent_process_id)
+ as parent_process_id values(parent_process_name) as parent_process_name values(parent_process_path)
+ as parent_process_path values(process) as process values(process_exec) as process_exec
+ values(process_hash) as process_hash values(process_id) as process_id values(process_integrity_level)
+ as process_integrity_level values(process_name) as process_name values(process_path)
+ as process_path values(user) as user values(user_id) as user_id values(vendor_product)
+ as vendor_product values(file_access_time) as file_access_time values(file_create_time)
+ as file_create_time values(file_hash) as file_hash values(file_modify_time) as file_modify_time
+ values(file_name) as file_name values(file_path) as file_path values(file_acl) as
+ file_acl values(file_size) as file_size by process_guid | where isnotnull(process)
+ AND isnotnull(file_name) | `detect_outlook_exe_writing_a_zip_file_filter`'
how_to_implement: You must be ingesting data that records filesystem and process activity
from your hosts to populate the Endpoint data model. This is typically populated
via endpoint detection-and-response product, such as Carbon Black, or endpoint data
diff --git a/detections/endpoint/detect_password_spray_attack_behavior_from_source.yml b/detections/endpoint/detect_password_spray_attack_behavior_from_source.yml
index f3fb364f2a..9400cb9938 100644
--- a/detections/endpoint/detect_password_spray_attack_behavior_from_source.yml
+++ b/detections/endpoint/detect_password_spray_attack_behavior_from_source.yml
@@ -1,7 +1,7 @@
name: Detect Password Spray Attack Behavior From Source
id: b6391b15-e913-4c2c-8949-9eecc06efacc
-version: 5
-date: '2025-02-10'
+version: 6
+date: '2025-03-27'
author: Steven Dick
status: production
type: TTP
@@ -18,8 +18,9 @@ data_source:
search: '| tstats `security_content_summariesonly` max(_time) as lastTime, min(_time)
as firstTime, values(Authentication.user_category) as user_category values(Authentication.src_category)
as src_category values(Authentication.app) as app count from datamodel=Authentication.Authentication
- where * by Authentication.action,Authentication.src,Authentication.user | `drop_dm_object_name("Authentication")`
- | eval user=case((match(upper(user),"[a-zA-Z0-9]{3}")),upper(user),true(),null),
+ by Authentication.action Authentication.app Authentication.authentication_method
+ Authentication.dest Authentication.signature Authentication.signature_id Authentication.src
+ Authentication.user | `drop_dm_object_name("Authentication")` | eval user=case((match(upper(user),"[a-zA-Z0-9]{3}")),upper(user),true(),null),
src=upper(src), success=if(action="success",count,0),success_user=if(action="success",user,null),failure=if(action="failure",count,0),
failed_user=if(action="failure",user,null) | `detect_password_spray_attack_behavior_from_source_filter`
| stats count min(firstTime) as firstTime max(lastTime) as lastTime values(app)
@@ -77,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/generic_password_spray/password_spray_attack.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/generic_password_spray/password_spray_attack.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_password_spray_attack_behavior_on_user.yml b/detections/endpoint/detect_password_spray_attack_behavior_on_user.yml
index f6ebd68a48..b3a471d221 100644
--- a/detections/endpoint/detect_password_spray_attack_behavior_on_user.yml
+++ b/detections/endpoint/detect_password_spray_attack_behavior_on_user.yml
@@ -1,7 +1,7 @@
name: Detect Password Spray Attack Behavior On User
id: a7539705-7183-4a12-9b6a-b6eef645a6d7
-version: 5
-date: '2025-02-10'
+version: 6
+date: '2025-03-27'
author: Steven Dick
status: production
type: TTP
@@ -17,8 +17,9 @@ data_source:
search: '| tstats `security_content_summariesonly` max(_time) as lastTime, min(_time)
as firstTime, values(Authentication.user_category) as user_category values(Authentication.src_category)
as src_category values(Authentication.app) as app count from datamodel=Authentication.Authentication
- where * by Authentication.action,Authentication.src,Authentication.user | `drop_dm_object_name("Authentication")`
- | eval user=case((match(upper(user),"[a-zA-Z0-9]{3}")),upper(user),true(),null),
+ by Authentication.action Authentication.app Authentication.authentication_method
+ Authentication.dest Authentication.signature Authentication.signature_id Authentication.src
+ Authentication.user | `drop_dm_object_name("Authentication")` | eval user=case((match(upper(user),"[a-zA-Z0-9]{3}")),upper(user),true(),null),
success=if(action="success",count,0), src=upper(src), success_src=if(action="success",src,null),
failure=if(action="failure",count,0), failed_src=if(action="failure",src,null) |
`detect_password_spray_attack_behavior_on_user_filter` | stats count min(firstTime)
@@ -78,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/generic_password_spray/password_spray_attack.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/generic_password_spray/password_spray_attack.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_path_interception_by_creation_of_program_exe.yml b/detections/endpoint/detect_path_interception_by_creation_of_program_exe.yml
index 7996dfb15e..218c1b6110 100644
--- a/detections/endpoint/detect_path_interception_by_creation_of_program_exe.yml
+++ b/detections/endpoint/detect_path_interception_by_creation_of_program_exe.yml
@@ -1,6 +1,6 @@
name: Detect Path Interception By Creation Of program exe
id: cbef820c-e1ff-407f-887f-0a9240a2d477
-version: 11
+version: 12
date: '2025-02-10'
author: Patrick Bareiss, Splunk
status: production
@@ -19,8 +19,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=services.exe
- by Processes.user Processes.process_name Processes.parent_process_name Processes.process
- Processes.dest | `drop_dm_object_name(Processes)` | rex field=process "^.*?\\\\(?[^\\\\]*\.(?:exe|bat|com|ps1))"
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | rex field=process "^.*?\\\\(?[^\\\\]*\.(?:exe|bat|com|ps1))"
| eval process_name = lower(process_name) | eval service_process = lower(service_process)
| where process_name != service_process | `security_content_ctime(firstTime)` |
`security_content_ctime(lastTime)` | `detect_path_interception_by_creation_of_program_exe_filter`'
@@ -80,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1574.009/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1574.009/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_prohibited_applications_spawning_cmd_exe.yml b/detections/endpoint/detect_prohibited_applications_spawning_cmd_exe.yml
index 1b9df60d0d..66336a4c7f 100644
--- a/detections/endpoint/detect_prohibited_applications_spawning_cmd_exe.yml
+++ b/detections/endpoint/detect_prohibited_applications_spawning_cmd_exe.yml
@@ -1,6 +1,6 @@
name: Detect Prohibited Applications Spawning cmd exe
id: dcfd6b40-42f9-469d-a433-2e53f7486664
-version: 11
+version: 12
date: '2025-02-10'
author: Bhavin Patel, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count values(Processes.process)
as process min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
- where `process_cmd` by Processes.parent_process_name Processes.process_name Processes.original_file_name
- Processes.dest Processes.user| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` |search [`prohibited_apps_launching_cmd_macro`]
- | `detect_prohibited_applications_spawning_cmd_exe_filter`'
+ where `process_cmd` by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` |search
+ [`prohibited_apps_launching_cmd_macro`] | `detect_prohibited_applications_spawning_cmd_exe_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -53,7 +57,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.003/powershell_spawn_cmd/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.003/powershell_spawn_cmd/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_psexec_with_accepteula_flag.yml b/detections/endpoint/detect_psexec_with_accepteula_flag.yml
index ebb7534c48..9ae14a53c0 100644
--- a/detections/endpoint/detect_psexec_with_accepteula_flag.yml
+++ b/detections/endpoint/detect_psexec_with_accepteula_flag.yml
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` values(Processes.process) as process
min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
- where `process_psexec` Processes.process=*accepteula* by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)`| `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | `detect_psexec_with_accepteula_flag_filter`'
+ where `process_psexec` Processes.process=*accepteula* by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)`| `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `detect_psexec_with_accepteula_flag_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -94,7 +98,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.002/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.002/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_rare_executables.yml b/detections/endpoint/detect_rare_executables.yml
index a19ca4ff86..caa455178d 100644
--- a/detections/endpoint/detect_rare_executables.yml
+++ b/detections/endpoint/detect_rare_executables.yml
@@ -1,7 +1,7 @@
name: Detect Rare Executables
id: 44fddcb2-8d3b-454c-874e-7c6de5a4f7ac
-version: '8'
-date: '2025-02-07'
+version: 9
+date: '2025-03-27'
author: Bhavin Patel, Splunk
status: production
type: Anomaly
@@ -19,9 +19,19 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` dc(Processes.dest) as dc_dest values(Processes.dest)
as dest values(Processes.user) as user min(_time) as firstTime max(_time) as lastTime
- from datamodel=Endpoint.Processes by Processes.process_name | `drop_dm_object_name(Processes)`
- | search dc_dest < 10 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `detect_rare_executables_filter`'
+ values(Processes.action) as action values(Processes.original_file_name) as original_file_name
+ values(Processes.parent_process) as parent_process values(Processes.parent_process_exec)
+ as parent_process_exec values(Processes.parent_process_guid) as parent_process_guid
+ values(Processes.parent_process_id) as parent_process_id values(Processes.parent_process_name)
+ as parent_process_name values(Processes.parent_process_path) as parent_process_path
+ values(Processes.process) as process values(Processes.process_exec) as process_exec
+ values(Processes.process_guid) as process_guid values(Processes.process_hash) as
+ process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.process_path) as process_path values(Processes.user_id)
+ as user_id values(Processes.vendor_product) as vendor_product from datamodel=Endpoint.Processes
+ by Processes.process_name | `drop_dm_object_name(Processes)` | search dc_dest <
+ 10 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` |
+ `detect_rare_executables_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/detect_rclone_command_line_usage.yml b/detections/endpoint/detect_rclone_command_line_usage.yml
index d5dae5c8af..0cca827775 100644
--- a/detections/endpoint/detect_rclone_command_line_usage.yml
+++ b/detections/endpoint/detect_rclone_command_line_usage.yml
@@ -1,7 +1,7 @@
name: Detect RClone Command-Line Usage
id: 32e0baea-b3f1-11eb-a2ce-acde48001122
-version: '8'
-date: '2025-03-03'
+version: '9'
+date: '2025-03-27'
author: Michael Haag, Splunk
status: production
type: TTP
@@ -20,9 +20,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rclone` Processes.process
IN ("*copy*", "*mega*", "*pcloud*", "*ftp*", "*--config*", "*--progress*", "*--no-check-certificate*",
- "*--ignore-existing*", "*--auto-confirm*", "*--transfers*", "*--multi-thread-streams*") by
- Processes.dest Processes.user Processes.parent_process Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ "*--ignore-existing*", "*--auto-confirm*", "*--transfers*", "*--multi-thread-streams*")
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `detect_rclone_command_line_usage_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
diff --git a/detections/endpoint/detect_regasm_spawning_a_process.yml b/detections/endpoint/detect_regasm_spawning_a_process.yml
index adc6c5a181..6775ddf818 100644
--- a/detections/endpoint/detect_regasm_spawning_a_process.yml
+++ b/detections/endpoint/detect_regasm_spawning_a_process.yml
@@ -1,6 +1,6 @@
name: Detect Regasm Spawning a Process
id: 72170ec5-f7d2-42f5-aefb-2b8be6aad15f
-version: 10
+version: 11
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -20,10 +20,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=regasm.exe
- NOT (Processes.process_name IN ("conhost.exe")) by Processes.dest Processes.user
- Processes.parent_process Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_regasm_spawning_a_process_filter`'
+ NOT (Processes.process_name IN ("conhost.exe")) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_regasm_spawning_a_process_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -90,7 +94,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_regasm_with_network_connection.yml b/detections/endpoint/detect_regasm_with_network_connection.yml
index 803e1d2cc8..a2933b40f0 100644
--- a/detections/endpoint/detect_regasm_with_network_connection.yml
+++ b/detections/endpoint/detect_regasm_with_network_connection.yml
@@ -1,6 +1,6 @@
name: Detect Regasm with Network Connection
id: 07921114-6db4-4e2e-ae58-3ea8a52ae93f
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -15,9 +15,11 @@ description: The following analytic detects the execution of regasm.exe establis
data_source:
- Sysmon EventID 3
search: '`sysmon` EventID=3 dest_ip!=10.0.0.0/8 dest_ip!=172.16.0.0/12 dest_ip!=192.168.0.0/16
- process_name=regasm.exe | stats count min(_time) as firstTime max(_time) as lastTime
- by dest, user, process_name, src_ip, dest_ip | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `detect_regasm_with_network_connection_filter`'
+ process_name=regasm.exe | stats count min(_time) as firstTime max(_time) as lastTime
+ by action app dest dest_ip dest_port direction dvc protocol protocol_version src
+ src_ip src_port transport user vendor_product process_name process_exec process_guid
+ process_id | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_regasm_with_network_connection_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
@@ -72,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_regasm_with_no_command_line_arguments.yml b/detections/endpoint/detect_regasm_with_no_command_line_arguments.yml
index a04e5c72a0..fe1d72e8a7 100644
--- a/detections/endpoint/detect_regasm_with_no_command_line_arguments.yml
+++ b/detections/endpoint/detect_regasm_with_no_command_line_arguments.yml
@@ -1,6 +1,6 @@
name: Detect Regasm with no Command Line Arguments
id: c3bc1430-04e7-4178-835f-047d8e6e97df
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where `process_regasm` by _time span=1h Processes.process_id Processes.process_name
- Processes.dest Processes.user Processes.process_path Processes.process Processes.parent_process_name
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | regex process="(?i)(regasm\.exe.{0,4}$)" | `detect_regasm_with_no_command_line_arguments_filter`'
+ where `process_regasm` by _time span=1h Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | regex
+ process="(?i)(regasm\.exe.{0,4}$)" | `detect_regasm_with_no_command_line_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -84,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_regsvcs_spawning_a_process.yml b/detections/endpoint/detect_regsvcs_spawning_a_process.yml
index 72541a45bc..eff567a17e 100644
--- a/detections/endpoint/detect_regsvcs_spawning_a_process.yml
+++ b/detections/endpoint/detect_regsvcs_spawning_a_process.yml
@@ -1,6 +1,6 @@
name: Detect Regsvcs Spawning a Process
id: bc477b57-5c21-4ab6-9c33-668772e7f114
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -20,8 +20,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=regsvcs.exe
- by Processes.parent_process_name Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `detect_regsvcs_spawning_a_process_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -85,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_regsvcs_with_network_connection.yml b/detections/endpoint/detect_regsvcs_with_network_connection.yml
index 160e0aad1e..0deeab2e7f 100644
--- a/detections/endpoint/detect_regsvcs_with_network_connection.yml
+++ b/detections/endpoint/detect_regsvcs_with_network_connection.yml
@@ -1,6 +1,6 @@
name: Detect Regsvcs with Network Connection
id: e3e7a1c0-f2b9-445c-8493-f30a63522d1a
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -17,8 +17,10 @@ data_source:
- Sysmon EventID 3
search: '`sysmon` EventID=3 dest_ip!=10.0.0.0/8 dest_ip!=172.16.0.0/12 dest_ip!=192.168.0.0/16
process_name=regsvcs.exe | stats count min(_time) as firstTime max(_time) as lastTime
- by dest, user, process_name, src_ip, dest_ip | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `detect_regsvcs_with_network_connection_filter`'
+ by action app dest dest_ip dest_port direction dvc protocol protocol_version src
+ src_ip src_port transport user vendor_product process_name process_exec process_guid
+ process_id | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_regsvcs_with_network_connection_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
@@ -72,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_regsvcs_with_no_command_line_arguments.yml b/detections/endpoint/detect_regsvcs_with_no_command_line_arguments.yml
index 79f0ca5b7e..87a36d76dd 100644
--- a/detections/endpoint/detect_regsvcs_with_no_command_line_arguments.yml
+++ b/detections/endpoint/detect_regsvcs_with_no_command_line_arguments.yml
@@ -1,6 +1,6 @@
name: Detect Regsvcs with No Command Line Arguments
id: 6b74d578-a02e-4e94-a0d1-39440d0bf254
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -17,9 +17,13 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where `process_regsvcs` by _time span=1h Processes.process_id Processes.process_name
- Processes.dest Processes.user Processes.process_path Processes.process Processes.parent_process_name
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
+ as lastTime FROM datamodel=Endpoint.Processes where `process_regsvcs` by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| regex process="(?i)(regsvcs\.exe.{0,4}$)"| `detect_regsvcs_with_no_command_line_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -82,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.009/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_regsvr32_application_control_bypass.yml b/detections/endpoint/detect_regsvr32_application_control_bypass.yml
index a3df354b36..b3d324c254 100644
--- a/detections/endpoint/detect_regsvr32_application_control_bypass.yml
+++ b/detections/endpoint/detect_regsvr32_application_control_bypass.yml
@@ -1,6 +1,6 @@
name: Detect Regsvr32 Application Control Bypass
id: 070e9b80-6252-11eb-ae93-0242ac130002
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_regsvr32` Processes.process=*scrobj*
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.parent_process_name Processes.process Processes.original_file_name Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | `detect_regsvr32_application_control_bypass_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `detect_regsvr32_application_control_bypass_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,6 +80,7 @@ tags:
- Cobalt Strike
- Compromised Windows Host
- BlackByte Ransomware
+ - PHP-CGI RCE Attack on Japanese Organizations
asset_type: Endpoint
mitre_attack_id:
- T1218.010
@@ -88,7 +92,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.010/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.010/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_remote_access_software_usage_file.yml b/detections/endpoint/detect_remote_access_software_usage_file.yml
index ea2a8f4d1b..7862036874 100644
--- a/detections/endpoint/detect_remote_access_software_usage_file.yml
+++ b/detections/endpoint/detect_remote_access_software_usage_file.yml
@@ -17,7 +17,10 @@ data_source:
- Sysmon EventID 11
search: '| tstats `security_content_summariesonly` count, min(_time) as firstTime,
max(_time) as lastTime, values(Filesystem.file_path) as file_path from datamodel=Endpoint.Filesystem
- by Filesystem.dest, Filesystem.user, Filesystem.file_name | `security_content_ctime(firstTime)`
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `drop_dm_object_name(Filesystem)` | lookup
remote_access_software remote_utility AS file_name OUTPUT isutility, description
as signature, comment_reference as desc, category | search isutility = TRUE | `remote_access_software_usage_exceptions`
@@ -54,7 +57,7 @@ drilldown_searches:
by normalized_risk_object | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: Investigate files on $dest$
+- name: Investigate files on $dest$
search: '| from datamodel:Endpoint.Filesystem | search dest=$dest$ file_name=$file_name$'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
@@ -94,7 +97,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1219/screenconnect/screenconnect_sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1219/screenconnect/screenconnect_sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_remote_access_software_usage_fileinfo.yml b/detections/endpoint/detect_remote_access_software_usage_fileinfo.yml
index 7e020435cd..1c62ce1b0b 100644
--- a/detections/endpoint/detect_remote_access_software_usage_fileinfo.yml
+++ b/detections/endpoint/detect_remote_access_software_usage_fileinfo.yml
@@ -14,13 +14,14 @@ description: The following analytic detects the execution of processes with file
potentially leading to data exfiltration or further compromise of the network.
data_source:
- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
search: '`sysmon` EventCode=1 | stats count min(_time) as firstTime max(_time) as
- lastTime, values(Company) as Company values(Product) as Product by dest, user, parent_process_name,
- process_name, process | lookup remote_access_software remote_utility_fileinfo AS
- Product OUTPUT isutility, description as signature, comment_reference as desc, category
- | search isutility = True | `remote_access_software_usage_exceptions` | `detect_remote_access_software_usage_fileinfo_filter`'
+ lastTime, values(Company) as Company values(Product) as Product by action dest original_file_name
+ parent_process parent_process_exec parent_process_guid parent_process_id parent_process_name
+ parent_process_path process process_exec process_guid process_hash process_id process_integrity_level
+ process_name process_path user user_id vendor_product | lookup remote_access_software
+ remote_utility_fileinfo AS Product OUTPUT isutility, description as signature, comment_reference
+ as desc, category | search isutility = True | `remote_access_software_usage_exceptions`
+ | `detect_remote_access_software_usage_fileinfo_filter`'
how_to_implement: This analytic relies on Sysmon to be properly installed and utilized
in the environment. Ensure that proper logging is setup for Sysmon and data is being
ingested into Splunk. The "exceptions" macro leverages both an Assets and Identities
@@ -47,7 +48,7 @@ drilldown_searches:
| `security_content_ctime(lastTime)`'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: Investigate processes on $dest$
+- name: Investigate processes on $dest$
search: '| from datamodel:Endpoint.Processes| search dest=$dest$ process_name=$process_name$'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
@@ -60,7 +61,7 @@ rba:
score: 25
- field: user
type: user
- score: 25
+ score: 25
threat_objects:
- field: process_name
type: process_name
@@ -86,7 +87,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1219/screenconnect/screenconnect_sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1219/screenconnect/screenconnect_sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_remote_access_software_usage_process.yml b/detections/endpoint/detect_remote_access_software_usage_process.yml
index dfc1a77662..7e5ebc6401 100644
--- a/detections/endpoint/detect_remote_access_software_usage_process.yml
+++ b/detections/endpoint/detect_remote_access_software_usage_process.yml
@@ -19,12 +19,16 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime values(Processes.parent_process) as parent_process from datamodel=Endpoint.Processes
- where Processes.dest!=unknown Processes.process!=unknown by Processes.dest Processes.user
- Processes.process_name Processes.process | `security_content_ctime(firstTime)` |
- `security_content_ctime(lastTime)` | `drop_dm_object_name(Processes)` | lookup remote_access_software
- remote_utility AS process_name OUTPUT isutility, description as signature, comment_reference
- as desc, category | search isutility = True | `remote_access_software_usage_exceptions`
- | `detect_remote_access_software_usage_process_filter`'
+ where Processes.dest!=unknown Processes.process!=unknown by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `drop_dm_object_name(Processes)`
+ | lookup remote_access_software remote_utility AS process_name OUTPUT isutility,
+ description as signature, comment_reference as desc, category | search isutility
+ = True | `remote_access_software_usage_exceptions` | `detect_remote_access_software_usage_process_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -59,7 +63,7 @@ drilldown_searches:
by normalized_risk_object | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: Investigate processes on $dest$
+- name: Investigate processes on $dest$
search: '| from datamodel:Endpoint.Processes| search dest=$dest$ process_name=$process_name$'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
@@ -99,7 +103,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1219/screenconnect/screenconnect_sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1219/screenconnect/screenconnect_sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_remote_access_software_usage_registry.yml b/detections/endpoint/detect_remote_access_software_usage_registry.yml
index bfaea30e25..24743bc8d6 100644
--- a/detections/endpoint/detect_remote_access_software_usage_registry.yml
+++ b/detections/endpoint/detect_remote_access_software_usage_registry.yml
@@ -1,79 +1,82 @@
-name: Detect Remote Access Software Usage Registry
-id: 33804986-25dd-43cf-bb6b-dc14956c7cbc
-version: 5
-date: '2025-03-24'
-author: Steven Dick
-status: production
-type: Anomaly
-description: The following analytic detects when a known remote access software is added to common persistence locations on a device within the environment. Adversaries use these utilities to retain remote access capabilities to the environment. Utilities in the lookup include AnyDesk, GoToMyPC, LogMeIn, TeamViewer and much more. Review the lookup for the entire list and add any others.
-data_source:
-- Sysmon EventID 12
-- Sysmon EventID 13
-search: '| tstats `security_content_summariesonly` latest(Registry.process_guid) as process_guid count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Registry where (Registry.registry_path="*\\Microsoft\\Windows\\CurrentVersion\\Run*" OR (Registry.registry_path="*\\SYSTEM\\CurrentControlSet\\Services\\*" AND Registry.registry_value_name="ImagePath")) by Registry.dest Registry.user Registry.registry_path Registry.registry_value_name Registry.registry_value_data Registry.registry_key_name
-| `drop_dm_object_name(Registry)`
-| `security_content_ctime(firstTime)`
-| `security_content_ctime(lastTime)`
-| rex field=registry_value_data "(\")?.+\\\(?[^\"=]+\.[^\" ]{1,5})(\")?"
-| rex field=registry_value_data "(?[^\.]+\.[^\" ]{1,5}$)"
-| eval file_name = coalesce(file_name_1,file_name_2)
-| lookup remote_access_software remote_utility AS file_name OUTPUT isutility, description as signature, comment_reference as desc, category
-| search isutility = TRUE
-| `remote_access_software_usage_exceptions`
-| `detect_remote_access_software_usage_registry_filter`'
-how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the file path, file name, and the user that created the file. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Registry` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process. The "exceptions" macro leverages both an Assets and Identities lookup, as well as a KVStore collection called "remote_software_exceptions" that lets you track and maintain device-based exceptions for this set of detections.
-known_false_positives: Known or approved applications used by the organization or usage of built-in functions. Known false positives can be added to the remote_access_software_usage_exception.csv lookup to globally suppress these situations across all remote access content
-references:
-- https://attack.mitre.org/techniques/T1219/
-- https://thedfirreport.com/2022/08/08/bumblebee-roasts-its-way-to-domain-admin/
-- https://thedfirreport.com/2022/11/28/emotet-strikes-again-lnk-file-leads-to-domain-wide-ransomware/
-drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
- earliest_offset: $info_min_time$
- latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$","$user$") 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)`'
- earliest_offset: $info_min_time$
- latest_offset: $info_max_time$
-- name: Investigate registry changes on $dest$
- search: '| from datamodel:Endpoint.Registry| search dest=$dest$ registry_path=$registry_path$'
- earliest_offset: $info_min_time$
- latest_offset: $info_max_time$
-rba:
- message: A process for a known remote access software [$signature$] was detected on $dest$
- risk_objects:
- - field: dest
- type: system
- score: 25
- - field: user
- type: user
- score: 25
- threat_objects:
- - field: registry_path
- type: registry_path
- - field: signature
- type: signature
-tags:
- analytic_story:
- - Insider Threat
- - Command And Control
- - Ransomware
- - Gozi Malware
- - CISA AA24-241A
- - Remote Monitoring and Management Software
- - Seashell Blizzard
- asset_type: Endpoint
- mitre_attack_id:
- - T1219
- product:
- - Splunk Enterprise
- - Splunk Enterprise Security
- - Splunk Cloud
- security_domain: endpoint
- manual_test: This detection uses A&I lookups from Enterprise Security.
-tests:
-- name: True Positive Test
- attack_data:
- - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1219/screenconnect/screenconnect_sysmon.log
- source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
- sourcetype: XmlWinEventLog
+name: Detect Remote Access Software Usage Registry
+id: 33804986-25dd-43cf-bb6b-dc14956c7cbc
+version: 5
+date: '2025-03-24'
+author: Steven Dick
+status: production
+type: Anomaly
+description: The following analytic detects when a known remote access software is added to common persistence locations on a device within the environment. Adversaries use these utilities to retain remote access capabilities to the environment. Utilities in the lookup include AnyDesk, GoToMyPC, LogMeIn, TeamViewer and much more. Review the lookup for the entire list and add any others.
+data_source:
+- Sysmon EventID 12
+- Sysmon EventID 13
+search: '| tstats `security_content_summariesonly` latest(Registry.process_guid) as process_guid count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Registry where (Registry.registry_path="*\\Microsoft\\Windows\\CurrentVersion\\Run*" OR (Registry.registry_path="*\\SYSTEM\\CurrentControlSet\\Services\\*" AND Registry.registry_value_name="ImagePath"))
+ by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)`
+ | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)`
+ | rex field=registry_value_data "(\")?.+\\\(?[^\"=]+\.[^\" ]{1,5})(\")?"
+ | rex field=registry_value_data "(?[^\.]+\.[^\" ]{1,5}$)"
+ | eval file_name = coalesce(file_name_1,file_name_2)
+ | lookup remote_access_software remote_utility AS file_name OUTPUT isutility, description as signature, comment_reference as desc, category
+ | search isutility = TRUE
+ | `remote_access_software_usage_exceptions`
+ | `detect_remote_access_software_usage_registry_filter`'
+how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the file path, file name, and the user that created the file. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Registry` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process. The "exceptions" macro leverages both an Assets and Identities lookup, as well as a KVStore collection called "remote_software_exceptions" that lets you track and maintain device-based exceptions for this set of detections.
+known_false_positives: Known or approved applications used by the organization or usage of built-in functions. Known false positives can be added to the remote_access_software_usage_exception.csv lookup to globally suppress these situations across all remote access content
+references:
+- https://attack.mitre.org/techniques/T1219/
+- https://thedfirreport.com/2022/08/08/bumblebee-roasts-its-way-to-domain-admin/
+- https://thedfirreport.com/2022/11/28/emotet-strikes-again-lnk-file-leads-to-domain-wide-ransomware/
+drilldown_searches:
+- name: View the detection results for - "$dest$" and "$user$"
+ search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+ earliest_offset: $info_min_time$
+ latest_offset: $info_max_time$
+- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$","$user$") 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)`'
+ earliest_offset: $info_min_time$
+ latest_offset: $info_max_time$
+- name: Investigate registry changes on $dest$
+ search: '| from datamodel:Endpoint.Registry| search dest=$dest$ registry_path=$registry_path$'
+ earliest_offset: $info_min_time$
+ latest_offset: $info_max_time$
+rba:
+ message: A process for a known remote access software [$signature$] was detected on $dest$
+ risk_objects:
+ - field: dest
+ type: system
+ score: 25
+ - field: user
+ type: user
+ score: 25
+ threat_objects:
+ - field: registry_path
+ type: registry_path
+ - field: signature
+ type: signature
+tags:
+ analytic_story:
+ - Insider Threat
+ - Command And Control
+ - Ransomware
+ - Gozi Malware
+ - CISA AA24-241A
+ - Remote Monitoring and Management Software
+ - Seashell Blizzard
+ asset_type: Endpoint
+ mitre_attack_id:
+ - T1219
+ product:
+ - Splunk Enterprise
+ - Splunk Enterprise Security
+ - Splunk Cloud
+ security_domain: endpoint
+ manual_test: This detection uses A&I lookups from Enterprise Security.
+tests:
+- name: True Positive Test
+ attack_data:
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1219/screenconnect/screenconnect_sysmon.log
+ source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
+ sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_renamed_7_zip.yml b/detections/endpoint/detect_renamed_7_zip.yml
index 62309db2ab..8f1dedf31b 100644
--- a/detections/endpoint/detect_renamed_7_zip.yml
+++ b/detections/endpoint/detect_renamed_7_zip.yml
@@ -1,6 +1,6 @@
name: Detect Renamed 7-Zip
id: 4057291a-b8cf-11eb-95fe-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -20,10 +20,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.original_file_name=7z*.exe
- AND Processes.process_name!=7z*.exe) by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.original_file_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `detect_renamed_7_zip_filter`'
+ AND Processes.process_name!=7z*.exe) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_renamed_7_zip_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -51,7 +54,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1560.001/archive_utility/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1560.001/archive_utility/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_renamed_psexec.yml b/detections/endpoint/detect_renamed_psexec.yml
index a812fd298b..c396f002a5 100644
--- a/detections/endpoint/detect_renamed_psexec.yml
+++ b/detections/endpoint/detect_renamed_psexec.yml
@@ -1,7 +1,7 @@
name: Detect Renamed PSExec
id: 683e6196-b8e8-11eb-9a79-acde48001122
-version: '13'
-date: '2025-03-25'
+version: 13
+date: '2025-03-27'
author: Michael Haag, Splunk, Alex Oberkircher, Github Community
status: production
type: Hunting
@@ -19,8 +19,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name!=psexec.exe
AND Processes.process_name!=psexec64.exe) AND Processes.original_file_name=psexec.c
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.original_file_name
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `detect_renamed_psexec_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
diff --git a/detections/endpoint/detect_renamed_rclone.yml b/detections/endpoint/detect_renamed_rclone.yml
index 8d842c1444..d4b903df6d 100644
--- a/detections/endpoint/detect_renamed_rclone.yml
+++ b/detections/endpoint/detect_renamed_rclone.yml
@@ -1,7 +1,7 @@
name: Detect Renamed RClone
id: 6dca1124-b3ec-11eb-9328-acde48001122
-version: '7'
-date: '2025-03-03'
+version: 8
+date: '2025-03-27'
author: Michael Haag, Splunk
status: production
type: Hunting
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.original_file_name=rclone.exe
- AND Processes.process_name!=rclone.exe) by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.original_file_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `detect_renamed_rclone_filter`'
+ AND Processes.process_name!=rclone.exe) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_renamed_rclone_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/detect_renamed_winrar.yml b/detections/endpoint/detect_renamed_winrar.yml
index f676b4c7db..8900ec7c2a 100644
--- a/detections/endpoint/detect_renamed_winrar.yml
+++ b/detections/endpoint/detect_renamed_winrar.yml
@@ -1,7 +1,7 @@
name: Detect Renamed WinRAR
id: 1b7bfb2c-b8e6-11eb-99ac-acde48001122
-version: '10'
-date: '2025-02-24'
+version: 11
+date: '2025-03-27'
author: Michael Haag, Splunk
status: production
type: Hunting
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.original_file_name=WinRAR.exe
- (Processes.process_name!=rar.exe OR Processes.process_name!=winrar.exe) by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.original_file_name |
- `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ (Processes.process_name!=rar.exe OR Processes.process_name!=winrar.exe) by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `detect_renamed_winrar_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
diff --git a/detections/endpoint/detect_rtlo_in_file_name.yml b/detections/endpoint/detect_rtlo_in_file_name.yml
index 5e65a0dda2..452101b9f7 100644
--- a/detections/endpoint/detect_rtlo_in_file_name.yml
+++ b/detections/endpoint/detect_rtlo_in_file_name.yml
@@ -1,6 +1,6 @@
name: Detect RTLO In File Name
id: 468b7e11-d362-43b8-b6ec-7a2d3b246678
-version: 6
+version: 7
date: '2025-02-10'
author: Steven Dick
status: production
@@ -16,9 +16,11 @@ data_source:
- Sysmon EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime values(Filesystem.file_create_time) as file_create_time from datamodel=Endpoint.Filesystem
- where Filesystem.file_name!=unknown by Filesystem.dest Filesystem.user Filesystem.process_id
- Filesystem.file_name Filesystem.file_path | `drop_dm_object_name(Filesystem)` |
- `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | regex
+ where Filesystem.file_name!=unknown by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | regex
file_name = "\\x{202E}" | rex field=file_name "(?.+)(?\\x{202E})(?.+)"
| eval file_name_with_RTLO=file_name | eval file_name=RTLO_file_1.RTLO_file_2 |
fields - RTLO* | `detect_rtlo_in_file_name_filter`'
@@ -73,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.002/outlook_attachment/rtlo_events.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.002/outlook_attachment/rtlo_events.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_rtlo_in_process.yml b/detections/endpoint/detect_rtlo_in_process.yml
index c9ee16ee83..6357badfa2 100644
--- a/detections/endpoint/detect_rtlo_in_process.yml
+++ b/detections/endpoint/detect_rtlo_in_process.yml
@@ -1,6 +1,6 @@
name: Detect RTLO In Process
id: 22ac27b4-7189-4a4f-9375-b9017c9620d7
-version: 6
+version: 7
date: '2025-02-10'
author: Steven Dick
status: production
@@ -18,9 +18,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process!=unknown AND
- Processes.action=allowed by Processes.dest Processes.user Processes.original_file_name
- Processes.parent_process_name Processes.parent_process Processes.process_name Processes.process
- Processes.process_id Processes.process_guid Processes.parent_process_id | `security_content_ctime(firstTime)`
+ Processes.action=allowed by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `drop_dm_object_name(Processes)` | regex
process="\\x{202E}" | rex field=process "(?.+)(?\\x{202E})(?.+)"
| eval process_with_RTLO=process | eval process=RTLO_command_1.RTLO_command_2 |
@@ -80,7 +83,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.002/outlook_attachment/rtlo_events.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.002/outlook_attachment/rtlo_events.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_rundll32_application_control_bypass___advpack.yml b/detections/endpoint/detect_rundll32_application_control_bypass___advpack.yml
index 710a02181c..b47a9f148c 100644
--- a/detections/endpoint/detect_rundll32_application_control_bypass___advpack.yml
+++ b/detections/endpoint/detect_rundll32_application_control_bypass___advpack.yml
@@ -1,6 +1,6 @@
name: Detect Rundll32 Application Control Bypass - advpack
id: 4aefadfe-9abd-4bf8-b3fd-867e9ef95bf8
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*advpack*
- by Processes.dest Processes.user Processes.parent_process_name Processes.original_file_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `detect_rundll32_application_control_bypass___advpack_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -86,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_rundll32_application_control_bypass___setupapi.yml b/detections/endpoint/detect_rundll32_application_control_bypass___setupapi.yml
index 2ee5451c0e..644cd4d8f0 100644
--- a/detections/endpoint/detect_rundll32_application_control_bypass___setupapi.yml
+++ b/detections/endpoint/detect_rundll32_application_control_bypass___setupapi.yml
@@ -1,6 +1,6 @@
name: Detect Rundll32 Application Control Bypass - setupapi
id: 61e7b44a-6088-4f26-b788-9a96ba13b37a
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*setupapi*
- by Processes.dest Processes.user Processes.parent_process_name Processes.original_file_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `detect_rundll32_application_control_bypass___setupapi_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -86,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_rundll32_application_control_bypass___syssetup.yml b/detections/endpoint/detect_rundll32_application_control_bypass___syssetup.yml
index 86662d958f..7a7385f65e 100644
--- a/detections/endpoint/detect_rundll32_application_control_bypass___syssetup.yml
+++ b/detections/endpoint/detect_rundll32_application_control_bypass___syssetup.yml
@@ -1,6 +1,6 @@
name: Detect Rundll32 Application Control Bypass - syssetup
id: 71b9bf37-cde1-45fb-b899-1b0aa6fa1183
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*syssetup*
- by Processes.dest Processes.user Processes.parent_process_name Processes.original_file_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `detect_rundll32_application_control_bypass___syssetup_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -86,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_rundll32_inline_hta_execution.yml b/detections/endpoint/detect_rundll32_inline_hta_execution.yml
index 3a1a84e20a..31b46aa937 100644
--- a/detections/endpoint/detect_rundll32_inline_hta_execution.yml
+++ b/detections/endpoint/detect_rundll32_inline_hta_execution.yml
@@ -1,6 +1,6 @@
name: Detect Rundll32 Inline HTA Execution
id: 91c79f14-5b41-11eb-ae93-0242ac130002
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -20,9 +20,13 @@ search: '| tstats `security_content_summariesonly` count values(Processes.proces
as process values(Processes.parent_process) as parent_process min(_time) as firstTime
max(_time) as lastTime from datamodel=Endpoint.Processes where `process_rundll32`
(Processes.process=*vbscript* OR Processes.process=*javascript* OR Processes.process=*about*)
- by Processes.user Processes.process_name Processes.parent_process_name Processes.original_file_name
- Processes.dest | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | `detect_rundll32_inline_hta_execution_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `detect_rundll32_inline_hta_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_sharphound_command_line_arguments.yml b/detections/endpoint/detect_sharphound_command_line_arguments.yml
index f1763e793c..e1a4404663 100644
--- a/detections/endpoint/detect_sharphound_command_line_arguments.yml
+++ b/detections/endpoint/detect_sharphound_command_line_arguments.yml
@@ -1,6 +1,6 @@
name: Detect SharpHound Command-Line Arguments
id: a0bdd2f6-c2ff-11eb-b918-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,9 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process IN ("*-collectionMethod*","*invoke-bloodhound*")
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_sharphound_command_line_arguments_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_sharphound_command_line_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -80,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/sharphound/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/sharphound/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_sharphound_file_modifications.yml b/detections/endpoint/detect_sharphound_file_modifications.yml
index 9054f588ce..6f4f8a182b 100644
--- a/detections/endpoint/detect_sharphound_file_modifications.yml
+++ b/detections/endpoint/detect_sharphound_file_modifications.yml
@@ -1,6 +1,6 @@
name: Detect SharpHound File Modifications
id: 42b4b438-beed-11eb-ba1d-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,8 +18,10 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Filesystem where Filesystem.file_name IN ("*bloodhound.zip",
"*_computers.json", "*_gpos.json", "*_domains.json", "*_users.json", "*_groups.json",
- "*_ous.json", "*_containers.json") by Filesystem.file_create_time Filesystem.process_id Filesystem.file_name
- Filesystem.file_path Filesystem.dest Filesystem.user| `drop_dm_object_name(Filesystem)`
+ "*_ous.json", "*_containers.json") by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_sharphound_file_modifications_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on file modifications that include the name of the process, and file, responsible
@@ -77,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/sharphound/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/sharphound/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_sharphound_usage.yml b/detections/endpoint/detect_sharphound_usage.yml
index ce759de968..e292dfa6d5 100644
--- a/detections/endpoint/detect_sharphound_usage.yml
+++ b/detections/endpoint/detect_sharphound_usage.yml
@@ -1,6 +1,6 @@
name: Detect SharpHound Usage
id: dd04b29a-beed-11eb-87bc-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=sharphound.exe
- OR Processes.original_file_name=SharpHound.exe) by Processes.dest Processes.user
- Processes.parent_process_name Processes.original_file_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `detect_sharphound_usage_filter`'
+ OR Processes.original_file_name=SharpHound.exe) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_sharphound_usage_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -80,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/sharphound/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/sharphound/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_suspicious_processnames_using_pretrained_model_in_dsdl.yml b/detections/endpoint/detect_suspicious_processnames_using_pretrained_model_in_dsdl.yml
index 93af7b9881..9788ad2e58 100644
--- a/detections/endpoint/detect_suspicious_processnames_using_pretrained_model_in_dsdl.yml
+++ b/detections/endpoint/detect_suspicious_processnames_using_pretrained_model_in_dsdl.yml
@@ -1,6 +1,6 @@
name: Detect suspicious processnames using pretrained model in DSDL
id: a15f8977-ad7d-4669-92ef-b59b97219bf5
-version: 5
+version: 6
date: '2024-11-13'
author: Abhinav Mishra, Kumar Sharad and Namratha Sreekanta, Splunk
type: Anomaly
@@ -17,12 +17,16 @@ description: The following analytic identifies suspicious process names using a
the presence of malware capable of propagating across the network and executing
harmful actions.
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes by Processes.process_name Processes.parent_process_name
- Processes.process Processes.user Processes.dest | `drop_dm_object_name(Processes)`
- | rename process_name as text | fields text, parent_process_name, process, user,
- dest | apply detect_suspicious_processnames_using_pretrained_model_in_dsdl | rename
- predicted_label as is_suspicious_score | rename text as process_name | where is_suspicious_score
- > 0.5 | `detect_suspicious_processnames_using_pretrained_model_in_dsdl_filter`'
+ as lastTime from datamodel=Endpoint.Processes by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | rename process_name as text | fields text,
+ parent_process_name, process, user, dest | apply detect_suspicious_processnames_using_pretrained_model_in_dsdl
+ | rename predicted_label as is_suspicious_score | rename text as process_name |
+ where is_suspicious_score > 0.5 | `detect_suspicious_processnames_using_pretrained_model_in_dsdl_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/detect_use_of_cmd_exe_to_launch_script_interpreters.yml b/detections/endpoint/detect_use_of_cmd_exe_to_launch_script_interpreters.yml
index 307509b731..53e8f3e6c5 100644
--- a/detections/endpoint/detect_use_of_cmd_exe_to_launch_script_interpreters.yml
+++ b/detections/endpoint/detect_use_of_cmd_exe_to_launch_script_interpreters.yml
@@ -1,6 +1,6 @@
name: Detect Use of cmd exe to Launch Script Interpreters
id: b89919ed-fe5f-492c-b139-95dbb162039e
-version: 9
+version: 10
date: '2025-02-10'
author: Bhavin Patel, Mauricio Velazco, Splunk
status: production
@@ -18,9 +18,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name="cmd.exe"
- (Processes.process_name=cscript.exe OR Processes.process_name =wscript.exe) by Processes.parent_process
- Processes.process_name Processes.process Processes.user Processes.dest | `drop_dm_object_name("Processes")`
- | `security_content_ctime(firstTime)`|`security_content_ctime(lastTime)` | `detect_use_of_cmd_exe_to_launch_script_interpreters_filter`'
+ (Processes.process_name=cscript.exe OR Processes.process_name =wscript.exe) by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)`|`security_content_ctime(lastTime)`
+ | `detect_use_of_cmd_exe_to_launch_script_interpreters_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.003/cmd_spawns_cscript/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.003/cmd_spawns_cscript/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detect_wmi_event_subscription_persistence.yml b/detections/endpoint/detect_wmi_event_subscription_persistence.yml
index 5aff76c6d1..501b884c0d 100644
--- a/detections/endpoint/detect_wmi_event_subscription_persistence.yml
+++ b/detections/endpoint/detect_wmi_event_subscription_persistence.yml
@@ -1,6 +1,6 @@
name: Detect WMI Event Subscription Persistence
id: 01d9a0c2-cece-11eb-ab46-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -16,8 +16,9 @@ description: The following analytic identifies the creation of WMI Event Subscri
data_source:
- Sysmon EventID 20
search: '`sysmon` EventID=20 | stats count min(_time) as firstTime max(_time) as lastTime
- by Computer User Destination | rename Computer as dest | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `detect_wmi_event_subscription_persistence_filter`'
+ by dest dvc object object_category object_path signature signature_id src status
+ user user_id vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `detect_wmi_event_subscription_persistence_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with that provide WMI Event Subscription from your endpoints. If you are using
Sysmon, you must have at least version 6.0.4 of the Sysmon TA and have enabled EventID
@@ -65,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.003/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.003/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/detection_of_tools_built_by_nirsoft.yml b/detections/endpoint/detection_of_tools_built_by_nirsoft.yml
index c832f0c8c9..945bb2a461 100644
--- a/detections/endpoint/detection_of_tools_built_by_nirsoft.yml
+++ b/detections/endpoint/detection_of_tools_built_by_nirsoft.yml
@@ -1,6 +1,6 @@
name: Detection of tools built by NirSoft
id: 3d8d201c-aa03-422d-b0ee-2e5ecf9718c0
-version: 6
+version: 7
date: '2024-11-13'
author: Bhavin Patel, Splunk
status: experimental
@@ -19,9 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) values(Processes.process)
as process max(_time) as lastTime from datamodel=Endpoint.Processes where (Processes.process="*
- /stext *" OR Processes.process="* /scomma *" ) by Processes.parent_process Processes.process_name
- Processes.user Processes.dest | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- |`security_content_ctime(lastTime)` | `detection_of_tools_built_by_nirsoft_filter`'
+ /stext *" OR Processes.process="* /scomma *" ) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)`
+ | `detection_of_tools_built_by_nirsoft_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/disable_amsi_through_registry.yml b/detections/endpoint/disable_amsi_through_registry.yml
index 14d1624a73..a43ec8600f 100644
--- a/detections/endpoint/disable_amsi_through_registry.yml
+++ b/detections/endpoint/disable_amsi_through_registry.yml
@@ -1,6 +1,6 @@
name: Disable AMSI Through Registry
id: 9c27ec42-d338-11eb-9044-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,11 +18,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows
- Script\\Settings\\AmsiEnable" Registry.registry_value_data = "0x00000000") BY Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid Registry.dest Registry.user | `drop_dm_object_name(Registry)`
- | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `disable_amsi_through_registry_filter`'
+ Script\\Settings\\AmsiEnable" Registry.registry_value_data = "0x00000000") by Registry.action
+ Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `disable_amsi_through_registry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -69,7 +70,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_defender_antivirus_registry.yml b/detections/endpoint/disable_defender_antivirus_registry.yml
index d7b9f60813..23d73ae35d 100644
--- a/detections/endpoint/disable_defender_antivirus_registry.yml
+++ b/detections/endpoint/disable_defender_antivirus_registry.yml
@@ -1,7 +1,7 @@
name: Disable Defender AntiVirus Registry
id: aa4f695a-3024-11ec-9987-acde48001122
-version: '10'
-date: '2025-03-03'
+version: 11
+date: '2025-03-27'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
type: TTP
@@ -19,10 +19,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path = "*\\Policies\\Microsoft\\Windows
Defender*" Registry.registry_value_name IN ("DisableAntiSpyware","DisableAntiVirus")
- Registry.registry_value_data = 0x00000001) BY Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
- Registry.user Registry.dest | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disable_defender_antivirus_registry_filter`'
+ Registry.registry_value_data = 0x00000001) by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
+ | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `disable_defender_antivirus_registry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
diff --git a/detections/endpoint/disable_defender_blockatfirstseen_feature.yml b/detections/endpoint/disable_defender_blockatfirstseen_feature.yml
index 6ba3bf0b44..1dc7248e71 100644
--- a/detections/endpoint/disable_defender_blockatfirstseen_feature.yml
+++ b/detections/endpoint/disable_defender_blockatfirstseen_feature.yml
@@ -1,6 +1,6 @@
name: Disable Defender BlockAtFirstSeen Feature
id: 2dd719ac-3021-11ec-97b4-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,10 +18,11 @@ description: The following analytic detects the modification of the Windows regi
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path = "*\\Microsoft\\Windows
Defender\\SpyNet*" Registry.registry_value_name = DisableBlockAtFirstSeen Registry.registry_value_data
- = 0x00000001) BY Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid Registry.user Registry.dest |
- `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `disable_defender_blockatfirstseen_feature_filter`'
+ = 0x00000001) by Registry.action Registry.dest Registry.process_guid Registry.process_id
+ Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data
+ Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user
+ Registry.vendor_product | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disable_defender_blockatfirstseen_feature_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -70,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_defender_enhanced_notification.yml b/detections/endpoint/disable_defender_enhanced_notification.yml
index 6475fe086a..79ce4fecec 100644
--- a/detections/endpoint/disable_defender_enhanced_notification.yml
+++ b/detections/endpoint/disable_defender_enhanced_notification.yml
@@ -1,6 +1,6 @@
name: Disable Defender Enhanced Notification
id: dc65678c-301f-11ec-8e30-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -15,21 +15,16 @@ description: The following analytic detects the modification of the registry to
mechanisms, maintain persistence, and escalate their activities without triggering
alerts.
data_source:
-- Sysmon EventID 1 AND Sysmon EventID 12
-- Sysmon EventID 1 AND Sysmon EventID 13
-search: '| tstats `security_content_summariesonly` count min(_time) AS firstTime max(_time)
- AS lastTime FROM datamodel=Endpoint.Processes BY _time span=1h Processes.user Processes.process_id
- Processes.process_name Processes.process Processes.process_path Processes.dest Processes.parent_process_name
- Processes.parent_process Processes.process_guid | `drop_dm_object_name(Processes)`
- | join process_guid [ | tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
+- Sysmon EventID 12
+- Sysmon EventID 13
+search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
WHERE (Registry.registry_path = "*Microsoft\\Windows Defender\\Reporting*" Registry.registry_value_name
- = DisableEnhancedNotifications Registry.registry_value_data = 0x00000001) BY _time
- span=1h Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid | `drop_dm_object_name(Registry)`]
- | fields firstTime lastTime dest user parent_process_name parent_process process_name
- process_path process registry_key_name registry_path registry_value_name registry_value_data
- process_guid | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `disable_defender_enhanced_notification_filter`'
+ = DisableEnhancedNotifications Registry.registry_value_data = 0x00000001) by Registry.action
+ Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `disable_defender_enhanced_notification_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -83,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_defender_mpengine_registry.yml b/detections/endpoint/disable_defender_mpengine_registry.yml
index 478158f880..e6230f8ca0 100644
--- a/detections/endpoint/disable_defender_mpengine_registry.yml
+++ b/detections/endpoint/disable_defender_mpengine_registry.yml
@@ -1,6 +1,6 @@
name: Disable Defender MpEngine Registry
id: cc391750-3024-11ec-955a-acde48001122
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,10 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path = "*\\Policies\\Microsoft\\Windows
Defender\\MpEngine*" Registry.registry_value_name = MpEnablePus Registry.registry_value_data
- = 0x00000000) BY Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid Registry.user Registry.dest |
- `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `disable_defender_mpengine_registry_filter`'
+ = 0x00000000) by Registry.action Registry.dest Registry.process_guid Registry.process_id
+ Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data
+ Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user
+ Registry.vendor_product | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disable_defender_mpengine_registry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -68,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_defender_spynet_reporting.yml b/detections/endpoint/disable_defender_spynet_reporting.yml
index f14bf9bba4..9c27eb61b6 100644
--- a/detections/endpoint/disable_defender_spynet_reporting.yml
+++ b/detections/endpoint/disable_defender_spynet_reporting.yml
@@ -1,6 +1,6 @@
name: Disable Defender Spynet Reporting
id: 898debf4-3021-11ec-ba7c-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,10 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path = "*\\Microsoft\\Windows
Defender\\SpyNet*" Registry.registry_value_name = SpynetReporting Registry.registry_value_data
- = 0x00000000) BY Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid Registry.user Registry.dest |
- `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `disable_defender_spynet_reporting_filter`'
+ = 0x00000000) by Registry.action Registry.dest Registry.process_guid Registry.process_id
+ Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data
+ Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user
+ Registry.vendor_product | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disable_defender_spynet_reporting_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -71,7 +72,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_defender_submit_samples_consent_feature.yml b/detections/endpoint/disable_defender_submit_samples_consent_feature.yml
index a1fb6f378c..466a408f1c 100644
--- a/detections/endpoint/disable_defender_submit_samples_consent_feature.yml
+++ b/detections/endpoint/disable_defender_submit_samples_consent_feature.yml
@@ -1,6 +1,6 @@
name: Disable Defender Submit Samples Consent Feature
id: 73922ff8-3022-11ec-bf5e-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,10 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path = "*\\Microsoft\\Windows
Defender\\SpyNet*" Registry.registry_value_name = SubmitSamplesConsent Registry.registry_value_data
- = 0x00000000) BY Registry.user Registry.dest Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
- | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `disable_defender_submit_samples_consent_feature_filter`'
+ = 0x00000000) by Registry.action Registry.dest Registry.process_guid Registry.process_id
+ Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data
+ Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user
+ Registry.vendor_product | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disable_defender_submit_samples_consent_feature_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -70,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_etw_through_registry.yml b/detections/endpoint/disable_etw_through_registry.yml
index f57b860b1f..4556ffae7f 100644
--- a/detections/endpoint/disable_etw_through_registry.yml
+++ b/detections/endpoint/disable_etw_through_registry.yml
@@ -1,6 +1,6 @@
name: Disable ETW Through Registry
id: f0eacfa4-d33f-11eb-8f9d-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -17,10 +17,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\SOFTWARE\\Microsoft\\.NETFramework\\ETWEnabled"
- Registry.registry_value_data = "0x00000000") BY Registry.dest Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disable_etw_through_registry_filter`'
+ Registry.registry_value_data = "0x00000000") by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
+ | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `disable_etw_through_registry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -66,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_logs_using_wevtutil.yml b/detections/endpoint/disable_logs_using_wevtutil.yml
index 434b6452ec..7cf134f07a 100644
--- a/detections/endpoint/disable_logs_using_wevtutil.yml
+++ b/detections/endpoint/disable_logs_using_wevtutil.yml
@@ -1,6 +1,6 @@
name: Disable Logs Using WevtUtil
id: 236e7c8e-c9d9-11eb-a824-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "wevtutil.exe"
AND (Processes.process = "*sl*" OR Processes.process = "*set-log*" ) Processes.process
- = "*/e:false*" by Processes.parent_process_name Processes.parent_process Processes.process_name
- Processes.process Processes.dest Processes.user Processes.process_id Processes.process_guid
+ = "*/e:false*" by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `disable_logs_using_wevtutil_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -73,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_registry_tool.yml b/detections/endpoint/disable_registry_tool.yml
index 930c9bc731..c7080c8ebd 100644
--- a/detections/endpoint/disable_registry_tool.yml
+++ b/detections/endpoint/disable_registry_tool.yml
@@ -1,14 +1,13 @@
name: Disable Registry Tool
id: cd2cf33c-9201-11eb-a10a-acde48001122
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
type: TTP
description: The following analytic detects modifications to the Windows registry
aimed at disabling the Registry Editor (regedit). It leverages data from the Endpoint.Registry
- data model, specifically monitoring changes to the registry path
- "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\DisableRegistryTools"
+ data model, specifically monitoring changes to the registry path "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\DisableRegistryTools"
with a value of "0x00000001". This activity is significant because malware, such
as RATs or trojans, often disable registry tools to prevent the removal of their
entries, aiding in persistence and defense evasion. If confirmed malicious, this
@@ -18,10 +17,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\DisableRegistryTools"
- Registry.registry_value_data = "0x00000001") BY Registry.user Registry.dest Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)`| where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disable_registry_tool_filter`'
+ Registry.registry_value_data = "0x00000001") by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`|
+ where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `disable_registry_tool_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -67,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_schedule_task.yml b/detections/endpoint/disable_schedule_task.yml
index 43abf6fe4d..2db9f358ce 100644
--- a/detections/endpoint/disable_schedule_task.yml
+++ b/detections/endpoint/disable_schedule_task.yml
@@ -1,6 +1,6 @@
name: Disable Schedule Task
id: db596056-3019-11ec-a9ff-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -19,8 +19,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_name=schtasks.exe
- Processes.process=*/change* Processes.process=*/disable* by Processes.user Processes.process_name
- Processes.process Processes.parent_process_name Processes.parent_process Processes.dest
+ Processes.process=*/change* Processes.process=*/disable* by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `disable_schedule_task_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -72,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_schtask/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_schtask/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_security_logs_using_minint_registry.yml b/detections/endpoint/disable_security_logs_using_minint_registry.yml
index 8dc9c18150..144b97ce74 100644
--- a/detections/endpoint/disable_security_logs_using_minint_registry.yml
+++ b/detections/endpoint/disable_security_logs_using_minint_registry.yml
@@ -1,6 +1,6 @@
name: Disable Security Logs Using MiniNt Registry
id: 39ebdc68-25b9-11ec-aec7-acde48001122
-version: 9
+version: 10
date: '2024-12-08'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -17,8 +17,9 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path="*\\Control\\MiniNt\\*")
- BY Registry.user Registry.dest Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
+ by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive
+ Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
| `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `disable_security_logs_using_minint_registry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
@@ -68,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1112/minint_reg/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1112/minint_reg/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_show_hidden_files.yml b/detections/endpoint/disable_show_hidden_files.yml
index fb4e7db623..98d7b67a79 100644
--- a/detections/endpoint/disable_show_hidden_files.yml
+++ b/detections/endpoint/disable_show_hidden_files.yml
@@ -1,6 +1,6 @@
name: Disable Show Hidden Files
id: 6f3ccfa2-91fe-11eb-8f9b-acde48001122
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,10 +18,12 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\Hidden"
OR (Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\HideFileExt"
Registry.registry_value_data = "0x00000001") OR (Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\ShowSuperHidden"
- Registry.registry_value_data = "0x00000000" )) BY Registry.user Registry.dest Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disable_show_hidden_files_filter`'
+ Registry.registry_value_data = "0x00000000" )) by Registry.action Registry.dest
+ Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `disable_show_hidden_files_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -68,15 +70,12 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-security.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-security.log
source: WinEventLog:Security
sourcetype: WinEventLog
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-system.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-system.log
source: WinEventLog:System
sourcetype: WinEventLog
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_uac_remote_restriction.yml b/detections/endpoint/disable_uac_remote_restriction.yml
index 5b648d3517..9438c3a2c3 100644
--- a/detections/endpoint/disable_uac_remote_restriction.yml
+++ b/detections/endpoint/disable_uac_remote_restriction.yml
@@ -1,6 +1,6 @@
name: Disable UAC Remote Restriction
id: 9928b732-210e-11ec-b65e-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,8 +18,9 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path="*\\CurrentVersion\\Policies\\System*"
Registry.registry_value_name="LocalAccountTokenFilterPolicy" Registry.registry_value_data="0x00000001" )
- BY Registry.user Registry.dest Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
+ by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive
+ Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
| `drop_dm_object_name(Registry)`| where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `disable_uac_remote_restriction_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
@@ -70,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/LocalAccountTokenFilterPolicy/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/LocalAccountTokenFilterPolicy/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_windows_app_hotkeys.yml b/detections/endpoint/disable_windows_app_hotkeys.yml
index 338559e409..d168ac71e4 100644
--- a/detections/endpoint/disable_windows_app_hotkeys.yml
+++ b/detections/endpoint/disable_windows_app_hotkeys.yml
@@ -1,6 +1,6 @@
name: Disable Windows App Hotkeys
id: 1490f224-ad8b-11eb-8c4f-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -17,11 +17,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path="*\\Windows
NT\\CurrentVersion\\Image File Execution Options\\*" AND Registry.registry_value_data=
- "HotKey Disabled" AND Registry.registry_value_name = "Debugger") BY Registry.dest
- Registry.user Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid | `drop_dm_object_name(Registry)`
- | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `disable_windows_app_hotkeys_filter`'
+ "HotKey Disabled" AND Registry.registry_value_name = "Debugger") by Registry.action
+ Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `disable_windows_app_hotkeys_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -66,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/hotkey_disabled_hidden_user/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/hotkey_disabled_hidden_user/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disable_windows_behavior_monitoring.yml b/detections/endpoint/disable_windows_behavior_monitoring.yml
index 2e0c1f7cd4..a8a050e5ff 100644
--- a/detections/endpoint/disable_windows_behavior_monitoring.yml
+++ b/detections/endpoint/disable_windows_behavior_monitoring.yml
@@ -1,7 +1,7 @@
name: Disable Windows Behavior Monitoring
id: 79439cae-9200-11eb-a4d3-acde48001122
-version: '12'
-date: '2025-03-03'
+version: 13
+date: '2025-03-27'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
type: TTP
@@ -24,8 +24,9 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
"*\\Real-Time Protection\\DisableIntrusionPreventionSystem" OR Registry.registry_path=
"*\\Real-Time Protection\\DisableIOAVProtection" OR Registry.registry_path= "*\\Real-Time
Protection\\DisableScriptScanning" AND Registry.registry_value_data = "0x00000001")
- BY Registry.dest Registry.user Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
+ by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive
+ Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
| `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `disable_windows_behavior_monitoring_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
diff --git a/detections/endpoint/disable_windows_smartscreen_protection.yml b/detections/endpoint/disable_windows_smartscreen_protection.yml
index b8c37fc2d2..ad8ca01945 100644
--- a/detections/endpoint/disable_windows_smartscreen_protection.yml
+++ b/detections/endpoint/disable_windows_smartscreen_protection.yml
@@ -1,6 +1,6 @@
name: Disable Windows SmartScreen Protection
id: 664f0fd0-91ff-11eb-a56f-acde48001122
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -19,10 +19,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE Registry.registry_path IN ("*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SmartScreenEnabled",
"*\\Microsoft\\Windows\\System\\EnableSmartScreen") Registry.registry_value_data IN
- ("Off", "0") BY Registry.dest Registry.user Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
- | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `disable_windows_smartscreen_protection_filter`'
+ ("Off", "0") by Registry.action Registry.dest Registry.process_guid Registry.process_id
+ Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data
+ Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user
+ Registry.vendor_product | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `disable_windows_smartscreen_protection_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -70,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabled_kerberos_pre_authentication_discovery_with_get_aduser.yml b/detections/endpoint/disabled_kerberos_pre_authentication_discovery_with_get_aduser.yml
index 2aeb701771..85b2c87b4c 100644
--- a/detections/endpoint/disabled_kerberos_pre_authentication_discovery_with_get_aduser.yml
+++ b/detections/endpoint/disabled_kerberos_pre_authentication_discovery_with_get_aduser.yml
@@ -1,6 +1,6 @@
name: Disabled Kerberos Pre-Authentication Discovery With Get-ADUser
id: 114c6bfe-9406-11ec-bcce-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -16,8 +16,9 @@ description: The following analytic detects the execution of the `Get-ADUser` Po
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-ADUser*" AND ScriptBlockText="*4194304*")
- | stats count min(_time) as firstTime max(_time) as lastTime by Opcode Computer
- UserID EventCode ScriptBlockText | rename Computer as dest | `security_content_ctime(firstTime)`
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `disabled_kerberos_pre_authentication_discovery_with_get_aduser_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
@@ -65,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1558.004/getaduser/get-aduser-powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1558.004/getaduser/get-aduser-powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabled_kerberos_pre_authentication_discovery_with_powerview.yml b/detections/endpoint/disabled_kerberos_pre_authentication_discovery_with_powerview.yml
index b5464753fe..ae431ddbf2 100644
--- a/detections/endpoint/disabled_kerberos_pre_authentication_discovery_with_powerview.yml
+++ b/detections/endpoint/disabled_kerberos_pre_authentication_discovery_with_powerview.yml
@@ -1,6 +1,6 @@
name: Disabled Kerberos Pre-Authentication Discovery With PowerView
id: b0b34e2c-90de-11ec-baeb-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -16,8 +16,9 @@ description: The following analytic detects the execution of the `Get-DomainUser
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-DomainUser*" AND ScriptBlockText="*PreauthNotRequired*")
- | stats count min(_time) as firstTime max(_time) as lastTime by Opcode Computer
- UserID EventCode ScriptBlockText | rename Computer as dest | `security_content_ctime(firstTime)`
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `disabled_kerberos_pre_authentication_discovery_with_powerview_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
@@ -62,7 +63,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/getdomainuser.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/getdomainuser.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabling_cmd_application.yml b/detections/endpoint/disabling_cmd_application.yml
index 83d068dcf8..6f4dde4f4f 100644
--- a/detections/endpoint/disabling_cmd_application.yml
+++ b/detections/endpoint/disabling_cmd_application.yml
@@ -1,6 +1,6 @@
name: Disabling CMD Application
id: ff86077c-9212-11eb-a1e6-acde48001122
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -17,10 +17,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\SOFTWARE\\Policies\\Microsoft\\Windows\\System\\DisableCMD"
- Registry.registry_value_data = "0x00000001") BY Registry.dest Registry.user Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disabling_cmd_application_filter`'
+ Registry.registry_value_data = "0x00000001") by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
+ | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `disabling_cmd_application_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -69,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabling_controlpanel.yml b/detections/endpoint/disabling_controlpanel.yml
index a8e293b0d7..726b04c1ae 100644
--- a/detections/endpoint/disabling_controlpanel.yml
+++ b/detections/endpoint/disabling_controlpanel.yml
@@ -1,14 +1,13 @@
name: Disabling ControlPanel
id: 6ae0148e-9215-11eb-a94a-acde48001122
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
type: TTP
description: The following analytic detects registry modifications that disable the
Control Panel on Windows systems. It leverages data from the Endpoint.Registry data
- model, specifically monitoring changes to the registry path
- "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoControlPanel"
+ model, specifically monitoring changes to the registry path "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoControlPanel"
with a value of "0x00000001". This activity is significant as it is commonly used
by malware to prevent users from accessing the Control Panel, thereby hindering
the removal of malicious artifacts and persistence mechanisms. If confirmed malicious,
@@ -18,10 +17,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoControlPanel"
- Registry.registry_value_data = "0x00000001") BY Registry.dest Registry.user Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)`| where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disabling_controlpanel_filter`'
+ Registry.registry_value_data = "0x00000001") by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`|
+ where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `disabling_controlpanel_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -69,7 +70,6 @@ tags:
tests:
- name: True Positive Test (XML)
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-xml.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabling_defender_services.yml b/detections/endpoint/disabling_defender_services.yml
index 6da67d20be..775539d2d2 100644
--- a/detections/endpoint/disabling_defender_services.yml
+++ b/detections/endpoint/disabling_defender_services.yml
@@ -1,6 +1,6 @@
name: Disabling Defender Services
id: 911eacdc-317f-11ec-ad30-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -19,10 +19,11 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path = "*\\System\\CurrentControlSet\\Services\\*"
AND (Registry.registry_path IN("*WdBoot*", "*WdFilter*", "*WdNisDrv*", "*WdNisSvc*","*WinDefend*",
"*SecurityHealthService*")) AND Registry.registry_value_name = Start Registry.registry_value_data
- = 0x00000004) BY Registry.dest Registry.user Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
- | `drop_dm_object_name(Registry)`| where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `disabling_defender_services_filter`'
+ = 0x00000004) by Registry.action Registry.dest Registry.process_guid Registry.process_id
+ Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data
+ Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user
+ Registry.vendor_product | `drop_dm_object_name(Registry)`| where isnotnull(registry_value_data)
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disabling_defender_services_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -70,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon2.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/disable_av/sysmon2.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabling_firewall_with_netsh.yml b/detections/endpoint/disabling_firewall_with_netsh.yml
index c5d95d266a..1092aa8127 100644
--- a/detections/endpoint/disabling_firewall_with_netsh.yml
+++ b/detections/endpoint/disabling_firewall_with_netsh.yml
@@ -1,6 +1,6 @@
name: Disabling Firewall with Netsh
id: 6860a62c-9203-11eb-9e05-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_netsh` Processes.process=
"*firewall*" (Processes.process= "*off*" OR Processes.process= "*disable*") by
- Processes.dest Processes.user Processes.parent_process Processes.process_name Processes.original_file_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disabling_firewall_with_netsh_filter`'
+ Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `disabling_firewall_with_netsh_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabling_folderoptions_windows_feature.yml b/detections/endpoint/disabling_folderoptions_windows_feature.yml
index 2223902a7b..829465f384 100644
--- a/detections/endpoint/disabling_folderoptions_windows_feature.yml
+++ b/detections/endpoint/disabling_folderoptions_windows_feature.yml
@@ -1,6 +1,6 @@
name: Disabling FolderOptions Windows Feature
id: 83776de4-921a-11eb-868a-acde48001122
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -8,8 +8,7 @@ type: TTP
description: The following analytic detects the modification of the Windows registry
to disable the Folder Options feature, which prevents users from showing hidden
files and file extensions. It leverages data from the Endpoint.Registry data model,
- specifically monitoring changes to the registry path
- "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoFolderOptions"
+ specifically monitoring changes to the registry path "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoFolderOptions"
with a value of "0x00000001". This activity is significant as it is commonly used
by malware to conceal malicious files and deceive users with fake file extensions.
If confirmed malicious, this could allow an attacker to hide their presence and
@@ -18,10 +17,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoFolderOptions"
- Registry.registry_value_data = "0x00000001") BY Registry.dest Registry.user Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)`| where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disabling_folderoptions_windows_feature_filter`'
+ Registry.registry_value_data = "0x00000001") by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`|
+ where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `disabling_folderoptions_windows_feature_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -69,7 +70,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabling_norun_windows_app.yml b/detections/endpoint/disabling_norun_windows_app.yml
index 11c1abbb8f..15f095558e 100644
--- a/detections/endpoint/disabling_norun_windows_app.yml
+++ b/detections/endpoint/disabling_norun_windows_app.yml
@@ -1,6 +1,6 @@
name: Disabling NoRun Windows App
id: de81bc46-9213-11eb-adc9-acde48001122
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -16,10 +16,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoRun"
- Registry.registry_value_data = "0x00000001") BY Registry.dest Registry.user Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)`| where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disabling_norun_windows_app_filter`'
+ Registry.registry_value_data = "0x00000001") by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`|
+ where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `disabling_norun_windows_app_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -69,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabling_remote_user_account_control.yml b/detections/endpoint/disabling_remote_user_account_control.yml
index 2aebee64f2..c8feea30f1 100644
--- a/detections/endpoint/disabling_remote_user_account_control.yml
+++ b/detections/endpoint/disabling_remote_user_account_control.yml
@@ -1,6 +1,6 @@
name: Disabling Remote User Account Control
id: bbc644bc-37df-4e1a-9c88-ec9a53e2038c
-version: 9
+version: 10
date: '2025-02-10'
author: David Dorsey, Patrick Bareiss, Splunk
status: production
@@ -17,9 +17,11 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry where Registry.registry_path=*\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\EnableLUA*
- Registry.registry_value_data="0x00000000" by Registry.dest, Registry.registry_key_name
- Registry.user Registry.registry_path Registry.registry_value_data Registry.action
- | `drop_dm_object_name(Registry)` | `disabling_remote_user_account_control_filter`'
+ Registry.registry_value_data="0x00000000" by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
+ | `disabling_remote_user_account_control_filter`'
how_to_implement: To successfully implement this search, you must be ingesting data
that records registry activity from your hosts to populate the endpoint data model
in the registry node. This is typically populated via endpoint detection-and-response
@@ -73,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabling_systemrestore_in_registry.yml b/detections/endpoint/disabling_systemrestore_in_registry.yml
index a4aeee0833..3f639bbf80 100644
--- a/detections/endpoint/disabling_systemrestore_in_registry.yml
+++ b/detections/endpoint/disabling_systemrestore_in_registry.yml
@@ -1,6 +1,6 @@
name: Disabling SystemRestore In Registry
id: f4f837e2-91fb-11eb-8bf6-acde48001122
-version: 10
+version: 11
date: '2024-12-08'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -20,11 +20,12 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
NT\\CurrentVersion\\SystemRestore\\DisableSR" OR Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows
NT\\CurrentVersion\\SystemRestore\\DisableConfig" OR Registry.registry_path= "*\\SOFTWARE\\Policies\\Microsoft\\Windows
NT\\SystemRestore\\DisableSR" OR Registry.registry_path= "*\\SOFTWARE\\Policies\\Microsoft\\Windows
- NT\\SystemRestore\\DisableConfig" Registry.registry_value_data = "0x00000001") BY
- Registry.dest Registry.user Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid | `drop_dm_object_name(Registry)`|
- where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `disabling_systemrestore_in_registry_filter`'
+ NT\\SystemRestore\\DisableConfig" Registry.registry_value_data = "0x00000001") by
+ Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive
+ Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)`| where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `disabling_systemrestore_in_registry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -73,19 +74,15 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-security.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-security.log
source: WinEventLog:Security
sourcetype: WinEventLog
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-system.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-system.log
source: WinEventLog:System
sourcetype: WinEventLog
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-xml.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabling_task_manager.yml b/detections/endpoint/disabling_task_manager.yml
index 95e16a37af..63a605d2f3 100644
--- a/detections/endpoint/disabling_task_manager.yml
+++ b/detections/endpoint/disabling_task_manager.yml
@@ -1,14 +1,13 @@
name: Disabling Task Manager
id: dac279bc-9202-11eb-b7fb-acde48001122
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
type: TTP
description: The following analytic identifies modifications to the Windows registry
that disable Task Manager. It leverages data from the Endpoint.Registry data model,
- specifically looking for changes to the registry path
- "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\DisableTaskMgr"
+ specifically looking for changes to the registry path "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\DisableTaskMgr"
with a value of "0x00000001". This activity is significant as it is commonly associated
with malware such as RATs, Trojans, and worms, which disable Task Manager to prevent
users from terminating malicious processes. If confirmed malicious, this could allow
@@ -17,10 +16,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\DisableTaskMgr"
- Registry.registry_value_data = "0x00000001") BY Registry.dest Registry.user Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disabling_task_manager_filter`'
+ Registry.registry_value_data = "0x00000001") by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
+ | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `disabling_task_manager_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -69,7 +70,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/win_app_defender_disabling/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/disabling_windows_local_security_authority_defences_via_registry.yml b/detections/endpoint/disabling_windows_local_security_authority_defences_via_registry.yml
index 20ea2dd34b..94791044ff 100644
--- a/detections/endpoint/disabling_windows_local_security_authority_defences_via_registry.yml
+++ b/detections/endpoint/disabling_windows_local_security_authority_defences_via_registry.yml
@@ -1,12 +1,12 @@
name: Disabling Windows Local Security Authority Defences via Registry
id: 45cd08f8-a2c9-4f4e-baab-e1a0c624b0ab
-version: 5
+version: 6
date: '2024-11-13'
author: Dean Luxton
status: production
type: TTP
data_source:
-- Sysmon EventID 13 AND Sysmon EventID 1
+- Sysmon EventID 13
description: The following analytic identifies the deletion of registry keys that
disable Local Security Authority (LSA) protection and Microsoft Defender Device
Guard. It leverages data from Endpoint Detection and Response (EDR) agents, focusing
@@ -18,13 +18,11 @@ description: The following analytic identifies the deletion of registry keys tha
search: '| tstats `security_content_summariesonly` min(_time) as _time from datamodel=Endpoint.Registry
where Registry.registry_path IN ("*\\SYSTEM\\CurrentControlSet\\Control\\Lsa\\LsaCfgFlags",
"*\\SOFTWARE\\Policies\\Microsoft\\Windows\\DeviceGuard\\*", "*\\SYSTEM\\CurrentControlSet\\Control\\Lsa\\RunAsPPL")
- Registry.action IN (deleted, unknown) by Registry.action Registry.registry_path
- Registry.process_guid Registry.dest Registry.user| `drop_dm_object_name(Registry)`
- | join type=outer process_guid [| tstats `security_content_summariesonly` count
- FROM datamodel=Endpoint.Processes by Processes.user Processes.process_name Processes.process
- Processes.dest Processes.parent_process_name Processes.parent_process Processes.process_guid
- | `drop_dm_object_name(Processes)`] | table _time action dest user parent_process_name
- parent_process process_name process process_guid registry_path | `disabling_windows_local_security_authority_defences_via_registry_filter`'
+ Registry.action IN (deleted, unknown) by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disabling_windows_local_security_authority_defences_via_registry_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -79,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1556/disable_lsa_protection/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1556/disable_lsa_protection/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/dllhost_with_no_command_line_arguments_with_network.yml b/detections/endpoint/dllhost_with_no_command_line_arguments_with_network.yml
index 78d801f784..a101f2e462 100644
--- a/detections/endpoint/dllhost_with_no_command_line_arguments_with_network.yml
+++ b/detections/endpoint/dllhost_with_no_command_line_arguments_with_network.yml
@@ -1,6 +1,6 @@
name: DLLHost with no Command Line Arguments with Network
id: f1c07594-a141-11eb-8407-acde48001122
-version: 8
+version: 9
date: '2024-11-13'
author: Steven Dick, Michael Haag, Splunk
status: experimental
@@ -15,16 +15,37 @@ description: The following analytic detects instances of DLLHost.exe running wit
network's security.
data_source:
- Sysmon EventID 1 AND Sysmon EventID 3
-search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime FROM datamodel=Endpoint.Processes where Processes.process_name=dllhost.exe
- Processes.action!="blocked" by host _time span=1h Processes.process_id Processes.process_name
- Processes.dest Processes.process_path Processes.process Processes.parent_process_name
- Processes.parent_process | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | regex process="(?i)(dllhost\.exe.{0,4}$)"
- | rename dest as src | join host process_id [| tstats `security_content_summariesonly`
- count latest(All_Traffic.dest) as dest latest(All_Traffic.dest_ip) as dest_ip latest(All_Traffic.dest_port)
- as dest_port FROM datamodel=Network_Traffic.All_Traffic where All_Traffic.dest_port
- != 0 by host All_Traffic.process_id | `drop_dm_object_name(All_Traffic)`] | `dllhost_with_no_command_line_arguments_with_network_filter`'
+search: '| tstats prestats=t `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
+ where Processes.process_name=dllhost.exe Processes.action!="blocked" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | tstats prestats=t append=t `security_content_summariesonly`
+ count min(_time) as firstTime max(_time) as lastTime from datamodel=Network_Traffic.All_Traffic
+ where All_Traffic.dest_port != 0 by All_Traffic.action All_Traffic.app All_Traffic.dest
+ All_Traffic.dest_ip All_Traffic.dest_port All_Traffic.direction All_Traffic.dvc
+ All_Traffic.protocol All_Traffic.protocol_version All_Traffic.src All_Traffic.src_ip
+ All_Traffic.src_port All_Traffic.transport All_Traffic.user All_Traffic.vendor_product
+ All_Traffic.process_id | `drop_dm_object_name(All_Traffic)` | table action dest
+ original_file_name parent_process parent_process_exec parent_process_guid parent_process_id
+ parent_process_name parent_process_path process process_exec process_guid process_hash
+ process_id process_integrity_level process_name process_path user user_id vendor_product
+ app dest_ip dest_port direction dvc protocol protocol_version src src_ip src_port
+ transport | stats values(action) as action values(dest) as dest values(original_file_name)
+ as original_file_name values(parent_process) as parent_process values(parent_process_exec)
+ as parent_process_exec values(parent_process_guid) as parent_process_guid values(parent_process_id)
+ as parent_process_id values(parent_process_name) as parent_process_name values(parent_process_path)
+ as parent_process_path values(process) as process values(process_exec) as process_exec
+ values(process_hash) as process_hash values(process_guid) as process_guid values(process_integrity_level)
+ as process_integrity_level values(process_name) as process_name values(process_path)
+ as process_path values(user) as user values(user_id) as user_id values(vendor_product)
+ as vendor_product values(app) as app values(dest_ip) as dest_ip values(dest_port)
+ as dest_port values(direction) as direction values(dvc) as dvc values(protocol)
+ as protocol values(protocol_version) as protocol_version values(src) as src values(src_ip)
+ as src_ip values(src_port) as src_port values(transport) as transport by process_id
+ | where isnotnull(process_name) AND isnotnull(dest_port) | `dllhost_with_no_command_line_arguments_with_network_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -70,7 +91,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon_dllhost.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon_dllhost.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/dns_exfiltration_using_nslookup_app.yml b/detections/endpoint/dns_exfiltration_using_nslookup_app.yml
index 9e42a31685..71933d3d61 100644
--- a/detections/endpoint/dns_exfiltration_using_nslookup_app.yml
+++ b/detections/endpoint/dns_exfiltration_using_nslookup_app.yml
@@ -1,6 +1,6 @@
name: DNS Exfiltration Using Nslookup App
id: 2452e632-9e0d-11eb-bacd-acde48001122
-version: 8
+version: 9
date: '2024-12-10'
author: Teoderick Contreras, Splunk, Wouter Jansen
status: production
@@ -22,8 +22,12 @@ search: '| tstats `security_content_summariesonly` values(Processes.process) as
count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
where Processes.process_name = "nslookup.exe" Processes.process = "*-querytype=*"
OR Processes.process="*-qt=*" OR Processes.process="*-q=*" OR Processes.process="*-type=*"
- OR Processes.process="*-retry=*" by Processes.dest Processes.user Processes.process_name
- Processes.process Processes.parent_process_name | `drop_dm_object_name(Processes)`
+ OR Processes.process="*-retry=*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `dns_exfiltration_using_nslookup_app_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -86,7 +90,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1048.003/nslookup_exfil/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1048.003/nslookup_exfil/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/domain_account_discovery_with_dsquery.yml b/detections/endpoint/domain_account_discovery_with_dsquery.yml
index 73c4f00bf2..391f28c811 100644
--- a/detections/endpoint/domain_account_discovery_with_dsquery.yml
+++ b/detections/endpoint/domain_account_discovery_with_dsquery.yml
@@ -1,6 +1,6 @@
name: Domain Account Discovery with Dsquery
id: b1a8ce04-04c2-11ec-bea7-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name="dsquery.exe"
- AND Processes.process = "*user*" by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.parent_process_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `domain_account_discovery_with_dsquery_filter`'
+ AND Processes.process = "*user*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `domain_account_discovery_with_dsquery_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -50,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/domain_account_discovery_with_wmic.yml b/detections/endpoint/domain_account_discovery_with_wmic.yml
index 5997c315cc..44d3532984 100644
--- a/detections/endpoint/domain_account_discovery_with_wmic.yml
+++ b/detections/endpoint/domain_account_discovery_with_wmic.yml
@@ -1,6 +1,6 @@
name: Domain Account Discovery with Wmic
id: 383572e0-04c5-11ec-bdcc-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -20,8 +20,11 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where Processes.process_name="wmic.exe"
AND Processes.process = "*/NAMESPACE:\\\\root\\directory\\ldap*" AND Processes.process
= "*ds_user*" AND Processes.process = "*GET*" AND Processes.process = "*ds_samaccountname*"
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.parent_process_name
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `domain_account_discovery_with_wmic_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -76,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/domain_controller_discovery_with_nltest.yml b/detections/endpoint/domain_controller_discovery_with_nltest.yml
index c2e1e0eb8e..b09399bdd3 100644
--- a/detections/endpoint/domain_controller_discovery_with_nltest.yml
+++ b/detections/endpoint/domain_controller_discovery_with_nltest.yml
@@ -1,6 +1,6 @@
name: Domain Controller Discovery with Nltest
id: 41243735-89a7-4c83-bcdd-570aa78f00a1
-version: 5
+version: 6
date: '2024-12-10'
author: Mauricio Velazco, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_nltest` (Processes.process="*/dclist:*"
- OR Processes.process="*/dsgetdc:*") by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `domain_controller_discovery_with_nltest_filter`'
+ OR Processes.process="*/dsgetdc:*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `domain_controller_discovery_with_nltest_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -73,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/domain_controller_discovery_with_wmic.yml b/detections/endpoint/domain_controller_discovery_with_wmic.yml
index da0ebfa675..50c59aefe9 100644
--- a/detections/endpoint/domain_controller_discovery_with_wmic.yml
+++ b/detections/endpoint/domain_controller_discovery_with_wmic.yml
@@ -1,6 +1,6 @@
name: Domain Controller Discovery with Wmic
id: 64c7adaa-48ee-483c-b0d6-7175bc65e6cc
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="wmic.exe")
- (Processes.process="" OR Processes.process="*DomainControllerAddress*") by Processes.dest
- Processes.user Processes.parent_process Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `domain_controller_discovery_with_wmic_filter`'
+ (Processes.process="" OR Processes.process="*DomainControllerAddress*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `domain_controller_discovery_with_wmic_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -49,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/domain_group_discovery_with_adsisearcher.yml b/detections/endpoint/domain_group_discovery_with_adsisearcher.yml
index 7e402f9632..a38f2cfe18 100644
--- a/detections/endpoint/domain_group_discovery_with_adsisearcher.yml
+++ b/detections/endpoint/domain_group_discovery_with_adsisearcher.yml
@@ -1,6 +1,6 @@
name: Domain Group Discovery with Adsisearcher
id: 089c862f-5f83-49b5-b1c8-7e4ff66560c7
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects the use of the `[Adsisearcher]` type
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` (ScriptBlockText = "*[adsisearcher]*" AND ScriptBlockText =
- "*(objectcategory=group)*" AND ScriptBlockText = "*findAll()*") | stats count min(_time)
- as firstTime max(_time) as lastTime by EventCode ScriptBlockText Computer UserID
- | rename Computer as dest |rename UserID as user | `security_content_ctime(firstTime)`
- | `domain_group_discovery_with_adsisearcher_filter`'
+ "*(objectcategory=group)*" AND ScriptBlockText = "*findAll()*") | fillnull | stats
+ count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `domain_group_discovery_with_adsisearcher_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -42,7 +42,7 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Domain group discovery enumeration using PowerShell on $dest$ by $user$
+ message: Domain group discovery enumeration using PowerShell on $dest$ by $user_id$
risk_objects:
- field: dest
type: system
@@ -62,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/domain_group_discovery_with_adsisearcher/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/domain_group_discovery_with_adsisearcher/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/domain_group_discovery_with_dsquery.yml b/detections/endpoint/domain_group_discovery_with_dsquery.yml
index 3c80940d89..7589e7be1d 100644
--- a/detections/endpoint/domain_group_discovery_with_dsquery.yml
+++ b/detections/endpoint/domain_group_discovery_with_dsquery.yml
@@ -1,6 +1,6 @@
name: Domain Group Discovery With Dsquery
id: f0c9d62f-a232-4edd-b17e-bc409fb133d4
-version: 5
+version: 6
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="dsquery.exe")
- (Processes.process="*group*") by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `domain_group_discovery_with_dsquery_filter`'
+ (Processes.process="*group*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `domain_group_discovery_with_dsquery_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -49,7 +52,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/domain_group_discovery_with_wmic.yml b/detections/endpoint/domain_group_discovery_with_wmic.yml
index 0ea13c9e66..73f662b293 100644
--- a/detections/endpoint/domain_group_discovery_with_wmic.yml
+++ b/detections/endpoint/domain_group_discovery_with_wmic.yml
@@ -1,6 +1,6 @@
name: Domain Group Discovery With Wmic
id: a87736a6-95cd-4728-8689-3c64d5026b3e
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_wmic` (Processes.process=*/NAMESPACE:\\\\root\\directory\\ldap*
AND Processes.process=*ds_group* AND Processes.process="*GET ds_samaccountname*")
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `domain_group_discovery_with_wmic_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `domain_group_discovery_with_wmic_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -49,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/download_files_using_telegram.yml b/detections/endpoint/download_files_using_telegram.yml
index 97a948b1af..2339006e50 100644
--- a/detections/endpoint/download_files_using_telegram.yml
+++ b/detections/endpoint/download_files_using_telegram.yml
@@ -1,6 +1,6 @@
name: Download Files Using Telegram
id: 58194e28-ae5e-11eb-8912-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -15,9 +15,10 @@ description: The following analytic detects suspicious file downloads by the Tel
data_source:
- Sysmon EventID 15
search: '`sysmon` EventCode= 15 process_name = "telegram.exe" TargetFilename = "*:Zone.Identifier"
- |stats count min(_time) as firstTime max(_time) as lastTime by dest EventCode process_name
- process_id TargetFilename Hash | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `download_files_using_telegram_filter`'
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest dvc file_hash
+ file_name file_path process_exec process_guid process_id process_name process_path
+ signature signature_id user_id vendor_product Contents Image | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `download_files_using_telegram_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name and TargetFilename from your endpoints or Events that
monitor filestream events which is happened when process download something. (EventCode
@@ -65,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/minergate/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/minergate/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/dsquery_domain_discovery.yml b/detections/endpoint/dsquery_domain_discovery.yml
index 72e21dfb8e..a9b3cd0039 100644
--- a/detections/endpoint/dsquery_domain_discovery.yml
+++ b/detections/endpoint/dsquery_domain_discovery.yml
@@ -1,6 +1,6 @@
name: DSQuery Domain Discovery
id: cc316032-924a-11eb-91a2-acde48001122
-version: 7
+version: 8
date: '2024-12-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=dsquery.exe
- Processes.process=*trustedDomain* by Processes.dest Processes.user Processes.parent_process_name
- Processes.parent_process Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `dsquery_domain_discovery_filter`'
+ Processes.process=*trustedDomain* by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `dsquery_domain_discovery_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -84,7 +87,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1482/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1482/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/dump_lsass_via_comsvcs_dll.yml b/detections/endpoint/dump_lsass_via_comsvcs_dll.yml
index 7199fc7352..91d6c94fe1 100644
--- a/detections/endpoint/dump_lsass_via_comsvcs_dll.yml
+++ b/detections/endpoint/dump_lsass_via_comsvcs_dll.yml
@@ -1,6 +1,6 @@
name: Dump LSASS via comsvcs DLL
id: 8943b567-f14d-4ee8-a0bb-2121d4ce3184
-version: 9
+version: 10
date: '2025-02-10'
author: Patrick Bareiss, Splunk
status: production
@@ -20,8 +20,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*comsvcs.dll*
- Processes.process IN ("*MiniDump*", "*#24*") by Processes.user Processes.parent_process_name
- Processes.process_name Processes.original_file_name Processes.process Processes.dest
+ Processes.process IN ("*MiniDump*", "*#24*") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `dump_lsass_via_comsvcs_dll_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -92,7 +96,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/dump_lsass_via_procdump.yml b/detections/endpoint/dump_lsass_via_procdump.yml
index d9e89b8de1..0d153fd895 100644
--- a/detections/endpoint/dump_lsass_via_procdump.yml
+++ b/detections/endpoint/dump_lsass_via_procdump.yml
@@ -19,8 +19,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_procdump` (Processes.process=*-ma*
- OR Processes.process=*-mm*) Processes.process=*lsass* by Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.original_file_name Processes.dest
+ OR Processes.process=*-mm*) Processes.process=*lsass* by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `dump_lsass_via_procdump_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -85,13 +89,11 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/crowdstrike_falcon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/crowdstrike_falcon.log
source: crowdstrike
sourcetype: crowdstrike:events:sensor
diff --git a/detections/endpoint/elevated_group_discovery_with_powerview.yml b/detections/endpoint/elevated_group_discovery_with_powerview.yml
index 6b8427834e..96877c08f5 100644
--- a/detections/endpoint/elevated_group_discovery_with_powerview.yml
+++ b/detections/endpoint/elevated_group_discovery_with_powerview.yml
@@ -1,6 +1,6 @@
name: Elevated Group Discovery with PowerView
id: 10d62950-0de5-4199-a710-cff9ea79b413
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -18,8 +18,9 @@ data_source:
search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-DomainGroupMember*")
AND ScriptBlockText IN ("*Domain Admins*","*Enterprise Admins*", "*Schema Admins*",
"*Account Operators*" , "*Server Operators*", "*Protected Users*", "*Dns Admins*")
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest, UserID as user | `security_content_ctime(firstTime)`
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `elevated_group_discovery_with_powerview_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
@@ -44,11 +45,9 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-powershell-xml-powerview.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-powershell-xml-powerview.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-xml.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/elevated_group_discovery_with_wmic.yml b/detections/endpoint/elevated_group_discovery_with_wmic.yml
index d06e82db3f..19962729f8 100644
--- a/detections/endpoint/elevated_group_discovery_with_wmic.yml
+++ b/detections/endpoint/elevated_group_discovery_with_wmic.yml
@@ -1,6 +1,6 @@
name: Elevated Group Discovery With Wmic
id: 3f6bbf22-093e-4cb4-9641-83f47b8444b6
-version: 5
+version: 6
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -23,9 +23,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
Admins*" OR Processes.process="*Enterprise Admins*" OR Processes.process="*Schema
Admins*" OR Processes.process="*Account Operators*" OR Processes.process="*Server
Operators*" OR Processes.process="*Protected Users*" OR Processes.process="*Dns
- Admins*") by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `elevated_group_discovery_with_wmic_filter`'
+ Admins*") by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `elevated_group_discovery_with_wmic_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/enable_rdp_in_other_port_number.yml b/detections/endpoint/enable_rdp_in_other_port_number.yml
index 4ccbfbd7e0..5193979e87 100644
--- a/detections/endpoint/enable_rdp_in_other_port_number.yml
+++ b/detections/endpoint/enable_rdp_in_other_port_number.yml
@@ -1,6 +1,6 @@
name: Enable RDP In Other Port Number
id: 99495452-b899-11eb-96dc-acde48001122
-version: 10
+version: 11
date: '2024-12-16'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -17,11 +17,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path="*\\CurrentControlSet\\Control\\Terminal
- Server\\WinStations\\RDP-Tcp*" Registry.registry_value_name = "PortNumber") BY Registry.dest
- Registry.user Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid | `drop_dm_object_name(Registry)`
- | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `enable_rdp_in_other_port_number_filter`'
+ Server\\WinStations\\RDP-Tcp*" Registry.registry_value_name = "PortNumber") by Registry.action
+ Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `enable_rdp_in_other_port_number_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -68,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/honeypots/casper/datasets1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/honeypots/casper/datasets1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/enable_wdigest_uselogoncredential_registry.yml b/detections/endpoint/enable_wdigest_uselogoncredential_registry.yml
index 4fae14ea04..cf32813a6f 100644
--- a/detections/endpoint/enable_wdigest_uselogoncredential_registry.yml
+++ b/detections/endpoint/enable_wdigest_uselogoncredential_registry.yml
@@ -1,6 +1,6 @@
name: Enable WDigest UseLogonCredential Registry
id: 0c7d8ffe-25b1-11ec-9f39-acde48001122
-version: 9
+version: 10
date: '2024-12-08'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,8 +18,9 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path="*\\System\\CurrentControlSet\\Control\\SecurityProviders\\WDigest\\*"
Registry.registry_value_name = "UseLogonCredential" Registry.registry_value_data=0x00000001)
- BY Registry.dest Registry.user Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
+ by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive
+ Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
| `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `enable_wdigest_uselogoncredential_registry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
@@ -70,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1112/atomic_red_team/wdigest_windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1112/atomic_red_team/wdigest_windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/esentutl_sam_copy.yml b/detections/endpoint/esentutl_sam_copy.yml
index b4f247be75..04f6e17fa0 100644
--- a/detections/endpoint/esentutl_sam_copy.yml
+++ b/detections/endpoint/esentutl_sam_copy.yml
@@ -1,6 +1,6 @@
name: Esentutl SAM Copy
id: d372f928-ce4f-11eb-a762-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_esentutl` Processes.process
- IN ("*ntds*", "*SAM*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.original_file_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `esentutl_sam_copy_filter`'
+ IN ("*ntds*", "*SAM*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `esentutl_sam_copy_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -51,7 +54,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.002/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.002/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/etw_registry_disabled.yml b/detections/endpoint/etw_registry_disabled.yml
index c2be3b0a81..673c79c9fc 100644
--- a/detections/endpoint/etw_registry_disabled.yml
+++ b/detections/endpoint/etw_registry_disabled.yml
@@ -1,6 +1,6 @@
name: ETW Registry Disabled
id: 8ed523ac-276b-11ec-ac39-acde48001122
-version: 11
+version: 12
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,8 +18,9 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path="*\\SOFTWARE\\Microsoft\\.NETFramework*"
Registry.registry_value_name = ETWEnabled Registry.registry_value_data=0x00000000)
- BY Registry.dest Registry.user Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
+ by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive
+ Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
| `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `etw_registry_disabled_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
@@ -74,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127/etw_disable/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127/etw_disable/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/eventvwr_uac_bypass.yml b/detections/endpoint/eventvwr_uac_bypass.yml
index 87c438a3b5..434a84f21d 100644
--- a/detections/endpoint/eventvwr_uac_bypass.yml
+++ b/detections/endpoint/eventvwr_uac_bypass.yml
@@ -1,6 +1,6 @@
name: Eventvwr UAC Bypass
id: 9cf8fe08-7ad8-11eb-9819-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Steven Dick, Michael Haag, Splunk
status: production
@@ -14,20 +14,14 @@ description: The following analytic detects an Eventvwr UAC bypass by identifyin
malicious, this could lead to unauthorized code execution, persistence, and further
compromise of the affected system.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` count min(_time) AS firstTime max(_time)
- AS lastTime FROM datamodel=Endpoint.Processes BY _time span=1h Processes.user Processes.process_id
- Processes.process_name Processes.process Processes.process_path Processes.dest Processes.parent_process_name
- Processes.parent_process Processes.process_guid | `drop_dm_object_name(Processes)`
- | join process_guid [ | tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
- WHERE (Registry.registry_path="*mscfile\\shell\\open\\command\\*") BY _time span=1h
- Registry.registry_path Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)`] | fields firstTime lastTime
- dest user parent_process_name parent_process process_name process_path process registry_key_name
- registry_path registry_value_name registry_value_data process_guid | where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `eventvwr_uac_bypass_filter`'
+- Sysmon EventID 13
+search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
+ WHERE (Registry.registry_path="*mscfile\\shell\\open\\command\\*") by Registry.action
+ Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `eventvwr_uac_bypass_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -86,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/excessive_attempt_to_disable_services.yml b/detections/endpoint/excessive_attempt_to_disable_services.yml
index 613e48bf8e..6249499960 100644
--- a/detections/endpoint/excessive_attempt_to_disable_services.yml
+++ b/detections/endpoint/excessive_attempt_to_disable_services.yml
@@ -1,6 +1,6 @@
name: Excessive Attempt To Disable Services
id: 8fa2a0f0-acd9-11eb-8994-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -17,12 +17,20 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` values(Processes.process) as process
- values(Processes.process_id) as process_id count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes where Processes.process_name =
- "sc.exe" AND Processes.process="*config*" OR Processes.process="*Disabled*" by Processes.process_name
- Processes.parent_process_name Processes.dest Processes.user _time span=1m | where
- count >=4 | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
+search: '| tstats `security_content_summariesonly` values(Processes.action) as action
+ values(Processes.original_file_name) as original_file_name values(Processes.parent_process)
+ as parent_process values(Processes.parent_process_exec) as parent_process_exec values(Processes.parent_process_guid)
+ as parent_process_guid values(Processes.parent_process_id) as parent_process_id
+ values(Processes.parent_process_path) as parent_process_path values(Processes.process)
+ as process values(Processes.process_exec) as process_exec values(Processes.process_guid)
+ as process_guid values(Processes.process_hash) as process_hash values(Processes.process_id)
+ as process_id values(Processes.process_integrity_level) as process_integrity_level
+ values(Processes.process_path) as process_path values(Processes.user_id) as user_id
+ values(Processes.vendor_product) as vendor_product count min(_time) as firstTime
+ max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_name
+ = "sc.exe" AND Processes.process="*config*" OR Processes.process="*Disabled*" by
+ Processes.process_name Processes.parent_process_name Processes.dest Processes.user
+ _time span=1m | where count >=4 | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `excessive_attempt_to_disable_services_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -75,7 +83,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/excessive_distinct_processes_from_windows_temp.yml b/detections/endpoint/excessive_distinct_processes_from_windows_temp.yml
index 49dfca5f3e..79c7f38ad4 100644
--- a/detections/endpoint/excessive_distinct_processes_from_windows_temp.yml
+++ b/detections/endpoint/excessive_distinct_processes_from_windows_temp.yml
@@ -1,6 +1,6 @@
name: Excessive distinct processes from Windows Temp
id: 23587b6a-c479-11eb-b671-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Hart, Mauricio Velazco, Splunk
status: production
@@ -17,10 +17,19 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` values(Processes.process) as process
- distinct_count(Processes.process) as distinct_process_count min(_time) as firstTime
- max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_path
- = "*\\Windows\\Temp\\*" by Processes.dest Processes.user _time span=20m | where
+search: '| tstats `security_content_summariesonly` distinct_count(Processes.process)
+ as distinct_process_count min(_time) as firstTime max(_time) as lastTime values(Processes.action)
+ as action values(Processes.original_file_name) as original_file_name values(Processes.parent_process)
+ as parent_process values(Processes.parent_process_exec) as parent_process_exec values(Processes.parent_process_guid)
+ as parent_process_guid values(Processes.parent_process_id) as parent_process_id
+ values(Processes.parent_process_name) as parent_process_name values(Processes.parent_process_path)
+ as parent_process_path values(Processes.process) as process values(Processes.process_exec)
+ as process_exec values(Processes.process_guid) as process_guid values(Processes.process_hash)
+ as process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.process_name) as process_name values(Processes.process_path)
+ as process_path values(Processes.user_id) as user_id values(Processes.vendor_product)
+ as vendor_product from datamodel=Endpoint.Processes where Processes.process_path
+ = "*\\Windows\\Temp\\*" by Processes.dest Processes.user _time span=20m | where
distinct_process_count > 37 | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `excessive_distinct_processes_from_windows_temp_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -72,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059/excessive_distinct_processes_from_windows_temp/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059/excessive_distinct_processes_from_windows_temp/windows-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/excessive_file_deletion_in_windefender_folder.yml b/detections/endpoint/excessive_file_deletion_in_windefender_folder.yml
index cc43bf87e4..0892330e2e 100644
--- a/detections/endpoint/excessive_file_deletion_in_windefender_folder.yml
+++ b/detections/endpoint/excessive_file_deletion_in_windefender_folder.yml
@@ -1,6 +1,6 @@
name: Excessive File Deletion In WinDefender Folder
id: b5baa09a-7a05-11ec-8da4-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -15,9 +15,12 @@ data_source:
- Sysmon EventID 23
- Sysmon EventID 26
search: '`sysmon` EventCode IN ("23","26") TargetFilename = "*\\ProgramData\\Microsoft\\Windows
- Defender\\*" | stats count, values(TargetFilename) as deleted_files, min(_time)
- as firstTime, max(_time) as lastTime by user, dest, signature, signature_id, Image,
- process_name, process_guid | rename Image as process | where count >=50 | `security_content_ctime(firstTime)`
+ Defender\\*" | stats count min(_time) as firstTime, max(_time) as lastTime values(file_path)
+ as file_path values(file_hash) as file_hash values(file_name) as file_name values(file_modify_time)
+ as file_modify_time values(process_name) as process_name values(process_path) as
+ process_path values(process_guid) as process_guid values(process_id) as process_id
+ values(process_exec) as process_exec by action dest dvc signature signature_id user
+ user_id vendor_product | where count >=50 | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `excessive_file_deletion_in_windefender_folder_filter`'
how_to_implement: To successfully implement this search, you must ingest logs that
include the process name, TargetFilename, and ProcessID executions from your endpoints.
@@ -52,7 +55,7 @@ rba:
type: system
score: 25
threat_objects:
- - field: deleted_files
+ - field: file_name
type: file_name
tags:
analytic_story:
@@ -70,7 +73,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/excessive_file_del_in_windefender_dir/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/excessive_file_del_in_windefender_dir/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/excessive_number_of_service_control_start_as_disabled.yml b/detections/endpoint/excessive_number_of_service_control_start_as_disabled.yml
index 8e55318d13..3ca23aaa06 100644
--- a/detections/endpoint/excessive_number_of_service_control_start_as_disabled.yml
+++ b/detections/endpoint/excessive_number_of_service_control_start_as_disabled.yml
@@ -1,6 +1,6 @@
name: Excessive number of service control start as disabled
id: 77592bec-d5cc-11eb-9e60-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Hart, Splunk
status: production
@@ -18,7 +18,15 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` distinct_count(Processes.process)
- as distinct_cmdlines values(Processes.process_id) as process_ids min(_time) as firstTime
+ as distinct_cmdlines values(Processes.action) as action values(Processes.original_file_name)
+ as original_file_name values(Processes.parent_process_exec) as parent_process_exec
+ values(Processes.parent_process_guid) as parent_process_guid values(Processes.parent_process_name)
+ as parent_process_name values(Processes.parent_process_path) as parent_process_path
+ values(Processes.process) as process values(Processes.process_exec) as process_exec
+ values(Processes.process_guid) as process_guid values(Processes.process_hash) as
+ process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.process_path) as process_path values(Processes.user_id)
+ as user_id values(Processes.vendor_product) as vendor_product min(_time) as firstTime
max(_time) as lastTime FROM datamodel=Endpoint.Processes WHERE Processes.process_name
= "sc.exe" AND Processes.process="*start= disabled*" by Processes.dest Processes.user
Processes.parent_process Processes.process_name Processes.parent_process_id, _time
@@ -78,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/sc_service_start_disabled/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/sc_service_start_disabled/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/excessive_number_of_taskhost_processes.yml b/detections/endpoint/excessive_number_of_taskhost_processes.yml
index d31f36a50d..848b988bf1 100644
--- a/detections/endpoint/excessive_number_of_taskhost_processes.yml
+++ b/detections/endpoint/excessive_number_of_taskhost_processes.yml
@@ -1,6 +1,6 @@
name: Excessive number of taskhost processes
id: f443dac2-c7cf-11eb-ab51-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Hart
status: production
@@ -17,16 +17,32 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` values(Processes.process_id) as
- process_ids min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
+search: '| tstats `security_content_summariesonly` values(Processes.action) as action
+ values(Processes.original_file_name) as original_file_name values(Processes.parent_process)
+ as parent_process values(Processes.parent_process_exec) as parent_process_exec values(Processes.parent_process_guid)
+ as parent_process_guid values(Processes.parent_process_id) as parent_process_id
+ values(Processes.parent_process_name) as parent_process_name values(Processes.parent_process_path)
+ as parent_process_path values(Processes.process) as process values(Processes.process_exec)
+ as process_exec values(Processes.process_guid) as process_guid values(Processes.process_hash)
+ as process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.user) as user values(Processes.process_path)
+ as process_path values(Processes.user_id) as user_id values(Processes.vendor_product)
+ as vendor_product min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
WHERE Processes.process_name = "taskhost.exe" OR Processes.process_name = "taskhostex.exe"
BY Processes.dest Processes.process_name _time span=1h | `drop_dm_object_name(Processes)`
- | eval pid_count=mvcount(process_ids) | eval taskhost_count_=if(process_name ==
- "taskhost.exe", pid_count, 0) | eval taskhostex_count_=if(process_name == "taskhostex.exe",
- pid_count, 0) | stats sum(taskhost_count_) as taskhost_count, sum(taskhostex_count_)
- as taskhostex_count by _time, dest, firstTime, lastTime | where taskhost_count >
- 10 or taskhostex_count > 10 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `excessive_number_of_taskhost_processes_filter`'
+ | eval pid_count=mvcount(process_id) | eval taskhost_count_=if(process_name == "taskhost.exe",
+ pid_count, 0) | eval taskhostex_count_=if(process_name == "taskhostex.exe", pid_count,
+ 0) | stats sum(taskhost_count_) as taskhost_count, sum(taskhostex_count_) as taskhostex_count
+ values(action) as action values(original_file_name) as original_file_name values(parent_process)
+ as parent_process values(parent_process_exec) as parent_process_exec values(parent_process_guid)
+ as parent_process_guid values(parent_process_id) as parent_process_id values(parent_process_name)
+ as parent_process_name values(parent_process_path) as parent_process_path values(process)
+ as process values(process_exec) as process_exec values(process_guid) as process_guid
+ values(process_hash) as process_hash values(process_id) as process_id values(process_integrity_level)
+ as process_integrity_level values(user) as user values(process_path) as process_path
+ values(user_id) as user_id values(vendor_product) as vendor_product values(process_name)
+ as process_name by _time, dest, firstTime, lastTime | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `excessive_number_of_taskhost_processes_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +92,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059/excessive_distinct_processes_from_windows_temp/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059/excessive_distinct_processes_from_windows_temp/windows-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/excessive_usage_of_cacls_app.yml b/detections/endpoint/excessive_usage_of_cacls_app.yml
index f6a5a7eec9..25116f8ff8 100644
--- a/detections/endpoint/excessive_usage_of_cacls_app.yml
+++ b/detections/endpoint/excessive_usage_of_cacls_app.yml
@@ -1,6 +1,6 @@
name: Excessive Usage Of Cacls App
id: 0bdf6092-af17-11eb-939a-acde48001122
-version: 6
+version: 7
date: '2024-12-16'
author: Teoderick Contreras, Splunk
status: production
@@ -16,12 +16,20 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` values(Processes.process) as process
- values(Processes.process_id) as process_id values(Processes.process_name) as process_name
- count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
- where Processes.process_name = "cacls.exe" OR Processes.process_name = "icacls.exe"
- OR Processes.process_name = "XCACLS.exe" by Processes.parent_process_name Processes.parent_process
- Processes.dest Processes.user _time span=1m | where count >=10 | `drop_dm_object_name(Processes)`
+search: '| tstats `security_content_summariesonly` values(Processes.dest) as dest
+ values(Processes.user) as user min(_time) as firstTime max(_time) as lastTime values(Processes.action)
+ as action values(Processes.original_file_name) as original_file_name values(Processes.parent_process_exec)
+ as parent_process_exec values(Processes.parent_process_guid) as parent_process_guid
+ values(Processes.parent_process_id) as parent_process_id values(Processes.parent_process_path)
+ as parent_process_path values(Processes.process) as process values(Processes.process_exec)
+ as process_exec values(Processes.process_guid) as process_guid values(Processes.process_hash)
+ as process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.process_name) as process_name values(Processes.process_path)
+ as process_path values(Processes.user_id) as user_id values(Processes.vendor_product)
+ as vendor_product count from datamodel=Endpoint.Processes where Processes.process_name
+ = "cacls.exe" OR Processes.process_name = "icacls.exe" OR Processes.process_name
+ = "XCACLS.exe" by Processes.parent_process_name Processes.parent_process Processes.dest
+ Processes.user _time span=1m | where count >=10 | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `excessive_usage_of_cacls_app_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -79,7 +87,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/excessive_usage_of_nslookup_app.yml b/detections/endpoint/excessive_usage_of_nslookup_app.yml
index 4c46de9669..a85d26aefa 100644
--- a/detections/endpoint/excessive_usage_of_nslookup_app.yml
+++ b/detections/endpoint/excessive_usage_of_nslookup_app.yml
@@ -1,6 +1,6 @@
name: Excessive Usage of NSLOOKUP App
id: 0a69fdaa-a2b8-11eb-b16d-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Stanislav Miskovic, Splunk
status: production
@@ -17,11 +17,23 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '`sysmon` EventCode = 1 process_name = "nslookup.exe" | bucket _time span=1m
- | stats count as numNsLookup by dest, _time | eventstats avg(numNsLookup) as avgNsLookup,
- stdev(numNsLookup) as stdNsLookup, count as numSlots by dest | eval upperThreshold=(avgNsLookup
- + stdNsLookup *3) | eval isOutlier=if(numNsLookup > 20 and numNsLookup >= upperThreshold,
- 1, 0) | search isOutlier=1 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+search: '| tstats `security_content_summariesonly` count as numNsLookup min(_time)
+ as firstTime max(_time) as lastTime values(Processes.action) as action values(Processes.original_file_name)
+ as original_file_name values(Processes.parent_process_exec) as parent_process_exec
+ values(Processes.parent_process_guid) as parent_process_guid values(Processes.parent_process_name)
+ as parent_process_name values(Processes.parent_process_path) as parent_process_path
+ values(Processes.process) as process values(Processes.process_exec) as process_exec
+ values(Processes.process_guid) as process_guid values(Processes.process_hash) as
+ process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.process_path) as process_path values(Processes.user_id)
+ as user_id values(Processes.vendor_product) as vendor_product values(Processes.parent_process)
+ as parent_process values(Processes.process_name) as process_name values(Processes.parent_process_id)
+ as parent_process_id values(Processes.user) as user from datamodel=Endpoint.Processes
+ where Processes.process_name = "nslookup.exe" by Processes.dest _time span=1m |
+ `drop_dm_object_name(Processes)` | eventstats avg(numNsLookup) as avgNsLookup, stdev(numNsLookup)
+ as stdNsLookup, count as numSlots by dest | eval upperThreshold=(avgNsLookup + stdNsLookup
+ *3) | eval isOutlier=if(numNsLookup > 20 and numNsLookup >= upperThreshold, 1, 0)
+ | search isOutlier=1 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `excessive_usage_of_nslookup_app_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -71,7 +83,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1048.003/nslookup_exfil/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1048.003/nslookup_exfil/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/excessive_usage_of_sc_service_utility.yml b/detections/endpoint/excessive_usage_of_sc_service_utility.yml
index a7cbd28e9d..3288432f72 100644
--- a/detections/endpoint/excessive_usage_of_sc_service_utility.yml
+++ b/detections/endpoint/excessive_usage_of_sc_service_utility.yml
@@ -1,6 +1,6 @@
name: Excessive Usage Of SC Service Utility
id: cb6b339e-d4c6-11eb-a026-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,13 +15,22 @@ description: The following analytic detects excessive usage of the `sc.exe` serv
leading to system compromise or disruption of security defenses.
data_source:
- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
-search: '`sysmon` EventCode = 1 process_name = "sc.exe" | bucket _time span=15m |
- stats values(process) as process count as numScExe by dest, _time | eventstats
- avg(numScExe) as avgScExe, stdev(numScExe) as stdScExe, count as numSlots by dest
- | eval upperThreshold=(avgScExe + stdScExe *3) | eval isOutlier=if(avgScExe >
- 5 and avgScExe >= upperThreshold, 1, 0) | search isOutlier=1 | `security_content_ctime(firstTime)`
+search: '| tstats `security_content_summariesonly` count as numScExe min(_time) as
+ firstTime max(_time) as lastTime values(Processes.action) as action values(Processes.original_file_name)
+ as original_file_name values(Processes.parent_process_exec) as parent_process_exec
+ values(Processes.parent_process_guid) as parent_process_guid values(Processes.parent_process_name)
+ as parent_process_name values(Processes.parent_process_path) as parent_process_path
+ values(Processes.process) as process values(Processes.process_exec) as process_exec
+ values(Processes.process_guid) as process_guid values(Processes.process_hash) as
+ process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.process_path) as process_path values(Processes.user_id)
+ as user_id values(Processes.vendor_product) as vendor_product values(Processes.parent_process)
+ as parent_process values(Processes.process_name) as process_name values(Processes.parent_process_id)
+ as parent_process_id values(Processes.user) as user from datamodel=Endpoint.Processes
+ where Processes.process_name = "sc.exe" by Processes.dest _time span=15m | `drop_dm_object_name(Processes)`
+ | eventstats avg(numScExe) as avgScExe, stdev(numScExe) as stdScExe, count as numSlots
+ by dest | eval upperThreshold=(avgScExe + stdScExe *3) | eval isOutlier=if(avgScExe
+ > 5 and avgScExe >= upperThreshold, 1, 0) | search isOutlier=1 | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `excessive_usage_of_sc_service_utility_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -68,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/excessive_usage_of_taskkill.yml b/detections/endpoint/excessive_usage_of_taskkill.yml
index 58c6c1d2c6..7a274aa567 100644
--- a/detections/endpoint/excessive_usage_of_taskkill.yml
+++ b/detections/endpoint/excessive_usage_of_taskkill.yml
@@ -1,6 +1,6 @@
name: Excessive Usage Of Taskkill
id: fe5bca48-accb-11eb-a67c-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,12 +17,20 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` values(Processes.process) as process
- values(Processes.process_id) as process_id count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "taskkill.exe" by
- Processes.parent_process_name Processes.process_name Processes.dest Processes.user
- _time span=1m | where count >=10 | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `excessive_usage_of_taskkill_filter`'
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
+ as lastTime values(Processes.action) as action values(Processes.dest) as dest values(Processes.original_file_name)
+ as original_file_name values(Processes.parent_process) as parent_process values(Processes.parent_process_exec)
+ as parent_process_exec values(Processes.parent_process_guid) as parent_process_guid
+ values(Processes.parent_process_id) as parent_process_id values(Processes.parent_process_path)
+ as parent_process_path values(Processes.process) as process values(Processes.process_exec)
+ as process_exec values(Processes.process_guid) as process_guid values(Processes.process_hash)
+ as process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.process_path) as process_path values(Processes.user)
+ as user values(Processes.user_id) as user_id values(Processes.vendor_product) as
+ vendor_product from datamodel=Endpoint.Processes where Processes.process_name =
+ "taskkill.exe" by Processes.parent_process_name Processes.process_name Processes.dest
+ Processes.user _time span=1m | where count >=10 | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `excessive_usage_of_taskkill_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -80,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/exchange_powershell_module_usage.yml b/detections/endpoint/exchange_powershell_module_usage.yml
index a4a976b447..a002070aec 100644
--- a/detections/endpoint/exchange_powershell_module_usage.yml
+++ b/detections/endpoint/exchange_powershell_module_usage.yml
@@ -1,6 +1,6 @@
name: Exchange PowerShell Module Usage
id: 2d10095e-05ae-11ec-8fdf-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,9 +18,10 @@ data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText IN ("*New-MailboxExportRequest*",
"*New-ManagementRoleAssignment*", "*New-MailboxSearch*", "*Get-Recipient*", "Search-Mailbox")
- | stats count min(_time) as firstTime max(_time) as lastTime by Opcode Computer
- UserID EventCode ScriptBlockText | rename Computer as dest |rename UserID as user
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `exchange_powershell_module_usage_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `exchange_powershell_module_usage_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -75,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/exchange/windows-powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/exchange/windows-powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/executable_file_written_in_administrative_smb_share.yml b/detections/endpoint/executable_file_written_in_administrative_smb_share.yml
index 6ca58b898b..d559a0ad9b 100644
--- a/detections/endpoint/executable_file_written_in_administrative_smb_share.yml
+++ b/detections/endpoint/executable_file_written_in_administrative_smb_share.yml
@@ -18,8 +18,8 @@ data_source:
search: '`wineventlog_security` EventCode=5145 RelativeTargetName IN ("*.exe","*.dll")
ObjectType=File ShareName IN ("\\\\*\\C$","\\\\*\\IPC$","\\\\*\\admin$") AccessMask=
"0x2" | stats min(_time) as firstTime max(_time) as lastTime count by EventCode
- ShareName RelativeTargetName ObjectType AccessMask src_user src_port IpAddress |
- `security_content_ctime(firstTime)` | `executable_file_written_in_administrative_smb_share_filter`'
+ ShareName RelativeTargetName ObjectType AccessMask src_user src_port IpAddress dest
+ | `security_content_ctime(firstTime)` | `executable_file_written_in_administrative_smb_share_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
Windows Security Event Logs with 5145 EventCode enabled. The Windows TA is also
required. Also enable the object Audit access success/failure in your group policy.
@@ -78,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/exe_smbshare/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/exe_smbshare/windows-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/executables_or_script_creation_in_suspicious_path.yml b/detections/endpoint/executables_or_script_creation_in_suspicious_path.yml
index 0fde8612a1..2250bca972 100644
--- a/detections/endpoint/executables_or_script_creation_in_suspicious_path.yml
+++ b/detections/endpoint/executables_or_script_creation_in_suspicious_path.yml
@@ -1,7 +1,7 @@
name: Executables Or Script Creation In Suspicious Path
id: a7e3f0f0-ae42-11eb-b245-acde48001122
-version: '12'
-date: '2025-02-28'
+version: 13
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
@@ -15,15 +15,18 @@ description: The following analytic identifies the creation of executables or sc
a significant security threat.
data_source:
- Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` values(Filesystem.file_path) as file_path count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Filesystem
- where Filesystem.file_name IN ("*.exe", "*.dll", "*.sys", "*.com", "*.vbs", "*.vbe", "*.js", "*.ps1", "*.bat", "*.cmd", "*.pif")
- AND Filesystem.file_path IN ("*\\windows\\fonts\\*", "*\\users\\public\\*", "*\\windows\\debug\\*", "*\\Users\\Administrator\\Music\\*", "*\\Windows\\servicing\\*", "*\\Users\\Default\\*", "*Recycle.bin*", "*\\Windows\\Media\\*",
- "*\\Windows\\repair\\*", "*\\PerfLogs\\*") AND NOT(Filesystem.file_path IN("*\\temp\\*"))
- by Filesystem.file_create_time Filesystem.process_id Filesystem.file_name Filesystem.user
- | `drop_dm_object_name(Filesystem)`
- | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)`
- | `executables_or_script_creation_in_suspicious_path_filter`'
+search: '| tstats `security_content_summariesonly` values(Filesystem.file_path) as
+ file_path count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Filesystem
+ where Filesystem.file_name IN ("*.exe", "*.dll", "*.sys", "*.com", "*.vbs", "*.vbe",
+ "*.js", "*.ps1", "*.bat", "*.cmd", "*.pif") AND Filesystem.file_path IN ("*\\windows\\fonts\\*",
+ "*\\windows\\temp\\*", "*\\users\\public\\*", "*\\windows\\debug\\*", "*\\Users\\Administrator\\Music\\*",
+ "*\\Windows\\servicing\\*", "*\\Users\\Default\\*", "*Recycle.bin*", "*\\Windows\\Media\\*",
+ "*\\Windows\\repair\\*", "*\\AppData\\Local\\Temp*", "*\\PerfLogs\\*", "*:\\temp\\*")
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `executables_or_script_creation_in_suspicious_path_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the Filesystem responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Filesystem` node.
diff --git a/detections/endpoint/executables_or_script_creation_in_temp_path.yml b/detections/endpoint/executables_or_script_creation_in_temp_path.yml
index 048578c69d..22f4901a81 100644
--- a/detections/endpoint/executables_or_script_creation_in_temp_path.yml
+++ b/detections/endpoint/executables_or_script_creation_in_temp_path.yml
@@ -1,7 +1,7 @@
name: Executables Or Script Creation In Temp Path
id: e0422b71-2c05-4f32-8754-01fb415f49c9
-version: 11
-date: '2025-02-11'
+version: 12
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
@@ -15,14 +15,15 @@ description: The following analytic identifies the creation of executables or sc
a significant security threat.
data_source:
- Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` values(Filesystem.file_path) as file_path count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Filesystem
- where Filesystem.file_name IN ("*.exe", "*.dll", "*.sys", "*.com", "*.vbs", "*.vbe", "*.js", "*.ps1", "*.bat", "*.cmd", "*.pif")
- AND Filesystem.file_path IN ("*\\AppData\\Local\\Temp\\*", "*:\\Windows\\Temp\\*", "*:\\Temp*")
- by Filesystem.file_create_time Filesystem.process_id Filesystem.file_name Filesystem.user
- | `drop_dm_object_name(Filesystem)`
- | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)`
- | `executables_or_script_creation_in_temp_path_filter`'
+search: '| tstats `security_content_summariesonly` values(Filesystem.file_path) as
+ file_path count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Filesystem
+ where Filesystem.file_name IN ("*.exe", "*.dll", "*.sys", "*.com", "*.vbs", "*.vbe",
+ "*.js", "*.ps1", "*.bat", "*.cmd", "*.pif") AND Filesystem.file_path IN ("*\\AppData\\Local\\Temp\\*",
+ "*:\\Windows\\Temp\\*", "*:\\Temp*") by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `executables_or_script_creation_in_temp_path_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the Filesystem responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Filesystem` node.
@@ -48,8 +49,8 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Potentially suspicious executable or script with file name $file_name$, $file_path$
- and process_id $process_id$ was created in temporary folder by $user$
+ message: Potentially suspicious executable or script with file name $file_name$,
+ $file_path$ and process_id $process_id$ was created in temporary folder by $user$
risk_objects:
- field: user
type: user
diff --git a/detections/endpoint/execute_javascript_with_jscript_com_clsid.yml b/detections/endpoint/execute_javascript_with_jscript_com_clsid.yml
index 7099216131..7600020d9f 100644
--- a/detections/endpoint/execute_javascript_with_jscript_com_clsid.yml
+++ b/detections/endpoint/execute_javascript_with_jscript_com_clsid.yml
@@ -1,6 +1,6 @@
name: Execute Javascript With Jscript COM CLSID
id: dc64d064-d346-11eb-8588-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "cscript.exe"
- Processes.process="*-e:{F414C262-6AC0-11CF-B6D1-00AA00BBBB58}*" by Processes.parent_process_name
- Processes.process_name Processes.process Processes.parent_process Processes.process_id
- Processes.dest Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `execute_javascript_with_jscript_com_clsid_filter`'
+ Processes.process="*-e:{F414C262-6AC0-11CF-B6D1-00AA00BBBB58}*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `execute_javascript_with_jscript_com_clsid_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/execution_of_file_with_multiple_extensions.yml b/detections/endpoint/execution_of_file_with_multiple_extensions.yml
index c7c46d2a00..a22538c36e 100644
--- a/detections/endpoint/execution_of_file_with_multiple_extensions.yml
+++ b/detections/endpoint/execution_of_file_with_multiple_extensions.yml
@@ -1,6 +1,6 @@
name: Execution of File with Multiple Extensions
id: b06a555e-dce0-417d-a2eb-28a5d8d66ef7
-version: 9
+version: 10
date: '2025-02-10'
author: Rico Valdez, Teoderick Contreras, Splunk
status: production
@@ -20,8 +20,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process IN ("*.doc.exe",
"*.xls.exe","*.ppt.exe", "*.htm.exe", "*.html.exe", "*.txt.exe", "*.pdf.exe", "*.docx.exe",
- "*.xlsx.exe", "*.pptx.exe","*.one.exe", "*.bat.exe", "*rtf.exe") by Processes.dest
- Processes.user Processes.process Processes.process_name Processes.parent_process
+ "*.xlsx.exe", "*.pptx.exe","*.one.exe", "*.bat.exe", "*rtf.exe") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `drop_dm_object_name(Processes)`
| `execution_of_file_with_multiple_extensions_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -80,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.003/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.003/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/file_with_samsam_extension.yml b/detections/endpoint/file_with_samsam_extension.yml
index f09d658da1..86ed3f6ce0 100644
--- a/detections/endpoint/file_with_samsam_extension.yml
+++ b/detections/endpoint/file_with_samsam_extension.yml
@@ -1,6 +1,6 @@
name: File with Samsam Extension
id: 02c6cfc2-ae66-4735-bfc7-6291da834cbf
-version: 6
+version: 7
date: '2024-11-13'
author: Rico Valdez, Splunk
status: production
@@ -14,14 +14,15 @@ description: The following analytic detects file writes with extensions indicati
should include isolating affected systems, restoring files from backups, and investigating
the attack source to prevent further incidents.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
+- Sysmon EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime values(Filesystem.user) as user values(Filesystem.dest) as dest values(Filesystem.file_path)
- as file_path from datamodel=Endpoint.Filesystem by Filesystem.file_name | `drop_dm_object_name(Filesystem)`
- | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`| rex
- field=file_name "(?\.[^\.]+)$" | search file_extension=.stubbin
+ as file_path from datamodel=Endpoint.Filesystem by Filesystem.action Filesystem.dest
+ Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
+ Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size
+ Filesystem.process_guid Filesystem.process_id Filesystem.user Filesystem.vendor_product
+ | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`|
+ rex field=file_name "(?\.[^\.]+)$" | search file_extension=.stubbin
OR file_extension=.berkshire OR file_extension=.satoshi OR file_extension=.sophos
OR file_extension=.keyxml | `file_with_samsam_extension_filter`'
how_to_implement: You must be ingesting data that records file-system activity from
@@ -70,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.003/samsam_extension/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.003/samsam_extension/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/firewall_allowed_program_enable.yml b/detections/endpoint/firewall_allowed_program_enable.yml
index 11f599d75e..c099e68c1c 100644
--- a/detections/endpoint/firewall_allowed_program_enable.yml
+++ b/detections/endpoint/firewall_allowed_program_enable.yml
@@ -1,6 +1,6 @@
name: Firewall Allowed Program Enable
id: 9a8f63a8-43ac-11ec-904c-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -20,8 +20,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process = "*firewall*"
Processes.process = "*allow*" Processes.process = "*add*" Processes.process = "*ENABLE*"
- by Processes.dest Processes.user Processes.parent_process_name Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `firewall_allowed_program_enable_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -78,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/vilsel/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/vilsel/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/first_time_seen_child_process_of_zoom.yml b/detections/endpoint/first_time_seen_child_process_of_zoom.yml
index dd00bbb7e0..e81f4d8758 100644
--- a/detections/endpoint/first_time_seen_child_process_of_zoom.yml
+++ b/detections/endpoint/first_time_seen_child_process_of_zoom.yml
@@ -1,6 +1,6 @@
name: First Time Seen Child Process of Zoom
id: e91bd102-d630-4e76-ab73-7e3ba22c5961
-version: 5
+version: 6
date: '2024-11-13'
author: David Dorsey, Splunk
status: experimental
@@ -16,16 +16,23 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` min(_time) as firstTime values(Processes.parent_process_name)
- as parent_process_name values(Processes.parent_process_id) as parent_process_id
- values(Processes.process_name) as process_name values(Processes.process) as process
- from datamodel=Endpoint.Processes where (Processes.parent_process_name=zoom.exe
- OR Processes.parent_process_name=zoom.us) by Processes.process_id Processes.dest
- | `drop_dm_object_name(Processes)` | lookup zoom_first_time_child_process dest as
- dest process_name as process_name OUTPUT firstTimeSeen | where isnull(firstTimeSeen)
- OR firstTimeSeen > relative_time(now(), "`previously_seen_zoom_child_processes_window`")
- | `security_content_ctime(firstTime)` | table firstTime dest, process_id, process_name,
- parent_process_id, parent_process_name |`first_time_seen_child_process_of_zoom_filter`'
+search: '| tstats `security_content_summariesonly` min(_time) as firstTime max(_time)
+ as lastTime values(Processes.user) as user values(Processes.action) as action values(Processes.dest)
+ as dest values(Processes.original_file_name) as original_file_name values(Processes.parent_process)
+ as parent_process values(Processes.parent_process_exec) as parent_process_exec values(Processes.parent_process_guid)
+ as parent_process_guid values(Processes.parent_process_id) as parent_process_id
+ values(Processes.parent_process_name) as parent_process_name values(Processes.parent_process_path)
+ as parent_process_path values(Processes.process) as process values(Processes.process_exec)
+ as process_exec values(Processes.process_guid) as process_guid values(Processes.process_hash)
+ as process_hash values(Processes.process_integrity_level) as process_integrity_level
+ values(Processes.process_name) as process_name values(Processes.process_path) as
+ process_path values(Processes.user) as user values(Processes.user_id) as user_id
+ values(Processes.vendor_product) as vendor_product from datamodel=Endpoint.Processes
+ where (Processes.parent_process_name=zoom.exe OR Processes.parent_process_name=zoom.us)
+ by Processes.process_id Processes.dest | `drop_dm_object_name(Processes)` | lookup
+ zoom_first_time_child_process dest as dest process_name as process_name OUTPUT firstTimeSeen
+ | where isnull(firstTimeSeen) OR firstTimeSeen > relative_time(now(), "`previously_seen_zoom_child_processes_window`")
+ | `security_content_ctime(firstTime)` | `first_time_seen_child_process_of_zoom_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/fodhelper_uac_bypass.yml b/detections/endpoint/fodhelper_uac_bypass.yml
index 643bf866c4..f0a7eebd5b 100644
--- a/detections/endpoint/fodhelper_uac_bypass.yml
+++ b/detections/endpoint/fodhelper_uac_bypass.yml
@@ -1,6 +1,6 @@
name: FodHelper UAC Bypass
id: 909f8fd8-7ac8-11eb-a1f3-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=fodhelper.exe
- by Processes.dest Processes.user Processes.parent_process Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
| `fodhelper_uac_bypass_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -83,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/fsutil_zeroing_file.yml b/detections/endpoint/fsutil_zeroing_file.yml
index 91e21bf58e..6a7c144866 100644
--- a/detections/endpoint/fsutil_zeroing_file.yml
+++ b/detections/endpoint/fsutil_zeroing_file.yml
@@ -1,6 +1,6 @@
name: Fsutil Zeroing File
id: 4e5e024e-fabb-11eb-8b8f-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process)
as process values(Processes.parent_process) as parent_process min(_time) as firstTime
max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_name=fsutil.exe
- Processes.process="*setzerodata*" by Processes.user Processes.process_name Processes.parent_process_name
- Processes.dest Processes.process Processes.parent_process | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `fsutil_zeroing_file_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `fsutil_zeroing_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -72,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070/fsutil_file_zero/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070/fsutil_file_zero/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_addefaultdomainpasswordpolicy_with_powershell.yml b/detections/endpoint/get_addefaultdomainpasswordpolicy_with_powershell.yml
index 70746a5993..8e782db553 100644
--- a/detections/endpoint/get_addefaultdomainpasswordpolicy_with_powershell.yml
+++ b/detections/endpoint/get_addefaultdomainpasswordpolicy_with_powershell.yml
@@ -1,6 +1,6 @@
name: Get ADDefaultDomainPasswordPolicy with Powershell
id: 36e46ebe-065a-11ec-b4c7-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -20,8 +20,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="cmd.exe"
OR Processes.process_name="powershell*") AND Processes.process = "*Get-ADDefaultDomainPasswordPolicy*"
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.parent_process_name
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `get_addefaultdomainpasswordpolicy_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -52,7 +55,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1201/pwd_policy_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1201/pwd_policy_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_addefaultdomainpasswordpolicy_with_powershell_script_block.yml b/detections/endpoint/get_addefaultdomainpasswordpolicy_with_powershell_script_block.yml
index a77b953e01..7554c50b34 100644
--- a/detections/endpoint/get_addefaultdomainpasswordpolicy_with_powershell_script_block.yml
+++ b/detections/endpoint/get_addefaultdomainpasswordpolicy_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: Get ADDefaultDomainPasswordPolicy with Powershell Script Block
id: 1ff7ccc8-065a-11ec-91e4-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -16,9 +16,10 @@ description: The following analytic detects the execution of the `Get-ADDefaultD
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText ="*Get-ADDefaultDomainPasswordPolicy*"
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest, UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `get_addefaultdomainpasswordpolicy_with_powershell_script_block_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `get_addefaultdomainpasswordpolicy_with_powershell_script_block_filter`'
how_to_implement: The following Hunting analytic requires PowerShell operational logs
to be imported. Modify the powershell macro as needed to match the sourcetype or
add index. This analytic is specific to 4104, or PowerShell Script Block Logging.
@@ -41,7 +42,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1201/pwd_policy_discovery/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1201/pwd_policy_discovery/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_aduser_with_powershell.yml b/detections/endpoint/get_aduser_with_powershell.yml
index 19c5c4c847..e72d6560ed 100644
--- a/detections/endpoint/get_aduser_with_powershell.yml
+++ b/detections/endpoint/get_aduser_with_powershell.yml
@@ -1,6 +1,6 @@
name: Get ADUser with PowerShell
id: 0b6ee3f4-04e3-11ec-a87d-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -20,10 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="cmd.exe"
OR Processes.process_name="powershell*") AND Processes.process = "*Get-ADUser*"
- AND Processes.process = "*-filter*" by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.parent_process_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `get_aduser_with_powershell_filter`'
+ AND Processes.process = "*-filter*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `get_aduser_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -53,7 +56,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_aduser_with_powershell_script_block.yml b/detections/endpoint/get_aduser_with_powershell_script_block.yml
index 4ea837065c..3f42a1d3e1 100644
--- a/detections/endpoint/get_aduser_with_powershell_script_block.yml
+++ b/detections/endpoint/get_aduser_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: Get ADUser with PowerShell Script Block
id: 21432e40-04f4-11ec-b7e6-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -16,9 +16,10 @@ description: The following analytic detects the execution of the `Get-AdUser` Po
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*get-aduser*" ScriptBlockText
- = "*-filter*" | stats count min(_time) as firstTime max(_time) as lastTime by EventCode
- ScriptBlockText Computer UserID | rename Computer as dest, UserID as user| `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `get_aduser_with_powershell_script_block_filter`'
+ = "*-filter*" | fillnull | stats count min(_time) as firstTime max(_time) as lastTime
+ by dest signature signature_id user_id vendor_product EventID Guid Opcode Name Path
+ ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` |
+ `security_content_ctime(lastTime)` | `get_aduser_with_powershell_script_block_filter`'
how_to_implement: The following Hunting analytic requires PowerShell operational logs
to be imported. Modify the powershell macro as needed to match the sourcetype or
add index. This analytic is specific to 4104, or PowerShell Script Block Logging.
@@ -42,7 +43,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/aduser_powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/aduser_powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_aduserresultantpasswordpolicy_with_powershell.yml b/detections/endpoint/get_aduserresultantpasswordpolicy_with_powershell.yml
index e5a8d6839d..395e465b2b 100644
--- a/detections/endpoint/get_aduserresultantpasswordpolicy_with_powershell.yml
+++ b/detections/endpoint/get_aduserresultantpasswordpolicy_with_powershell.yml
@@ -1,6 +1,6 @@
name: Get ADUserResultantPasswordPolicy with Powershell
id: 8b5ef342-065a-11ec-b0fc-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -20,8 +20,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="cmd.exe"
OR Processes.process_name="powershell*") AND Processes.process = "*Get-ADUserResultantPasswordPolicy*"
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.parent_process_name
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `get_aduserresultantpasswordpolicy_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -79,7 +82,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1201/pwd_policy_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1201/pwd_policy_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_aduserresultantpasswordpolicy_with_powershell_script_block.yml b/detections/endpoint/get_aduserresultantpasswordpolicy_with_powershell_script_block.yml
index 5370f63e74..342c422844 100644
--- a/detections/endpoint/get_aduserresultantpasswordpolicy_with_powershell_script_block.yml
+++ b/detections/endpoint/get_aduserresultantpasswordpolicy_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: Get ADUserResultantPasswordPolicy with Powershell Script Block
id: 737e1eb0-065a-11ec-921a-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -16,9 +16,10 @@ description: The following analytic detects the execution of the `Get-ADUserResu
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText="*Get-ADUserResultantPasswordPolicy*"
- | stats count min(_time) as firstTime max(_time) as lastTime by Opcode Computer
- UserID EventCode ScriptBlockText | rename Computer as dest | rename UserID as user
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `get_aduserresultantpasswordpolicy_with_powershell_script_block_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `get_aduserresultantpasswordpolicy_with_powershell_script_block_filter`'
how_to_implement: The following Hunting analytic requires PowerShell operational logs
to be imported. Modify the powershell macro as needed to match the sourcetype or
add index. This analytic is specific to 4104, or PowerShell Script Block Logging.
@@ -28,13 +29,13 @@ references:
- https://attack.mitre.org/techniques/T1201/
- https://docs.microsoft.com/en-us/powershell/module/activedirectory/get-aduserresultantpasswordpolicy?view=windowsserver2019-ps
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -48,7 +49,7 @@ rba:
- field: dest
type: system
score: 9
- - field: user
+ - field: user_id
type: user
score: 9
threat_objects: []
@@ -67,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_domainpolicy_with_powershell.yml b/detections/endpoint/get_domainpolicy_with_powershell.yml
index 01f20fddfa..ce88dad3e4 100644
--- a/detections/endpoint/get_domainpolicy_with_powershell.yml
+++ b/detections/endpoint/get_domainpolicy_with_powershell.yml
@@ -1,6 +1,6 @@
name: Get DomainPolicy with Powershell
id: b8f9947e-065a-11ec-aafb-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -20,8 +20,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="cmd.exe"
OR Processes.process_name="powershell*") AND Processes.process = "*Get-DomainPolicy*"
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.parent_process_name
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `get_domainpolicy_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -78,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1201/pwd_policy_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1201/pwd_policy_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_domainpolicy_with_powershell_script_block.yml b/detections/endpoint/get_domainpolicy_with_powershell_script_block.yml
index b48ac3b943..1a7a100dec 100644
--- a/detections/endpoint/get_domainpolicy_with_powershell_script_block.yml
+++ b/detections/endpoint/get_domainpolicy_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: Get DomainPolicy with Powershell Script Block
id: a360d2b2-065a-11ec-b0bf-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the execution of the `Get-DomainPoli
or lateral movement within the network.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 ScriptBlockText ="*Get-DomainPolicy*" | stats
- count min(_time) as firstTime max(_time) as lastTime by Opcode Computer UserID EventCode
- ScriptBlockText | rename UserID as user | `security_content_ctime(firstTime)` |
- `security_content_ctime(lastTime)` | `get_domainpolicy_with_powershell_script_block_filter`'
+search: '`powershell` EventCode=4104 ScriptBlockText ="*Get-DomainPolicy*" | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `get_domainpolicy_with_powershell_script_block_filter`'
how_to_implement: The following analytic requires PowerShell operational logs to be
imported. Modify the powershell macro as needed to match the sourcetype or add index.
This analytic is specific to 4104, or PowerShell Script Block Logging.
@@ -44,10 +44,10 @@ drilldown_searches:
rba:
message: Powershell process with command line indicative of querying domain policy.
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 30
- - field: user
+ - field: user_id
type: user
score: 30
threat_objects: []
@@ -65,7 +65,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/domainpolicy.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/domainpolicy.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_domaintrust_with_powershell.yml b/detections/endpoint/get_domaintrust_with_powershell.yml
index b694145437..67d8026806 100644
--- a/detections/endpoint/get_domaintrust_with_powershell.yml
+++ b/detections/endpoint/get_domaintrust_with_powershell.yml
@@ -1,6 +1,6 @@
name: Get-DomainTrust with PowerShell
id: 4fa7f846-054a-11ec-a836-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process=*get-domaintrust*
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `get_domaintrust_with_powershell_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `get_domaintrust_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1482/discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1482/discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_domaintrust_with_powershell_script_block.yml b/detections/endpoint/get_domaintrust_with_powershell_script_block.yml
index 49b74c7d07..15a5a585f3 100644
--- a/detections/endpoint/get_domaintrust_with_powershell_script_block.yml
+++ b/detections/endpoint/get_domaintrust_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: Get-DomainTrust with PowerShell Script Block
id: 89275e7e-0548-11ec-bf75-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the execution of the Get-DomainTrust
and compromise of additional systems.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 ScriptBlockText = "*get-domaintrust*" | stats
- count min(_time) as firstTime max(_time) as lastTime by Opcode Computer UserID EventCode
- ScriptBlockText | rename Computer as dest | rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `get_domaintrust_with_powershell_script_block_filter`'
+search: '`powershell` EventCode=4104 ScriptBlockText = "*get-domaintrust*" | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `get_domaintrust_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -31,12 +31,12 @@ references:
- https://static1.squarespace.com/static/552092d5e4b0661088167e5c/t/59c1814829f18782e24f1fe2/1505853768977/Windows+PowerShell+Logging+Cheat+Sheet+ver+Sept+2017+v2.1.pdf
- https://www.crowdstrike.com/blog/investigating-powershell-command-and-script-logging/
drilldown_searches:
-- name: View the detection results for - "$user$" and "$dest$"
- search: '%original_detection_search% | search user = "$user$" dest = "$dest$"'
+- name: View the detection results for - "$user_id$" and "$dest$"
+ search: '%original_detection_search% | search user_id = "$user_id$" dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$user$" and "$dest$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user$",
+- name: View risk events for the last 7 days for - "$user_id$" and "$dest$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user_id$",
"$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)
@@ -46,9 +46,9 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: Suspicious PowerShell Get-DomainTrust was identified on endpoint $dest$
- by user $user$.
+ by user $user_id$.
risk_objects:
- - field: user
+ - field: user_id
type: user
score: 12
- field: dest
@@ -69,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/domaintrust.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/domaintrust.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_domainuser_with_powershell.yml b/detections/endpoint/get_domainuser_with_powershell.yml
index b7844e4976..ecbb4a7059 100644
--- a/detections/endpoint/get_domainuser_with_powershell.yml
+++ b/detections/endpoint/get_domainuser_with_powershell.yml
@@ -1,6 +1,6 @@
name: Get DomainUser with PowerShell
id: 9a5a41d6-04e7-11ec-923c-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -21,8 +21,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="cmd.exe"
OR Processes.process_name="powershell*") AND Processes.process = "*Get-DomainUser*"
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.parent_process_name
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `get_domainuser_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -78,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_domainuser_with_powershell_script_block.yml b/detections/endpoint/get_domainuser_with_powershell_script_block.yml
index 9fb765be7e..f6fe73f535 100644
--- a/detections/endpoint/get_domainuser_with_powershell_script_block.yml
+++ b/detections/endpoint/get_domainuser_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: Get DomainUser with PowerShell Script Block
id: 61994268-04f4-11ec-865c-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the execution of the `Get-DomainUser
and potential exploitation of domain resources.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 ScriptBlockText = "*Get-DomainUser*" | stats
- count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest, UserID as user| `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `get_domainuser_with_powershell_script_block_filter`'
+search: '`powershell` EventCode=4104 ScriptBlockText = "*Get-DomainUser*" | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `get_domainuser_with_powershell_script_block_filter`'
how_to_implement: The following Hunting analytic requires PowerShell operational logs
to be imported. Modify the powershell macro as needed to match the sourcetype or
add index. This analytic is specific to 4104, or PowerShell Script Block Logging.
@@ -46,7 +46,7 @@ rba:
- field: dest
type: system
score: 25
- - field: user
+ - field: user_id
type: user
score: 25
threat_objects: []
@@ -65,7 +65,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_foresttrust_with_powershell.yml b/detections/endpoint/get_foresttrust_with_powershell.yml
index 06ed2a33db..c2696029f1 100644
--- a/detections/endpoint/get_foresttrust_with_powershell.yml
+++ b/detections/endpoint/get_foresttrust_with_powershell.yml
@@ -1,6 +1,6 @@
name: Get-ForestTrust with PowerShell
id: 584f4884-0bf1-11ec-a5ec-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=powershell.exe
- OR Processes.process_name=cmd.exe Processes.process=*get-foresttrust* by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `get_foresttrust_with_powershell_filter`'
+ OR Processes.process_name=cmd.exe Processes.process=*get-foresttrust* by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `get_foresttrust_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1482/discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1482/discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_foresttrust_with_powershell_script_block.yml b/detections/endpoint/get_foresttrust_with_powershell_script_block.yml
index 8f5863abd2..77c5dbf96a 100644
--- a/detections/endpoint/get_foresttrust_with_powershell_script_block.yml
+++ b/detections/endpoint/get_foresttrust_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: Get-ForestTrust with PowerShell Script Block
id: 70fac80e-0bf1-11ec-9ba0-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the execution of the Get-ForestTrust
further exploitation and access to sensitive resources.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 ScriptBlockText = "*get-foresttrust*" | stats
- count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest | rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `get_foresttrust_with_powershell_script_block_filter`'
+search: '`powershell` EventCode=4104 ScriptBlockText = "*get-foresttrust*" | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `get_foresttrust_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -27,12 +27,12 @@ references:
- https://powersploit.readthedocs.io/en/latest/Recon/Get-ForestTrust/
- https://www.splunk.com/en_us/blog/security/hunting-for-malicious-powershell-using-script-block-logging.html
drilldown_searches:
-- name: View the detection results for - "$user$" and "$dest$"
- search: '%original_detection_search% | search user = "$user$" dest = "$dest$"'
+- name: View the detection results for - "$user_id$" and "$dest$"
+ search: '%original_detection_search% | search user_id = "$user_id$" dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$user$" and "$dest$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user$",
+- name: View risk events for the last 7 days for - "$user_id$" and "$dest$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user_id$",
"$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)
@@ -42,9 +42,9 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: Suspicious PowerShell Get-ForestTrust was identified on endpoint $dest$
- by user $user$.
+ by user $user_id$.
risk_objects:
- - field: user
+ - field: user_id
type: user
score: 12
- field: dest
@@ -66,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1482/discovery/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1482/discovery/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_wmiobject_group_discovery.yml b/detections/endpoint/get_wmiobject_group_discovery.yml
index eb0c67807c..6ecfdcf444 100644
--- a/detections/endpoint/get_wmiobject_group_discovery.yml
+++ b/detections/endpoint/get_wmiobject_group_discovery.yml
@@ -1,6 +1,6 @@
name: Get WMIObject Group Discovery
id: 5434f670-155d-11ec-8cca-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=powershell.exe
OR processes.process_name=cmd.exe) (Processes.process="*Get-WMIObject*" AND Processes.process="*Win32_Group*")
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.original_file_name Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` |
`get_wmiobject_group_discovery_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -50,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/get_wmiobject_group_discovery_with_script_block_logging.yml b/detections/endpoint/get_wmiobject_group_discovery_with_script_block_logging.yml
index b6b6ec3604..c783e60eb6 100644
--- a/detections/endpoint/get_wmiobject_group_discovery_with_script_block_logging.yml
+++ b/detections/endpoint/get_wmiobject_group_discovery_with_script_block_logging.yml
@@ -1,6 +1,6 @@
name: Get WMIObject Group Discovery with Script Block Logging
id: 69df7f7c-155d-11ec-a055-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -15,9 +15,10 @@ description: The following analytic detects the execution of the `Get-WMIObject
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*Get-WMIObject*" AND ScriptBlockText
- = "*Win32_Group*" | stats count min(_time) as firstTime max(_time) as lastTime by
- EventCode ScriptBlockText Computer UserID | rename Computer as dest, UserID as user
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `get_wmiobject_group_discovery_with_script_block_logging_filter`'
+ = "*Win32_Group*" | fillnull | stats count min(_time) as firstTime max(_time) as
+ lastTime by dest signature signature_id user_id vendor_product EventID Guid Opcode
+ Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `get_wmiobject_group_discovery_with_script_block_logging_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -43,7 +44,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.001/atomic_red_team/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.001/atomic_red_team/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getadcomputer_with_powershell.yml b/detections/endpoint/getadcomputer_with_powershell.yml
index 57df18394d..14209d6158 100644
--- a/detections/endpoint/getadcomputer_with_powershell.yml
+++ b/detections/endpoint/getadcomputer_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetAdComputer with PowerShell
id: c5a31f80-5888-4d81-9f78-1cc65026316e
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
- (Processes.process=*Get-AdComputer*) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `getadcomputer_with_powershell_filter`'
+ (Processes.process=*Get-AdComputer*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getadcomputer_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -49,7 +52,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getadcomputer_with_powershell_script_block.yml b/detections/endpoint/getadcomputer_with_powershell_script_block.yml
index c0723130b0..5359ebaa4d 100644
--- a/detections/endpoint/getadcomputer_with_powershell_script_block.yml
+++ b/detections/endpoint/getadcomputer_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetAdComputer with PowerShell Script Block
id: a9a1da02-8e27-4bf7-a348-f4389c9da487
-version: 6
+version: 7
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -15,9 +15,10 @@ description: The following analytic detects the execution of the `Get-AdComputer
access and data exfiltration.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-AdComputer*") | stats
- count min(_time) as firstTime max(_time) as lastTime by Opcode Computer UserID EventCode
- ScriptBlockText | `security_content_ctime(firstTime)` | `getadcomputer_with_powershell_script_block_filter`'
+search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-AdComputer*") | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `getadcomputer_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -42,7 +43,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getadgroup_with_powershell.yml b/detections/endpoint/getadgroup_with_powershell.yml
index 8f87c04925..c41ce37690 100644
--- a/detections/endpoint/getadgroup_with_powershell.yml
+++ b/detections/endpoint/getadgroup_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetAdGroup with PowerShell
id: 872e3063-0fc4-4e68-b2f3-f2b99184a708
-version: 5
+version: 6
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
- (Processes.process=*Get-AdGroup*) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `getadgroup_with_powershell_filter`'
+ (Processes.process=*Get-AdGroup*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getadgroup_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -50,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getadgroup_with_powershell_script_block.yml b/detections/endpoint/getadgroup_with_powershell_script_block.yml
index 5f765ba70b..6e7cd38a27 100644
--- a/detections/endpoint/getadgroup_with_powershell_script_block.yml
+++ b/detections/endpoint/getadgroup_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetAdGroup with PowerShell Script Block
id: e4c73d68-794b-468d-b4d0-dac1772bbae7
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -14,10 +14,10 @@ description: The following analytic detects the execution of the `Get-AdGroup` P
by providing attackers with detailed information about the domain's group structure.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 ScriptBlockText = "*Get-ADGroup*" | stats count
- min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText Computer
- UserID | rename Computer as dest, UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `getadgroup_with_powershell_script_block_filter`'
+search: '`powershell` EventCode=4104 ScriptBlockText = "*Get-ADGroup*" | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getadgroup_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -40,7 +40,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getcurrent_user_with_powershell.yml b/detections/endpoint/getcurrent_user_with_powershell.yml
index 0b6c3fdefc..11fd09b11f 100644
--- a/detections/endpoint/getcurrent_user_with_powershell.yml
+++ b/detections/endpoint/getcurrent_user_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetCurrent User with PowerShell
id: 7eb9c3d5-c98c-4088-acc5-8240bad15379
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
(Processes.process=*System.Security.Principal.WindowsIdentity* OR Processes.process=*GetCurrent()*)
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getcurrent_user_with_powershell_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `getcurrent_user_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -49,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getcurrent_user_with_powershell_script_block.yml b/detections/endpoint/getcurrent_user_with_powershell_script_block.yml
index 2203c5173f..70b9412124 100644
--- a/detections/endpoint/getcurrent_user_with_powershell_script_block.yml
+++ b/detections/endpoint/getcurrent_user_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetCurrent User with PowerShell Script Block
id: 80879283-c30f-44f7-8471-d1381f6d437a
-version: 5
+version: 6
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects the execution of the `GetCurrent` me
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*[System.Security.Principal.WindowsIdentity]*" ScriptBlockText
- = "*GetCurrent()*" | stats count min(_time) as firstTime max(_time) as lastTime
- by EventCode ScriptBlockText Computer UserID | rename Computer as dest, UserID as
- user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `getcurrent_user_with_powershell_script_block_filter`'
+ = "*GetCurrent()*" | fillnull | stats count min(_time) as firstTime max(_time) as
+ lastTime by dest signature signature_id user_id vendor_product EventID Guid Opcode
+ Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `getcurrent_user_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -42,7 +42,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getdomaincomputer_with_powershell.yml b/detections/endpoint/getdomaincomputer_with_powershell.yml
index 4cada0e98a..cf79d7fda4 100644
--- a/detections/endpoint/getdomaincomputer_with_powershell.yml
+++ b/detections/endpoint/getdomaincomputer_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetDomainComputer with PowerShell
id: ed550c19-712e-43f6-bd19-6f58f61b3a5e
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
- (Processes.process=*Get-DomainComputer*) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `getdomaincomputer_with_powershell_filter`'
+ (Processes.process=*Get-DomainComputer*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getdomaincomputer_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -70,7 +73,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getdomaincomputer_with_powershell_script_block.yml b/detections/endpoint/getdomaincomputer_with_powershell_script_block.yml
index 6110518366..eeb7ce7699 100644
--- a/detections/endpoint/getdomaincomputer_with_powershell_script_block.yml
+++ b/detections/endpoint/getdomaincomputer_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetDomainComputer with PowerShell Script Block
id: f64da023-b988-4775-8d57-38e512beb56e
-version: 5
+version: 6
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -16,8 +16,9 @@ description: The following analytic detects the execution of the `Get-DomainComp
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-DomainComputer*") |
- stats count min(_time) as firstTime max(_time) as lastTime by Opcode Computer UserID
- EventCode ScriptBlockText | rename Computer as dest | rename UserID as user | `security_content_ctime(firstTime)`
+ fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest signature
+ signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId
+ ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `getdomaincomputer_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
@@ -41,7 +42,7 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Remote system discovery with PowerView on $dest$ by $user$
+ message: Remote system discovery with PowerView on $dest$ by $user_id$
risk_objects:
- field: dest
type: system
@@ -61,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getdomaincontroller_with_powershell.yml b/detections/endpoint/getdomaincontroller_with_powershell.yml
index bfeaa95e16..863805b98b 100644
--- a/detections/endpoint/getdomaincontroller_with_powershell.yml
+++ b/detections/endpoint/getdomaincontroller_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetDomainController with PowerShell
id: 868ee0e4-52ab-484a-833a-6d85b7c028d0
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
- (Processes.process=*Get-DomainController*) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `getdomaincontroller_with_powershell_filter`'
+ (Processes.process=*Get-DomainController*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getdomaincontroller_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -50,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getdomaincontroller_with_powershell_script_block.yml b/detections/endpoint/getdomaincontroller_with_powershell_script_block.yml
index 7d2d8523fc..a6654161ab 100644
--- a/detections/endpoint/getdomaincontroller_with_powershell_script_block.yml
+++ b/detections/endpoint/getdomaincontroller_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetDomainController with PowerShell Script Block
id: 676b600a-a94d-4951-b346-11329431e6c1
-version: 5
+version: 6
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -16,8 +16,9 @@ description: The following analytic detects the execution of the `Get-DomainCont
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-DomainController*")
- | stats count min(_time) as firstTime max(_time) as lastTime by Opcode Computer
- UserID EventCode ScriptBlockText | `security_content_ctime(firstTime)` | `getdomaincontroller_with_powershell_script_block_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `getdomaincontroller_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -41,9 +42,9 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Remote system discovery with PowerView on $Computer$ by $UserID$
+ message: Remote system discovery with PowerView on $dest$ by $user_id$
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 24
threat_objects: []
@@ -61,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/getdc.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/getdc.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getdomaingroup_with_powershell.yml b/detections/endpoint/getdomaingroup_with_powershell.yml
index 8c01054c4b..bb5d457fad 100644
--- a/detections/endpoint/getdomaingroup_with_powershell.yml
+++ b/detections/endpoint/getdomaingroup_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetDomainGroup with PowerShell
id: 93c94be3-bead-4a60-860f-77ca3fe59903
-version: 5
+version: 6
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -20,10 +20,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
- (Processes.process=*Get-DomainGroup*) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `getdomaingroup_with_powershell_filter`'
+ (Processes.process=*Get-DomainGroup*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getdomaingroup_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getdomaingroup_with_powershell_script_block.yml b/detections/endpoint/getdomaingroup_with_powershell_script_block.yml
index bad857a4c9..8555a29caf 100644
--- a/detections/endpoint/getdomaingroup_with_powershell_script_block.yml
+++ b/detections/endpoint/getdomaingroup_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetDomainGroup with PowerShell Script Block
id: 09725404-a44f-4ed3-9efa-8ed5d69e4c53
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -15,9 +15,10 @@ description: The following analytic detects the execution of the `Get-DomainGrou
privilege escalation and lateral movement within the network.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-DomainGroup*") | stats
- count min(_time) as firstTime max(_time) as lastTime by Opcode Computer UserID EventCode
- ScriptBlockText | `security_content_ctime(firstTime)` | `getdomaingroup_with_powershell_script_block_filter`'
+search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-DomainGroup*") | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getdomaingroup_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -41,9 +42,9 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Domain group discovery enumeration using PowerView on $Computer$ by $UserID$
+ message: Domain group discovery enumeration using PowerView on $dest$ by $user_id$
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 15
threat_objects: []
@@ -61,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/domaingroup.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/domaingroup.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getlocaluser_with_powershell.yml b/detections/endpoint/getlocaluser_with_powershell.yml
index 7819e2520b..2fcb245e2f 100644
--- a/detections/endpoint/getlocaluser_with_powershell.yml
+++ b/detections/endpoint/getlocaluser_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetLocalUser with PowerShell
id: 85fae8fa-0427-11ec-8b78-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
- (Processes.process=*Get-LocalUser*) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `getlocaluser_with_powershell_filter`'
+ (Processes.process=*Get-LocalUser*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getlocaluser_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -50,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.001/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.001/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getlocaluser_with_powershell_script_block.yml b/detections/endpoint/getlocaluser_with_powershell_script_block.yml
index 5e8423446f..be98ab7e9c 100644
--- a/detections/endpoint/getlocaluser_with_powershell_script_block.yml
+++ b/detections/endpoint/getlocaluser_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetLocalUser with PowerShell Script Block
id: 2e891cbe-0426-11ec-9c9c-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the execution of the `Get-LocalUser`
for privilege escalation or lateral movement.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-LocalUser*") | stats
- count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer user_id | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `getlocaluser_with_powershell_script_block_filter`'
+search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-LocalUser*") | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getlocaluser_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -43,7 +43,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.001/AD_discovery/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.001/AD_discovery/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getnettcpconnection_with_powershell.yml b/detections/endpoint/getnettcpconnection_with_powershell.yml
index bedb098129..d0afa95f9e 100644
--- a/detections/endpoint/getnettcpconnection_with_powershell.yml
+++ b/detections/endpoint/getnettcpconnection_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetNetTcpconnection with PowerShell
id: e02af35c-1de5-4afe-b4be-f45aba57272b
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
- (Processes.process=*Get-NetTcpConnection*) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `getnettcpconnection_with_powershell_filter`'
+ (Processes.process=*Get-NetTcpConnection*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getnettcpconnection_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -50,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1049/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1049/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getnettcpconnection_with_powershell_script_block.yml b/detections/endpoint/getnettcpconnection_with_powershell_script_block.yml
index aa0100c6f2..595b2e0906 100644
--- a/detections/endpoint/getnettcpconnection_with_powershell_script_block.yml
+++ b/detections/endpoint/getnettcpconnection_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetNetTcpconnection with PowerShell Script Block
id: 091712ff-b02a-4d43-82ed-34765515d95d
-version: 5
+version: 6
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -16,8 +16,10 @@ description: The following analytic detects the execution of the `Get-NetTcpconn
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText = "*Get-NetTcpconnection*")
- | stats count min(_time) as firstTime max(_time) as lastTime by Opcode Computer
- UserID EventCode ScriptBlockText | `security_content_ctime(firstTime)` | `getnettcpconnection_with_powershell_script_block_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `getnettcpconnection_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -40,7 +42,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/nettcpconnection.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/nettcpconnection.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getwmiobject_ds_computer_with_powershell.yml b/detections/endpoint/getwmiobject_ds_computer_with_powershell.yml
index 207b36cf90..c7fbc954a2 100644
--- a/detections/endpoint/getwmiobject_ds_computer_with_powershell.yml
+++ b/detections/endpoint/getwmiobject_ds_computer_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetWmiObject Ds Computer with PowerShell
id: 7141122c-3bc2-4aaa-ab3b-7a85a0bbefc3
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -21,8 +21,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
(Processes.process=*Get-WmiObject* AND Processes.process="*namespace root\\directory\\ldap*"
- AND Processes.process="*class ds_computer*") by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ AND Processes.process="*class ds_computer*") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `getwmiobject_ds_computer_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -72,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getwmiobject_ds_computer_with_powershell_script_block.yml b/detections/endpoint/getwmiobject_ds_computer_with_powershell_script_block.yml
index ab5ae3dd63..8f0b49aab1 100644
--- a/detections/endpoint/getwmiobject_ds_computer_with_powershell_script_block.yml
+++ b/detections/endpoint/getwmiobject_ds_computer_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetWmiObject Ds Computer with PowerShell Script Block
id: 29b99201-723c-4118-847a-db2b3d3fb8ea
-version: 5
+version: 6
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -15,9 +15,10 @@ description: The following analytic detects the execution of the `Get-WmiObject`
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText=*Get-WmiObject* AND ScriptBlockText="*namespace
- root\\directory\\ldap*" AND ScriptBlockText="*class ds_computer*") | stats count
- min(_time) as firstTime max(_time) as lastTime by Opcode Computer UserID EventCode
- ScriptBlockText | `security_content_ctime(firstTime)` | `getwmiobject_ds_computer_with_powershell_script_block_filter`'
+ root\\directory\\ldap*" AND ScriptBlockText="*class ds_computer*") | fillnull |
+ stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getwmiobject_ds_computer_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -41,9 +42,9 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Remote system discovery enumeration on $Computer$ by $UserID$
+ message: Remote system discovery enumeration on $dest$ by $user_id$
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 15
threat_objects: []
@@ -61,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getwmiobject_ds_group_with_powershell.yml b/detections/endpoint/getwmiobject_ds_group_with_powershell.yml
index f0dc6262b2..ab6d4ddb71 100644
--- a/detections/endpoint/getwmiobject_ds_group_with_powershell.yml
+++ b/detections/endpoint/getwmiobject_ds_group_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetWmiObject Ds Group with PowerShell
id: df275a44-4527-443b-b884-7600e066e3eb
-version: 5
+version: 6
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -20,10 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
(Processes.process=*Get-WmiObject* AND Processes.process="*namespace root\\directory\\ldap*"
- AND Processes.process="*class ds_group*") by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `getwmiobject_ds_group_with_powershell_filter`'
+ AND Processes.process="*class ds_group*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getwmiobject_ds_group_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getwmiobject_ds_group_with_powershell_script_block.yml b/detections/endpoint/getwmiobject_ds_group_with_powershell_script_block.yml
index 36a64083ac..ab4b128b5f 100644
--- a/detections/endpoint/getwmiobject_ds_group_with_powershell_script_block.yml
+++ b/detections/endpoint/getwmiobject_ds_group_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetWmiObject Ds Group with PowerShell Script Block
id: 67740bd3-1506-469c-b91d-effc322cc6e5
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the execution of the `Get-WmiObject`
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText=*Get-WmiObject* AND ScriptBlockText="*namespace
- root\\directory\\ldap*" AND ScriptBlockText="*class ds_group*") | stats count min(_time)
- as firstTime max(_time) as lastTime by Opcode Computer UserID EventCode ScriptBlockText
- | rename Computer as dest | rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)`|`getwmiobject_ds_group_with_powershell_script_block_filter`'
+ root\\directory\\ldap*" AND ScriptBlockText="*class ds_group*") | fillnull | stats
+ count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` |`getwmiobject_ds_group_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -42,7 +42,7 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Domain group discovery enumeration using PowerShell on $dest$ by $user$
+ message: Domain group discovery enumeration using PowerShell on $dest$ by $user_id$
risk_objects:
- field: dest
type: system
@@ -62,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getwmiobject_ds_user_with_powershell.yml b/detections/endpoint/getwmiobject_ds_user_with_powershell.yml
index eeb6e39b17..650b9860ed 100644
--- a/detections/endpoint/getwmiobject_ds_user_with_powershell.yml
+++ b/detections/endpoint/getwmiobject_ds_user_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetWmiObject DS User with PowerShell
id: 22d3b118-04df-11ec-8fa3-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -21,10 +21,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="cmd.exe"
OR Processes.process_name="powershell*") AND Processes.process = "*get-wmiobject*"
AND Processes.process = "*ds_user*" AND Processes.process = "*root\\directory\\ldap*"
- AND Processes.process = "*-namespace*" by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.parent_process_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `getwmiobject_ds_user_with_powershell_filter`'
+ AND Processes.process = "*-namespace*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getwmiobject_ds_user_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getwmiobject_ds_user_with_powershell_script_block.yml b/detections/endpoint/getwmiobject_ds_user_with_powershell_script_block.yml
index ab9fdb89c4..6a09c983fa 100644
--- a/detections/endpoint/getwmiobject_ds_user_with_powershell_script_block.yml
+++ b/detections/endpoint/getwmiobject_ds_user_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetWmiObject DS User with PowerShell Script Block
id: fabd364e-04f3-11ec-b34b-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
@@ -17,9 +17,10 @@ data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*get-wmiobject*" ScriptBlockText
= "*ds_user*" ScriptBlockText = "*-namespace*" ScriptBlockText = "*root\\directory\\ldap*"
- | stats count min(_time) as firstTime max(_time) as lastTime by Opcode Computer
- UserID EventCode ScriptBlockText | rename Computer as dest | rename UserID as user|
- `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getwmiobject_ds_user_with_powershell_script_block_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `getwmiobject_ds_user_with_powershell_script_block_filter`'
how_to_implement: The following Hunting analytic requires PowerShell operational logs
to be imported. Modify the powershell macro as needed to match the sourcetype or
add index. This analytic is specific to 4104, or PowerShell Script Block Logging.
@@ -28,13 +29,13 @@ references:
- https://www.blackhillsinfosec.com/red-blue-purple/
- https://docs.microsoft.com/en-us/windows/win32/wmisdk/describing-the-ldap-namespace
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -48,7 +49,7 @@ rba:
- field: dest
type: system
score: 25
- - field: user
+ - field: user_id
type: user
score: 25
threat_objects: []
@@ -66,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getwmiobject_user_account_with_powershell.yml b/detections/endpoint/getwmiobject_user_account_with_powershell.yml
index 8733ba54ea..43b5652cfd 100644
--- a/detections/endpoint/getwmiobject_user_account_with_powershell.yml
+++ b/detections/endpoint/getwmiobject_user_account_with_powershell.yml
@@ -1,6 +1,6 @@
name: GetWmiObject User Account with PowerShell
id: b44f6ac6-0429-11ec-87e9-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
(Processes.process=*Get-WmiObject* AND Processes.process=*Win32_UserAccount*) by
- Processes.dest Processes.user Processes.parent_process Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `getwmiobject_user_account_with_powershell_filter`'
+ Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `getwmiobject_user_account_with_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -51,7 +55,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.001/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.001/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/getwmiobject_user_account_with_powershell_script_block.yml b/detections/endpoint/getwmiobject_user_account_with_powershell_script_block.yml
index 8677fb28ab..2076c9797a 100644
--- a/detections/endpoint/getwmiobject_user_account_with_powershell_script_block.yml
+++ b/detections/endpoint/getwmiobject_user_account_with_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: GetWmiObject User Account with PowerShell Script Block
id: 640b0eda-0429-11ec-accd-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -15,8 +15,10 @@ description: The following analytic detects the execution of the `Get-WmiObject`
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText="*Get-WmiObject*" AND ScriptBlockText="*Win32_UserAccount*")
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | `security_content_ctime(firstTime)` | `getwmiobject_user_account_with_powershell_script_block_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `getwmiobject_user_account_with_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -42,7 +44,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/gpupdate_with_no_command_line_arguments_with_network.yml b/detections/endpoint/gpupdate_with_no_command_line_arguments_with_network.yml
index 46ab4b2a2e..44b2166007 100644
--- a/detections/endpoint/gpupdate_with_no_command_line_arguments_with_network.yml
+++ b/detections/endpoint/gpupdate_with_no_command_line_arguments_with_network.yml
@@ -1,6 +1,6 @@
name: GPUpdate with no Command Line Arguments with Network
id: 2c853856-a140-11eb-a5b5-acde48001122
-version: 8
+version: 9
date: '2024-12-10'
author: Michael Haag, Splunk
status: production
@@ -16,16 +16,37 @@ description: The following analytic detects the execution of gpupdate.exe withou
leading to system compromise.
data_source:
- Sysmon EventID 1 AND Sysmon EventID 3
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name=gpupdate.exe by _time span=1h Processes.process_id
- Processes.process_name Processes.dest Processes.user Processes.process_path Processes.process
- Processes.parent_process_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | regex process="(?i)(gpupdate\.exe.{0,4}$)"|
- join process_id [| tstats `security_content_summariesonly` count FROM datamodel=Network_Traffic.All_Traffic
- where All_Traffic.dest_port != 0 by All_Traffic.process_id All_Traffic.dest All_Traffic.dest_port
- | `drop_dm_object_name(All_Traffic)` | rename dest as C2 ] | table _time user dest
- parent_process_name process_name process_path process process_id dest_port C2 |
- `gpupdate_with_no_command_line_arguments_with_network_filter`'
+search: '| tstats prestats=t `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
+ where Processes.process_name=gpupdate.exe by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | tstats prestats=t append=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime from datamodel=Network_Traffic.All_Traffic where
+ All_Traffic.dest_port != 0 by All_Traffic.action All_Traffic.app All_Traffic.dest
+ All_Traffic.dest_ip All_Traffic.dest_port All_Traffic.direction All_Traffic.dvc
+ All_Traffic.protocol All_Traffic.protocol_version All_Traffic.src All_Traffic.src_ip
+ All_Traffic.src_port All_Traffic.transport All_Traffic.user All_Traffic.vendor_product
+ All_Traffic.process_id | `drop_dm_object_name(All_Traffic)` | table action dest
+ original_file_name parent_process parent_process_exec parent_process_guid parent_process_id
+ parent_process_name parent_process_path process process_exec process_guid process_hash
+ process_id process_integrity_level process_name process_path user user_id vendor_product
+ app dest_ip dest_port direction dvc protocol protocol_version src src_ip src_port
+ transport | stats values(action) as action values(dest) as dest values(original_file_name)
+ as original_file_name values(parent_process) as parent_process values(parent_process_exec)
+ as parent_process_exec values(parent_process_guid) as parent_process_guid values(parent_process_id)
+ as parent_process_id values(parent_process_name) as parent_process_name values(parent_process_path)
+ as parent_process_path values(process) as process values(process_exec) as process_exec
+ values(process_hash) as process_hash values(process_guid) as process_guid values(process_integrity_level)
+ as process_integrity_level values(process_name) as process_name values(process_path)
+ as process_path values(user) as user values(user_id) as user_id values(vendor_product)
+ as vendor_product values(app) as app values(dest_ip) as dest_ip values(dest_port)
+ as dest_port values(direction) as direction values(dvc) as dvc values(protocol)
+ as protocol values(protocol_version) as protocol_version values(src) as src values(src_ip)
+ as src_ip values(src_port) as src_port values(transport) as transport by process_id
+ | where isnotnull(process_name) AND isnotnull(dest_port) | `gpupdate_with_no_command_line_arguments_with_network_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -55,9 +76,9 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Process gpupdate.exe with parent_process $parent_process_name$ is executed
- on $dest$ by user $user$, followed by an outbound network connection to $C2$ on
- port $dest_port$. This behaviour is seen with cobaltstrike.
+ message: Process gpupdate.exe with parent_process $parent_process_name$ is executed
+ on $dest$ by user $user$, followed by an outbound network connection on port $dest_port$.
+ This behaviour is seen with cobaltstrike.
risk_objects:
- field: user
type: user
@@ -68,8 +89,6 @@ rba:
threat_objects:
- field: parent_process_name
type: parent_process_name
- - field: C2
- type: ip_address
tags:
analytic_story:
- Graceful Wipe Out Attack
@@ -87,7 +106,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/headless_browser_mockbin_or_mocky_request.yml b/detections/endpoint/headless_browser_mockbin_or_mocky_request.yml
index 6d6557e0ab..07cf845c87 100644
--- a/detections/endpoint/headless_browser_mockbin_or_mocky_request.yml
+++ b/detections/endpoint/headless_browser_mockbin_or_mocky_request.yml
@@ -1,6 +1,6 @@
name: Headless Browser Mockbin or Mocky Request
id: 94fc85a1-e55b-4265-95e1-4b66730e05c0
-version: 5
+version: 6
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,13 @@ description: The following analytic detects headless browser activity accessing
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process="*--headless*"
AND Processes.process="*--disable-gpu*" AND (Processes.process="*mockbin.org/*"
- OR Processes.process="*mocky.io/*")) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `headless_browser_mockbin_or_mocky_request_filter`'
+ OR Processes.process="*mocky.io/*")) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `headless_browser_mockbin_or_mocky_request_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node. In addition,
@@ -74,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1185/headlessbrowser/headless_mockbin.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1185/headlessbrowser/headless_mockbin.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/headless_browser_usage.yml b/detections/endpoint/headless_browser_usage.yml
index a9351e7245..5c0ad360e7 100644
--- a/detections/endpoint/headless_browser_usage.yml
+++ b/detections/endpoint/headless_browser_usage.yml
@@ -1,6 +1,6 @@
name: Headless Browser Usage
id: 869ba261-c272-47d7-affe-5c0aa85c93d6
-version: 4
+version: 5
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -20,10 +20,13 @@ description: The following analytic detects the usage of headless browsers withi
applications.
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process="*--headless*"
- AND Processes.process="*--disable-gpu*") by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
- `headless_browser_usage_filter`'
+ AND Processes.process="*--disable-gpu*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `headless_browser_usage_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node. In addition,
@@ -48,7 +51,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1185/headlessbrowser/headless_mockbin.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1185/headlessbrowser/headless_mockbin.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/hide_user_account_from_sign_in_screen.yml b/detections/endpoint/hide_user_account_from_sign_in_screen.yml
index 9e4a6ec18a..34a600d43a 100644
--- a/detections/endpoint/hide_user_account_from_sign_in_screen.yml
+++ b/detections/endpoint/hide_user_account_from_sign_in_screen.yml
@@ -1,6 +1,6 @@
name: Hide User Account From Sign-In Screen
id: 834ba832-ad89-11eb-937d-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,10 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path="*\\Windows
NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\Userlist*" AND Registry.registry_value_data
- = "0x00000000") BY Registry.dest Registry.user Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
- | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `hide_user_account_from_sign_in_screen_filter`'
+ = "0x00000000") by Registry.action Registry.dest Registry.process_guid Registry.process_id
+ Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data
+ Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user
+ Registry.vendor_product | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `hide_user_account_from_sign_in_screen_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -74,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/hotkey_disabled_hidden_user/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/hotkey_disabled_hidden_user/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/hiding_files_and_directories_with_attrib_exe.yml b/detections/endpoint/hiding_files_and_directories_with_attrib_exe.yml
index 9e314746a6..45c5b4aa75 100644
--- a/detections/endpoint/hiding_files_and_directories_with_attrib_exe.yml
+++ b/detections/endpoint/hiding_files_and_directories_with_attrib_exe.yml
@@ -1,6 +1,6 @@
name: Hiding Files And Directories With Attrib exe
id: 6e5a3ae4-90a3-462d-9aa6-0119f638c0f1
-version: 10
+version: 11
date: '2025-02-10'
author: Bhavin Patel, Splunk
status: production
@@ -19,9 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) values(Processes.process)
as process max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_name=attrib.exe
- (Processes.process=*+h*) by Processes.parent_process_name Processes.process_name
- Processes.user Processes.dest | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)`|`security_content_ctime(lastTime)`
- |`hiding_files_and_directories_with_attrib_exe_filter`'
+ (Processes.process=*+h*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name("Processes")`
+ | `security_content_ctime(firstTime)`|`security_content_ctime(lastTime)` |`hiding_files_and_directories_with_attrib_exe_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/high_process_termination_frequency.yml b/detections/endpoint/high_process_termination_frequency.yml
index 2214668507..d909b5ac0d 100644
--- a/detections/endpoint/high_process_termination_frequency.yml
+++ b/detections/endpoint/high_process_termination_frequency.yml
@@ -1,6 +1,6 @@
name: High Process Termination Frequency
id: 17cd75b2-8666-11eb-9ab4-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Teoderick Contreras
status: production
@@ -14,9 +14,12 @@ description: The following analytic identifies a high frequency of process termi
file encryption and significant data loss.
data_source:
- Sysmon EventID 5
-search: '`sysmon` EventCode=5 |bin _time span=3s |stats values(Image) as proc_terminated
- min(_time) as firstTime max(_time) as lastTime count by _time dest EventCode ProcessID
- | where count >= 15 | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+search: '`sysmon` EventCode=5 | bin _time span=3s | stats values(process) as process
+ values(process_exec) as process_exec values(process_guid) as process_guid values(process_id)
+ as process_id values(process_name) as process_name values(process_path) as process_path
+ values(user_id) as user_id min(_time) as firstTime max(_time) as lastTime count
+ by _time dest EventCode ProcessID signature signature_id vendor_product | where
+ count >= 15 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `high_process_termination_frequency_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the Image (process full path of terminated process) from your endpoints.
@@ -46,9 +49,7 @@ rba:
- field: dest
type: system
score: 72
- threat_objects:
- - field: proc_terminated
- type: process
+ threat_objects: []
tags:
analytic_story:
- LockBit Ransomware
@@ -68,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/clop/clop_a/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/clop/clop_a/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/hunting_3cxdesktopapp_software.yml b/detections/endpoint/hunting_3cxdesktopapp_software.yml
index 67d921a0ac..be7994e41e 100644
--- a/detections/endpoint/hunting_3cxdesktopapp_software.yml
+++ b/detections/endpoint/hunting_3cxdesktopapp_software.yml
@@ -1,6 +1,6 @@
name: Hunting 3CXDesktopApp Software
id: 553d0429-1a1c-44bf-b3f5-a8513deb9ee5
-version: 5
+version: 6
date: '2024-11-13'
author: Michael Haag, Splunk
type: Hunting
@@ -18,10 +18,13 @@ description: The following analytic detects the presence of any version of the 3
access, data exfiltration, or further compromise of the affected systems.
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=3CXDesktopApp.exe
- OR Processes.process_name="3CX Desktop App" by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.original_file_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `hunting_3cxdesktopapp_software_filter`'
+ OR Processes.process_name="3CX Desktop App" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `hunting_3cxdesktopapp_software_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -56,7 +59,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1195.002/3CX/3cx_windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1195.002/3CX/3cx_windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/icacls_deny_command.yml b/detections/endpoint/icacls_deny_command.yml
index 20178963ee..986480a347 100644
--- a/detections/endpoint/icacls_deny_command.yml
+++ b/detections/endpoint/icacls_deny_command.yml
@@ -1,6 +1,6 @@
name: Icacls Deny Command
id: cf8d753e-a8fe-11eb-8f58-acde48001122
-version: 6
+version: 7
date: '2024-12-10'
author: Teoderick Contreras, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN( "icacls.exe",
- "cacls.exe", "xcacls.exe") AND Processes.process IN ("*/deny*", "*/D*") by Processes.parent_process_name
- Processes.parent_process Processes.process_name Processes.process Processes.process_guid
- Processes.dest Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `icacls_deny_command_filter`'
+ "cacls.exe", "xcacls.exe") AND Processes.process IN ("*/deny*", "*/D*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `icacls_deny_command_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -80,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/icacls_grant_command.yml b/detections/endpoint/icacls_grant_command.yml
index a3850db7a3..30ece33739 100644
--- a/detections/endpoint/icacls_grant_command.yml
+++ b/detections/endpoint/icacls_grant_command.yml
@@ -1,6 +1,6 @@
name: ICACLS Grant Command
id: b1b1e316-accc-11eb-a9b4-acde48001122
-version: '5'
+version: 6
date: '2024-12-17'
author: Teoderick Contreras, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN( "icacls.exe",
- "cacls.exe", "xcacls.exe") AND Processes.process IN ("*/grant*", "*/G*") by Processes.parent_process_name
- Processes.parent_process Processes.process_name Processes.process Processes.process_guid
- Processes.dest Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `icacls_grant_command_filter`'
+ "cacls.exe", "xcacls.exe") AND Processes.process IN ("*/grant*", "*/G*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `icacls_grant_command_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/icedid_exfiltrated_archived_file_creation.yml b/detections/endpoint/icedid_exfiltrated_archived_file_creation.yml
index 2a4a093612..c1ed65867b 100644
--- a/detections/endpoint/icedid_exfiltrated_archived_file_creation.yml
+++ b/detections/endpoint/icedid_exfiltrated_archived_file_creation.yml
@@ -1,6 +1,6 @@
name: IcedID Exfiltrated Archived File Creation
id: 0db4da70-f14b-11eb-8043-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -14,13 +14,15 @@ description: The following analytic detects the creation of suspicious files nam
allow attackers to access personal information, conduct further phishing attacks,
or escalate their presence within the network.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
-search: '`sysmon` EventCode= 11 (TargetFilename = "*\\passff.tar" OR TargetFilename
- = "*\\cookie.tar") |stats count min(_time) as firstTime max(_time) as lastTime by
- TargetFilename EventCode process_id process_name dest | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `icedid_exfiltrated_archived_file_creation_filter`'
+- Sysmon EventID 11
+search: '| tstats `security_content_summariesonly` count values(Filesystem.file_path)
+ as file_path min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Filesystem
+ where Filesystem.file_path="*\\passff.tar" OR Filesystem.file_path="*\\cookie.tar"
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `icedid_exfiltrated_archived_file_creation_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
@@ -42,7 +44,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/simulated_icedid/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/simulated_icedid/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/impacket_lateral_movement_commandline_parameters.yml b/detections/endpoint/impacket_lateral_movement_commandline_parameters.yml
index 7325419b34..7244cf8fe4 100644
--- a/detections/endpoint/impacket_lateral_movement_commandline_parameters.yml
+++ b/detections/endpoint/impacket_lateral_movement_commandline_parameters.yml
@@ -1,6 +1,6 @@
name: Impacket Lateral Movement Commandline Parameters
id: 8ce07472-496f-11ec-ab3b-3e22fbd008af
-version: 8
+version: 9
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -21,9 +21,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=cmd.exe
(Processes.process = "*/Q /c * \\\\127.0.0.1\\*$*" AND Processes.process IN ("*2>&1*","*2>&1*"))
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `impacket_lateral_movement_commandline_parameters_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `impacket_lateral_movement_commandline_parameters_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -94,7 +98,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.003/impacket/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.003/impacket/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/impacket_lateral_movement_smbexec_commandline_parameters.yml b/detections/endpoint/impacket_lateral_movement_smbexec_commandline_parameters.yml
index 5bc432054e..81af97bcc9 100644
--- a/detections/endpoint/impacket_lateral_movement_smbexec_commandline_parameters.yml
+++ b/detections/endpoint/impacket_lateral_movement_smbexec_commandline_parameters.yml
@@ -1,6 +1,6 @@
name: Impacket Lateral Movement smbexec CommandLine Parameters
id: bb3c1bac-6bdf-4aa0-8dc9-068b8b712a76
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,12 +19,15 @@ description: The following analytic identifies suspicious command-line parameter
or further compromise of the network.
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=cmd.exe
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | where match(process, "(?i)cmd\.exe\s+\/Q\s+\/c") AND match(process,"(?i)echo\s+cd")
- AND match(process, "(?i)\\__output") AND match(process, "(?i)C:\\\\Windows\\\\[a-zA-Z]{1,8}\\.bat") AND
- match(process, "\\\\127\.0\.0\.1\\.*") | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `impacket_lateral_movement_smbexec_commandline_parameters_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | where match(process, "(?i)cmd\.exe\s+\/Q\s+\/c")
+ AND match(process,"(?i)echo\s+cd") AND match(process, "(?i)\\__output") AND match(process,
+ "(?i)C:\\\\Windows\\\\[a-zA-Z]{1,8}\\.bat") AND match(process, "\\\\127\.0\.0\.1\\.*")
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `impacket_lateral_movement_smbexec_commandline_parameters_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -95,7 +98,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.002/atomic_red_team/smbexec_windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.002/atomic_red_team/smbexec_windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/impacket_lateral_movement_wmiexec_commandline_parameters.yml b/detections/endpoint/impacket_lateral_movement_wmiexec_commandline_parameters.yml
index 9e48d7ea19..b3b60e7a76 100644
--- a/detections/endpoint/impacket_lateral_movement_wmiexec_commandline_parameters.yml
+++ b/detections/endpoint/impacket_lateral_movement_wmiexec_commandline_parameters.yml
@@ -1,6 +1,6 @@
name: Impacket Lateral Movement WMIExec Commandline Parameters
id: d6e464e4-5c6a-474e-82d2-aed616a3a492
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,11 +19,14 @@ description: The following analytic detects the use of Impacket's `wmiexec.py` t
leading to further compromise and data exfiltration.
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=wmiprvse.exe
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | where match(process, "(?i)cmd\.exe\s+\/Q\s+\/c") AND match(process, "\\\\127\.0\.0\.1\\.*")
- AND match(process, "__\\d{1,10}\\.\\d{1,10}") | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)`| `impacket_lateral_movement_wmiexec_commandline_parameters_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | where match(process, "(?i)cmd\.exe\s+\/Q\s+\/c")
+ AND match(process, "\\\\127\.0\.0\.1\\.*") AND match(process, "__\\d{1,10}\\.\\d{1,10}")
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `impacket_lateral_movement_wmiexec_commandline_parameters_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -95,7 +98,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.002/atomic_red_team/wmiexec_windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.002/atomic_red_team/wmiexec_windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/interactive_session_on_remote_endpoint_with_powershell.yml b/detections/endpoint/interactive_session_on_remote_endpoint_with_powershell.yml
index 4e56391427..f92a2b63e4 100644
--- a/detections/endpoint/interactive_session_on_remote_endpoint_with_powershell.yml
+++ b/detections/endpoint/interactive_session_on_remote_endpoint_with_powershell.yml
@@ -1,6 +1,6 @@
name: Interactive Session on Remote Endpoint with PowerShell
id: a4e8f3a4-48b2-11ec-bcfc-3e22fbd008af
-version: 8
+version: 9
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -16,13 +16,13 @@ description: The following analytic detects the use of the `Enter-PSSession` cmd
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText="*Enter-PSSession*" AND ScriptBlockText="*-ComputerName*")
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest | rename UserID as user| `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `interactive_session_on_remote_endpoint_with_powershell_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `interactive_session_on_remote_endpoint_with_powershell_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup instructions
- can be found
- https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
+ can be found https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
known_false_positives: Administrators may leverage WinRM and `Enter-PSSession` for
administrative and troubleshooting tasks. This activity is usually limited to a
small set of hosts or users. In certain environments, tuning may not be possible.
@@ -64,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/lateral_movement_pssession/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/lateral_movement_pssession/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/java_writing_jsp_file.yml b/detections/endpoint/java_writing_jsp_file.yml
index 7c1a51343d..aa1648ca7b 100644
--- a/detections/endpoint/java_writing_jsp_file.yml
+++ b/detections/endpoint/java_writing_jsp_file.yml
@@ -1,6 +1,6 @@
name: Java Writing JSP File
id: eb65619c-4f8d-4383-a975-d352765d344b
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -13,18 +13,39 @@ description: The following analytic detects the Java process writing a .jsp file
this could allow unauthorized access, data exfiltration, or further compromise of
the affected system, posing a severe security risk.
data_source:
-- Sysmon EventID 1 AND Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name IN ("java","java.exe", "javaw.exe") by _time Processes.process_id
- Processes.process_name Processes.dest Processes.process_guid Processes.user | `drop_dm_object_name(Processes)`
- | join process_guid [| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Filesystem
- where Filesystem.file_name="*.jsp*" by _time Filesystem.dest Filesystem.file_create_time
- Filesystem.file_name Filesystem.file_path Filesystem.process_guid Filesystem.user
- | `drop_dm_object_name(Filesystem)` | fields _time process_guid file_path file_name
- file_create_time user dest process_name] | stats count min(_time) as firstTime max(_time)
- as lastTime by dest process_name process_guid file_name file_path file_create_time
- user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `java_writing_jsp_file_filter`'
+- Sysmon for Linux EventID 1 AND Sysmon for Linux EventID 11
+search: '| tstats prestats=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes where Processes.process_name
+ IN ("java","java.exe", "javaw.exe") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | tstats prestats=t append=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_name="*.jsp*"
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ table action dest original_file_name parent_process parent_process_exec parent_process_guid
+ parent_process_id parent_process_name parent_process_path process process_exec process_guid
+ process_hash process_id process_integrity_level process_name process_path user user_id
+ vendor_product file_access_time file_create_time file_hash file_modify_time file_name
+ file_path file_acl file_size firstTime lastTime | stats values(action) as action
+ values(dest) as dest values(original_file_name) as original_file_name values(parent_process)
+ as parent_process values(parent_process_exec) as parent_process_exec values(parent_process_guid)
+ as parent_process_guid values(parent_process_id) as parent_process_id values(parent_process_name)
+ as parent_process_name values(parent_process_path) as parent_process_path values(process)
+ as process values(process_exec) as process_exec values(process_hash) as process_hash
+ values(process_id) as process_id values(process_integrity_level) as process_integrity_level
+ values(process_name) as process_name values(process_path) as process_path values(user)
+ as user values(user_id) as user_id values(vendor_product) as vendor_product values(file_access_time)
+ as file_access_time values(file_create_time) as file_create_time values(file_hash)
+ as file_hash values(file_modify_time) as file_modify_time values(file_name) as file_name
+ values(file_path) as file_path values(file_acl) as file_acl values(file_size) as
+ file_size by process_guid | where isnotnull(process) AND isnotnull(file_name) |
+ `java_writing_jsp_file_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` and `Filesystem`
@@ -79,7 +100,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1190/spring4shell/java_write_jsp-linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1190/spring4shell/java_write_jsp-linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/jscript_execution_using_cscript_app.yml b/detections/endpoint/jscript_execution_using_cscript_app.yml
index 8abf738b36..cce42fe195 100644
--- a/detections/endpoint/jscript_execution_using_cscript_app.yml
+++ b/detections/endpoint/jscript_execution_using_cscript_app.yml
@@ -1,6 +1,6 @@
name: Jscript Execution Using Cscript App
id: 002f1e24-146e-11ec-a470-acde48001122
-version: 6
+version: 7
date: '2025-02-19'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.parent_process_name
= "cscript.exe" AND Processes.parent_process = "*//e:jscript*") OR (Processes.process_name
- = "cscript.exe" AND Processes.process = "*//e:jscript*") by Processes.parent_process_name
- Processes.parent_process Processes.process_name Processes.process_id Processes.process
- Processes.dest Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `jscript_execution_using_cscript_app_filter`'
+ = "cscript.exe" AND Processes.process = "*//e:jscript*") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `jscript_execution_using_cscript_app_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/fin7/fin7_macro_js_1/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/fin7/fin7_macro_js_1/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/kerberos_pre_authentication_flag_disabled_with_powershell.yml b/detections/endpoint/kerberos_pre_authentication_flag_disabled_with_powershell.yml
index 67814fc234..33a448a7e2 100644
--- a/detections/endpoint/kerberos_pre_authentication_flag_disabled_with_powershell.yml
+++ b/detections/endpoint/kerberos_pre_authentication_flag_disabled_with_powershell.yml
@@ -1,6 +1,6 @@
name: Kerberos Pre-Authentication Flag Disabled with PowerShell
id: 59b51620-94c9-11ec-b3d5-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects the use of the `Set-ADAccountControl
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText = "*Set-ADAccountControl*" AND
- ScriptBlockText="*DoesNotRequirePreAuth:$true*") | stats count min(_time) as firstTime
- max(_time) as lastTime by EventCode ScriptBlockText Computer user_id | rename Computer
- as dest | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `kerberos_pre_authentication_flag_disabled_with_powershell_filter`'
+ ScriptBlockText="*DoesNotRequirePreAuth:$true*") | fillnull | stats count min(_time)
+ as firstTime max(_time) as lastTime by dest signature signature_id user_id vendor_product
+ EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `kerberos_pre_authentication_flag_disabled_with_powershell_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -64,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1558.004/powershell/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1558.004/powershell/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/kerberos_user_enumeration.yml b/detections/endpoint/kerberos_user_enumeration.yml
index e5b80a4cea..fa46b59e32 100644
--- a/detections/endpoint/kerberos_user_enumeration.yml
+++ b/detections/endpoint/kerberos_user_enumeration.yml
@@ -1,6 +1,6 @@
name: Kerberos User Enumeration
id: d82d4af4-a0bd-11ec-9445-3e22fbd008af
-version: 7
+version: 8
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -16,8 +16,8 @@ data_source:
- Windows Event Log Security 4768
search: '`wineventlog_security` EventCode=4768 Status=0x6 TargetUserName!="*$" | bucket
span=2m _time | stats dc(TargetUserName) AS unique_accounts values(TargetUserName)
- as tried_accounts by _time, src_ip | eventstats avg(unique_accounts) as comp_avg
- , stdev(unique_accounts) as comp_std by src_ip | eval upperBound=(comp_avg+comp_std*3)
+ as tried_accounts values(dest) as dest by _time, src_ip | eventstats avg(unique_accounts)
+ as comp_avg , stdev(unique_accounts) as comp_std by src_ip | eval upperBound=(comp_avg+comp_std*3)
| eval isOutlier=if(unique_accounts > 10 and unique_accounts >= upperBound, 1, 0)
| search isOutlier=1| `kerberos_user_enumeration_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
@@ -64,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1589.002/kerberos_user_enumeration/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1589.002/kerberos_user_enumeration/windows-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/linux_account_manipulation_of_ssh_config_and_keys.yml b/detections/endpoint/linux_account_manipulation_of_ssh_config_and_keys.yml
index 8728599618..821a725c09 100644
--- a/detections/endpoint/linux_account_manipulation_of_ssh_config_and_keys.yml
+++ b/detections/endpoint/linux_account_manipulation_of_ssh_config_and_keys.yml
@@ -1,6 +1,6 @@
name: Linux Account Manipulation Of SSH Config and Keys
id: 73a56508-1cf5-4df7-b8d9-5737fbdc27d2
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,12 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.action=deleted AND
- Filesystem.file_path IN ("/etc/ssh/*", "~/.ssh/*") by _time span=1h Filesystem.file_name
- Filesystem.file_path Filesystem.dest Filesystem.process_guid Filesystem.action |
- `drop_dm_object_name(Filesystem)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
- `linux_account_manipulation_of_ssh_config_and_keys_filter`'
+ Filesystem.file_path IN ("/etc/ssh/*", "~/.ssh/*") by Filesystem.action Filesystem.dest
+ Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
+ Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size
+ Filesystem.process_guid Filesystem.process_id Filesystem.user Filesystem.vendor_product
+ | `drop_dm_object_name(Filesystem)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_account_manipulation_of_ssh_config_and_keys_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you can use the Add-on for Linux Sysmon from
@@ -65,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_add_files_in_known_crontab_directories.yml b/detections/endpoint/linux_add_files_in_known_crontab_directories.yml
index 7c5f666cd9..be6f5ef374 100644
--- a/detections/endpoint/linux_add_files_in_known_crontab_directories.yml
+++ b/detections/endpoint/linux_add_files_in_known_crontab_directories.yml
@@ -1,6 +1,6 @@
name: Linux Add Files In Known Crontab Directories
id: 023f3452-5f27-11ec-bf00-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,8 +16,10 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*/etc/cron*",
- "*/var/spool/cron/*") by Filesystem.dest Filesystem.file_create_time Filesystem.file_name
- Filesystem.process_guid Filesystem.file_path | `drop_dm_object_name(Filesystem)`
+ "*/var/spool/cron/*") by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
| `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `linux_add_files_in_known_crontab_directories_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the file name, file path, and process_guid executions from your endpoints.
@@ -67,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.003/cronjobs_entry/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.003/cronjobs_entry/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_add_user_account.yml b/detections/endpoint/linux_add_user_account.yml
index 3c798ae4cb..5835bb573b 100644
--- a/detections/endpoint/linux_add_user_account.yml
+++ b/detections/endpoint/linux_add_user_account.yml
@@ -1,6 +1,6 @@
name: Linux Add User Account
id: 51fbcaf2-6259-11ec-b0f3-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,10 +16,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count from datamodel=Endpoint.Processes
where Processes.process_name IN ("useradd", "adduser") OR Processes.process IN ("*useradd
- *", "*adduser *") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_add_user_account_filter`'
+ *", "*adduser *") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_add_user_account_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -48,7 +51,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.003/linux_adduser/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.003/linux_adduser/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_adding_crontab_using_list_parameter.yml b/detections/endpoint/linux_adding_crontab_using_list_parameter.yml
index 7f05ba1ab8..4fcf7d3722 100644
--- a/detections/endpoint/linux_adding_crontab_using_list_parameter.yml
+++ b/detections/endpoint/linux_adding_crontab_using_list_parameter.yml
@@ -1,6 +1,6 @@
name: Linux Adding Crontab Using List Parameter
id: 52f6d751-1fd4-4c74-a4c9-777ecfeb5c58
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "crontab"
- Processes.process= "* -l*" by Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.dest
- Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_adding_crontab_using_list_parameter_filter`'
+ Processes.process= "* -l*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_adding_crontab_using_list_parameter_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -55,7 +58,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.003/crontab_list_parameter/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.003/crontab_list_parameter/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_apt_get_privilege_escalation.yml b/detections/endpoint/linux_apt_get_privilege_escalation.yml
index 0dd8a1971a..9895b29e2d 100644
--- a/detections/endpoint/linux_apt_get_privilege_escalation.yml
+++ b/detections/endpoint/linux_apt_get_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux apt-get Privilege Escalation
id: d870ce3b-e796-402f-b2af-cab4da1223f2
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -18,8 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*apt-get*"
AND Processes.process="*APT::Update::Pre-Invoke::*" AND Processes.process="*sudo*"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_apt_get_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -76,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/apt_get/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/apt_get/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_apt_privilege_escalation.yml b/detections/endpoint/linux_apt_privilege_escalation.yml
index b663f74c24..babfbc635b 100644
--- a/detections/endpoint/linux_apt_privilege_escalation.yml
+++ b/detections/endpoint/linux_apt_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux APT Privilege Escalation
id: 4d5a05fa-77d9-4fd0-af9c-05704f9f9a88
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -18,8 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*apt*" AND
Processes.process="*APT::Update::Pre-Invoke::*" AND Processes.process="*sudo*" by
- Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_apt_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -76,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/apt/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/apt/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_at_allow_config_file_creation.yml b/detections/endpoint/linux_at_allow_config_file_creation.yml
index ae556ae740..bd65b1cc65 100644
--- a/detections/endpoint/linux_at_allow_config_file_creation.yml
+++ b/detections/endpoint/linux_at_allow_config_file_creation.yml
@@ -1,6 +1,6 @@
name: Linux At Allow Config File Creation
id: 977b3082-5f3d-11ec-b954-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,8 +17,10 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*/etc/at.allow",
- "*/etc/at.deny") by Filesystem.dest Filesystem.file_create_time Filesystem.file_name
- Filesystem.process_guid Filesystem.file_path | `drop_dm_object_name(Filesystem)`
+ "*/etc/at.deny") by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
| `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `linux_at_allow_config_file_creation_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the file name, file path, and process_guid executions from your endpoints
@@ -66,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.002/at_execution/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.002/at_execution/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_at_application_execution.yml b/detections/endpoint/linux_at_application_execution.yml
index 6666181369..c9d3e607ef 100644
--- a/detections/endpoint/linux_at_application_execution.yml
+++ b/detections/endpoint/linux_at_application_execution.yml
@@ -1,6 +1,6 @@
name: Linux At Application Execution
id: bf0a378e-5f3c-11ec-a6de-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count from datamodel=Endpoint.Processes
where Processes.process_name IN ("at", "atd") OR Processes.parent_process_name
- IN ("at", "atd") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_at_application_execution_filter`'
+ IN ("at", "atd") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_at_application_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.002/at_execution/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.002/at_execution/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_awk_privilege_escalation.yml b/detections/endpoint/linux_awk_privilege_escalation.yml
index 412b476eef..16e3efc231 100644
--- a/detections/endpoint/linux_awk_privilege_escalation.yml
+++ b/detections/endpoint/linux_awk_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux AWK Privilege Escalation
id: 4510cae0-96a2-4840-9919-91d262db210a
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*sudo*" AND
- Processes.process="*awk*" AND Processes.process="*BEGIN*system*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `linux_awk_privilege_escalation_filter`'
+ Processes.process="*awk*" AND Processes.process="*BEGIN*system*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
+ `linux_awk_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/awk/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/awk/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_busybox_privilege_escalation.yml b/detections/endpoint/linux_busybox_privilege_escalation.yml
index 74ea49e117..b0d53fca9a 100644
--- a/detections/endpoint/linux_busybox_privilege_escalation.yml
+++ b/detections/endpoint/linux_busybox_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Busybox Privilege Escalation
id: 387c4e78-f4a4-413d-ad44-e9f7bc4642c9
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*busybox*"
- AND Processes.process="*sh*" AND Processes.process="*sudo*" by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_busybox_privilege_escalation_filter`'
+ AND Processes.process="*sh*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_busybox_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/busybox/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/busybox/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_c89_privilege_escalation.yml b/detections/endpoint/linux_c89_privilege_escalation.yml
index 229db8dfc8..1423c3e674 100644
--- a/detections/endpoint/linux_c89_privilege_escalation.yml
+++ b/detections/endpoint/linux_c89_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux c89 Privilege Escalation
id: 54c95f4d-3e5d-44be-9521-ea19ba62f7a8
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*c89*" AND
- Processes.process="*-wrapper*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_c89_privilege_escalation_filter`'
+ Processes.process="*-wrapper*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_c89_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/c89/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/c89/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_c99_privilege_escalation.yml b/detections/endpoint/linux_c99_privilege_escalation.yml
index 6456f1654a..545fb0fa79 100644
--- a/detections/endpoint/linux_c99_privilege_escalation.yml
+++ b/detections/endpoint/linux_c99_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux c99 Privilege Escalation
id: e1c6dec5-2249-442d-a1f9-99a4bd228183
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*c99*" AND
- Processes.process="*-wrapper*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_c99_privilege_escalation_filter`'
+ Processes.process="*-wrapper*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_c99_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/c99/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/c99/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_change_file_owner_to_root.yml b/detections/endpoint/linux_change_file_owner_to_root.yml
index 0135aa468d..7492fb5e27 100644
--- a/detections/endpoint/linux_change_file_owner_to_root.yml
+++ b/detections/endpoint/linux_change_file_owner_to_root.yml
@@ -1,6 +1,6 @@
name: Linux Change File Owner To Root
id: c1400ea2-6257-11ec-ad49-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,10 +16,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name = chown
- OR Processes.process = "*chown *") AND Processes.process = "* root *" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_change_file_owner_to_root_filter`'
+ OR Processes.process = "*chown *") AND Processes.process = "* root *" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_change_file_owner_to_root_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -71,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.001/chmod_uid/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.001/chmod_uid/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_clipboard_data_copy.yml b/detections/endpoint/linux_clipboard_data_copy.yml
index cfbfb74782..dd649b3b74 100644
--- a/detections/endpoint/linux_clipboard_data_copy.yml
+++ b/detections/endpoint/linux_clipboard_data_copy.yml
@@ -1,6 +1,6 @@
name: Linux Clipboard Data Copy
id: 7173b2ad-6146-418f-85ae-c3479e4515fc
-version: 5
+version: 6
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -17,9 +17,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=xclip
Processes.process IN ("*-o *", "*-sel *", "*-selection *", "*clip *","*clipboard*")
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_clipboard_data_copy_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_clipboard_data_copy_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1115/atomic_red_team/linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1115/atomic_red_team/linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_common_process_for_elevation_control.yml b/detections/endpoint/linux_common_process_for_elevation_control.yml
index b823b6e94c..8f25bd671c 100644
--- a/detections/endpoint/linux_common_process_for_elevation_control.yml
+++ b/detections/endpoint/linux_common_process_for_elevation_control.yml
@@ -1,7 +1,7 @@
name: Linux Common Process For Elevation Control
id: 66ab15c0-63d0-11ec-9e70-acde48001122
-version: '7'
-date: '2025-02-24'
+version: 8
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: Hunting
@@ -22,10 +22,14 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
"setregid", "chattr") OR Processes.process IN ("*chmod *", "*chown *", "*fchmod
*", "*fchmodat *", "*fchown *", "*fchownat *", "*fremovexattr *", "*fsetxattr *",
"*lchown *", "*lremovexattr *", "*lsetxattr *", "*removexattr *", "*setuid *", "*setgid
- *", "*setreuid *", "*setregid *", "*setcap *", "*chattr *") by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_common_process_for_elevation_control_filter`'
+ *", "*setreuid *", "*setregid *", "*setcap *", "*chattr *") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_common_process_for_elevation_control_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/linux_composer_privilege_escalation.yml b/detections/endpoint/linux_composer_privilege_escalation.yml
index d3303e4046..5b600e9955 100644
--- a/detections/endpoint/linux_composer_privilege_escalation.yml
+++ b/detections/endpoint/linux_composer_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Composer Privilege Escalation
id: a3bddf71-6ba3-42ab-a6b2-396929b16d92
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*composer*"
- AND Processes.process="*run-script*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_composer_privilege_escalation_filter`'
+ AND Processes.process="*run-script*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_composer_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/composer/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/composer/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_cpulimit_privilege_escalation.yml b/detections/endpoint/linux_cpulimit_privilege_escalation.yml
index 42c898b210..b5b8ca2c83 100644
--- a/detections/endpoint/linux_cpulimit_privilege_escalation.yml
+++ b/detections/endpoint/linux_cpulimit_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Cpulimit Privilege Escalation
id: d4e40b7e-aad3-4a7d-aac8-550ea5222be5
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,8 +17,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*cpulimit*"
AND Processes.process="*-l*" AND Processes.process="*-f*" AND Processes.process="*sudo*"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_cpulimit_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -75,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/cpulimit/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/cpulimit/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_csvtool_privilege_escalation.yml b/detections/endpoint/linux_csvtool_privilege_escalation.yml
index 4c17cce459..1ce087b511 100644
--- a/detections/endpoint/linux_csvtool_privilege_escalation.yml
+++ b/detections/endpoint/linux_csvtool_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Csvtool Privilege Escalation
id: f8384f9e-1a5c-4c3a-96d6-8a7e5a38a8b8
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*csvtool*"
- AND Processes.process="*call*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_csvtool_privilege_escalation_filter`'
+ AND Processes.process="*call*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_csvtool_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/csvtool/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/csvtool/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_curl_upload_file.yml b/detections/endpoint/linux_curl_upload_file.yml
index eb53b86301..92bf73562d 100644
--- a/detections/endpoint/linux_curl_upload_file.yml
+++ b/detections/endpoint/linux_curl_upload_file.yml
@@ -1,6 +1,6 @@
name: Linux Curl Upload File
id: c1de2d9a-0c02-4bb4-a49a-510c6e9cf2bf
-version: 5
+version: 6
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=curl
Processes.process IN ("*-F *", "*--form *","*--upload-file *","*-T *","*-d *","*--data
*","*--data-raw *", "*-I *", "*--head *") AND Processes.process IN ("*.aws/credentials*".
- "*.aws/config*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `linux_curl_upload_file_filter`'
+ "*.aws/config*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_curl_upload_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -82,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/curl-linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/curl-linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_data_destruction_command.yml b/detections/endpoint/linux_data_destruction_command.yml
index d995933ae4..ff5e6a8ae8 100644
--- a/detections/endpoint/linux_data_destruction_command.yml
+++ b/detections/endpoint/linux_data_destruction_command.yml
@@ -1,6 +1,6 @@
name: Linux Data Destruction Command
id: b11d3979-b2f7-411b-bb1a-bd00e642173b
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -18,8 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "rm" AND
Processes.process IN ("* -rf*", "* -fr*") AND Processes.process = "* --no-preserve-root"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `linux_data_destruction_command_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -74,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test1/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test1/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_dd_file_overwrite.yml b/detections/endpoint/linux_dd_file_overwrite.yml
index cf03a71a84..c05a4b3614 100644
--- a/detections/endpoint/linux_dd_file_overwrite.yml
+++ b/detections/endpoint/linux_dd_file_overwrite.yml
@@ -1,6 +1,6 @@
name: Linux DD File Overwrite
id: 9b6aae5e-8d85-11ec-b2ae-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -16,10 +16,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "dd"
- AND Processes.process = "*of=*" by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_dd_file_overwrite_filter`'
+ AND Processes.process = "*of=*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_dd_file_overwrite_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -70,7 +73,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/linux_dd_file_overwrite/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/linux_dd_file_overwrite/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_decode_base64_to_shell.yml b/detections/endpoint/linux_decode_base64_to_shell.yml
index a332d7535a..2b8a8c3896 100644
--- a/detections/endpoint/linux_decode_base64_to_shell.yml
+++ b/detections/endpoint/linux_decode_base64_to_shell.yml
@@ -1,6 +1,6 @@
name: Linux Decode Base64 to Shell
id: 637b603e-1799-40fd-bf87-47ecbd551b66
-version: 7
+version: 8
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*|*" `linux_shells`
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | rex field=process "base64\s+(?-{1,2}d\w*)" | where isnotnull(decode_flag)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_decode_base64_to_shell_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | rex field=process "base64\s+(?-{1,2}d\w*)"
+ | where isnotnull(decode_flag) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_decode_base64_to_shell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -82,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1027/atomic_red_team/linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1027/atomic_red_team/linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_deleting_critical_directory_using_rm_command.yml b/detections/endpoint/linux_deleting_critical_directory_using_rm_command.yml
index 2108f87769..dddd179d5e 100644
--- a/detections/endpoint/linux_deleting_critical_directory_using_rm_command.yml
+++ b/detections/endpoint/linux_deleting_critical_directory_using_rm_command.yml
@@ -1,6 +1,6 @@
name: Linux Deleting Critical Directory Using RM Command
id: 33f89303-cc6f-49ad-921d-2eaea38a6f7a
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name =rm AND
Processes.process= "* -rf *" AND Processes.process IN ("*/boot/*", "*/var/log/*",
- "*/etc/*", "*/dev/*") by Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid Processes.dest
- Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_deleting_critical_directory_using_rm_command_filter`'
+ "*/etc/*", "*/dev/*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_deleting_critical_directory_using_rm_command_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/rm_shred_critical_dir/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/rm_shred_critical_dir/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_deletion_of_cron_jobs.yml b/detections/endpoint/linux_deletion_of_cron_jobs.yml
index 0e75efa4a7..514ac78d41 100644
--- a/detections/endpoint/linux_deletion_of_cron_jobs.yml
+++ b/detections/endpoint/linux_deletion_of_cron_jobs.yml
@@ -1,6 +1,6 @@
name: Linux Deletion Of Cron Jobs
id: 3b132a71-9335-4f33-9932-00bb4f6ac7e8
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,9 +16,11 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.action=deleted Filesystem.file_path="/etc/cron.*"
- by _time span=1h Filesystem.file_name Filesystem.file_path Filesystem.dest Filesystem.process_guid
- Filesystem.action | `drop_dm_object_name(Filesystem)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)`| `linux_deletion_of_cron_jobs_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `linux_deletion_of_cron_jobs_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you can use the Add-on for Linux Sysmon from
@@ -67,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_deletion_of_init_daemon_script.yml b/detections/endpoint/linux_deletion_of_init_daemon_script.yml
index 339d58c50b..9b0914b54f 100644
--- a/detections/endpoint/linux_deletion_of_init_daemon_script.yml
+++ b/detections/endpoint/linux_deletion_of_init_daemon_script.yml
@@ -1,6 +1,6 @@
name: Linux Deletion Of Init Daemon Script
id: 729aab57-d26f-4156-b97f-ab8dda8f44b1
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,8 +16,10 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.action=deleted Filesystem.file_path
- IN ( "/etc/init.d/*") by _time span=1h Filesystem.file_name Filesystem.file_path
- Filesystem.dest Filesystem.process_guid Filesystem.action | `drop_dm_object_name(Filesystem)`
+ IN ( "/etc/init.d/*") by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `linux_deletion_of_init_daemon_script_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -67,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_deletion_of_services.yml b/detections/endpoint/linux_deletion_of_services.yml
index 2d27e43f5b..68f20f6650 100644
--- a/detections/endpoint/linux_deletion_of_services.yml
+++ b/detections/endpoint/linux_deletion_of_services.yml
@@ -1,6 +1,6 @@
name: Linux Deletion Of Services
id: b509bbd3-0331-4aaa-8e4a-d2affe100af6
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,9 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.action=deleted Filesystem.file_path
IN ( "/etc/systemd/*", "*/lib/systemd/*", "*/run/systemd/*") Filesystem.file_path
- = "*.service" by _time span=1h Filesystem.file_name Filesystem.file_path Filesystem.dest
- Filesystem.process_guid Filesystem.action | `drop_dm_object_name(Filesystem)` |
- `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `linux_deletion_of_services_filter`'
+ = "*.service" by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_deletion_of_services_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you can use the Add-on for Linux Sysmon from
@@ -72,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_deletion_of_ssl_certificate.yml b/detections/endpoint/linux_deletion_of_ssl_certificate.yml
index 94765cb179..50a9168bf4 100644
--- a/detections/endpoint/linux_deletion_of_ssl_certificate.yml
+++ b/detections/endpoint/linux_deletion_of_ssl_certificate.yml
@@ -1,6 +1,6 @@
name: Linux Deletion of SSL Certificate
id: 839ab790-a60a-4f81-bfb3-02567063f615
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,9 +17,11 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.action=deleted Filesystem.file_path
- = "/etc/ssl/certs/*" Filesystem.file_path IN ("*.pem", "*.crt") by _time span=1h
- Filesystem.file_name Filesystem.file_path Filesystem.dest Filesystem.process_guid
- Filesystem.action | `drop_dm_object_name(Filesystem)` | `security_content_ctime(firstTime)`
+ = "/etc/ssl/certs/*" Filesystem.file_path IN ("*.pem", "*.crt") by Filesystem.action
+ Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash
+ Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path Filesystem.file_acl
+ Filesystem.file_size Filesystem.process_guid Filesystem.process_id Filesystem.user
+ Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`| `linux_deletion_of_ssl_certificate_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -68,7 +70,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_disable_services.yml b/detections/endpoint/linux_disable_services.yml
index 61d16f3040..6cefcdf8d1 100644
--- a/detections/endpoint/linux_disable_services.yml
+++ b/detections/endpoint/linux_disable_services.yml
@@ -1,6 +1,6 @@
name: Linux Disable Services
id: f2e08a38-6689-4df4-ad8c-b51c16262316
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN ("systemctl",
- "service", "svcadm") Processes.process = "* disable*" by Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid Processes.dest Processes.user | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_disable_services_filter`'
+ "service", "svcadm") Processes.process = "* disable*" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_disable_services_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -73,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1489/linux_service_stop_disable/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1489/linux_service_stop_disable/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_doas_conf_file_creation.yml b/detections/endpoint/linux_doas_conf_file_creation.yml
index 8dfac80ecc..877db6be69 100644
--- a/detections/endpoint/linux_doas_conf_file_creation.yml
+++ b/detections/endpoint/linux_doas_conf_file_creation.yml
@@ -1,6 +1,6 @@
name: Linux Doas Conf File Creation
id: f6343e86-6e09-11ec-9376-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,9 +16,11 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*/etc/doas.conf")
- by Filesystem.dest Filesystem.file_create_time Filesystem.file_name Filesystem.process_guid
- Filesystem.file_path | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)`
- | `security_content_ctime(firstTime)` | `linux_doas_conf_file_creation_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `linux_doas_conf_file_creation_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you can use the Add-on for Linux Sysmon from
@@ -64,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.003/doas/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.003/doas/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_doas_tool_execution.yml b/detections/endpoint/linux_doas_tool_execution.yml
index 24876440f0..18db34ff3c 100644
--- a/detections/endpoint/linux_doas_tool_execution.yml
+++ b/detections/endpoint/linux_doas_tool_execution.yml
@@ -1,6 +1,6 @@
name: Linux Doas Tool Execution
id: d5a62490-6e09-11ec-884e-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,8 +16,11 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "doas"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_doas_tool_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -70,7 +73,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.003/doas_exec/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.003/doas_exec/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_docker_privilege_escalation.yml b/detections/endpoint/linux_docker_privilege_escalation.yml
index 6a3293283f..a612101c5b 100644
--- a/detections/endpoint/linux_docker_privilege_escalation.yml
+++ b/detections/endpoint/linux_docker_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Docker Privilege Escalation
id: 2e7bfb78-85f6-47b5-bc2f-15813a4ef2b3
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process IN("*docker*-v*/*:*","*docker*--volume*/*:*")
- OR Processes.process IN("*docker*exec*sh*","*docker*exec*bash*") by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_docker_privilege_escalation_filter`'
+ OR Processes.process IN("*docker*exec*sh*","*docker*exec*bash*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_docker_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/docker/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/docker/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_edit_cron_table_parameter.yml b/detections/endpoint/linux_edit_cron_table_parameter.yml
index 6da604bda5..d9d9084f78 100644
--- a/detections/endpoint/linux_edit_cron_table_parameter.yml
+++ b/detections/endpoint/linux_edit_cron_table_parameter.yml
@@ -1,6 +1,6 @@
name: Linux Edit Cron Table Parameter
id: 0d370304-5f26-11ec-a4bb-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,10 +16,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = crontab
- Processes.process = "*crontab *" Processes.process = "* -e*" by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_edit_cron_table_parameter_filter`'
+ Processes.process = "*crontab *" Processes.process = "* -e*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_edit_cron_table_parameter_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -50,7 +54,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.003/crontab_edit_parameter/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.003/crontab_edit_parameter/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_emacs_privilege_escalation.yml b/detections/endpoint/linux_emacs_privilege_escalation.yml
index 3e44cdc17f..5205f16866 100644
--- a/detections/endpoint/linux_emacs_privilege_escalation.yml
+++ b/detections/endpoint/linux_emacs_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Emacs Privilege Escalation
id: 92033cab-1871-483d-a03b-a7ce98665cfc
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*emacs*"
- AND Processes.process="*--eval*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_emacs_privilege_escalation_filter`'
+ AND Processes.process="*--eval*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_emacs_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/emacs/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/emacs/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_file_created_in_kernel_driver_directory.yml b/detections/endpoint/linux_file_created_in_kernel_driver_directory.yml
index 1335c47856..f3acbffb3c 100644
--- a/detections/endpoint/linux_file_created_in_kernel_driver_directory.yml
+++ b/detections/endpoint/linux_file_created_in_kernel_driver_directory.yml
@@ -1,6 +1,6 @@
name: Linux File Created In Kernel Driver Directory
id: b85bbeec-6326-11ec-9311-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,9 +15,11 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*/kernel/drivers/*")
- by Filesystem.dest Filesystem.file_name Filesystem.process_guid Filesystem.file_path
- | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`
- | `linux_file_created_in_kernel_driver_directory_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `linux_file_created_in_kernel_driver_directory_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the file name, file path, and process_guid executions from your endpoints.
If you are using Sysmon, you can use the Add-on for Linux Sysmon from Splunkbase.
@@ -64,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1547.006/loading_linux_kernel_module/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1547.006/loading_linux_kernel_module/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_file_creation_in_init_boot_directory.yml b/detections/endpoint/linux_file_creation_in_init_boot_directory.yml
index 143c90cbbc..f4bd0743b4 100644
--- a/detections/endpoint/linux_file_creation_in_init_boot_directory.yml
+++ b/detections/endpoint/linux_file_creation_in_init_boot_directory.yml
@@ -1,7 +1,7 @@
name: Linux File Creation In Init Boot Directory
id: 97d9cfb2-61ad-11ec-bb2d-acde48001122
-version: '8'
-date: '2025-02-24'
+version: 9
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
@@ -16,9 +16,12 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*/etc/init.d/*",
- "*/etc/rc.d/*", "*/sbin/init.d/*", "*/etc/rc.local*") by Filesystem.dest Filesystem.file_name
- Filesystem.process_guid Filesystem.file_path | `drop_dm_object_name(Filesystem)`
- | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `linux_file_creation_in_init_boot_directory_filter`'
+ "*/etc/rc.d/*", "*/sbin/init.d/*", "*/etc/rc.local*") by Filesystem.action Filesystem.dest
+ Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
+ Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size
+ Filesystem.process_guid Filesystem.process_id Filesystem.user Filesystem.vendor_product
+ | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`
+ | `linux_file_creation_in_init_boot_directory_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the file name, file path, and process_guid executions from your endpoints.
If you are using Sysmon, you can use the Add-on for Linux Sysmon from Splunkbase
diff --git a/detections/endpoint/linux_file_creation_in_profile_directory.yml b/detections/endpoint/linux_file_creation_in_profile_directory.yml
index d42712cf76..67eea7cecc 100644
--- a/detections/endpoint/linux_file_creation_in_profile_directory.yml
+++ b/detections/endpoint/linux_file_creation_in_profile_directory.yml
@@ -1,6 +1,6 @@
name: Linux File Creation In Profile Directory
id: 46ba0082-61af-11ec-9826-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,9 +16,11 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*/etc/profile.d/*")
- by Filesystem.dest Filesystem.file_create_time Filesystem.file_name Filesystem.process_guid
- Filesystem.file_path | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)`
- | `security_content_ctime(firstTime)` | `linux_file_creation_in_profile_directory_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `linux_file_creation_in_profile_directory_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the file name, file path, and process_guid executions from your endpoints.
If you are using Sysmon, you can use the Add-on for Linux Sysmon from Splunkbase.
@@ -64,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.004/linux_init_profile/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.004/linux_init_profile/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_find_privilege_escalation.yml b/detections/endpoint/linux_find_privilege_escalation.yml
index 6f3280fbc7..7562dfe549 100644
--- a/detections/endpoint/linux_find_privilege_escalation.yml
+++ b/detections/endpoint/linux_find_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Find Privilege Escalation
id: 2ff4e0c2-8256-4143-9c07-1e39c7231111
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*find*" AND
- Processes.process="*-exec*" AND Processes.process="*sudo*" by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_find_privilege_escalation_filter`'
+ Processes.process="*-exec*" AND Processes.process="*sudo*" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_find_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/find/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/find/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_gdb_privilege_escalation.yml b/detections/endpoint/linux_gdb_privilege_escalation.yml
index ac12b85551..f31c966f9c 100644
--- a/detections/endpoint/linux_gdb_privilege_escalation.yml
+++ b/detections/endpoint/linux_gdb_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux GDB Privilege Escalation
id: 310b7da2-ab52-437f-b1bf-0bd458674308
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,8 +17,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*gdb*" AND
Processes.process="*-nx*" AND Processes.process="*-ex*!*" AND Processes.process="*sudo*"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_gdb_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -74,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/gdb/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/gdb/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_gem_privilege_escalation.yml b/detections/endpoint/linux_gem_privilege_escalation.yml
index ad933d3de7..ebdfbdd8ba 100644
--- a/detections/endpoint/linux_gem_privilege_escalation.yml
+++ b/detections/endpoint/linux_gem_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Gem Privilege Escalation
id: 0115482a-5dcb-4bb0-bcca-5d095d224236
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*gem*open*-e*"
- AND Processes.process="*-c*" AND Processes.process="*sudo*" by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_gem_privilege_escalation_filter`'
+ AND Processes.process="*-c*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_gem_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/gem/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/gem/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_gnu_awk_privilege_escalation.yml b/detections/endpoint/linux_gnu_awk_privilege_escalation.yml
index 2b34220074..9f39825b7d 100644
--- a/detections/endpoint/linux_gnu_awk_privilege_escalation.yml
+++ b/detections/endpoint/linux_gnu_awk_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux GNU Awk Privilege Escalation
id: 0dcf43b9-50d8-42a6-acd9-d1c9201fe6ae
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -16,10 +16,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*gawk*" AND
- Processes.process="*BEGIN*{system*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `linux_gnu_awk_privilege_escalation_filter`'
+ Processes.process="*BEGIN*{system*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `linux_gnu_awk_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/gawk/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/gawk/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_hardware_addition_swapoff.yml b/detections/endpoint/linux_hardware_addition_swapoff.yml
index be49f67540..81a67e00b3 100644
--- a/detections/endpoint/linux_hardware_addition_swapoff.yml
+++ b/detections/endpoint/linux_hardware_addition_swapoff.yml
@@ -1,6 +1,6 @@
name: Linux Hardware Addition SwapOff
id: c1eea697-99ed-44c2-9b70-d8935464c499
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -17,8 +17,11 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "swapoff"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `linux_hardware_addition_swapoff_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test1/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test1/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_high_frequency_of_file_deletion_in_boot_folder.yml b/detections/endpoint/linux_high_frequency_of_file_deletion_in_boot_folder.yml
index cdde6977e4..3582ce15ef 100644
--- a/detections/endpoint/linux_high_frequency_of_file_deletion_in_boot_folder.yml
+++ b/detections/endpoint/linux_high_frequency_of_file_deletion_in_boot_folder.yml
@@ -1,6 +1,6 @@
name: Linux High Frequency Of File Deletion In Boot Folder
id: e27fbc5d-0445-4c4a-bc39-87f060d5c602
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -14,12 +14,17 @@ description: The following analytic detects a high frequency of file deletions i
causing a complete system compromise.
data_source:
- Sysmon for Linux EventID 11
-search: '| tstats `security_content_summariesonly` values(Filesystem.file_name) as
- deletedFileNames values(Filesystem.file_path) as deletedFilePath dc(Filesystem.file_path)
- as numOfDelFilePath count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
- where Filesystem.action=deleted Filesystem.file_path = "/boot/*" by _time span=1h Filesystem.dest
- Filesystem.process_guid Filesystem.action | `drop_dm_object_name(Filesystem)` |
- where numOfDelFilePath >= 200 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+search: '| tstats `security_content_summariesonly` values(Filesystem.file_access_time)
+ as file_access_time values(Filesystem.file_create_time) as file_create_time values(Filesystem.file_hash)
+ as file_hash values(Filesystem.file_modify_time) as file_modify_time values(Filesystem.file_name)
+ as file_name values(Filesystem.file_path) as file_path values(Filesystem.file_acl)
+ as file_acl values(Filesystem.file_size) as file_size values(Filesystem.process_id)
+ as process_id values(Filesystem.user) as user values(Filesystem.vendor_product)
+ as vendor_product dc(Filesystem.file_path) as numOfDelFilePath count min(_time)
+ as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.action=deleted
+ Filesystem.file_path = "/boot/*" by _time span=1h Filesystem.dest Filesystem.process_guid
+ Filesystem.action | `drop_dm_object_name(Filesystem)` | where numOfDelFilePath
+ >= 200 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_high_frequency_of_file_deletion_in_boot_folder_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -68,7 +73,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/rm_boot_dir/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/rm_boot_dir/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_high_frequency_of_file_deletion_in_etc_folder.yml b/detections/endpoint/linux_high_frequency_of_file_deletion_in_etc_folder.yml
index ae5aa85d0d..fefeca16fb 100644
--- a/detections/endpoint/linux_high_frequency_of_file_deletion_in_etc_folder.yml
+++ b/detections/endpoint/linux_high_frequency_of_file_deletion_in_etc_folder.yml
@@ -1,6 +1,6 @@
name: Linux High Frequency Of File Deletion In Etc Folder
id: 9d867448-2aff-4d07-876c-89409a752ff8
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -14,12 +14,16 @@ description: The following analytic detects a high frequency of file deletions i
data loss, and potential disruption of services.
data_source:
- Sysmon for Linux EventID 11
-search: '| tstats `security_content_summariesonly` values(Filesystem.file_name) as
- deletedFileNames values(Filesystem.file_path) as deletedFilePath dc(Filesystem.file_path)
- as numOfDelFilePath count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
+search: '| tstats `security_content_summariesonly` values(Filesystem.file_access_time)
+ as file_access_time values(Filesystem.file_create_time) as file_create_time values(Filesystem.file_hash)
+ as file_hash values(Filesystem.file_modify_time) as file_modify_time values(Filesystem.file_name)
+ as file_name values(Filesystem.file_path) as file_path values(Filesystem.file_acl)
+ as file_acl values(Filesystem.file_size) as file_size values(Filesystem.process_id)
+ as process_id values(Filesystem.user) as user dc(Filesystem.file_path) as numOfDelFilePath
+ count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
where Filesystem.action=deleted Filesystem.file_path = "/etc/*" by _time span=1h Filesystem.dest
- Filesystem.process_guid Filesystem.action | `drop_dm_object_name(Filesystem)` |
- where numOfDelFilePath >= 200 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ Filesystem.process_guid Filesystem.action Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
+ | where numOfDelFilePath >= 200 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_high_frequency_of_file_deletion_in_etc_folder_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -66,7 +70,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/acidrain/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_impair_defenses_process_kill.yml b/detections/endpoint/linux_impair_defenses_process_kill.yml
index 6662f54760..e512177018 100644
--- a/detections/endpoint/linux_impair_defenses_process_kill.yml
+++ b/detections/endpoint/linux_impair_defenses_process_kill.yml
@@ -1,6 +1,6 @@
name: Linux Impair Defenses Process Kill
id: 435c6b33-adf9-47fe-be87-8e29fd6654f5
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN (
- "pgrep", "pkill") Processes.process = "*pkill *" by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `linux_impair_defenses_process_kill_filter`'
+ "pgrep", "pkill") Processes.process = "*pkill *" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `linux_impair_defenses_process_kill_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -50,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test1/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test1/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_indicator_removal_clear_cache.yml b/detections/endpoint/linux_indicator_removal_clear_cache.yml
index c775e76997..bbdf324a94 100644
--- a/detections/endpoint/linux_indicator_removal_clear_cache.yml
+++ b/detections/endpoint/linux_indicator_removal_clear_cache.yml
@@ -1,6 +1,6 @@
name: Linux Indicator Removal Clear Cache
id: e0940505-0b73-4719-84e6-cb94c44a5245
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN ("dash",
"sudo", "bash") AND Processes.process IN("* echo 3 > *", "* echo 2 > *","*
- echo 1 > *") AND Processes.process = "*/proc/sys/vm/drop_caches" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `linux_indicator_removal_clear_cache_filter`'
+ echo 1 > *") AND Processes.process = "*/proc/sys/vm/drop_caches" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `linux_indicator_removal_clear_cache_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test3/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test3/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_indicator_removal_service_file_deletion.yml b/detections/endpoint/linux_indicator_removal_service_file_deletion.yml
index de2d2e6acb..54f1c79236 100644
--- a/detections/endpoint/linux_indicator_removal_service_file_deletion.yml
+++ b/detections/endpoint/linux_indicator_removal_service_file_deletion.yml
@@ -1,6 +1,6 @@
name: Linux Indicator Removal Service File Deletion
id: 6c077f81-2a83-4537-afbc-0e62e3215d55
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "rm" AND
- Processes.process = "*rm *" AND Processes.process = "*.service" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `linux_indicator_removal_service_file_deletion_filter`'
+ Processes.process = "*rm *" AND Processes.process = "*.service" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `linux_indicator_removal_service_file_deletion_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test1/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test1/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_ingress_tool_transfer_hunting.yml b/detections/endpoint/linux_ingress_tool_transfer_hunting.yml
index 488c3e3cfd..f55531f5da 100644
--- a/detections/endpoint/linux_ingress_tool_transfer_hunting.yml
+++ b/detections/endpoint/linux_ingress_tool_transfer_hunting.yml
@@ -1,6 +1,6 @@
name: Linux Ingress Tool Transfer Hunting
id: 52fd468b-cb6d-48f5-b16a-92f1c9bb10cf
-version: 6
+version: 7
date: '2024-12-19'
author: Michael Haag, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=curl
- OR Processes.process_name=wget) by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `linux_ingress_tool_transfer_hunting_filter`'
+ OR Processes.process_name=wget) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_ingress_tool_transfer_hunting_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -53,7 +56,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/curl-linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/curl-linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_ingress_tool_transfer_with_curl.yml b/detections/endpoint/linux_ingress_tool_transfer_with_curl.yml
index e21c8f57e5..c65698ec65 100644
--- a/detections/endpoint/linux_ingress_tool_transfer_with_curl.yml
+++ b/detections/endpoint/linux_ingress_tool_transfer_with_curl.yml
@@ -1,6 +1,6 @@
name: Linux Ingress Tool Transfer with Curl
id: 8c1de57d-abc1-4b41-a727-a7a8fc5e0857
-version: 6
+version: 7
date: '2024-12-19'
author: Michael Haag, Splunk
status: production
@@ -16,10 +16,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=curl
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | where
- match(process, "(?i)(-O|-sO|-ksO|--output)") | `linux_ingress_tool_transfer_with_curl_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | where match(process, "(?i)(-O|-sO|-ksO|--output)") | `linux_ingress_tool_transfer_with_curl_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -79,7 +82,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/curl-linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/curl-linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_insert_kernel_module_using_insmod_utility.yml b/detections/endpoint/linux_insert_kernel_module_using_insmod_utility.yml
index fc543070b2..06ad099dae 100644
--- a/detections/endpoint/linux_insert_kernel_module_using_insmod_utility.yml
+++ b/detections/endpoint/linux_insert_kernel_module_using_insmod_utility.yml
@@ -1,6 +1,6 @@
name: Linux Insert Kernel Module Using Insmod Utility
id: 18b5a1a0-6326-11ec-943a-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN("kmod",
- "sudo") AND Processes.process = *insmod* by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_insert_kernel_module_using_insmod_utility_filter`'
+ "sudo") AND Processes.process = *insmod* by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_insert_kernel_module_using_insmod_utility_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1547.006/loading_linux_kernel_module/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1547.006/loading_linux_kernel_module/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_install_kernel_module_using_modprobe_utility.yml b/detections/endpoint/linux_install_kernel_module_using_modprobe_utility.yml
index 32b16133a8..0bff02e5dc 100644
--- a/detections/endpoint/linux_install_kernel_module_using_modprobe_utility.yml
+++ b/detections/endpoint/linux_install_kernel_module_using_modprobe_utility.yml
@@ -1,6 +1,6 @@
name: Linux Install Kernel Module Using Modprobe Utility
id: 387b278a-6326-11ec-aa2c-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN("kmod",
- "sudo") AND Processes.process = *modprobe* by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_install_kernel_module_using_modprobe_utility_filter`'
+ "sudo") AND Processes.process = *modprobe* by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_install_kernel_module_using_modprobe_utility_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -73,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1547.006/loading_linux_kernel_module/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1547.006/loading_linux_kernel_module/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_iptables_firewall_modification.yml b/detections/endpoint/linux_iptables_firewall_modification.yml
index 9b1d5a8d69..99ef55895e 100644
--- a/detections/endpoint/linux_iptables_firewall_modification.yml
+++ b/detections/endpoint/linux_iptables_firewall_modification.yml
@@ -1,7 +1,7 @@
name: Linux Iptables Firewall Modification
id: 309d59dc-1e1b-49b2-9800-7cf18d12f7b7
-version: '9'
-date: '2025-02-24'
+version: 10
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
@@ -20,14 +20,16 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
*" AND Processes.process = "* --dport *" AND Processes.process = "* ACCEPT*" AND
Processes.process = "*&>/dev/null*" AND Processes.process = "* tcp *" AND
NOT(Processes.parent_process_path IN("/bin/*", "/lib/*", "/usr/bin/*", "/sbin/*"))
- by Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid Processes.dest _time span=10s Processes.user Processes.parent_process_name
- Processes.parent_process_path Processes.process_path | rex field=Processes.process
- "--dport (?3269|636|989|994|995|8443)" | stats values(Processes.process) as
- processes_exec values(port) as ports values(Processes.process_guid) as guids values(Processes.process_id)
- as pids dc(port) as port_count count by Processes.process_name Processes.parent_process_name
- Processes.parent_process_id Processes.dest Processes.user Processes.parent_process_path
- Processes.process_path | where port_count >=3 | `drop_dm_object_name(Processes)`
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | rex field=Processes.process "--dport (?3269|636|989|994|995|8443)" | stats
+ values(Processes.process) as processes_exec values(port) as ports values(Processes.process_guid)
+ as guids values(Processes.process_id) as pids dc(port) as port_count count by Processes.process_name
+ Processes.parent_process_name Processes.parent_process_id Processes.dest Processes.user
+ Processes.parent_process_path Processes.process_path | where port_count >=3 | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_iptables_firewall_modification_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
diff --git a/detections/endpoint/linux_java_spawning_shell.yml b/detections/endpoint/linux_java_spawning_shell.yml
index a13f0d306e..41534f6458 100644
--- a/detections/endpoint/linux_java_spawning_shell.yml
+++ b/detections/endpoint/linux_java_spawning_shell.yml
@@ -1,6 +1,6 @@
name: Linux Java Spawning Shell
id: 7b09db8a-5c20-11ec-9945-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -18,9 +18,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=java
OR Processes.parent_process_name=apache OR Processes.parent_process_name=tomcat
- `linux_shells` by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_java_spawning_shell_filter`'
+ `linux_shells` by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_java_spawning_shell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -81,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1190/java/java_spawn_shell_nix.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1190/java/java_spawn_shell_nix.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_kernel_module_enumeration.yml b/detections/endpoint/linux_kernel_module_enumeration.yml
index 157f255449..9d6426bb96 100644
--- a/detections/endpoint/linux_kernel_module_enumeration.yml
+++ b/detections/endpoint/linux_kernel_module_enumeration.yml
@@ -1,6 +1,6 @@
name: Linux Kernel Module Enumeration
id: 6df99886-0e04-4c11-8b88-325747419278
-version: 7
+version: 8
date: '2024-11-17'
author: Michael Haag, Splunk
status: production
@@ -16,10 +16,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=kmod
- Processes.process IN ("*lsmod*", "*list*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `linux_kernel_module_enumeration_filter`'
+ Processes.process IN ("*lsmod*", "*list*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_kernel_module_enumeration_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -78,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1082/atomic_red_team/linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1082/atomic_red_team/linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_kworker_process_in_writable_process_path.yml b/detections/endpoint/linux_kworker_process_in_writable_process_path.yml
index 6f189c9c75..d3ab7cd0db 100644
--- a/detections/endpoint/linux_kworker_process_in_writable_process_path.yml
+++ b/detections/endpoint/linux_kworker_process_in_writable_process_path.yml
@@ -1,6 +1,6 @@
name: Linux Kworker Process In Writable Process Path
id: 1cefb270-74a5-4e27-aa0c-2b6fa7c5b4ed
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,11 +18,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process =
"*[kworker/*" Processes.parent_process_path IN ("/home/*", "/tmp/*", "/var/log/*")
- Processes.process="*iptables*" by Processes.parent_process_name Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.parent_process_path Processes.process_guid Processes.dest Processes.user
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `linux_kworker_process_in_writable_process_path_filter`'
+ Processes.process="*iptables*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_kworker_process_in_writable_process_path_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -51,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/cyclopsblink/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/cyclopsblink/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_make_privilege_escalation.yml b/detections/endpoint/linux_make_privilege_escalation.yml
index 8167787558..deafa857a7 100644
--- a/detections/endpoint/linux_make_privilege_escalation.yml
+++ b/detections/endpoint/linux_make_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Make Privilege Escalation
id: 80b22836-5091-4944-80ee-f733ac443f4f
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -16,10 +16,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*make*-s*"
- AND Processes.process="*--eval*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_make_privilege_escalation_filter`'
+ AND Processes.process="*--eval*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_make_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/make/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/make/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_mysql_privilege_escalation.yml b/detections/endpoint/linux_mysql_privilege_escalation.yml
index 4fc1ec1c2a..a95a6b4dca 100644
--- a/detections/endpoint/linux_mysql_privilege_escalation.yml
+++ b/detections/endpoint/linux_mysql_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux MySQL Privilege Escalation
id: c0d810f4-230c-44ea-b703-989da02ff145
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*mysql*-e*"
- AND Processes.process="*\!**" AND Processes.process="*sudo*" by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_mysql_privilege_escalation_filter`'
+ AND Processes.process="*\!**" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_mysql_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/mysql/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/mysql/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_ngrok_reverse_proxy_usage.yml b/detections/endpoint/linux_ngrok_reverse_proxy_usage.yml
index ace58aa7ad..0becd41915 100644
--- a/detections/endpoint/linux_ngrok_reverse_proxy_usage.yml
+++ b/detections/endpoint/linux_ngrok_reverse_proxy_usage.yml
@@ -1,6 +1,6 @@
name: Linux Ngrok Reverse Proxy Usage
id: bc84d574-708c-467d-b78a-4c1e20171f97
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -17,8 +17,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=ngrok
Processes.process IN ("*start*", "*--config*","*http*","*authtoken*", "*http*",
- "*tcp*") by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.original_file_name Processes.process Processes.process_id Processes.parent_process_id
+ "*tcp*") by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_ngrok_reverse_proxy_usage_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -80,7 +83,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1572/ngrok/ngrok_linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1572/ngrok/ngrok_linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_node_privilege_escalation.yml b/detections/endpoint/linux_node_privilege_escalation.yml
index de6c9fa5c1..2644522fbc 100644
--- a/detections/endpoint/linux_node_privilege_escalation.yml
+++ b/detections/endpoint/linux_node_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Node Privilege Escalation
id: 2e58a4ff-398f-42f4-8fd0-e01ebfe2a8ce
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -18,8 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*sudo*node*"
AND Processes.process="*-e*" AND Processes.process="*child_process.spawn*" AND Processes.process="*stdio*"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_node_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -77,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/node/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/node/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_nopasswd_entry_in_sudoers_file.yml b/detections/endpoint/linux_nopasswd_entry_in_sudoers_file.yml
index 90563b48db..fffdf4fa11 100644
--- a/detections/endpoint/linux_nopasswd_entry_in_sudoers_file.yml
+++ b/detections/endpoint/linux_nopasswd_entry_in_sudoers_file.yml
@@ -1,7 +1,7 @@
name: Linux NOPASSWD Entry In Sudoers File
id: ab1e0d52-624a-11ec-8e0b-acde48001122
-version: '7'
-date: '2025-02-24'
+version: 8
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
@@ -17,8 +17,11 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process = "*NOPASSWD:*"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_nopasswd_entry_in_sudoers_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
diff --git a/detections/endpoint/linux_obfuscated_files_or_information_base64_decode.yml b/detections/endpoint/linux_obfuscated_files_or_information_base64_decode.yml
index eeb2fe21ba..5598bf79db 100644
--- a/detections/endpoint/linux_obfuscated_files_or_information_base64_decode.yml
+++ b/detections/endpoint/linux_obfuscated_files_or_information_base64_decode.yml
@@ -1,6 +1,6 @@
name: Linux Obfuscated Files or Information Base64 Decode
id: 303b38b2-c03f-44e2-8f41-4594606fcfc7
-version: 7
+version: 8
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -16,10 +16,12 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_path="*/base64"
- Processes.process="*-d*" by Processes.process Processes.dest Processes.process_current_directory
- Processes.process_name Processes.process_integrity_level Processes.parent_process_name
- Processes.parent_process_path Processes.parent_process_guid Processes.parent_process_id
- Processes.process_guid Processes.process_id Processes.user | `drop_dm_object_name(Processes)`
+ Processes.process="*-d*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_obfuscated_files_or_information_base64_decode_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -79,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1027/atomic_red_team/linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1027/atomic_red_team/linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_octave_privilege_escalation.yml b/detections/endpoint/linux_octave_privilege_escalation.yml
index ac9ee41409..71cfa1c78d 100644
--- a/detections/endpoint/linux_octave_privilege_escalation.yml
+++ b/detections/endpoint/linux_octave_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Octave Privilege Escalation
id: 78f7487d-42ce-4f7f-8685-2159b25fb477
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -18,8 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*octave-cli*"
AND Processes.process="*--eval*" AND Processes.process="*system*" AND Processes.process="*sudo*"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_octave_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -76,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/octave/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/octave/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_openvpn_privilege_escalation.yml b/detections/endpoint/linux_openvpn_privilege_escalation.yml
index 721061b734..6200029b27 100644
--- a/detections/endpoint/linux_openvpn_privilege_escalation.yml
+++ b/detections/endpoint/linux_openvpn_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux OpenVPN Privilege Escalation
id: d25feebe-fa1c-4754-8a1e-afb03bedc0f2
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*openvpn*"
AND Processes.process="*--dev*" AND Processes.process="*--script-security*" AND
- Processes.process="*--up*" AND Processes.process="*sudo*" by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_openvpn_privilege_escalation_filter`'
+ Processes.process="*--up*" AND Processes.process="*sudo*" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_openvpn_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/openvpn/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/openvpn/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_php_privilege_escalation.yml b/detections/endpoint/linux_php_privilege_escalation.yml
index d65dc8062b..744038f95e 100644
--- a/detections/endpoint/linux_php_privilege_escalation.yml
+++ b/detections/endpoint/linux_php_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux PHP Privilege Escalation
id: 4fc4c031-e5be-4cc0-8cf9-49f9f507bcb5
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*php*-r*"
- AND Processes.process="*system*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_php_privilege_escalation_filter`'
+ AND Processes.process="*system*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_php_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/php/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/php/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_pkexec_privilege_escalation.yml b/detections/endpoint/linux_pkexec_privilege_escalation.yml
index 81844e155e..41fe9ac26b 100644
--- a/detections/endpoint/linux_pkexec_privilege_escalation.yml
+++ b/detections/endpoint/linux_pkexec_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux pkexec Privilege Escalation
id: 03e22c1c-8086-11ec-ac2e-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -16,10 +16,14 @@ description: The following analytic detects the execution of `pkexec` without an
data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name=pkexec by _time Processes.dest Processes.user Processes.process_id
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_path
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | regex process="(^.{1}$)" | `linux_pkexec_privilege_escalation_filter`'
+ where Processes.process_name=pkexec by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | regex
+ process="(^.{1}$)" | `linux_pkexec_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -82,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1068/pkexec/linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1068/pkexec/linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_possible_access_or_modification_of_sshd_config_file.yml b/detections/endpoint/linux_possible_access_or_modification_of_sshd_config_file.yml
index 99ccd2b813..9a24efeff3 100644
--- a/detections/endpoint/linux_possible_access_or_modification_of_sshd_config_file.yml
+++ b/detections/endpoint/linux_possible_access_or_modification_of_sshd_config_file.yml
@@ -1,6 +1,6 @@
name: Linux Possible Access Or Modification Of sshd Config File
id: 7a85eb24-72da-11ec-ac76-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN("cat",
- "nano*","vim*", "vi*") AND Processes.process IN("*/etc/ssh/sshd_config") by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_possible_access_or_modification_of_sshd_config_file_filter`'
+ "nano*","vim*", "vi*") AND Processes.process IN("*/etc/ssh/sshd_config") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_possible_access_or_modification_of_sshd_config_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -72,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.004/ssh_authorized_keys/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.004/ssh_authorized_keys/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_possible_access_to_credential_files.yml b/detections/endpoint/linux_possible_access_to_credential_files.yml
index 14a2fe0df1..594cbc6f4b 100644
--- a/detections/endpoint/linux_possible_access_to_credential_files.yml
+++ b/detections/endpoint/linux_possible_access_to_credential_files.yml
@@ -1,7 +1,7 @@
name: Linux Possible Access To Credential Files
id: 16107e0e-71fc-11ec-b862-acde48001122
-version: '8'
-date: '2025-02-24'
+version: 9
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
@@ -17,9 +17,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN("cat",
"nano*","vim*", "vi*") AND Processes.process IN("*/etc/shadow*", "*/etc/passwd*")
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_possible_access_to_credential_files_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_possible_access_to_credential_files_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/linux_possible_access_to_sudoers_file.yml b/detections/endpoint/linux_possible_access_to_sudoers_file.yml
index b9936bb72e..a430dc63b1 100644
--- a/detections/endpoint/linux_possible_access_to_sudoers_file.yml
+++ b/detections/endpoint/linux_possible_access_to_sudoers_file.yml
@@ -1,7 +1,7 @@
name: Linux Possible Access To Sudoers File
id: 4479539c-71fc-11ec-b2e2-acde48001122
-version: '7'
-date: '2025-02-24'
+version: 8
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
@@ -16,10 +16,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN("cat",
- "nano*","vim*", "vi*") AND Processes.process IN("*/etc/sudoers*") by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_possible_access_to_sudoers_file_filter`'
+ "nano*","vim*", "vi*") AND Processes.process IN("*/etc/sudoers*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_possible_access_to_sudoers_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/linux_possible_append_command_to_at_allow_config_file.yml b/detections/endpoint/linux_possible_append_command_to_at_allow_config_file.yml
index 484cd366c6..320796d11b 100644
--- a/detections/endpoint/linux_possible_append_command_to_at_allow_config_file.yml
+++ b/detections/endpoint/linux_possible_append_command_to_at_allow_config_file.yml
@@ -1,6 +1,6 @@
name: Linux Possible Append Command To At Allow Config File
id: 7bc20606-5f40-11ec-a586-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,8 +17,11 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count from datamodel=Endpoint.Processes
where Processes.process = "*echo*" AND Processes.process IN("*/etc/at.allow", "*/etc/at.deny")
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_possible_append_command_to_at_allow_config_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.002/at_execution/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.002/at_execution/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_possible_append_command_to_profile_config_file.yml b/detections/endpoint/linux_possible_append_command_to_profile_config_file.yml
index d003d753b3..6716db4274 100644
--- a/detections/endpoint/linux_possible_append_command_to_profile_config_file.yml
+++ b/detections/endpoint/linux_possible_append_command_to_profile_config_file.yml
@@ -1,6 +1,6 @@
name: Linux Possible Append Command To Profile Config File
id: 9c94732a-61af-11ec-91e3-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process = "*echo*"
AND Processes.process IN("*~/.bashrc", "*~/.bash_profile", "*/etc/profile", "~/.bash_login",
- "*~/.profile", "~/.bash_logout") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_possible_append_command_to_profile_config_file_filter`'
+ "*~/.profile", "~/.bash_logout") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_possible_append_command_to_profile_config_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.004/linux_init_profile/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.004/linux_init_profile/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_possible_append_cronjob_entry_on_existing_cronjob_file.yml b/detections/endpoint/linux_possible_append_cronjob_entry_on_existing_cronjob_file.yml
index 419ae58634..efa52f8e37 100644
--- a/detections/endpoint/linux_possible_append_cronjob_entry_on_existing_cronjob_file.yml
+++ b/detections/endpoint/linux_possible_append_cronjob_entry_on_existing_cronjob_file.yml
@@ -1,6 +1,6 @@
name: Linux Possible Append Cronjob Entry on Existing Cronjob File
id: b5b91200-5f27-11ec-bb4e-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count from datamodel=Endpoint.Processes
where Processes.process = "*echo*" AND Processes.process IN("*/etc/cron*", "*/var/spool/cron/*",
- "*/etc/anacrontab*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_possible_append_cronjob_entry_on_existing_cronjob_file_filter`'
+ "*/etc/anacrontab*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_possible_append_cronjob_entry_on_existing_cronjob_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -55,7 +58,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.003/cronjobs_entry/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.003/cronjobs_entry/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_possible_cronjob_modification_with_editor.yml b/detections/endpoint/linux_possible_cronjob_modification_with_editor.yml
index 2b2ebb78dc..36063bd09a 100644
--- a/detections/endpoint/linux_possible_cronjob_modification_with_editor.yml
+++ b/detections/endpoint/linux_possible_cronjob_modification_with_editor.yml
@@ -1,6 +1,6 @@
name: Linux Possible Cronjob Modification With Editor
id: dcc89bde-5f24-11ec-87ca-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name IN("nano","vim.basic")
OR Processes.process IN ("*nano *", "*vi *", "*vim *")) AND Processes.process IN("*/etc/cron*",
- "*/var/spool/cron/*", "*/etc/anacrontab*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `linux_possible_cronjob_modification_with_editor_filter`'
+ "*/var/spool/cron/*", "*/etc/anacrontab*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_possible_cronjob_modification_with_editor_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -52,7 +55,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.003/cronjobs_entry/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.003/cronjobs_entry/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_possible_ssh_key_file_creation.yml b/detections/endpoint/linux_possible_ssh_key_file_creation.yml
index 63df17e210..4e67b177ff 100644
--- a/detections/endpoint/linux_possible_ssh_key_file_creation.yml
+++ b/detections/endpoint/linux_possible_ssh_key_file_creation.yml
@@ -1,6 +1,6 @@
name: Linux Possible Ssh Key File Creation
id: c04ef40c-72da-11ec-8eac-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,9 +15,11 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*/.ssh*")
- by Filesystem.dest Filesystem.file_name Filesystem.process_guid Filesystem.file_path
- | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`
- | `linux_possible_ssh_key_file_creation_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `linux_possible_ssh_key_file_creation_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the file name, file path, and process_guid executions from your endpoints.
If you are using Sysmon, you can use the Add-on for Linux Sysmon from Splunkbase.
@@ -64,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.004/ssh_authorized_keys/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.004/ssh_authorized_keys/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_preload_hijack_library_calls.yml b/detections/endpoint/linux_preload_hijack_library_calls.yml
index 1d2059864e..1fb96b33be 100644
--- a/detections/endpoint/linux_preload_hijack_library_calls.yml
+++ b/detections/endpoint/linux_preload_hijack_library_calls.yml
@@ -1,7 +1,7 @@
name: Linux Preload Hijack Library Calls
id: cbe2ca30-631e-11ec-8670-acde48001122
-version: '7'
-date: '2025-02-24'
+version: 8
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: TTP
@@ -17,8 +17,11 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process = "*LD_PRELOAD*"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_preload_hijack_library_calls_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
diff --git a/detections/endpoint/linux_proxy_socks_curl.yml b/detections/endpoint/linux_proxy_socks_curl.yml
index 75268921b8..82960aa1a4 100644
--- a/detections/endpoint/linux_proxy_socks_curl.yml
+++ b/detections/endpoint/linux_proxy_socks_curl.yml
@@ -1,7 +1,7 @@
name: Linux Proxy Socks Curl
id: bd596c22-ad1e-44fc-b242-817253ce8b08
-version: 7
-date: '2025-02-19'
+version: 8
+date: '2025-03-27'
author: Michael Haag, Splunk, 0xC0FFEEEE, Github Community
status: production
type: TTP
@@ -18,10 +18,15 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=curl
Processes.process IN ("*-x *", "*socks4a://*", "*socks5h://*", "*socks4://*","*socks5://*",
- "*--preproxy *", "--proxy*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | where match(process, "-x\s") OR match(process, "(?i)socks\d\w?:\/\/|--(pre)?proxy") | `linux_proxy_socks_curl_filter`'
+ "*--preproxy *", "--proxy*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | where
+ match(process, "-x\s") OR match(process, "(?i)socks\d\w?:\/\/|--(pre)?proxy") |
+ `linux_proxy_socks_curl_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -83,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/curl-linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/curl-linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_puppet_privilege_escalation.yml b/detections/endpoint/linux_puppet_privilege_escalation.yml
index b6a4422129..45923ebdd0 100644
--- a/detections/endpoint/linux_puppet_privilege_escalation.yml
+++ b/detections/endpoint/linux_puppet_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Puppet Privilege Escalation
id: 1d19037f-466e-4d56-8d87-36fafd9aa3ce
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*puppet*"
AND Processes.process="*apply*" AND Processes.process="*-e*" AND Processes.process="*exec*"
- AND Processes.process="*sudo*" by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_puppet_privilege_escalation_filter`'
+ AND Processes.process="*sudo*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_puppet_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/puppet/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/puppet/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_rpm_privilege_escalation.yml b/detections/endpoint/linux_rpm_privilege_escalation.yml
index 8f3021760f..2b91858e2f 100644
--- a/detections/endpoint/linux_rpm_privilege_escalation.yml
+++ b/detections/endpoint/linux_rpm_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux RPM Privilege Escalation
id: f8e58a23-cecd-495f-9c65-6c76b4cb9774
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*rpm*--eval*"
- AND Processes.process="*lua:os.execute*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_rpm_privilege_escalation_filter`'
+ AND Processes.process="*lua:os.execute*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_rpm_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/rpm/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/rpm/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_ruby_privilege_escalation.yml b/detections/endpoint/linux_ruby_privilege_escalation.yml
index 42301ecd19..f96f0cf831 100644
--- a/detections/endpoint/linux_ruby_privilege_escalation.yml
+++ b/detections/endpoint/linux_ruby_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Ruby Privilege Escalation
id: 097b28b5-7004-4d40-a715-7e390501788b
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -16,10 +16,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*ruby*-e*"
- AND Processes.process="*exec*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_ruby_privilege_escalation_filter`'
+ AND Processes.process="*exec*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_ruby_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/ruby/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/ruby/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_service_file_created_in_systemd_directory.yml b/detections/endpoint/linux_service_file_created_in_systemd_directory.yml
index 84f9f74176..1b206345ab 100644
--- a/detections/endpoint/linux_service_file_created_in_systemd_directory.yml
+++ b/detections/endpoint/linux_service_file_created_in_systemd_directory.yml
@@ -1,6 +1,6 @@
name: Linux Service File Created In Systemd Directory
id: c7495048-61b6-11ec-9a37-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,12 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_name = *.service
Filesystem.file_path IN ("*/etc/systemd/system*", "*/lib/systemd/system*", "*/usr/lib/systemd/system*",
"*/run/systemd/system*", "*~/.config/systemd/*", "*~/.local/share/systemd/*","*/etc/systemd/user*",
- "*/lib/systemd/user*", "*/usr/lib/systemd/user*", "*/run/systemd/user*") by Filesystem.dest
- Filesystem.file_create_time Filesystem.file_name Filesystem.process_guid Filesystem.file_path
- | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`
- | `linux_service_file_created_in_systemd_directory_filter`'
+ "*/lib/systemd/user*", "*/usr/lib/systemd/user*", "*/run/systemd/user*") by Filesystem.action
+ Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash
+ Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path Filesystem.file_acl
+ Filesystem.file_size Filesystem.process_guid Filesystem.process_id Filesystem.user
+ Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)`
+ | `security_content_ctime(firstTime)` | `linux_service_file_created_in_systemd_directory_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the file name, file path, and process_guid executions from your endpoints.
If you are using Sysmon, you can use the Add-on for Linux Sysmon from Splunkbase.
@@ -74,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.006/service_systemd/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.006/service_systemd/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_service_restarted.yml b/detections/endpoint/linux_service_restarted.yml
index e38b12f9c0..5dddaf2ff5 100644
--- a/detections/endpoint/linux_service_restarted.yml
+++ b/detections/endpoint/linux_service_restarted.yml
@@ -1,6 +1,6 @@
name: Linux Service Restarted
id: 084275ba-61b8-11ec-8d64-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name IN ("systemctl",
"service") OR Processes.process IN ("*systemctl *", "*service *")) Processes.process
- IN ("*restart*", "*reload*", "*reenable*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_service_restarted_filter`'
+ IN ("*restart*", "*reload*", "*reenable*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_service_restarted_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.006/service_systemd/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.006/service_systemd/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_service_started_or_enabled.yml b/detections/endpoint/linux_service_started_or_enabled.yml
index c5ee30eed0..eb4540f530 100644
--- a/detections/endpoint/linux_service_started_or_enabled.yml
+++ b/detections/endpoint/linux_service_started_or_enabled.yml
@@ -1,6 +1,6 @@
name: Linux Service Started Or Enabled
id: e0428212-61b7-11ec-88a3-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -19,8 +19,11 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name IN ("systemctl",
"service") OR Processes.process IN ("*systemctl *", "*service *")) Processes.process
IN ("* start *", "* enable *") AND NOT (Processes.os="Microsoft Windows" OR Processes.vendor_product="Microsoft
- Windows") by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ Windows") by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_service_started_or_enabled_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -75,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.006/service_systemd/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.006/service_systemd/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_setuid_using_chmod_utility.yml b/detections/endpoint/linux_setuid_using_chmod_utility.yml
index 91fc08356f..e336113516 100644
--- a/detections/endpoint/linux_setuid_using_chmod_utility.yml
+++ b/detections/endpoint/linux_setuid_using_chmod_utility.yml
@@ -1,6 +1,6 @@
name: Linux Setuid Using Chmod Utility
id: bf0304b6-6250-11ec-9d7c-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes WHERE (Processes.process_name = chmod
OR Processes.process = "*chmod *") AND Processes.process IN("* g+s *", "* u+s *",
- "* 4777 *", "* 4577 *") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_setuid_using_chmod_utility_filter`'
+ "* 4777 *", "* 4577 *") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_setuid_using_chmod_utility_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.001/chmod_uid/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.001/chmod_uid/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_setuid_using_setcap_utility.yml b/detections/endpoint/linux_setuid_using_setcap_utility.yml
index 55265c8fdf..e79ff07948 100644
--- a/detections/endpoint/linux_setuid_using_setcap_utility.yml
+++ b/detections/endpoint/linux_setuid_using_setcap_utility.yml
@@ -1,6 +1,6 @@
name: Linux Setuid Using Setcap Utility
id: 9d96022e-6250-11ec-9a19-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -19,8 +19,11 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name = setcap
OR Processes.process = "*setcap *") AND Processes.process IN ("* cap_setuid=ep *",
"* cap_setuid+ep *", "* cap_net_bind_service+p *", "* cap_net_raw+ep *", "* cap_dac_read_search+ep
- *") by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ *") by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_setuid_using_setcap_utility_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.001/linux_setcap/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.001/linux_setcap/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_shred_overwrite_command.yml b/detections/endpoint/linux_shred_overwrite_command.yml
index 9906adaea1..e6133b9728 100644
--- a/detections/endpoint/linux_shred_overwrite_command.yml
+++ b/detections/endpoint/linux_shred_overwrite_command.yml
@@ -1,6 +1,6 @@
name: Linux Shred Overwrite Command
id: c1952cf1-643c-4965-82de-11c067cbae76
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name =shred
- AND Processes.process IN ("*-n*", "*-u*", "*-z*", "*-s*") by Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid Processes.dest Processes.user | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_shred_overwrite_command_filter`'
+ AND Processes.process IN ("*-n*", "*-u*", "*-z*", "*-s*") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_shred_overwrite_command_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/rm_shred_critical_dir/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/rm_shred_critical_dir/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_sqlite3_privilege_escalation.yml b/detections/endpoint/linux_sqlite3_privilege_escalation.yml
index 276443066d..cf2c554285 100644
--- a/detections/endpoint/linux_sqlite3_privilege_escalation.yml
+++ b/detections/endpoint/linux_sqlite3_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Linux Sqlite3 Privilege Escalation
id: ab75dbb7-c3ba-4689-9c1b-8d2717bdcba1
-version: 7
+version: 8
date: '2025-02-10'
author: Gowthamaraj Rajendran, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process="*sqlite3*"
- AND Processes.process="*.shell*" AND Processes.process="*sudo*" by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_sqlite3_privilege_escalation_filter`'
+ AND Processes.process="*.shell*" AND Processes.process="*sudo*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_sqlite3_privilege_escalation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/sqlite3/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/sqlite3/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_ssh_authorized_keys_modification.yml b/detections/endpoint/linux_ssh_authorized_keys_modification.yml
index d513ccb7c5..1f924b5398 100644
--- a/detections/endpoint/linux_ssh_authorized_keys_modification.yml
+++ b/detections/endpoint/linux_ssh_authorized_keys_modification.yml
@@ -1,6 +1,6 @@
name: Linux SSH Authorized Keys Modification
id: f5ab595e-28e5-4327-8077-5008ba97c850
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN ("bash","cat")
- Processes.process IN ("*/authorized_keys*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `linux_ssh_authorized_keys_modification_filter`'
+ Processes.process IN ("*/authorized_keys*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_ssh_authorized_keys_modification_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -78,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.004/ssh_authorized_keys/authkey_linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098.004/ssh_authorized_keys/authkey_linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_ssh_remote_services_script_execute.yml b/detections/endpoint/linux_ssh_remote_services_script_execute.yml
index cddd81fa59..7824769931 100644
--- a/detections/endpoint/linux_ssh_remote_services_script_execute.yml
+++ b/detections/endpoint/linux_ssh_remote_services_script_execute.yml
@@ -1,6 +1,6 @@
name: Linux SSH Remote Services Script Execute
id: aa1748dd-4a5c-457a-9cf6-ca7b4eb711b3
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=ssh
Processes.process IN ("*oStrictHostKeyChecking*", "*oConnectTimeout*", "*oBatchMode*")
- AND Processes.process IN ("*http:*","*https:*") by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `linux_ssh_remote_services_script_execute_filter`'
+ AND Processes.process IN ("*http:*","*https:*") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_ssh_remote_services_script_execute_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.004/atomic_red_team/linux-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.004/atomic_red_team/linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_stdout_redirection_to_dev_null_file.yml b/detections/endpoint/linux_stdout_redirection_to_dev_null_file.yml
index 07665db54f..cb04265156 100644
--- a/detections/endpoint/linux_stdout_redirection_to_dev_null_file.yml
+++ b/detections/endpoint/linux_stdout_redirection_to_dev_null_file.yml
@@ -1,6 +1,6 @@
name: Linux Stdout Redirection To Dev Null File
id: de62b809-a04d-46b5-9a15-8298d330f0c8
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: experimental
@@ -17,8 +17,11 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process = "*&>/dev/null*"
- by Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid Processes.dest Processes.user Processes.parent_process_name
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_stdout_redirection_to_dev_null_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -57,7 +60,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/cyclopsblink/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/cyclopsblink/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_stop_services.yml b/detections/endpoint/linux_stop_services.yml
index ba2750e653..a0ee4de926 100644
--- a/detections/endpoint/linux_stop_services.yml
+++ b/detections/endpoint/linux_stop_services.yml
@@ -1,6 +1,6 @@
name: Linux Stop Services
id: d05204a5-9f1c-4946-a7f3-4fa58d76d5fd
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN ("systemctl",
- "service", "svcadm") Processes.process ="*stop*" by Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.process_guid Processes.dest Processes.user | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_stop_services_filter`'
+ "service", "svcadm") Processes.process ="*stop*" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_stop_services_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -73,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1489/linux_service_stop_disable/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1489/linux_service_stop_disable/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_sudo_or_su_execution.yml b/detections/endpoint/linux_sudo_or_su_execution.yml
index da149584d5..255f1338e2 100644
--- a/detections/endpoint/linux_sudo_or_su_execution.yml
+++ b/detections/endpoint/linux_sudo_or_su_execution.yml
@@ -1,6 +1,6 @@
name: Linux Sudo OR Su Execution
id: 4b00f134-6d6a-11ec-a90c-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,14 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN ("sudo",
- "su") OR Processes.parent_process_name IN ("sudo", "su") by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_sudo_or_su_execution_filter`'
+ "su") OR Processes.parent_process_name IN ("sudo", "su") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_sudo_or_su_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -49,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.003/sudo_su/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.003/sudo_su/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_sudoers_tmp_file_creation.yml b/detections/endpoint/linux_sudoers_tmp_file_creation.yml
index ca24f2680e..0c994d9040 100644
--- a/detections/endpoint/linux_sudoers_tmp_file_creation.yml
+++ b/detections/endpoint/linux_sudoers_tmp_file_creation.yml
@@ -1,7 +1,7 @@
name: Linux Sudoers Tmp File Creation
id: be254a5c-63e7-11ec-89da-acde48001122
-version: '7'
-date: '2025-02-24'
+version: 8
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
@@ -17,9 +17,11 @@ data_source:
- Sysmon for Linux EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path IN ("*sudoers.tmp*")
- by Filesystem.dest Filesystem.file_name Filesystem.process_guid Filesystem.file_path
- | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`
- | `linux_sudoers_tmp_file_creation_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `linux_sudoers_tmp_file_creation_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you can use the Add-on for Linux Sysmon from
diff --git a/detections/endpoint/linux_system_network_discovery.yml b/detections/endpoint/linux_system_network_discovery.yml
index 26d64b1efc..45f20262ec 100644
--- a/detections/endpoint/linux_system_network_discovery.yml
+++ b/detections/endpoint/linux_system_network_discovery.yml
@@ -1,6 +1,6 @@
name: Linux System Network Discovery
id: 535cb214-8b47-11ec-a2c7-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -15,14 +15,23 @@ description: The following analytic identifies potential enumeration of local ne
movement within the environment.
data_source:
- Sysmon for Linux EventID 1
-search: '| tstats `security_content_summariesonly` count values(Processes.process_name)
- as process_name_list values(Processes.process) as process_list values(Processes.process_id)
- as process_id_list values(Processes.parent_process_id) as parent_process_id_list
- values(Processes.process_guid) as process_guid_list dc(Processes.process_name) as
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
+ as lastTime values(Processes.action) as action values(Processes.dest) as dest values(Processes.original_file_name)
+ as original_file_name values(Processes.parent_process) as parent_process values(Processes.parent_process_exec)
+ as parent_process_exec values(Processes.parent_process_guid) as parent_process_guid
+ values(Processes.parent_process_id) as parent_process_id values(Processes.parent_process_name)
+ as parent_process_name values(Processes.parent_process_path) as parent_process_path
+ values(Processes.process) as process values(Processes.process_exec) as process_exec
+ values(Processes.process_guid) as process_guid values(Processes.process_hash) as
+ process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.process_name) as process_name values(Processes.process_path)
+ as process_path values(Processes.user) as user values(Processes.user_id) as user_id
+ values(Processes.vendor_product) as vendor_product dc(Processes.process_name) as
process_name_count from datamodel=Endpoint.Processes where Processes.process_name
IN ("arp", "ifconfig", "ip", "netstat", "firewall-cmd", "ufw", "iptables", "ss",
- "route") by _time span=30m Processes.dest Processes.user | where process_name_count
- >=4 | `drop_dm_object_name(Processes)`| `linux_system_network_discovery_filter`'
+ "route") by _time span=30m Processes.dest Processes.user | where process_name_count>=4
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `linux_system_network_discovery_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -51,7 +60,7 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Network discovery process $process_name_list$ executed on $dest$
+ message: Network discovery process $process$ executed on $dest$
risk_objects:
- field: dest
type: system
@@ -73,7 +82,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1016/atomic_red_team/linux_net_discovery/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1016/atomic_red_team/linux_net_discovery/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_system_reboot_via_system_request_key.yml b/detections/endpoint/linux_system_reboot_via_system_request_key.yml
index dbf98825e2..64f4ea261c 100644
--- a/detections/endpoint/linux_system_reboot_via_system_request_key.yml
+++ b/detections/endpoint/linux_system_reboot_via_system_request_key.yml
@@ -1,6 +1,6 @@
name: Linux System Reboot Via System Request Key
id: e1912b58-ed9c-422c-bbb0-2dbc70398345
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -17,8 +17,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN ("dash",
"sudo", "bash") Processes.process = "* echo b > *" Processes.process = "*/proc/sysrq-trigger"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `linux_system_reboot_via_system_request_key_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -70,7 +73,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test2/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test2/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_unix_shell_enable_all_sysrq_functions.yml b/detections/endpoint/linux_unix_shell_enable_all_sysrq_functions.yml
index d183c538ae..e23c928276 100644
--- a/detections/endpoint/linux_unix_shell_enable_all_sysrq_functions.yml
+++ b/detections/endpoint/linux_unix_shell_enable_all_sysrq_functions.yml
@@ -1,6 +1,6 @@
name: Linux Unix Shell Enable All SysRq Functions
id: e7a96937-3b58-4962-8dce-538e4763cf15
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,8 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name IN ("dash",
"sudo", "bash") Processes.process = "* echo 1 > *" Processes.process = "*/proc/sys/kernel/sysrq"
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `linux_unix_shell_enable_all_sysrq_functions_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test2/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/awfulshred/test2/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/linux_visudo_utility_execution.yml b/detections/endpoint/linux_visudo_utility_execution.yml
index 596d9a84c3..ed3255c267 100644
--- a/detections/endpoint/linux_visudo_utility_execution.yml
+++ b/detections/endpoint/linux_visudo_utility_execution.yml
@@ -1,6 +1,6 @@
name: Linux Visudo Utility Execution
id: 08c41040-624c-11ec-a71f-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,8 +17,11 @@ data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = visudo
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_visudo_utility_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -70,7 +73,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.003/visudo/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.003/visudo/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/loading_of_dynwrapx_module.yml b/detections/endpoint/loading_of_dynwrapx_module.yml
index b84f0b040e..4e5e9bac04 100644
--- a/detections/endpoint/loading_of_dynwrapx_module.yml
+++ b/detections/endpoint/loading_of_dynwrapx_module.yml
@@ -1,6 +1,6 @@
name: Loading Of Dynwrapx Module
id: eac5e8ba-4857-11ec-9371-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,9 +16,11 @@ description: The following analytic detects the loading of the dynwrapx.dll modu
data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode=7 (ImageLoaded = "*\\dynwrapx.dll" OR OriginalFileName
- = "dynwrapx.dll" OR Product = "DynamicWrapperX") | stats count min(_time) as firstTime
- max(_time) as lastTime by Image ImageLoaded OriginalFileName Product process_name
- dest EventCode Signed ProcessId | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ = "dynwrapx.dll" OR Product = "DynamicWrapperX") | 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)`
| `loading_of_dynwrapx_module_filter`'
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
@@ -72,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos_dynwrapx/sysmon_dynwraper.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos_dynwrapx/sysmon_dynwraper.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/local_account_discovery_with_wmic.yml b/detections/endpoint/local_account_discovery_with_wmic.yml
index 85b07244d2..5ccada90a9 100644
--- a/detections/endpoint/local_account_discovery_with_wmic.yml
+++ b/detections/endpoint/local_account_discovery_with_wmic.yml
@@ -1,6 +1,6 @@
name: Local Account Discovery With Wmic
id: 4902d7aa-0134-11ec-9d65-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -19,9 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_wmic` (Processes.process=*useraccount*)
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `local_account_discovery_with_wmic_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `local_account_discovery_with_wmic_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -48,7 +52,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.001/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.001/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/logon_script_event_trigger_execution.yml b/detections/endpoint/logon_script_event_trigger_execution.yml
index b27836b375..a34a57233f 100644
--- a/detections/endpoint/logon_script_event_trigger_execution.yml
+++ b/detections/endpoint/logon_script_event_trigger_execution.yml
@@ -1,6 +1,6 @@
name: Logon Script Event Trigger Execution
id: 4c38c264-1f74-11ec-b5fa-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,8 +17,10 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
max(_time) as lastTime FROM datamodel=Endpoint.Registry where Registry.registry_path
- IN ("*\\Environment\\UserInitMprLogonScript") by Registry.dest Registry.user Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name | `security_content_ctime(lastTime)`
+ IN ("*\\Environment\\UserInitMprLogonScript") by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `security_content_ctime(lastTime)`
| `security_content_ctime(firstTime)` | `drop_dm_object_name(Registry)` | `logon_script_event_trigger_execution_filter`'
how_to_implement: To successfully implement this search, you must be ingesting data
that records registry activity from your hosts to populate the endpoint data model
@@ -70,7 +72,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1037.001/logonscript_reg/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1037.001/logonscript_reg/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/lolbas_with_network_traffic.yml b/detections/endpoint/lolbas_with_network_traffic.yml
index 785a6006ef..6531760b46 100644
--- a/detections/endpoint/lolbas_with_network_traffic.yml
+++ b/detections/endpoint/lolbas_with_network_traffic.yml
@@ -1,6 +1,6 @@
name: LOLBAS With Network Traffic
id: 2820f032-19eb-497e-8642-25b04a880359
-version: 6
+version: 7
date: '2024-12-16'
author: Steven Dick
status: production
@@ -28,9 +28,12 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
"*Wmic.exe", "*Runonce.exe", "*Syncappvpublishingserver.exe", "*Verclsid.exe", "*Infdefaultinstall.exe",
"*Installutil.exe", "*Netsh.exe", "*Wab.exe", "*Dnscmd.exe", "*\\At.exe", "*Pcalua.exe",
"*Msconfig.exe", "*makecab.exe", "*cscript.exe", "*notepad.exe", "*\\cmd.exe", "*certutil.exe",
- "*\\powershell.exe", "*powershell_ise.exe", "*\\pwsh.exe")) by All_Traffic.app,All_Traffic.src,All_Traffic.src_ip,All_Traffic.user,All_Traffic.dest,All_Traffic.dest_ip
+ "*\\powershell.exe", "*powershell_ise.exe", "*\\pwsh.exe")) by All_Traffic.action
+ All_Traffic.app All_Traffic.dest All_Traffic.dest_ip All_Traffic.dest_port All_Traffic.direction
+ All_Traffic.dvc All_Traffic.protocol All_Traffic.protocol_version All_Traffic.src
+ All_Traffic.src_ip All_Traffic.src_port All_Traffic.transport All_Traffic.user All_Traffic.vendor_product
| `drop_dm_object_name(All_Traffic)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | rex field=app ".*\\\(?.*)$" | rename app as process | `lolbas_with_network_traffic_filter`'
+ | rex field=app ".*\\\(?.*)$" | `lolbas_with_network_traffic_filter`'
how_to_implement: To successfully implement this detection you must ingest events
into the Network traffic data model that contain the source, destination, and communicating
process in the app field. Relevant processes must also be ingested in the Endpoint
@@ -38,8 +41,7 @@ how_to_implement: To successfully implement this detection you must ingest event
of this type this data type.
known_false_positives: Legitimate usage of internal automation or scripting, especially
powershell.exe or pwsh.exe, internal to internal or logon scripts. It may be necessary
- to omit internal IP ranges if extremely noisy. ie NOT dest_ip IN
- ("10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","170.98.0.0/16","0:0:0:0:0:0:0:1")
+ to omit internal IP ranges if extremely noisy. ie NOT dest_ip IN ("10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","170.98.0.0/16","0:0:0:0:0:0:0:1")
references:
- https://lolbas-project.github.io/#
- https://www.sans.org/presentations/lolbin-detection-methods-seven-common-attacks-revealed/
@@ -82,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218/lolbas_with_network_traffic/lolbas_with_network_traffic.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218/lolbas_with_network_traffic/lolbas_with_network_traffic.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/mailsniper_invoke_functions.yml b/detections/endpoint/mailsniper_invoke_functions.yml
index 63412c881e..7551b9fcfa 100644
--- a/detections/endpoint/mailsniper_invoke_functions.yml
+++ b/detections/endpoint/mailsniper_invoke_functions.yml
@@ -1,6 +1,6 @@
name: Mailsniper Invoke functions
id: a36972c8-b894-11eb-9f78-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,9 +18,10 @@ search: '`powershell` EventCode=4104 ScriptBlockText IN ("*Invoke-GlobalO365Mail
"*Invoke-GlobalMailSearch*", "*Invoke-SelfSearch*", "*Invoke-PasswordSprayOWA*",
"*Invoke-PasswordSprayEWS*","*Invoke-DomainHarvestOWA*", "*Invoke-UsernameHarvestOWA*","*Invoke-OpenInboxFinder*","*Invoke-InjectGEventAPI*","*Invoke-InjectGEvent*","*Invoke-SearchGmail*",
"*Invoke-MonitorCredSniper*", "*Invoke-AddGmailRule*","*Invoke-PasswordSprayEAS*","*Invoke-UsernameHarvestEAS*")
- | stats count min(_time) as firstTime max(_time) as lastTime by Opcode Computer
- UserID EventCode ScriptBlockText | rename Computer as dest | rename UserID as user
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `mailsniper_invoke_functions_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `mailsniper_invoke_functions_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the powershell logs from your endpoints. make sure you enable needed
registry to monitor this event.
@@ -28,13 +29,13 @@ known_false_positives: unknown
references:
- https://www.blackhillsinfosec.com/introducing-mailsniper-a-tool-for-searching-every-users-email-for-sensitive-data/
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -42,12 +43,12 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Potential mailsniper.ps1 functions executed on dest $dest$ by user $user$.
+ message: Potential mailsniper.ps1 functions executed on dest $dest$ by user $user_id$.
risk_objects:
- field: dest
type: system
score: 72
- - field: user
+ - field: user_id
type: user
score: 72
threat_objects: []
@@ -65,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/malicious_inprocserver32_modification.yml b/detections/endpoint/malicious_inprocserver32_modification.yml
index d6476bf1a3..e88d82648d 100644
--- a/detections/endpoint/malicious_inprocserver32_modification.yml
+++ b/detections/endpoint/malicious_inprocserver32_modification.yml
@@ -1,6 +1,6 @@
name: Malicious InProcServer32 Modification
id: 127c8d08-25ff-11ec-9223-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -13,19 +13,15 @@ description: The following analytic detects a process modifying the registry wit
malicious, this could allow an attacker to persist in the environment, execute arbitrary
code, or escalate privileges, posing a severe threat to system integrity and security.
data_source:
-- Sysmon EventID 1 AND Sysmon EventID 12
-- Sysmon EventID 1 AND Sysmon EventID 13
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- by _time Processes.process_id Processes.process_name Processes.dest Processes.process_guid
- Processes.user | `drop_dm_object_name(Processes)` | join process_guid [| tstats
- `security_content_summariesonly` count FROM datamodel=Endpoint.Registry where Registry.registry_path=
- "*\\CLSID\\{89565275-A714-4a43-912E-978B935EDCCC}\\InProcServer32\\(Default)" by
- Registry.registry_path Registry.registry_key_name Registry.registry_value_name Registry.dest
- Registry.process_guid Registry.user | `drop_dm_object_name(Registry)` | fields _time
- dest registry_path registry_key_name registry_value_name process_name process_path
- process process_guid user] | stats count min(_time) as firstTime max(_time) as lastTime
- by dest, process_name registry_path registry_key_name registry_value_name user |
- `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `malicious_inprocserver32_modification_filter`'
+- Sysmon EventID 12
+- Sysmon EventID 13
+search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
+ where Registry.registry_path="*\\CLSID\\{89565275-A714-4a43-912E-978B935EDCCC}\\InProcServer32\\(Default)"
+ by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive
+ Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `malicious_inprocserver32_modification_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -58,15 +54,13 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: The $process_name$ was identified on endpoint $dest$ modifying the registry
- with a known malicious clsid under InProcServer32.
+ message: A process identified on endpoint $dest$ modifying the registry with a known
+ malicious clsid under InProcServer32.
risk_objects:
- field: dest
type: system
score: 80
- threat_objects:
- - field: process_name
- type: process_name
+ threat_objects: []
tags:
analytic_story:
- Suspicious Regsvr32 Activity
@@ -83,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/malicious_powershell_process___encoded_command.yml b/detections/endpoint/malicious_powershell_process___encoded_command.yml
index 23f7cc2670..412f4fba4e 100644
--- a/detections/endpoint/malicious_powershell_process___encoded_command.yml
+++ b/detections/endpoint/malicious_powershell_process___encoded_command.yml
@@ -1,6 +1,6 @@
name: Malicious PowerShell Process - Encoded Command
id: c4db14d9-7909-48b4-a054-aa14d89dbb19
-version: 12
+version: 13
date: '2024-11-22'
author: David Dorsey, Michael Haag, Splunk, SirDuckly, GitHub Community
status: production
@@ -18,12 +18,17 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes where `process_powershell` by Processes.user
- Processes.process_name Processes.process Processes.parent_process_name Processes.original_file_name
- Processes.dest Processes.process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | where match(process,"(?i)[\-|\/|–|—|―][Ee^]{1,2}[NnCcOoDdEeMmAa^]+\s+[\"]?[A-Za-z0-9+/=]{5,}[\"]?")
- | `malicious_powershell_process___encoded_command_filter`'
+search: "| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)\
+ \ as lastTime from datamodel=Endpoint.Processes where `process_powershell` by Processes.action\
+ \ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec\
+ \ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name\
+ \ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid\
+ \ Processes.process_hash Processes.process_id Processes.process_integrity_level\
+ \ Processes.process_name Processes.process_path Processes.user Processes.user_id\
+ \ Processes.vendor_product | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`\
+ \ | `security_content_ctime(lastTime)` | where match(process,\"(?i)[\\-|\\/|\u2013\
+ |\u2014|\u2015][Ee^]{1,2}[NnCcOoDdEeMmAa^]+\\s+[\\\"]?[A-Za-z0-9+/=]{5,}[\\\"]?\"\
+ ) | `malicious_powershell_process___encoded_command_filter`"
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -66,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1027/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1027/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/malicious_powershell_process___execution_policy_bypass.yml b/detections/endpoint/malicious_powershell_process___execution_policy_bypass.yml
index 5051787f4a..32757b4ae4 100644
--- a/detections/endpoint/malicious_powershell_process___execution_policy_bypass.yml
+++ b/detections/endpoint/malicious_powershell_process___execution_policy_bypass.yml
@@ -1,6 +1,6 @@
name: Malicious PowerShell Process - Execution Policy Bypass
id: 9be56c82-b1cc-4318-87eb-d138afaaca39
-version: '11'
+version: '12'
date: '2025-02-24'
author: Rico Valdez, Mauricio Velazco, Splunk
status: production
@@ -21,7 +21,13 @@ search: '| tstats `security_content_summariesonly` values(Processes.process_id)
process_id, values(Processes.parent_process_id) as parent_process_id values(Processes.process)
as process min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
where `process_powershell` (Processes.process="* -ex*" AND Processes.process="*
- bypass *") by Processes.process_id, Processes.user, Processes.dest | `drop_dm_object_name(Processes)`
+ bypass *")
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `malicious_powershell_process___execution_policy_bypass_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
diff --git a/detections/endpoint/malicious_powershell_process_with_obfuscation_techniques.yml b/detections/endpoint/malicious_powershell_process_with_obfuscation_techniques.yml
index eb1e0f4e3a..5cad885d3f 100644
--- a/detections/endpoint/malicious_powershell_process_with_obfuscation_techniques.yml
+++ b/detections/endpoint/malicious_powershell_process_with_obfuscation_techniques.yml
@@ -1,6 +1,6 @@
name: Malicious PowerShell Process With Obfuscation Techniques
id: cde75cf6-3c7a-4dd6-af01-27cdb4511fd4
-version: 10
+version: 11
date: '2025-02-10'
author: David Dorsey, Splunk
status: production
@@ -15,15 +15,18 @@ description: The following analytic detects PowerShell processes launched with c
security risk.
data_source:
- Sysmon EventID 1
-search: "| tstats `security_content_summariesonly` count values(Processes.process)
+search: '| tstats `security_content_summariesonly` count values(Processes.process)
as process values(Processes.parent_process) as parent_process min(_time) as firstTime
max(_time) as lastTime from datamodel=Endpoint.Processes where `process_powershell`
- by Processes.user Processes.process_name Processes.original_file_name Processes.parent_process_name
- Processes.dest Processes.process | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)`| eval num_obfuscation = (mvcount(split(process,\"\
- `\"))-1) + (mvcount(split(process, \"^\"))-1) + (mvcount(split(process, \"'\"))-1)
- | `malicious_powershell_process_with_obfuscation_techniques_filter` | search num_obfuscation
- > 10"
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`|
+ eval num_obfuscation = (mvcount(split(process,"`"))-1) + (mvcount(split(process,
+ "^"))-1) + (mvcount(split(process, "''"))-1) | `malicious_powershell_process_with_obfuscation_techniques_filter`
+ | search num_obfuscation > 10'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -73,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/obfuscated_powershell/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/obfuscated_powershell/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/microsoft_defender_atp_alerts.yml b/detections/endpoint/microsoft_defender_atp_alerts.yml
index eba3aaecd3..adefaf11fd 100644
--- a/detections/endpoint/microsoft_defender_atp_alerts.yml
+++ b/detections/endpoint/microsoft_defender_atp_alerts.yml
@@ -9,12 +9,12 @@ data_source:
- MS Defender ATP Alerts
description: The following analytic is to leverage alerts from Microsoft Defender ATP Alerts. This query aggregates and summarizes all alerts from Microsoft Defender ATP Alerts, providing details such as the source, file name, severity, process command line, ip address, registry key, signature, description, unique id, and timestamps. This detection is not intended to detect new activity from raw data, but leverages Microsoft provided alerts to be correlated with other data as part of risk based alerting. The data contained in the alert is mapped not only to the risk obejct, but also the threat object. This detection filters out evidence that has a verdict of clean from Microsoft. It dynamically maps the MITRE technique at search time to auto populate the annotation field with the value provided in the alert. It also uses a dynamic mapping to set the risk score in Enterprise Security based on the severity of the alert.
search: ' `ms_defender_atp_alerts` (dest=* OR user=*)| eval tmp_evidence=json_extract(_raw, "evidence"), tmp_evidencemv=json_array_to_mv(tmp_evidence), entityType = mvmap(tmp_evidencemv, spath(tmp_evidencemv, "entityType")), filePath = mvmap(tmp_evidencemv, spath(tmp_evidencemv, "filePath")), processCommandLine = mvmap(tmp_evidencemv, spath(tmp_evidencemv, "processCommandLine")), ipAddress = mvmap(tmp_evidencemv, spath(tmp_evidencemv, "ipAddress")), registryKey = mvmap(tmp_evidencemv, spath(tmp_evidencemv, "registryKey")), url = mvmap(tmp_evidencemv, spath(tmp_evidencemv, "url")), fileName = mvmap(tmp_evidencemv, spath(tmp_evidencemv, "fileName"))
-| eval tmp_evidencemv=mvfilter(json_extract(tmp_evidencemv, "entityType") = "File"), fileName = mvmap(tmp_evidencemv, spath(tmp_evidencemv, "fileName"))
-| eval risk_score=case(severity="informational", 5, severity="low", 15, severity="medium", 25, severity="high", 50 , true(), 2)
-| eval processCommandLine=if(processCommandLine="null", "", processCommandLine), ipAddress=if(ipAddress="null", "", ipAddress), registryKey=if(registryKey="null", "", registryKey), url=if(url="null", "", url)
-| stats count min(_time) as firstTime max(_time) as lastTime values(fileName) as file_name values(severity) as severity values(processCommandLine) as process values(ipAddress) as ip_address values(registryKey) as registry_key values(url) as url values(mitreTechniques{}) as annotations.mitre_attack.mitre_technique_id values(signature) as signature values(user) as user values(risk_score) as risk_score by id description src
-| `security_content_ctime(firstTime)`
-| `security_content_ctime(lastTime)` | `microsoft_defender_atp_alerts_filter`'
+ | eval tmp_evidencemv=mvfilter(json_extract(tmp_evidencemv, "entityType") = "File"), fileName = mvmap(tmp_evidencemv, spath(tmp_evidencemv, "fileName"))
+ | eval risk_score=case(severity="informational", 5, severity="low", 15, severity="medium", 25, severity="high", 50 , true(), 2)
+ | eval processCommandLine=if(processCommandLine="null", "", processCommandLine), ipAddress=if(ipAddress="null", "", ipAddress), registryKey=if(registryKey="null", "", registryKey), url=if(url="null", "", url)
+ | stats count min(_time) as firstTime max(_time) as lastTime values(fileName) as file_name values(severity) as severity values(processCommandLine) as process values(ipAddress) as ip_address values(registryKey) as registry_key values(url) as url values(mitreTechniques{}) as annotations.mitre_attack.mitre_technique_id values(signature) as signature values(user) as user values(risk_score) as risk_score by id description src
+ | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `microsoft_defender_atp_alerts_filter`'
how_to_implement: In order to properly run this search, you need to ingest alerts data from Microsoft Defender, specifcally using the Splunk add-on for Microsoft Security. This add-on will collect alerts using the ms:defender:atp:alerts sourcetype. You will need to define the `ms_defender_atp_alerts` macro to point to the proper index that contains the ms:defender:atp:alerts sourcetype.
known_false_positives: False positives may vary based on Microsfot Defender configuration; monitor and filter out the alerts that are not relevant to your environment.
references:
diff --git a/detections/endpoint/microsoft_defender_incident_alerts.yml b/detections/endpoint/microsoft_defender_incident_alerts.yml
index 4cae1ede0f..9756849223 100644
--- a/detections/endpoint/microsoft_defender_incident_alerts.yml
+++ b/detections/endpoint/microsoft_defender_incident_alerts.yml
@@ -9,18 +9,18 @@ data_source:
- MS365 Defender Incident Alerts
description: The following analytic is to leverage alerts from Microsoft Defender O365 Incidents. This query aggregates and summarizes all alerts from Microsoft Defender O365 Incidents, providing details such as the destination, file name, severity, process command line, ip address, registry key, signature, description, unique id, and timestamps. This detection is not intended to detect new activity from raw data, but leverages Microsoft provided alerts to be correlated with other data as part of risk based alerting. The data contained in the alert is mapped not only to the risk obejct, but also the threat object. This detection filters out evidence that has a verdict of clean from Microsoft. It dynamically maps the MITRE technique at search time to auto populate the annotation field with the value provided in the alert. It also uses a static mapping to set the risk score based on the severity of the alert.
search: '`ms365_defender_incident_alerts` (dest=* OR user=*)
-| eval tmp_entities=json_extract(_raw, "entities"),
-tmp_entitymv=json_array_to_mv(tmp_entities),
-tmp_filtered_mv=mvfilter(json_extract(tmp_entitymv, "verdict") != "Clean"),
-entityType = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "entityType")),
-filePath = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "filePath")),
-processCommandLine = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "processCommandLine")),
-ipAddress = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "ipAddress")),
-registryKey = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "registryKey")),
-url = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "url"))
-| eval tmp_filtered_mv=mvfilter(json_extract(tmp_filtered_mv, "entityType") = "File"), fileName = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "fileName"))
-| eval risk_score=case(severity="informational", 5, severity="low", 15, severity="medium", 25, severity="high", 50, true(), 2)
-| stats count min(_time) as firstTime max(_time) as lastTime values(fileName) as file_name values(severity) as severity values(processCommandLine) as process values(ipAddress) as ip_address values(registryKey) as registry_key values(url) as url values(mitreTechniques{}) as annotations.mitre_attack.mitre_technique_id values(signature) as signature values(user) as user values(risk_score) as risk_score by id description dest | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `microsoft_defender_incident_alerts_filter`'
+ | eval tmp_entities=json_extract(_raw, "entities"),
+ tmp_entitymv=json_array_to_mv(tmp_entities),
+ tmp_filtered_mv=mvfilter(json_extract(tmp_entitymv, "verdict") != "Clean"),
+ entityType = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "entityType")),
+ filePath = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "filePath")),
+ processCommandLine = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "processCommandLine")),
+ ipAddress = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "ipAddress")),
+ registryKey = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "registryKey")),
+ url = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "url"))
+ | eval tmp_filtered_mv=mvfilter(json_extract(tmp_filtered_mv, "entityType") = "File"), fileName = mvmap(tmp_filtered_mv, spath(tmp_filtered_mv, "fileName"))
+ | eval risk_score=case(severity="informational", 5, severity="low", 15, severity="medium", 25, severity="high", 50, true(), 2)
+ | stats count min(_time) as firstTime max(_time) as lastTime values(fileName) as file_name values(severity) as severity values(processCommandLine) as process values(ipAddress) as ip_address values(registryKey) as registry_key values(url) as url values(mitreTechniques{}) as annotations.mitre_attack.mitre_technique_id values(signature) as signature values(user) as user values(risk_score) as risk_score by id description dest | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `microsoft_defender_incident_alerts_filter`'
how_to_implement: In order to properly run this search, you need to ingest alerts data from Microsoft Defender, specifcally using the Splunk add-on for Microsfot Security. This add-on will collect alerts using the ms365:defender:incident:alerts sourcetype. You will need to define the `ms365_defender_incident_alerts` macro to point to the proper index that contains the ms365:defender:incident:alerts sourcetype.
known_false_positives: False positives may vary based on Microsfot Defender configuration; monitor and filter out the alerts that are not relevant to your environment.
references:
diff --git a/detections/endpoint/mimikatz_passtheticket_commandline_parameters.yml b/detections/endpoint/mimikatz_passtheticket_commandline_parameters.yml
index 5757d7a98d..22e7cc700b 100644
--- a/detections/endpoint/mimikatz_passtheticket_commandline_parameters.yml
+++ b/detections/endpoint/mimikatz_passtheticket_commandline_parameters.yml
@@ -1,6 +1,6 @@
name: Mimikatz PassTheTicket CommandLine Parameters
id: 13bbd574-83ac-11ec-99d4-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process = "*sekurlsa::tickets
- /export*" OR Processes.process = "*kerberos::ptt*") by Processes.dest Processes.user
- Processes.parent_process Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.parent_process_name | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `mimikatz_passtheticket_commandline_parameters_filter`'
+ /export*" OR Processes.process = "*kerberos::ptt*") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `mimikatz_passtheticket_commandline_parameters_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -81,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1550.003/mimikatz/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1550.003/mimikatz/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/mmc_lolbas_execution_process_spawn.yml b/detections/endpoint/mmc_lolbas_execution_process_spawn.yml
index a2db5e0210..14fff15957 100644
--- a/detections/endpoint/mmc_lolbas_execution_process_spawn.yml
+++ b/detections/endpoint/mmc_lolbas_execution_process_spawn.yml
@@ -1,6 +1,6 @@
name: Mmc LOLBAS Execution Process Spawn
id: f6601940-4c74-11ec-b9b7-3e22fbd008af
-version: 5
+version: 6
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -29,10 +29,14 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
"Mavinject.exe", "Regasm.exe", "Gpscript.exe", "Rundll32.exe", "Regsvr32.exe", "Msiexec.exe",
"Wuauclt.exe", "Presentationhost.exe", "Wmic.exe", "Runonce.exe", "Syncappvpublishingserver.exe",
"Verclsid.exe", "Infdefaultinstall.exe", "Explorer.exe", "Installutil.exe", "Netsh.exe",
- "Wab.exe", "Dnscmd.exe", "At.exe", "Pcalua.exe", "Msconfig.exe")) by Processes.dest
- Processes.user Processes.parent_process Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `mmc_lolbas_execution_process_spawn_filter`'
+ "Wab.exe", "Dnscmd.exe", "At.exe", "Pcalua.exe", "Msconfig.exe")) by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `mmc_lolbas_execution_process_spawn_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -85,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.003/lateral_movement_lolbas/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.003/lateral_movement_lolbas/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/modification_of_wallpaper.yml b/detections/endpoint/modification_of_wallpaper.yml
index fcb014d2a1..41c25f388b 100644
--- a/detections/endpoint/modification_of_wallpaper.yml
+++ b/detections/endpoint/modification_of_wallpaper.yml
@@ -1,7 +1,7 @@
name: Modification Of Wallpaper
id: accb0712-c381-11eb-8e5b-acde48001122
-version: '5'
-date: '2025-03-03'
+version: 6
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: TTP
@@ -20,9 +20,10 @@ search: '`sysmon` EventCode =13 (TargetObject IN ("*\\Control Panel\\Desktop\\W
Panel\\Desktop\\WallpaperStyle") AND Image != "*\\explorer.exe") OR (TargetObject
IN ("*\\Control Panel\\Desktop\\Wallpaper","*\\Control Panel\\Desktop\\WallpaperStyle")
AND Details IN ("*\\temp\\*", "*\\users\\public\\*")) | stats count min(_time) as
- firstTime max(_time) as lastTime by EventCode Image TargetObject Details Computer
- process_guid process_id user_id | rename Computer as dest | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `modification_of_wallpaper_filter`'
+ firstTime max(_time) as lastTime by action dest process_guid process_id registry_hive
+ registry_path registry_key_name registry_value_data registry_value_name status user_id
+ vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `modification_of_wallpaper_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the Image, TargetObject registry key, registry Details from your endpoints.
If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
diff --git a/detections/endpoint/modify_acl_permission_to_files_or_folder.yml b/detections/endpoint/modify_acl_permission_to_files_or_folder.yml
index 247e54e6b3..92dd79d8ec 100644
--- a/detections/endpoint/modify_acl_permission_to_files_or_folder.yml
+++ b/detections/endpoint/modify_acl_permission_to_files_or_folder.yml
@@ -1,6 +1,6 @@
name: Modify ACL permission To Files Or Folder
id: 7e8458cc-acca-11eb-9e3f-acde48001122
-version: 6
+version: 7
date: '2024-12-16'
author: Teoderick Contreras, Splunk
status: production
@@ -22,9 +22,14 @@ search: '| tstats `security_content_summariesonly` values(Processes.process) as
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name = "cacls.exe"
OR Processes.process_name = "icacls.exe" OR Processes.process_name = "xcacls.exe")
AND Processes.process = "*/G*" AND (Processes.process = "* everyone:*" OR Processes.process
- = "* SYSTEM:*" OR Processes.process = "* S-1-1-0:*") by Processes.parent_process_name
- Processes.process_name Processes.dest Processes.user | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `modify_acl_permission_to_files_or_folder_filter`'
+ = "* SYSTEM:*" OR Processes.process = "* S-1-1-0:*") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `modify_acl_permission_to_files_or_folder_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/monitor_registry_keys_for_print_monitors.yml b/detections/endpoint/monitor_registry_keys_for_print_monitors.yml
index 45b3c5e70d..be45e53c57 100644
--- a/detections/endpoint/monitor_registry_keys_for_print_monitors.yml
+++ b/detections/endpoint/monitor_registry_keys_for_print_monitors.yml
@@ -1,6 +1,6 @@
name: Monitor Registry Keys for Print Monitors
id: f5f6af30-7ba7-4295-bfe9-07de87c01bbc
-version: 10
+version: 11
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick, Bhavin Patel
status: production
@@ -16,10 +16,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.action=modified AND
- Registry.registry_path="*CurrentControlSet\\Control\\Print\\Monitors*") BY Registry.dest
- Registry.user Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid | `drop_dm_object_name(Registry)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `monitor_registry_keys_for_print_monitors_filter`'
+ Registry.registry_path="*CurrentControlSet\\Control\\Print\\Monitors*") by Registry.action
+ Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `monitor_registry_keys_for_print_monitors_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -64,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1547.010/atomic_red_team/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1547.010/atomic_red_team/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/ms_scripting_process_loading_ldap_module.yml b/detections/endpoint/ms_scripting_process_loading_ldap_module.yml
index eb406c8ba5..aaf14e117a 100644
--- a/detections/endpoint/ms_scripting_process_loading_ldap_module.yml
+++ b/detections/endpoint/ms_scripting_process_loading_ldap_module.yml
@@ -1,6 +1,6 @@
name: MS Scripting Process Loading Ldap Module
id: 0b0c40dc-14a6-11ec-b267-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,9 +15,11 @@ description: The following analytic detects the execution of MS scripting proces
data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode =7 Image IN ("*\\wscript.exe", "*\\cscript.exe") ImageLoaded
- IN ("*\\Wldap32.dll", "*\\adsldp.dll", "*\\adsldpc.dll") | stats min(_time) as firstTime
- max(_time) as lastTime count by Image EventCode process_name ProcessId ProcessGuid
- Computer ImageLoaded | rename Computer as dest | `security_content_ctime(firstTime)`
+ IN ("*\\Wldap32.dll", "*\\adsldp.dll", "*\\adsldpc.dll") | 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)` | `ms_scripting_process_loading_ldap_module_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -63,7 +65,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/fin7/fin7_js_2/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/fin7/fin7_js_2/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/ms_scripting_process_loading_wmi_module.yml b/detections/endpoint/ms_scripting_process_loading_wmi_module.yml
index bfe6fe971f..40670f9ec0 100644
--- a/detections/endpoint/ms_scripting_process_loading_wmi_module.yml
+++ b/detections/endpoint/ms_scripting_process_loading_wmi_module.yml
@@ -1,6 +1,6 @@
name: MS Scripting Process Loading WMI Module
id: 2eba3d36-14a6-11ec-a682-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,11 @@ data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode =7 Image IN ("*\\wscript.exe", "*\\cscript.exe") ImageLoaded
IN ("*\\fastprox.dll", "*\\wbemdisp.dll", "*\\wbemprox.dll", "*\\wbemsvc.dll" ,
- "*\\wmiutils.dll", "*\\wbemcomn.dll") | stats min(_time) as firstTime max(_time)
- as lastTime count by Image EventCode process_name ProcessId ProcessGuid Computer
- ImageLoaded | rename Computer as dest | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `ms_scripting_process_loading_wmi_module_filter`'
+ "*\\wmiutils.dll", "*\\wbemcomn.dll") | 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)` | `ms_scripting_process_loading_wmi_module_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
@@ -65,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/fin7/fin7_js_2/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/fin7/fin7_js_2/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/msbuild_suspicious_spawned_by_script_process.yml b/detections/endpoint/msbuild_suspicious_spawned_by_script_process.yml
index 2163163ec3..ffb57c39af 100644
--- a/detections/endpoint/msbuild_suspicious_spawned_by_script_process.yml
+++ b/detections/endpoint/msbuild_suspicious_spawned_by_script_process.yml
@@ -1,6 +1,6 @@
name: MSBuild Suspicious Spawned By Script Process
id: 213b3148-24ea-11ec-93a2-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -21,10 +21,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process_name)
as process_name values(Processes.process) as process min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name
- IN ("wscript.exe", "cscript.exe") AND `process_msbuild` by Processes.dest Processes.parent_process
- Processes.parent_process_name Processes.process_name Processes.original_file_name
- Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `msbuild_suspicious_spawned_by_script_process_filter`'
+ IN ("wscript.exe", "cscript.exe") AND `process_msbuild` by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `msbuild_suspicious_spawned_by_script_process_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127.001/regsvr32_silent/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127.001/regsvr32_silent/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/mshta_spawning_rundll32_or_regsvr32_process.yml b/detections/endpoint/mshta_spawning_rundll32_or_regsvr32_process.yml
index 15849b0340..449ec9d965 100644
--- a/detections/endpoint/mshta_spawning_rundll32_or_regsvr32_process.yml
+++ b/detections/endpoint/mshta_spawning_rundll32_or_regsvr32_process.yml
@@ -1,6 +1,6 @@
name: Mshta spawning Rundll32 OR Regsvr32 Process
id: 4aa5d062-e893-11eb-9eb2-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name
- = "mshta.exe" `process_rundll32` OR `process_regsvr32` by Processes.parent_process_name
- Processes.parent_process Processes.process_name Processes.process Processes.process_id
- Processes.process_guid Processes.user Processes.dest | `drop_dm_object_name("Processes")`
- | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)` | `mshta_spawning_rundll32_or_regsvr32_process_filter`'
+ = "mshta.exe" `process_rundll32` OR `process_regsvr32` by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)`
+ | `mshta_spawning_rundll32_or_regsvr32_process_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/spear_phish/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/spear_phish/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/msi_module_loaded_by_non_system_binary.yml b/detections/endpoint/msi_module_loaded_by_non_system_binary.yml
index 2c944989d3..cab03bb644 100644
--- a/detections/endpoint/msi_module_loaded_by_non_system_binary.yml
+++ b/detections/endpoint/msi_module_loaded_by_non_system_binary.yml
@@ -1,6 +1,6 @@
name: MSI Module Loaded by Non-System Binary
id: ccb98a66-5851-11ec-b91c-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -15,8 +15,10 @@ description: The following analytic detects the loading of `msi.dll` by a binary
data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode=7 ImageLoaded="*\\msi.dll" NOT (Image IN ("*\\System32\\*","*\\syswow64\\*","*\\windows\\*",
- "*\\winsxs\\*")) | stats count min(_time) as firstTime max(_time) as lastTime by
- Image ImageLoaded process_name dest EventCode ProcessId | `security_content_ctime(firstTime)`
+ "*\\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)` | `msi_module_loaded_by_non_system_binary_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name and imageloaded executions from your endpoints. If you
@@ -45,7 +47,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1574.002/msi_module_load/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1574.002/msi_module_load/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/msmpeng_application_dll_side_loading.yml b/detections/endpoint/msmpeng_application_dll_side_loading.yml
index 70f151f1ee..3b8dd38765 100644
--- a/detections/endpoint/msmpeng_application_dll_side_loading.yml
+++ b/detections/endpoint/msmpeng_application_dll_side_loading.yml
@@ -1,6 +1,6 @@
name: Msmpeng Application DLL Side Loading
id: 8bb3f280-dd9b-11eb-84d5-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Sanjay Govind
status: production
@@ -13,16 +13,16 @@ description: The following analytic detects the suspicious creation of msmpeng.e
malicious, this could lead to ransomware deployment, resulting in data encryption,
system compromise, and potential data loss or extortion.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
+- Sysmon EventID 11
search: '|tstats `security_content_summariesonly` values(Filesystem.file_path) as
file_path count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Filesystem
where (Filesystem.file_name = "msmpeng.exe" OR Filesystem.file_name = "mpsvc.dll") AND
NOT (Filesystem.file_path IN ("*\\Program Files\\windows defender\\*","*\\WinSxS\\*defender-service*","*\\WinSxS\\Temp\\*defender-service*"))
- by Filesystem.file_create_time Filesystem.process_id Filesystem.file_name Filesystem.user
- Filesystem.dest | `drop_dm_object_name(Filesystem)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `msmpeng_application_dll_side_loading_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `msmpeng_application_dll_side_loading_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the Filesystem responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Filesystem` node.
@@ -66,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets//malware/revil/msmpeng_side/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets//malware/revil/msmpeng_side/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/net_profiler_uac_bypass.yml b/detections/endpoint/net_profiler_uac_bypass.yml
index e34dcb520d..0afede05f4 100644
--- a/detections/endpoint/net_profiler_uac_bypass.yml
+++ b/detections/endpoint/net_profiler_uac_bypass.yml
@@ -1,6 +1,6 @@
name: NET Profiler UAC bypass
id: 0252ca80-e30d-11eb-8aa3-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,9 +17,11 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Registry where Registry.registry_path= "*\\Environment\\COR_PROFILER_PATH"
- Registry.registry_value_data = "*.dll" by Registry.registry_path Registry.registry_key_name
- Registry.registry_value_data Registry.dest | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `net_profiler_uac_bypass_filter`'
+ Registry.registry_value_data = "*.dll" by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `net_profiler_uac_bypass_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Registry` node. Also make sure
@@ -64,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/uac_bypass/windows-sysmon2.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/uac_bypass/windows-sysmon2.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/network_connection_discovery_with_arp.yml b/detections/endpoint/network_connection_discovery_with_arp.yml
index 0d917ab5f9..fc92ddd34b 100644
--- a/detections/endpoint/network_connection_discovery_with_arp.yml
+++ b/detections/endpoint/network_connection_discovery_with_arp.yml
@@ -1,6 +1,6 @@
name: Network Connection Discovery With Arp
id: ae008c0f-83bd-4ed4-9350-98d4328e15d2
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="arp.exe")
- (Processes.process=*-a*) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `network_connection_discovery_with_arp_filter`'
+ (Processes.process=*-a*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `network_connection_discovery_with_arp_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -56,7 +59,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1049/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1049/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/network_connection_discovery_with_netstat.yml b/detections/endpoint/network_connection_discovery_with_netstat.yml
index 1422b94323..637cc4d850 100644
--- a/detections/endpoint/network_connection_discovery_with_netstat.yml
+++ b/detections/endpoint/network_connection_discovery_with_netstat.yml
@@ -1,6 +1,6 @@
name: Network Connection Discovery With Netstat
id: 2cf5cc25-f39a-436d-a790-4857e5995ede
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="netstat.exe")
- (Processes.process=*-a*) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `network_connection_discovery_with_netstat_filter`'
+ (Processes.process=*-a*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `network_connection_discovery_with_netstat_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -56,7 +59,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1049/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1049/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/network_discovery_using_route_windows_app.yml b/detections/endpoint/network_discovery_using_route_windows_app.yml
index acea9bdc52..f989eebc23 100644
--- a/detections/endpoint/network_discovery_using_route_windows_app.yml
+++ b/detections/endpoint/network_discovery_using_route_windows_app.yml
@@ -1,6 +1,6 @@
name: Network Discovery Using Route Windows App
id: dd83407e-439f-11ec-ab8e-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes where `process_route` by Processes.dest
- Processes.user Processes.parent_process_name Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `network_discovery_using_route_windows_app_filter`'
+ as lastTime from datamodel=Endpoint.Processes where `process_route` by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `network_discovery_using_route_windows_app_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -54,7 +58,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/vilsel/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/vilsel/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/network_traffic_to_active_directory_web_services_protocol.yml b/detections/endpoint/network_traffic_to_active_directory_web_services_protocol.yml
index 96fc75806e..a5e2126587 100644
--- a/detections/endpoint/network_traffic_to_active_directory_web_services_protocol.yml
+++ b/detections/endpoint/network_traffic_to_active_directory_web_services_protocol.yml
@@ -1,6 +1,6 @@
name: Network Traffic to Active Directory Web Services Protocol
id: 68a0056c-34cb-455f-b03d-df935ea62c4f
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -15,9 +15,11 @@ description: The following analytic identifies network traffic directed to the A
an attacker could manipulate Active Directory, potentially leading to privilege
escalation, unauthorized access, or persistent control over the environment.
search: '| tstats count from datamodel=Network_Traffic where All_Traffic.dest_port=9389
- by All_Traffic.src_ip, All_Traffic.dest_ip, All_Traffic.app, All_Traffic.user, All_Traffic.dest_port
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `drop_dm_object_name("All_Traffic")`
- | `network_traffic_to_active_directory_web_services_protocol_filter`'
+ by All_Traffic.action All_Traffic.app All_Traffic.dest All_Traffic.dest_ip All_Traffic.dest_port
+ All_Traffic.direction All_Traffic.dvc All_Traffic.protocol All_Traffic.protocol_version
+ All_Traffic.src All_Traffic.src_ip All_Traffic.src_port All_Traffic.transport All_Traffic.user
+ All_Traffic.vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `drop_dm_object_name("All_Traffic")` | `network_traffic_to_active_directory_web_services_protocol_filter`'
how_to_implement: The detection is based on data that originates from network traffic
logs. The logs must contain the source and destination IP addresses, the application
name, and the destination port. The logs must be processed using the appropriate
@@ -50,7 +52,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/soaphound/sysmon_soaphound.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/soaphound/sysmon_soaphound.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/nishang_powershelltcponeline.yml b/detections/endpoint/nishang_powershelltcponeline.yml
index 676364635a..f3b01ad08a 100644
--- a/detections/endpoint/nishang_powershelltcponeline.yml
+++ b/detections/endpoint/nishang_powershelltcponeline.yml
@@ -1,6 +1,6 @@
name: Nishang PowershellTCPOneLine
id: 1a382c6c-7c2e-11eb-ac69-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_powershell` (Processes.process=*Net.Sockets.TCPClient*
- AND Processes.process=*System.Text.ASCIIEncoding*) by Processes.dest Processes.user
- Processes.parent_process Processes.original_file_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`| `nishang_powershelltcponeline_filter`'
+ AND Processes.process=*System.Text.ASCIIEncoding*) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`|
+ `nishang_powershelltcponeline_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/nltest_domain_trust_discovery.yml b/detections/endpoint/nltest_domain_trust_discovery.yml
index d62704a59b..1507bc0182 100644
--- a/detections/endpoint/nltest_domain_trust_discovery.yml
+++ b/detections/endpoint/nltest_domain_trust_discovery.yml
@@ -1,6 +1,6 @@
name: NLTest Domain Trust Discovery
id: c3e05466-5f22-11eb-ae93-0242ac130002
-version: 6
+version: 7
date: '2024-12-16'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_nltest` (Processes.process=*/domain_trusts*
- OR Processes.process=*/all_trusts*) by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `nltest_domain_trust_discovery_filter`'
+ OR Processes.process=*/all_trusts*) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `nltest_domain_trust_discovery_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -83,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1482/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1482/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/notepad_with_no_command_line_arguments.yml b/detections/endpoint/notepad_with_no_command_line_arguments.yml
index 9598488359..50b50cb516 100644
--- a/detections/endpoint/notepad_with_no_command_line_arguments.yml
+++ b/detections/endpoint/notepad_with_no_command_line_arguments.yml
@@ -1,6 +1,6 @@
name: Notepad with no Command Line Arguments
id: 5adbc5f1-9a2f-41c1-a810-f37e015f8179
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
type: TTP
@@ -19,11 +19,14 @@ description: The following analytic identifies instances where Notepad.exe is la
leading to system compromise and unauthorized access.
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Processes where Processes.process_name=notepad.exe
- AND Processes.action!="blocked" by host _time span=1h Processes.process_id Processes.process_name
- Processes.dest Processes.process_path Processes.process Processes.parent_process_name
- Processes.parent_process | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | regex process="(?i)(notepad\.exe.{0,4}$)"
- | `notepad_with_no_command_line_arguments_filter`'
+ AND Processes.action!="blocked" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | regex
+ process="(?i)(notepad\.exe.{0,4}$)" | `notepad_with_no_command_line_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -78,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/sliver/notepad_windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/sliver/notepad_windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/ntdsutil_export_ntds.yml b/detections/endpoint/ntdsutil_export_ntds.yml
index 6272375790..be3661397e 100644
--- a/detections/endpoint/ntdsutil_export_ntds.yml
+++ b/detections/endpoint/ntdsutil_export_ntds.yml
@@ -1,6 +1,6 @@
name: Ntdsutil Export NTDS
id: da63bc76-61ae-11eb-ae93-0242ac130002
-version: 5
+version: 6
date: '2025-02-10'
author: Michael Haag, Patrick Bareiss, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=ntdsutil.exe
- Processes.process=*ntds* Processes.process=*create*) by Processes.dest Processes.user
- Processes.parent_process Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | `ntdsutil_export_ntds_filter`'
+ Processes.process=*ntds* Processes.process=*create*) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `ntdsutil_export_ntds_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -79,7 +83,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/outbound_network_connection_from_java_using_default_ports.yml b/detections/endpoint/outbound_network_connection_from_java_using_default_ports.yml
index 6d61ce22e9..cfca818b75 100644
--- a/detections/endpoint/outbound_network_connection_from_java_using_default_ports.yml
+++ b/detections/endpoint/outbound_network_connection_from_java_using_default_ports.yml
@@ -1,30 +1,53 @@
name: Outbound Network Connection from Java Using Default Ports
id: d2c14d28-5c47-11ec-9892-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Mauricio Velazco, Lou Stella, Splunk
status: production
type: TTP
-description: The following analytic detects outbound network connections from Java
- processes to default ports used by LDAP and RMI protocols, which may indicate exploitation
- of the CVE-2021-44228-Log4j vulnerability. This detection leverages data from Endpoint
- Detection and Response (EDR) agents, focusing on process and network traffic logs.
- Monitoring this activity is crucial as it can signify an attacker’s attempt to perform
- JNDI lookups and retrieve malicious payloads. If confirmed malicious, this activity
- could lead to remote code execution and further compromise of the affected server.
+description: "The following analytic detects outbound network connections from Java\
+ \ processes to default ports used by LDAP and RMI protocols, which may indicate\
+ \ exploitation of the CVE-2021-44228-Log4j vulnerability. This detection leverages\
+ \ data from Endpoint Detection and Response (EDR) agents, focusing on process and\
+ \ network traffic logs. Monitoring this activity is crucial as it can signify an\
+ \ attacker\u2019s attempt to perform JNDI lookups and retrieve malicious payloads.\
+ \ If confirmed malicious, this activity could lead to remote code execution and\
+ \ further compromise of the affected server."
data_source:
- Sysmon EventID 1 AND Sysmon EventID 3
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
+search: '| tstats prestats=t `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
where (Processes.process_name="java.exe" OR Processes.process_name=javaw.exe OR
- Processes.process_name=javaw.exe) by _time Processes.process_id Processes.process_name
- Processes.dest Processes.process_path Processes.process Processes.parent_process_name
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | join process_id [| tstats `security_content_summariesonly` count FROM datamodel=Network_Traffic.All_Traffic
- where (All_Traffic.dest_port= 389 OR All_Traffic.dest_port= 636 OR All_Traffic.dest_port
- = 1389 OR All_Traffic.dest_port = 1099 ) by All_Traffic.process_id All_Traffic.dest
- All_Traffic.dest_port | `drop_dm_object_name(All_Traffic)` | rename dest as connection_to_CNC]
- | table _time dest parent_process_name process_name process_path process connection_to_CNC
- dest_port| `outbound_network_connection_from_java_using_default_ports_filter`'
+ Processes.process_name=javaw.exe) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | tstats prestats=t append=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime from datamodel=Network_Traffic.All_Traffic where
+ (All_Traffic.dest_port= 389 OR All_Traffic.dest_port= 636 OR All_Traffic.dest_port
+ = 1389 OR All_Traffic.dest_port = 1099 ) by All_Traffic.action All_Traffic.app All_Traffic.dest
+ All_Traffic.dest_ip All_Traffic.dest_port All_Traffic.direction All_Traffic.dvc
+ All_Traffic.protocol All_Traffic.protocol_version All_Traffic.src All_Traffic.src_ip
+ All_Traffic.src_port All_Traffic.transport All_Traffic.user All_Traffic.vendor_product
+ All_Traffic.process_id | `drop_dm_object_name(All_Traffic)` | table action dest
+ original_file_name parent_process parent_process_exec parent_process_guid parent_process_id
+ parent_process_name parent_process_path process process_exec process_guid process_hash
+ process_id process_integrity_level process_name process_path user user_id vendor_product
+ app dest_ip dest_port direction dvc protocol protocol_version src src_ip src_port
+ transport | stats values(action) as action values(dest) as dest values(original_file_name)
+ as original_file_name values(parent_process) as parent_process values(parent_process_exec)
+ as parent_process_exec values(parent_process_guid) as parent_process_guid values(parent_process_id)
+ as parent_process_id values(parent_process_name) as parent_process_name values(parent_process_path)
+ as parent_process_path values(process) as process values(process_exec) as process_exec
+ values(process_hash) as process_hash values(process_guid) as process_guid values(process_integrity_level)
+ as process_integrity_level values(process_name) as process_name values(process_path)
+ as process_path values(user) as user values(user_id) as user_id values(vendor_product)
+ as vendor_product values(app) as app values(dest_ip) as dest_ip values(dest_port)
+ as dest_port values(direction) as direction values(dvc) as dvc values(protocol)
+ as protocol values(protocol_version) as protocol_version values(src) as src values(src_ip)
+ as src_ip values(src_port) as src_port values(transport) as transport by process_id
+ | where isnotnull(process_name) AND isnotnull(dest_port) | `outbound_network_connection_from_java_using_default_ports_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -78,7 +101,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1190/outbound_java/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1190/outbound_java/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/overwriting_accessibility_binaries.yml b/detections/endpoint/overwriting_accessibility_binaries.yml
index a81a27d1ef..1b79e8350a 100644
--- a/detections/endpoint/overwriting_accessibility_binaries.yml
+++ b/detections/endpoint/overwriting_accessibility_binaries.yml
@@ -1,6 +1,6 @@
name: Overwriting Accessibility Binaries
id: 13c2f6c3-10c5-4deb-9ba1-7c4460ebe4ae
-version: 8
+version: 9
date: '2025-02-10'
author: David Dorsey, Splunk
status: production
@@ -21,8 +21,11 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
OR Filesystem.file_path=*\\Windows\\System32\\utilman.exe* OR Filesystem.file_path=*\\Windows\\System32\\osk.exe*
OR Filesystem.file_path=*\\Windows\\System32\\Magnify.exe* OR Filesystem.file_path=*\\Windows\\System32\\Narrator.exe*
OR Filesystem.file_path=*\\Windows\\System32\\DisplaySwitch.exe* OR Filesystem.file_path=*\\Windows\\System32\\AtBroker.exe*)
- by Filesystem.file_name Filesystem.dest | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)`
- | `security_content_ctime(firstTime)` | `overwriting_accessibility_binaries_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `overwriting_accessibility_binaries_filter`'
how_to_implement: You must be ingesting data that records the filesystem activity
from your hosts to populate the Endpoint file-system data model node. If you are
using Sysmon, you will need a Splunk Universal Forwarder on each endpoint from which
@@ -70,7 +73,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.008/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.008/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/permission_modification_using_takeown_app.yml b/detections/endpoint/permission_modification_using_takeown_app.yml
index cb60ecf027..72777577dd 100644
--- a/detections/endpoint/permission_modification_using_takeown_app.yml
+++ b/detections/endpoint/permission_modification_using_takeown_app.yml
@@ -1,6 +1,6 @@
name: Permission Modification using Takeown App
id: fa7ca5c6-c9d8-11eb-bce9-acde48001122
-version: 5
+version: 6
date: '2025-01-27'
author: Teoderick Contreras, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "takeown.exe"
- Processes.process = "*/f*" by Processes.parent_process_name Processes.parent_process
- Processes.process_name Processes.process Processes.dest Processes.user Processes.process_id
- Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `permission_modification_using_takeown_app_filter`'
+ Processes.process = "*/f*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `permission_modification_using_takeown_app_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/ping_sleep_batch_command.yml b/detections/endpoint/ping_sleep_batch_command.yml
index f806c2c4b8..1c7af51e61 100644
--- a/detections/endpoint/ping_sleep_batch_command.yml
+++ b/detections/endpoint/ping_sleep_batch_command.yml
@@ -1,6 +1,6 @@
name: Ping Sleep Batch Command
id: ce058d6c-79f2-11ec-b476-acde48001122
-version: 7
+version: 8
date: '2025-02-19'
author: Teoderick Contreras, Splunk
status: production
@@ -20,10 +20,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where `process_ping` (Processes.parent_process
= "*ping*" Processes.parent_process = *-n* Processes.parent_process="* Nul*"Processes.parent_process="*>*")
OR (Processes.process = "*ping*" Processes.process = *-n* Processes.process="* Nul*"Processes.process="*>*")
- by Processes.parent_process_name Processes.parent_process Processes.process_name
- Processes.original_file_name Processes.process Processes.process_id Processes.process_guid
- Processes.user Processes.dest | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)`
- |`security_content_ctime(lastTime)` | `ping_sleep_batch_command_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)`
+ | `ping_sleep_batch_command_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -79,7 +82,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1497.003/ping_sleep/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1497.003/ping_sleep/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/possible_browser_pass_view_parameter.yml b/detections/endpoint/possible_browser_pass_view_parameter.yml
index 65339f563a..ea362d0785 100644
--- a/detections/endpoint/possible_browser_pass_view_parameter.yml
+++ b/detections/endpoint/possible_browser_pass_view_parameter.yml
@@ -1,6 +1,6 @@
name: Possible Browser Pass View Parameter
id: 8ba484e8-4b97-11ec-b19a-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -23,10 +23,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
"*/LoadPasswordsOpera*", "*/LoadPasswordsSafari*" , "*/UseOperaPasswordFile*", "*/OperaPasswordFile*","*/stab*",
"*/scomma*", "*/stabular*", "*/shtml*", "*/sverhtml*", "*/sxml*", "*/skeepass*"
) AND Processes.process IN ("*\\temp\\*", "*\\users\\public\\*", "*\\programdata\\*")
- by Processes.dest Processes.user Processes.parent_process_name Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.original_file_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `possible_browser_pass_view_parameter_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `possible_browser_pass_view_parameter_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -54,7 +57,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1555/web_browser_pass_view/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1555/web_browser_pass_view/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/possible_lateral_movement_powershell_spawn.yml b/detections/endpoint/possible_lateral_movement_powershell_spawn.yml
index 0829ca7479..d806def4f4 100644
--- a/detections/endpoint/possible_lateral_movement_powershell_spawn.yml
+++ b/detections/endpoint/possible_lateral_movement_powershell_spawn.yml
@@ -1,6 +1,6 @@
name: Possible Lateral Movement PowerShell Spawn
id: cb909b3e-512b-11ec-aa31-3e22fbd008af
-version: 9
+version: 10
date: '2025-02-10'
author: Mauricio Velazco, Michael Haag, Splunk
status: production
@@ -23,10 +23,14 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
OR Processes.parent_process_name=wsmprovhost.exe OR Processes.parent_process_name=mmc.exe)
(Processes.process_name=powershell.exe OR (Processes.process_name=cmd.exe AND Processes.process=*powershell.exe*)
OR Processes.process_name=pwsh.exe OR (Processes.process_name=cmd.exe AND Processes.process=*pwsh.exe*))
- NOT (Processes.process IN ("*c:\\windows\\ccm\\*")) by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `possible_lateral_movement_powershell_spawn_filter`'
+ NOT (Processes.process IN ("*c:\\windows\\ccm\\*")) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `possible_lateral_movement_powershell_spawn_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -91,7 +95,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1543.003/lateral_movement_powershell/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1543.003/lateral_movement_powershell/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/potential_system_network_configuration_discovery_activity.yml b/detections/endpoint/potential_system_network_configuration_discovery_activity.yml
index 7939bcde78..78d008a2ef 100644
--- a/detections/endpoint/potential_system_network_configuration_discovery_activity.yml
+++ b/detections/endpoint/potential_system_network_configuration_discovery_activity.yml
@@ -1,18 +1,47 @@
name: Potential System Network Configuration Discovery Activity
id: 3f0b95e3-3195-46ac-bea3-84fb59e7fac5
-version: 2
+version: 3
date: '2025-01-20'
author: Bhavin Patel, Splunk
status: production
type: Anomaly
-description: The following analytic identifies the rapid execution of processes used for system network configuration discovery on an endpoint. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process GUIDs, names, parent processes, and command-line executions. This activity can be significant as it may indicate an attacker attempting to map the network, which is a common precursor to lateral movement or further exploitation. If confirmed malicious, this behavior could allow an attacker to gain insights into the network topology, identify critical systems, and plan subsequent attacks, potentially leading to data exfiltration or system compromise.
+description: The following analytic identifies the rapid execution of processes used
+ for system network configuration discovery on an endpoint. It leverages data from
+ Endpoint Detection and Response (EDR) agents, focusing on process GUIDs, names,
+ parent processes, and command-line executions. This activity can be significant
+ as it may indicate an attacker attempting to map the network, which is a common
+ precursor to lateral movement or further exploitation. If confirmed malicious, this
+ behavior could allow an attacker to gain insights into the network topology, identify
+ critical systems, and plan subsequent attacks, potentially leading to data exfiltration
+ or system compromise.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` count values(Processes.process) as process values(Processes.parent_process) as parent_process min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where NOT Processes.user IN ("","unknown") by Processes.dest Processes.process_name Processes.parent_process_name Processes.user _time | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `drop_dm_object_name(Processes)` | search `system_network_configuration_discovery_tools` | transaction dest connected=false maxpause=5m |where eventcount>=5 | table firstTime lastTime dest user process_name process parent_process parent_process_name eventcount | `potential_system_network_configuration_discovery_activity_filter`'
-how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
-known_false_positives: It is uncommon for normal users to execute a series of commands used for network discovery. System administrators often use scripts to execute these commands. These can generate false positives.
+search: '| tstats `security_content_summariesonly` count values(Processes.process)
+ as process values(Processes.parent_process) as parent_process min(_time) as firstTime
+ max(_time) as lastTime from datamodel=Endpoint.Processes where NOT Processes.user
+ IN ("","unknown") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product _time | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `drop_dm_object_name(Processes)` | search
+ `system_network_configuration_discovery_tools` | transaction dest connected=false
+ maxpause=5m | where eventcount>=5 | `potential_system_network_configuration_discovery_activity_filter`'
+how_to_implement: The detection is based on data that originates from Endpoint Detection
+ and Response (EDR) agents. These agents are designed to provide security-related
+ telemetry from the endpoints where the agent is installed. To implement this search,
+ you must ingest logs that contain the process GUID, process name, and parent process.
+ Additionally, you must ingest complete command-line executions. These logs must
+ be processed using the appropriate Splunk Technology Add-ons that are specific to
+ the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint`
+ data model. Use the Splunk Common Information Model (CIM) to normalize the field
+ names and speed up the data modeling process.
+known_false_positives: It is uncommon for normal users to execute a series of commands
+ used for network discovery. System administrators often use scripts to execute these
+ commands. These can generate false positives.
references: []
drilldown_searches:
- name: View the detection results for - "$user$" and "$dest$"
@@ -20,7 +49,12 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
- name: View risk events for the last 7 days for - "$user$" and "$dest$"
- 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)`'
+ 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)`'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
diff --git a/detections/endpoint/potential_telegram_api_request_via_commandline.yml b/detections/endpoint/potential_telegram_api_request_via_commandline.yml
index 6e704fe58a..0d6b406512 100644
--- a/detections/endpoint/potential_telegram_api_request_via_commandline.yml
+++ b/detections/endpoint/potential_telegram_api_request_via_commandline.yml
@@ -1,18 +1,43 @@
name: Potential Telegram API Request Via CommandLine
id: d6b0d627-d0bf-46b1-936f-c48284767d21
-version: 1
+version: 2
date: '2025-02-19'
author: Nasreddine Bencherchali, Splunk, Zaki Zarkasih Al Mustafa
status: production
type: Anomaly
-description: The following analytic detects the presence of "api.telegram.org" in the CommandLine of a process. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs that include command-line details. This activity can be significant as the telegram API has been used as an exfiltration mechanism or even as a C2 channel. If confirmed malicious, this could allow an attacker or malware to exfiltrate data or receive additional C2 instruction, potentially leading to further compromise and persistence within the network.
+description: The following analytic detects the presence of "api.telegram.org" in
+ the CommandLine of a process. It leverages data from Endpoint Detection and Response
+ (EDR) agents, focusing on process execution logs that include command-line details.
+ This activity can be significant as the telegram API has been used as an exfiltration
+ mechanism or even as a C2 channel. If confirmed malicious, this could allow an attacker
+ or malware to exfiltrate data or receive additional C2 instruction, potentially
+ leading to further compromise and persistence within the network.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process= "*api.telegram.org*" NOT Processes.process IN ("*-osint -url*", "* --single-argument*") by Processes.dest Processes.user Processes.parent_process_name Processes.parent_process_id Processes.process_name Processes.process Processes.process_id Processes.process_guid | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `potential_telegram_api_request_via_commandline_filter`'
-how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
-known_false_positives: False positive may stem from application or users requesting the API directly via CommandLine for testing purposes. Investigate the matches and apply the necessary filters.
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
+ as lastTime from datamodel=Endpoint.Processes where Processes.process= "*api.telegram.org*"
+ NOT Processes.process IN ("*-osint -url*", "* --single-argument*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `potential_telegram_api_request_via_commandline_filter`'
+how_to_implement: The detection is based on data that originates from Endpoint Detection
+ and Response (EDR) agents. These agents are designed to provide security-related
+ telemetry from the endpoints where the agent is installed. To implement this search,
+ you must ingest logs that contain the process GUID, process name, and parent process.
+ Additionally, you must ingest complete command-line executions. These logs must
+ be processed using the appropriate Splunk Technology Add-ons that are specific to
+ the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint`
+ data model. Use the Splunk Common Information Model (CIM) to normalize the field
+ names and speed up the data modeling process.
+known_false_positives: False positive may stem from application or users requesting
+ the API directly via CommandLine for testing purposes. Investigate the matches and
+ apply the necessary filters.
references:
- https://www.virustotal.com/gui/file/0b3ef5e04329cefb5bb4bf30b3edcb32d1ec6bbcb29d22695a079bfb5b56e8ac/behavior
- https://www.virustotal.com/gui/file/72c59eeb15b5ec1d95e72e4b06a030bc058822bc10e5cb807e78a4624d329666/behavior
@@ -56,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1102.002/telegram_api_cli/telegram_cli.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1102.002/telegram_api_cli/telegram_cli.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/potentially_malicious_code_on_commandline.yml b/detections/endpoint/potentially_malicious_code_on_commandline.yml
index d436c3465a..554e460501 100644
--- a/detections/endpoint/potentially_malicious_code_on_commandline.yml
+++ b/detections/endpoint/potentially_malicious_code_on_commandline.yml
@@ -1,6 +1,6 @@
name: Potentially malicious code on commandline
id: 9c53c446-757e-11ec-871d-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Michael Hart, Splunk
status: production
@@ -18,14 +18,22 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: "| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=\"Endpoint.Processes\" by Processes.parent_process_name
- Processes.process_name Processes.process Processes.user Processes.dest | `drop_dm_object_name(Processes)`\
- \ | where len(process) > 200 | `potentially_malicious_code_on_cmdline_tokenize_score`
- | apply unusual_commandline_detection | eval score='predicted(unusual_cmdline_logits)',
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
+ as lastTime values(Processes.original_file_name) as original_file_name values(Processes.action)
+ as action values(Processes.parent_process_exec) as parent_process_exec values(Processes.parent_process_guid)
+ as parent_process_guid values(Processes.parent_process_id) as parent_process_id
+ values(Processes.parent_process_path) as parent_process_path values(Processes.process_exec)
+ as process_exec values(Processes.process_guid) as process_guid values(Processes.process_hash)
+ as process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.process_name) as process_name values(Processes.process_path)
+ as process_path values(Processes.user) as user values(Processes.user_id) as user_id
+ values(Processes.vendor_product) as vendor_product from datamodel="Endpoint.Processes"
+ by Processes.parent_process_name Processes.process_name Processes.process Processes.user
+ Processes.dest | `drop_dm_object_name(Processes)` | where len(process) > 200 | `potentially_malicious_code_on_cmdline_tokenize_score`
+ | apply unusual_commandline_detection | eval score=''predicted(unusual_cmdline_logits)'',
process=orig_process | fields - unusual_cmdline* predicted(unusual_cmdline_logits)
orig_process | where score > 0.5 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `potentially_malicious_code_on_commandline_filter`"
+ | `potentially_malicious_code_on_commandline_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -81,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/malicious_cmd_line_samples/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/malicious_cmd_line_samples/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_4104_hunting.yml b/detections/endpoint/powershell_4104_hunting.yml
index d03afb46b9..8f40c9639d 100644
--- a/detections/endpoint/powershell_4104_hunting.yml
+++ b/detections/endpoint/powershell_4104_hunting.yml
@@ -1,6 +1,6 @@
name: PowerShell 4104 Hunting
id: d6f2b006-0041-11ec-8885-acde48001122
-version: '13'
+version: '14'
date: '2025-02-28'
author: Michael Haag, Splunk
status: production
@@ -73,6 +73,7 @@ tags:
- Data Destruction
- Hermetic Wiper
- SystemBC
+ - PHP-CGI RCE Attack on Japanese Organizations
asset_type: Endpoint
mitre_attack_id:
- T1059.001
diff --git a/detections/endpoint/powershell___connect_to_internet_with_hidden_window.yml b/detections/endpoint/powershell___connect_to_internet_with_hidden_window.yml
index d69d9be400..cc90b20183 100644
--- a/detections/endpoint/powershell___connect_to_internet_with_hidden_window.yml
+++ b/detections/endpoint/powershell___connect_to_internet_with_hidden_window.yml
@@ -1,6 +1,6 @@
name: PowerShell - Connect To Internet With Hidden Window
id: ee18ed37-0802-4268-9435-b3b91aaa18db
-version: 12
+version: 13
date: '2025-02-10'
author: David Dorsey, Michael Haag Splunk
status: production
@@ -18,12 +18,16 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes where `process_powershell` by Processes.user
- Processes.process_name Processes.process Processes.parent_process_name Processes.original_file_name
- Processes.dest Processes.process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | where match(process,"(?i)[\-|\/|– |—|―]w(in*d*o*w*s*t*y*l*e*)*\s+[^-]")
- | `powershell___connect_to_internet_with_hidden_window_filter`'
+search: "| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)\
+ \ as lastTime from datamodel=Endpoint.Processes where `process_powershell` by Processes.action\
+ \ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec\
+ \ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name\
+ \ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid\
+ \ Processes.process_hash Processes.process_id Processes.process_integrity_level\
+ \ Processes.process_name Processes.process_path Processes.user Processes.user_id\
+ \ Processes.vendor_product | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`\
+ \ | `security_content_ctime(lastTime)` | where match(process,\"(?i)[\\-|\\/|\u2013\
+ \ |\u2014|\u2015]w(in*d*o*w*s*t*y*l*e*)*\\s+[^-]\") | `powershell___connect_to_internet_with_hidden_window_filter`"
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -63,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/hidden_powershell/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/hidden_powershell/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_com_hijacking_inprocserver32_modification.yml b/detections/endpoint/powershell_com_hijacking_inprocserver32_modification.yml
index 2999af89df..5a5d90d30a 100644
--- a/detections/endpoint/powershell_com_hijacking_inprocserver32_modification.yml
+++ b/detections/endpoint/powershell_com_hijacking_inprocserver32_modification.yml
@@ -1,6 +1,6 @@
name: Powershell COM Hijacking InprocServer32 Modification
id: ea61e291-af05-4716-932a-67faddb6ae6f
-version: 5
+version: 6
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -16,8 +16,9 @@ description: The following analytic detects attempts to modify or add a Componen
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*Software\\Classes\\CLSID\\*\\InProcServer32*"
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `powershell_com_hijacking_inprocserver32_modification_filter`'
how_to_implement: The following analytic requires PowerShell operational logs to be
imported. Modify the PowerShell macro as needed to match the sourcetype or add index.
@@ -45,9 +46,9 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: A PowerShell script has been identified with InProcServer32 within the
- script code on $Computer$.
+ script code on $dest$.
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 64
threat_objects: []
@@ -66,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.015/atomic_red_team/windows-powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.015/atomic_red_team/windows-powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_creating_thread_mutex.yml b/detections/endpoint/powershell_creating_thread_mutex.yml
index 17dc9e26a6..7525e4cb2e 100644
--- a/detections/endpoint/powershell_creating_thread_mutex.yml
+++ b/detections/endpoint/powershell_creating_thread_mutex.yml
@@ -1,6 +1,6 @@
name: Powershell Creating Thread Mutex
id: 637557ec-ca08-11eb-bd0a-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the execution of PowerShell scripts
within the environment.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 ScriptBlockText = "*Threading.Mutex*" | stats
- count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest |rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `powershell_creating_thread_mutex_filter`'
+search: '`powershell` EventCode=4104 ScriptBlockText = "*Threading.Mutex*" | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `powershell_creating_thread_mutex_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -31,13 +31,13 @@ references:
- https://static1.squarespace.com/static/552092d5e4b0661088167e5c/t/59c1814829f18782e24f1fe2/1505853768977/Windows+PowerShell+Logging+Cheat+Sheet+ver+Sept+2017+v2.1.pdf
- https://www.crowdstrike.com/blog/investigating-powershell-command-and-script-logging/
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -50,7 +50,7 @@ rba:
- field: dest
type: system
score: 40
- - field: user
+ - field: user_id
type: user
score: 40
threat_objects: []
@@ -69,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_disable_security_monitoring.yml b/detections/endpoint/powershell_disable_security_monitoring.yml
index 1564ed0507..0370522a12 100644
--- a/detections/endpoint/powershell_disable_security_monitoring.yml
+++ b/detections/endpoint/powershell_disable_security_monitoring.yml
@@ -1,6 +1,6 @@
name: Powershell Disable Security Monitoring
id: c148a894-dd93-11eb-bf2a-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -20,8 +20,11 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where `process_powershell` Processes.process="*set-mppreference*"
AND Processes.process IN ("*disablerealtimemonitoring*","*DisableScanningNetworkFiles*","*DisableScanningMappedNetworkDrivesForFullScan*","*DisableRemovableDriveScanning*","*DisableArchiveScanning*","*DisableCatchupFullScan*","*DisableCatchupQuickScan*","*disableioavprotection*","*disableintrusionpreventionsystem*","*disablescriptscanning*","*disableblockatfirstseen*","*DisableBehaviorMonitoring*","*MAPSReporting*","*drdsc
*","*dsnf *","*drtm *","*dioavp *","*dscrptsc *","*dbaf *","*dbm *","*dips *") by
- Processes.dest Processes.user Processes.parent_process Processes.original_file_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `powershell_disable_security_monitoring_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -75,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/pwh_defender_disabling/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/pwh_defender_disabling/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_domain_enumeration.yml b/detections/endpoint/powershell_domain_enumeration.yml
index b5d57545c4..b48ee66e5d 100644
--- a/detections/endpoint/powershell_domain_enumeration.yml
+++ b/detections/endpoint/powershell_domain_enumeration.yml
@@ -1,6 +1,6 @@
name: PowerShell Domain Enumeration
id: e1866ce2-ca22-11eb-8e44-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects the execution of PowerShell commands
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText IN (*get-netdomaintrust*, *get-netforesttrust*,
- *get-addomain*, *get-adgroupmember*, *get-domainuser*) | stats count min(_time)
- as firstTime max(_time) as lastTime by Computer EventCode ScriptBlockText UserID
- | rename Computer as dest | rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `powershell_domain_enumeration_filter`'
+ *get-addomain*, *get-adgroupmember*, *get-domainuser*) | fillnull | stats count
+ min(_time) as firstTime max(_time) as lastTime by dest signature signature_id user_id
+ vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `powershell_domain_enumeration_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -31,13 +31,13 @@ references:
- https://www.crowdstrike.com/blog/investigating-powershell-command-and-script-logging/
- https://www.splunk.com/en_us/blog/security/hunting-for-malicious-powershell-using-script-block-logging.html
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -46,12 +46,12 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: A suspicious powershell script contains domain enumeration command in $ScriptBlockText$
- with EventCode $EventCode$ in host $dest$
+ in host $dest$
risk_objects:
- field: dest
type: system
score: 42
- - field: user
+ - field: user_id
type: user
score: 42
threat_objects: []
@@ -72,7 +72,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/enumeration.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/enumeration.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_enable_powershell_remoting.yml b/detections/endpoint/powershell_enable_powershell_remoting.yml
index 412a67fcd6..0ec68cb2db 100644
--- a/detections/endpoint/powershell_enable_powershell_remoting.yml
+++ b/detections/endpoint/powershell_enable_powershell_remoting.yml
@@ -1,6 +1,6 @@
name: PowerShell Enable PowerShell Remoting
id: 40e3b299-19a5-4460-96e9-e1467f714f8e
-version: 5
+version: 6
date: '2025-02-10'
author: Michael Haag, Splunk
type: Anomaly
@@ -15,8 +15,9 @@ description: The following analytic detects the use of the Enable-PSRemoting cmd
this activity could allow an attacker to take control of the system remotely, execute
commands, and potentially pivot to other systems within the network, leading to
further compromise and lateral movement.
-search: '`powershell` EventCode=4104 ScriptBlockText="*Enable-PSRemoting*" | stats
- count min(_time) as firstTime max(_time) as lastTime by Computer EventCode ScriptBlockText
+search: '`powershell` EventCode=4104 ScriptBlockText="*Enable-PSRemoting*" | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `powershell_enable_powershell_remoting_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
@@ -41,9 +42,9 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: PowerShell was identified running a Invoke-PSremoting on $Computer$.
+ message: PowerShell was identified running a Invoke-PSremoting on $dest$.
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 25
threat_objects: []
@@ -61,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/4104-psremoting-windows-powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/4104-psremoting-windows-powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_enable_smb1protocol_feature.yml b/detections/endpoint/powershell_enable_smb1protocol_feature.yml
index 4027bd9cbf..ea353777dc 100644
--- a/detections/endpoint/powershell_enable_smb1protocol_feature.yml
+++ b/detections/endpoint/powershell_enable_smb1protocol_feature.yml
@@ -1,6 +1,6 @@
name: Powershell Enable SMB1Protocol Feature
id: afed80b2-d34b-11eb-a952-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,8 +15,9 @@ description: The following analytic detects the enabling of the SMB1 protocol vi
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*Enable-WindowsOptionalFeature*"
- ScriptBlockText = "*SMB1Protocol*" | stats count min(_time) as firstTime max(_time)
- as lastTime by EventCode ScriptBlockText Computer UserID | `security_content_ctime(firstTime)`
+ ScriptBlockText = "*SMB1Protocol*" | fillnull | stats count min(_time) as firstTime
+ max(_time) as lastTime by dest signature signature_id user_id vendor_product EventID
+ Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `powershell_enable_smb1protocol_feature_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the powershell logs from your endpoints. make sure you enable needed
@@ -40,9 +41,9 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Powershell Enable SMB1Protocol Feature on $Computer$
+ message: Powershell Enable SMB1Protocol Feature on $dest$
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 25
threat_objects: []
@@ -63,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_execute_com_object.yml b/detections/endpoint/powershell_execute_com_object.yml
index 0829d8c7a5..598976ff70 100644
--- a/detections/endpoint/powershell_execute_com_object.yml
+++ b/detections/endpoint/powershell_execute_com_object.yml
@@ -1,6 +1,6 @@
name: Powershell Execute COM Object
id: 65711630-f9bf-11eb-8d72-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,9 +15,10 @@ description: The following analytic detects the execution of a COM CLSID through
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*CreateInstance([type]::GetTypeFromCLSID*"
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest | rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `powershell_execute_com_object_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `powershell_execute_com_object_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
@@ -65,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.015/pwh_com_object/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.015/pwh_com_object/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_fileless_process_injection_via_getprocaddress.yml b/detections/endpoint/powershell_fileless_process_injection_via_getprocaddress.yml
index be8d0a5b04..bb1d4edc93 100644
--- a/detections/endpoint/powershell_fileless_process_injection_via_getprocaddress.yml
+++ b/detections/endpoint/powershell_fileless_process_injection_via_getprocaddress.yml
@@ -1,6 +1,6 @@
name: Powershell Fileless Process Injection via GetProcAddress
id: a26d9db4-c883-11eb-9d75-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the use of `GetProcAddress` in Power
review parallel processes and the entire logged script block for further investigation.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 ScriptBlockText=*getprocaddress* | stats count
- min(_time) as firstTime max(_time) as lastTime by Opcode Computer UserID EventCode
- ScriptBlockText | rename Computer as dest | rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `powershell_fileless_process_injection_via_getprocaddress_filter`'
+search: '`powershell` EventCode=4104 ScriptBlockText=*getprocaddress* | fillnull |
+ stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `powershell_fileless_process_injection_via_getprocaddress_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -67,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_fileless_script_contains_base64_encoded_content.yml b/detections/endpoint/powershell_fileless_script_contains_base64_encoded_content.yml
index c6cf407c05..8d1616c66c 100644
--- a/detections/endpoint/powershell_fileless_script_contains_base64_encoded_content.yml
+++ b/detections/endpoint/powershell_fileless_script_contains_base64_encoded_content.yml
@@ -1,6 +1,6 @@
name: Powershell Fileless Script Contains Base64 Encoded Content
id: 8acbc04c-c882-11eb-b060-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the execution of PowerShell scripts
detect. If confirmed malicious, this could lead to code execution, allowing attackers
to run arbitrary commands and potentially compromise the system.
search: '`powershell` EventCode=4104 ScriptBlockText = "*frombase64string*" OR ScriptBlockText
- = "*gnirtS46esaBmorF*" | stats count min(_time) as firstTime max(_time) as lastTime
- by EventCode ScriptBlockText Computer UserID | rename Computer as dest |rename UserID
- as user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `powershell_fileless_script_contains_base64_encoded_content_filter`'
+ = "*gnirtS46esaBmorF*" | fillnull | stats count min(_time) as firstTime max(_time)
+ as lastTime by dest signature signature_id user_id vendor_product EventID Guid Opcode
+ Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `powershell_fileless_script_contains_base64_encoded_content_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -71,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/frombase64string.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/frombase64string.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_get_localgroup_discovery.yml b/detections/endpoint/powershell_get_localgroup_discovery.yml
index 95170cb2f8..7e642a7809 100644
--- a/detections/endpoint/powershell_get_localgroup_discovery.yml
+++ b/detections/endpoint/powershell_get_localgroup_discovery.yml
@@ -1,6 +1,6 @@
name: PowerShell Get LocalGroup Discovery
id: b71adfcc-155b-11ec-9413-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=powershell.exe
- OR Processes.process_name=cmd.exe) (Processes.process="*get-localgroup*") by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `powershell_get_localgroup_discovery_filter`'
+ OR Processes.process_name=cmd.exe) (Processes.process="*get-localgroup*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `powershell_get_localgroup_discovery_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -50,7 +54,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.001/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1069.001/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_get_localgroup_discovery_with_script_block_logging.yml b/detections/endpoint/powershell_get_localgroup_discovery_with_script_block_logging.yml
index 633fbc71a1..09df1147d8 100644
--- a/detections/endpoint/powershell_get_localgroup_discovery_with_script_block_logging.yml
+++ b/detections/endpoint/powershell_get_localgroup_discovery_with_script_block_logging.yml
@@ -1,6 +1,6 @@
name: Powershell Get LocalGroup Discovery with Script Block Logging
id: d7c6ad22-155c-11ec-bb64-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the execution of the PowerShell cmdl
Review parallel processes and the entire script block for comprehensive analysis.
data_source:
- Powershell Script Block Logging 4104
-search: '`powershell` EventCode=4104 ScriptBlockText = "*get-localgroup*" | stats
- count min(_time) as firstTime max(_time) as lastTime by Opcode Computer UserID EventCode
- ScriptBlockText | rename Computer as dest, UserID as user | `security_content_ctime(firstTime)`
- |`security_content_ctime(lastTime)` | `powershell_get_localgroup_discovery_with_script_block_logging_filter`'
+search: '`powershell` EventCode=4104 ScriptBlockText = "*get-localgroup*" | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)` | `powershell_get_localgroup_discovery_with_script_block_logging_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -44,7 +44,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/getlocalgroup.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/getlocalgroup.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_invoke_cimmethod_cimsession.yml b/detections/endpoint/powershell_invoke_cimmethod_cimsession.yml
index 3d21b2281b..78bcb66712 100644
--- a/detections/endpoint/powershell_invoke_cimmethod_cimsession.yml
+++ b/detections/endpoint/powershell_invoke_cimmethod_cimsession.yml
@@ -1,6 +1,6 @@
name: PowerShell Invoke CIMMethod CIMSession
id: 651ee958-a433-471c-b264-39725b788b83
-version: 4
+version: 5
date: '2024-11-13'
author: Michael Haag, Splunk
type: Anomaly
@@ -15,8 +15,9 @@ description: The following analytic detects the creation of a New-CIMSession cmd
If confirmed malicious, this could allow an attacker to execute commands remotely,
potentially leading to unauthorized access and control over targeted systems.
search: '`powershell` EventCode=4104 ScriptBlockText IN ("*invoke-CIMMethod*", "*New-CimSession*")
- | stats count min(_time) as firstTime max(_time) as lastTime by Computer EventCode
- ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `powershell_invoke_cimmethod_cimsession_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
@@ -42,9 +43,9 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: PowerShell was identified running a Invoke-CIMMethod Invoke-CIMSession
- on $Computer$.
+ on $dest$.
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 25
threat_objects: []
@@ -63,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/atomic_red_team/4104-cimmethod-windows-powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/atomic_red_team/4104-cimmethod-windows-powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_invoke_wmiexec_usage.yml b/detections/endpoint/powershell_invoke_wmiexec_usage.yml
index 054bf73300..35a9141570 100644
--- a/detections/endpoint/powershell_invoke_wmiexec_usage.yml
+++ b/detections/endpoint/powershell_invoke_wmiexec_usage.yml
@@ -1,6 +1,6 @@
name: PowerShell Invoke WmiExec Usage
id: 0734bd21-2769-4972-a5f1-78bb1e011224
-version: 4
+version: 5
date: '2024-11-13'
author: Michael Haag, Splunk
type: TTP
@@ -14,8 +14,9 @@ description: The following analytic detects the execution of the Invoke-WMIExec
using WMI commands with NTLMv2 pass-the-hash authentication. If confirmed malicious,
this activity could allow an attacker to execute commands remotely on target systems,
potentially leading to further compromise and lateral spread within the network.
-search: '`powershell` EventCode=4104 ScriptBlockText IN ("*invoke-wmiexec*") | stats
- count min(_time) as firstTime max(_time) as lastTime by Computer EventCode ScriptBlockText
+search: '`powershell` EventCode=4104 ScriptBlockText IN ("*invoke-wmiexec*") | fillnull
+ | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `powershell_invoke_wmiexec_usage_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
@@ -40,9 +41,9 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: PowerShell was identified running a Invoke-WmiExec on $Computer$.
+ message: PowerShell was identified running a Invoke-WmiExec on $dest$.
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 100
threat_objects: []
@@ -60,7 +61,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/atomic_red_team/invokewmiexec_windows-powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/atomic_red_team/invokewmiexec_windows-powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_load_module_in_meterpreter.yml b/detections/endpoint/powershell_load_module_in_meterpreter.yml
index 48f13d3839..de997dba6b 100644
--- a/detections/endpoint/powershell_load_module_in_meterpreter.yml
+++ b/detections/endpoint/powershell_load_module_in_meterpreter.yml
@@ -1,6 +1,6 @@
name: Powershell Load Module in Meterpreter
id: d5905da5-d050-48db-9259-018d8f034fcf
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -16,8 +16,9 @@ description: The following analytic detects the execution of suspicious PowerShe
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText IN ("*MSF.Powershell*","*MSF.Powershell.Meterpreter*","*MSF.Powershell.Meterpreter.Kiwi*","*MSF.Powershell.Meterpreter.Transport*")
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer user_id | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `powershell_load_module_in_meterpreter_filter`'
how_to_implement: The following analytic requires PowerShell operational logs to be
imported. Modify the powershell macro as needed to match the sourcetype or add index.
@@ -43,12 +44,12 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: PowerShell was identified running a script utilized by Meterpreter from
- MetaSploit on endpoint $Computer$ by user $user_id$.
+ MetaSploit on endpoint $dest$ by user $user_id$.
risk_objects:
- field: user_id
type: user
score: 100
- - field: Computer
+ - field: dest
type: system
score: 100
threat_objects: []
@@ -66,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059/metasploit/msf.powershell.powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059/metasploit/msf.powershell.powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_loading_dotnet_into_memory_via_reflection.yml b/detections/endpoint/powershell_loading_dotnet_into_memory_via_reflection.yml
index d7d526e11e..547fb3ab23 100644
--- a/detections/endpoint/powershell_loading_dotnet_into_memory_via_reflection.yml
+++ b/detections/endpoint/powershell_loading_dotnet_into_memory_via_reflection.yml
@@ -1,6 +1,6 @@
name: PowerShell Loading DotNET into Memory via Reflection
id: 85bc3f30-ca28-11eb-bd21-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -17,10 +17,10 @@ description: The following analytic detects the use of PowerShell scripts to loa
persistent access within the environment.
search: '`powershell` EventCode=4104 ScriptBlockText IN ("*Reflection.Assembly]::Load*",
"*Reflection.Assembly.Load*", "*UnsafeLoadFrom*", "*.LoadFrom(*", "*.LoadModule(*",
- "*.LoadWithPartialName*", "*ReflectionOnlyLoad*") | stats count min(_time) as firstTime
- max(_time) as lastTime by Opcode Computer UserID EventCode ScriptBlockText | rename
- Computer as dest, UserID as user| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `powershell_loading_dotnet_into_memory_via_reflection_filter`'
+ "*.LoadWithPartialName*", "*ReflectionOnlyLoad*") | fillnull | stats count min(_time)
+ as firstTime max(_time) as lastTime by dest signature signature_id user_id vendor_product
+ EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `powershell_loading_dotnet_into_memory_via_reflection_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -33,13 +33,13 @@ references:
- https://static1.squarespace.com/static/552092d5e4b0661088167e5c/t/59c1814829f18782e24f1fe2/1505853768977/Windows+PowerShell+Logging+Cheat+Sheet+ver+Sept+2017+v2.1.pdf
- https://www.crowdstrike.com/blog/investigating-powershell-command-and-script-logging/
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -48,13 +48,12 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: A suspicious powershell script contains reflective class assembly command
- in $ScriptBlockText$ to load .net code in memory with EventCode $EventCode$ in
- host $dest$
+ in $ScriptBlockText$ to load .net code in memory in host $dest$
risk_objects:
- field: dest
type: system
score: 56
- - field: user
+ - field: user_id
type: user
score: 56
threat_objects: []
@@ -77,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/reflection.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/reflection.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_processing_stream_of_data.yml b/detections/endpoint/powershell_processing_stream_of_data.yml
index 76d78cf424..a8573b6ca4 100644
--- a/detections/endpoint/powershell_processing_stream_of_data.yml
+++ b/detections/endpoint/powershell_processing_stream_of_data.yml
@@ -1,6 +1,6 @@
name: Powershell Processing Stream Of Data
id: 0d718b52-c9f1-11eb-bc61-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects suspicious PowerShell script executi
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*IO.Compression.*" OR ScriptBlockText
- = "*IO.StreamReader*" OR ScriptBlockText = "*]::Decompress*" | stats count min(_time)
- as firstTime max(_time) as lastTime by EventCode ScriptBlockText Computer UserID
- | rename UserID as user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `powershell_processing_stream_of_data_filter`'
+ = "*IO.StreamReader*" OR ScriptBlockText = "*]::Decompress*" | fillnull | stats
+ count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `powershell_processing_stream_of_data_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -48,12 +48,12 @@ drilldown_searches:
rba:
message: A suspicious powershell script contains stream command in $ScriptBlockText$
commonly for processing compressed or to decompressed binary file with EventCode
- $EventCode$ in host $Computer$
+ $EventID$ in host $dest$
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 40
- - field: user
+ - field: user_id
type: user
score: 40
threat_objects: []
@@ -78,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/streamreader.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/streamreader.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_remote_services_add_trustedhost.yml b/detections/endpoint/powershell_remote_services_add_trustedhost.yml
index 7a96343fb7..14d0a34dc0 100644
--- a/detections/endpoint/powershell_remote_services_add_trustedhost.yml
+++ b/detections/endpoint/powershell_remote_services_add_trustedhost.yml
@@ -1,6 +1,6 @@
name: Powershell Remote Services Add TrustedHost
id: bef21d24-297e-45e3-9b9a-c6ac45450474
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects the execution of a PowerShell script
to establish persistent remote connections, bypass security protocols, and gain
unauthorized access to sensitive systems and data.
search: '`powershell` EventCode=4104 ScriptBlockText = "*WSMan:\\localhost\\Client\\TrustedHosts*"
- ScriptBlockText IN ("* -Value *", "* -Concatenate *") | rename Computer as dest,
- UserID as user | stats count min(_time) as firstTime max(_time) as lastTime by EventCode
- ScriptBlockText dest user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `powershell_remote_services_add_trustedhost_filter`'
+ ScriptBlockText IN ("* -Value *", "* -Concatenate *") | fillnull | stats count min(_time)
+ as firstTime max(_time) as lastTime by dest signature signature_id user_id vendor_product
+ EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `powershell_remote_services_add_trustedhost_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -28,13 +28,13 @@ known_false_positives: user and network administrator may used this function to
references:
- https://malpedia.caad.fkie.fraunhofer.de/details/win.darkgate
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -47,7 +47,7 @@ rba:
- field: dest
type: system
score: 64
- - field: user
+ - field: user_id
type: user
score: 64
threat_objects: []
@@ -65,7 +65,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/wsman_trustedhost/wsman_pwh.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/wsman_trustedhost/wsman_pwh.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_remote_thread_to_known_windows_process.yml b/detections/endpoint/powershell_remote_thread_to_known_windows_process.yml
index b342e7fea3..d41f5d4154 100644
--- a/detections/endpoint/powershell_remote_thread_to_known_windows_process.yml
+++ b/detections/endpoint/powershell_remote_thread_to_known_windows_process.yml
@@ -1,6 +1,6 @@
name: Powershell Remote Thread To Known Windows Process
id: ec102cb2-a0f5-11eb-9b38-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -17,9 +17,12 @@ data_source:
- Sysmon EventID 8
search: '`sysmon` EventCode = 8 parent_process_name IN ("powershell_ise.exe", "powershell.exe")
TargetImage IN ("*\\svchost.exe","*\\csrss.exe" "*\\gpupdate.exe", "*\\explorer.exe","*\\services.exe","*\\winlogon.exe","*\\smss.exe","*\\wininit.exe","*\\userinit.exe","*\\spoolsv.exe","*\\taskhost.exe")
- | stats min(_time) as firstTime max(_time) as lastTime count by SourceImage process_name
- SourceProcessId SourceProcessGuid TargetImage TargetProcessId NewThreadId StartAddress
- dest EventCode | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | stats count min(_time) as firstTime max(_time) as lastTime by EventID Guid NewThreadId
+ ProcessID SecurityID SourceImage SourceProcessGuid SourceProcessId StartAddress
+ StartFunction StartModule TargetImage TargetProcessGuid TargetProcessId UserID dest
+ parent_process_exec parent_process_guid parent_process_id parent_process_name parent_process_path
+ process_exec process_guid process_id process_name process_path signature signature_id
+ user_id vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `powershell_remote_thread_to_known_windows_process_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, Create Remote thread from your endpoints. If you are
@@ -44,7 +47,7 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: A suspicious powershell process $process_name$ that tries to create a remote
- thread on target process $TargetImage$ with eventcode $EventCode$ in host $dest$
+ thread on target process $TargetImage$ on host $dest$
risk_objects:
- field: dest
type: system
@@ -66,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/infection/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/infection/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_remove_windows_defender_directory.yml b/detections/endpoint/powershell_remove_windows_defender_directory.yml
index 8b6f9c3a6d..970833a272 100644
--- a/detections/endpoint/powershell_remove_windows_defender_directory.yml
+++ b/detections/endpoint/powershell_remove_windows_defender_directory.yml
@@ -1,6 +1,6 @@
name: Powershell Remove Windows Defender Directory
id: adf47620-79fa-11ec-b248-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects a suspicious PowerShell command atte
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*rmdir *" AND ScriptBlockText
- = "*\\Microsoft\\Windows Defender*" | stats count min(_time) as firstTime max(_time)
- as lastTime by Opcode Computer UserID EventCode ScriptBlockText | rename UserID
- as user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `powershell_remove_windows_defender_directory_filter`'
+ = "*\\Microsoft\\Windows Defender*" | fillnull | stats count min(_time) as firstTime
+ max(_time) as lastTime by dest signature signature_id user_id vendor_product EventID
+ Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `powershell_remove_windows_defender_directory_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -40,12 +40,12 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: suspicious powershell script $ScriptBlockText$ was executed on the $Computer$
+ message: suspicious powershell script $ScriptBlockText$ was executed on the $dest$
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 90
- - field: user
+ - field: user_id
type: user
score: 90
threat_objects: []
@@ -64,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_script_block_with_url_chain.yml b/detections/endpoint/powershell_script_block_with_url_chain.yml
index 12c23a7a46..2621147270 100644
--- a/detections/endpoint/powershell_script_block_with_url_chain.yml
+++ b/detections/endpoint/powershell_script_block_with_url_chain.yml
@@ -1,6 +1,6 @@
name: PowerShell Script Block With URL Chain
id: 4a3f2a7d-6402-4e64-a76a-869588ec3b57
-version: 4
+version: 5
date: '2024-11-13'
author: Steven Dick
status: production
@@ -18,11 +18,10 @@ data_source:
search: '`powershell` EventCode=4104 ScriptBlockText IN ("*http:*","*https:*") | regex
ScriptBlockText="(\"?(https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*))\"?(?:,|\))?){2,}"
| rex max_match=20 field=ScriptBlockText "(?https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*))"
- | eval Path = case(isnotnull(Path),Path,true(),"unknown") | stats count min(_time)
- as firstTime max(_time) as lastTime list(ScriptBlockText) as command values(Path)
- as file_name values(UserID) as user values(url) as url dc(url) as url_count by ActivityID,
- Computer, EventCode | rename Computer as dest, EventCode as signature_id | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `powershell_script_block_with_url_chain_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `powershell_script_block_with_url_chain_filter`'
how_to_implement: The following analytic requires PowerShell operational logs to be
imported. Modify the powershell macro as needed to match the sourcetype or add index.
This analytic is specific to 4104, or PowerShell Script Block Logging.
@@ -46,20 +45,16 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: A suspicious powershell script used by $user$ on host $dest$ contains $url_count$
+ message: A suspicious powershell script used by $user_id$ on host $dest$ contains
URLs in an array, this is commonly used for malware.
risk_objects:
- field: dest
type: system
score: 80
- - field: user
+ - field: user_id
type: user
score: 80
- threat_objects:
- - field: file_name
- type: file_name
- - field: url
- type: url
+ threat_objects: []
tags:
analytic_story:
- Malicious PowerShell
@@ -75,7 +70,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/gootloader/partial_ttps/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/gootloader/partial_ttps/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_start_bitstransfer.yml b/detections/endpoint/powershell_start_bitstransfer.yml
index 6b50ec5b4f..0fddbd5186 100644
--- a/detections/endpoint/powershell_start_bitstransfer.yml
+++ b/detections/endpoint/powershell_start_bitstransfer.yml
@@ -1,6 +1,6 @@
name: PowerShell Start-BitsTransfer
id: 39e2605a-90d8-11eb-899e-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_powershell` Processes.process=*start-bitstransfer*
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.original_file_name Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `powershell_start_bitstransfer_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -78,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1197/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_start_or_stop_service.yml b/detections/endpoint/powershell_start_or_stop_service.yml
index 4779e1c10c..b9a189f016 100644
--- a/detections/endpoint/powershell_start_or_stop_service.yml
+++ b/detections/endpoint/powershell_start_or_stop_service.yml
@@ -1,6 +1,6 @@
name: PowerShell Start or Stop Service
id: 04207f8a-e08d-4ee6-be26-1e0c4488b04a
-version: 4
+version: 5
date: '2024-11-13'
author: Michael Haag, Splunk
type: Anomaly
@@ -15,16 +15,17 @@ description: The following analytic identifies the use of PowerShell's Start-Ser
to disable security services, evade detection, or disrupt essential services, leading
to potential system downtime and compromised security.
search: '`powershell` EventCode=4104 ScriptBlockText IN ("*start-service*", "*stop-service*")
- | stats count min(_time) as firstTime max(_time) as lastTime by Computer EventCode
- ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `powershell_start_or_stop_service_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
known_false_positives: This behavior may be noisy, as these cmdlets are commonly used
by system administrators or other legitimate users to manage services. Therefore,
- it is recommended not to enable this analytic as a direct finding Instead,
- it should be used as part of a broader set of security controls to detect and investigate
+ it is recommended not to enable this analytic as a direct finding Instead, it should
+ be used as part of a broader set of security controls to detect and investigate
potential threats.
references:
- https://learn-powershell.net/2012/01/15/startingstopping-and-restarting-remote-services-with-powershell/
@@ -44,9 +45,9 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: PowerShell was identified attempting to start or stop a service on $Computer$.
+ message: PowerShell was identified attempting to start or stop a service on $dest$.
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 10
threat_objects: []
@@ -64,7 +65,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/start_stop_service_windows-powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/atomic_red_team/start_stop_service_windows-powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_using_memory_as_backing_store.yml b/detections/endpoint/powershell_using_memory_as_backing_store.yml
index e33e455cd2..30a8c64e32 100644
--- a/detections/endpoint/powershell_using_memory_as_backing_store.yml
+++ b/detections/endpoint/powershell_using_memory_as_backing_store.yml
@@ -1,6 +1,6 @@
name: Powershell Using memory As Backing Store
id: c396a0c4-c9f2-11eb-b4f5-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects suspicious PowerShell script executi
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = *New-Object* ScriptBlockText
- = *IO.MemoryStream* | stats count min(_time) as firstTime max(_time) as lastTime
- by EventCode ScriptBlockText Computer UserID | rename Computer as dest | rename
- UserID as user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `powershell_using_memory_as_backing_store_filter`'
+ = *IO.MemoryStream* | fillnull | stats count min(_time) as firstTime max(_time)
+ as lastTime by dest signature signature_id user_id vendor_product EventID Guid Opcode
+ Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `powershell_using_memory_as_backing_store_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -33,13 +33,13 @@ references:
- https://www.crowdstrike.com/blog/investigating-powershell-command-and-script-logging/
- https://thedfirreport.com/2023/05/22/icedid-macro-ends-in-nokoyawa-ransomware/
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -52,7 +52,7 @@ rba:
- field: dest
type: system
score: 40
- - field: user
+ - field: user_id
type: user
score: 40
threat_objects: []
@@ -74,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/honeypots/pwsh/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/honeypots/pwsh/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_webrequest_using_memory_stream.yml b/detections/endpoint/powershell_webrequest_using_memory_stream.yml
index 2c0fa1ba0d..7bdc4042ec 100644
--- a/detections/endpoint/powershell_webrequest_using_memory_stream.yml
+++ b/detections/endpoint/powershell_webrequest_using_memory_stream.yml
@@ -1,6 +1,6 @@
name: PowerShell WebRequest Using Memory Stream
id: 103affa6-924a-4b53-aff4-1d5075342aab
-version: 4
+version: 5
date: '2024-11-13'
author: Steven Dick
status: production
@@ -16,10 +16,9 @@ description: The following analytic detects the use of .NET classes in PowerShel
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText IN ("*system.net.webclient*","*system.net.webrequest*")
- AND ScriptBlockText="*IO.MemoryStream*" | eval Path = case(isnotnull(Path),Path,true(),"unknown")
- | stats count min(_time) as firstTime max(_time) as lastTime list(ScriptBlockText)
- as command values(Path) as file_name values(UserID) as user by ActivityID, Computer,
- EventCode | rename Computer as dest, EventCode as signature_id | `security_content_ctime(firstTime)`
+ AND ScriptBlockText="*IO.MemoryStream*" | fillnull | stats count min(_time) as firstTime
+ max(_time) as lastTime by dest signature signature_id user_id vendor_product EventID
+ Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `powershell_webrequest_using_memory_stream_filter`'
how_to_implement: The following analytic requires PowerShell operational logs to be
imported. Modify the powershell macro as needed to match the sourcetype or add index.
@@ -45,21 +44,20 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: Powershell webrequest to memory stream behavior. Possible fileless malware
- staging on $dest$ by $user$.
+ staging on $dest$ by $user_id$.
risk_objects:
- field: dest
type: system
score: 80
- - field: user
+ - field: user_id
type: user
score: 80
- threat_objects:
- - field: file_name
- type: file_name
+ threat_objects: []
tags:
analytic_story:
- Malicious PowerShell
- MoonPeak
+ - PHP-CGI RCE Attack on Japanese Organizations
asset_type: Endpoint
mitre_attack_id:
- T1059.001
@@ -73,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/gootloader/partial_ttps/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/gootloader/partial_ttps/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/powershell_windows_defender_exclusion_commands.yml b/detections/endpoint/powershell_windows_defender_exclusion_commands.yml
index 04e6fb422d..d33847597f 100644
--- a/detections/endpoint/powershell_windows_defender_exclusion_commands.yml
+++ b/detections/endpoint/powershell_windows_defender_exclusion_commands.yml
@@ -1,6 +1,6 @@
name: Powershell Windows Defender Exclusion Commands
id: 907ac95c-4dd9-11ec-ba2c-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the use of PowerShell commands to ad
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText = "*Add-MpPreference *" OR ScriptBlockText
- = "*Set-MpPreference *") AND ScriptBlockText = "*-exclusion*" | stats count min(_time)
- as firstTime max(_time) as lastTime by EventCode ScriptBlockText Computer UserID
- | rename Computer as dest | rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `powershell_windows_defender_exclusion_commands_filter`'
+ = "*Set-MpPreference *") AND ScriptBlockText = "*-exclusion*" | fillnull | stats
+ count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `powershell_windows_defender_exclusion_commands_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Registry` node. Also make sure
@@ -29,12 +29,12 @@ references:
- https://app.any.run/tasks/cf1245de-06a7-4366-8209-8e3006f2bfe5/
- https://www.microsoft.com/security/blog/2022/01/15/destructive-malware-targeting-ukrainian-organizations/
drilldown_searches:
-- name: View the detection results for - "$user$" and "$dest$"
- search: '%original_detection_search% | search user = "$user$" dest = "$dest$"'
+- name: View the detection results for - "$user_id$" and "$dest$"
+ search: '%original_detection_search% | search user_id = "$user_id$" dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$user$" and "$dest$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user$",
+- name: View risk events for the last 7 days for - "$user_id$" and "$dest$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user_id$",
"$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)
@@ -45,7 +45,7 @@ drilldown_searches:
rba:
message: Exclusion command $ScriptBlockText$ executed on $dest$
risk_objects:
- - field: user
+ - field: user_id
type: user
score: 64
- field: dest
@@ -72,7 +72,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/powershell_windows_defender_exclusion_commands/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/powershell_windows_defender_exclusion_commands/windows-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/prevent_automatic_repair_mode_using_bcdedit.yml b/detections/endpoint/prevent_automatic_repair_mode_using_bcdedit.yml
index 06ea69848f..2635bea612 100644
--- a/detections/endpoint/prevent_automatic_repair_mode_using_bcdedit.yml
+++ b/detections/endpoint/prevent_automatic_repair_mode_using_bcdedit.yml
@@ -1,6 +1,6 @@
name: Prevent Automatic Repair Mode using Bcdedit
id: 7742aa92-c9d9-11eb-bbfc-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -20,8 +20,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "bcdedit.exe"
Processes.process = "*bootstatuspolicy*" Processes.process = "*ignoreallfailures*"
- by Processes.parent_process_name Processes.parent_process Processes.process_name
- Processes.process Processes.dest Processes.user Processes.process_id Processes.process_guid
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
`prevent_automatic_repair_mode_using_bcdedit_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -77,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/print_processor_registry_autostart.yml b/detections/endpoint/print_processor_registry_autostart.yml
index 0e909c3988..c545f531cf 100644
--- a/detections/endpoint/print_processor_registry_autostart.yml
+++ b/detections/endpoint/print_processor_registry_autostart.yml
@@ -1,6 +1,6 @@
name: Print Processor Registry Autostart
id: 1f5b68aa-2037-11ec-898e-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: experimental
@@ -16,9 +16,11 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
max(_time) as lastTime FROM datamodel=Endpoint.Registry where Registry.registry_path
- ="*\\Control\\Print\\Environments\\Windows x64\\Print Processors*" by Registry.dest Registry.user
- Registry.registry_path Registry.registry_key_name Registry.registry_value_name |
- `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `drop_dm_object_name(Registry)`
+ ="*\\Control\\Print\\Environments\\Windows x64\\Print Processors*" by Registry.action
+ Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `drop_dm_object_name(Registry)`
| `print_processor_registry_autostart_filter`'
how_to_implement: To successfully implement this search, you must be ingesting data
that records registry activity from your hosts to populate the endpoint data model
@@ -58,7 +60,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/1f5b68aa-2037-11ec-898e-acde48001122.txt
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/1f5b68aa-2037-11ec-898e-acde48001122.txt
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/process_creating_lnk_file_in_suspicious_location.yml b/detections/endpoint/process_creating_lnk_file_in_suspicious_location.yml
index 820170d6e4..f1f6ab9ab4 100644
--- a/detections/endpoint/process_creating_lnk_file_in_suspicious_location.yml
+++ b/detections/endpoint/process_creating_lnk_file_in_suspicious_location.yml
@@ -1,6 +1,6 @@
name: Process Creating LNK file in Suspicious Location
id: 5d814af1-1041-47b5-a9ac-d754e82e9a26
-version: 10
+version: 11
date: '2025-02-10'
author: Jose Hernandez, Michael Haag, Splunk
status: production
@@ -13,19 +13,15 @@ description: The following analytic detects a process creating a `.lnk` file in
If confirmed malicious, this could allow an attacker to maintain persistence, execute
arbitrary code, or further compromise the system.
data_source:
-- Sysmon EventID 11 AND Sysmon EventID 1
+- Sysmon EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_name="*.lnk"
AND (Filesystem.file_path="C:\\Users\\*" OR Filesystem.file_path="*\\Temp\\*") by
- _time span=1h Filesystem.process_guid Filesystem.file_name Filesystem.file_path
- Filesystem.file_hash Filesystem.user | `drop_dm_object_name(Filesystem)` | rename
- process_guid as lnk_guid | join lnk_guid _time [| tstats `security_content_summariesonly`
- count FROM datamodel=Endpoint.Processes where Processes.process_name=* by _time
- span=1h Processes.parent_process_name Processes.parent_process_guid Processes.process_name
- Processes.dest Processes.process Processes.path | `drop_dm_object_name(Processes)`
- | rename parent_process_guid as lnk_guid] | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | table firstTime, lastTime, lnk_guid, user,
- dest, file_name, file_path, process_name, process, process_path, file_hash | `process_creating_lnk_file_in_suspicious_location_filter`'
+ Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `process_creating_lnk_file_in_suspicious_location_filter`'
how_to_implement: You must be ingesting data that records filesystem and process activity
from your hosts to populate the Endpoint data model. This is typically populated
via endpoint detection-and-response product, such as Carbon Black, or endpoint data
@@ -51,8 +47,7 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: A process $process_name$ that launching .lnk file in $file_path$ in host
- $dest$
+ message: A process launches .lnk file in $file_path$ in host $dest$
risk_objects:
- field: dest
type: system
@@ -79,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1566.002/lnk_file_temp_folder/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1566.002/lnk_file_temp_folder/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/process_deleting_its_process_file_path.yml b/detections/endpoint/process_deleting_its_process_file_path.yml
index bec4822fbf..c8b0c758f7 100644
--- a/detections/endpoint/process_deleting_its_process_file_path.yml
+++ b/detections/endpoint/process_deleting_its_process_file_path.yml
@@ -1,6 +1,6 @@
name: Process Deleting Its Process File Path
id: f7eda4bc-871c-11eb-b110-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras
status: production
@@ -15,13 +15,13 @@ description: The following analytic identifies a process attempting to delete it
remediation efforts.
data_source:
- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
search: '`sysmon` EventCode=1 CommandLine = "* /c *" CommandLine = "* del*" Image
= "*\\cmd.exe" | eval result = if(like(process,"%".parent_process."%"), "Found",
- "Not Found") | stats min(_time) as firstTime max(_time) as lastTime count by dest
- user ParentImage ParentCommandLine Image CommandLine EventCode ProcessID result
- | where result = "Found" | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ "Not Found") | stats min(_time) as firstTime max(_time) as lastTime count by action
+ dest original_file_name parent_process parent_process_exec parent_process_guid parent_process_id
+ parent_process_name parent_process_path process process_exec process_guid process_hash
+ process_id process_integrity_level process_name process_path user user_id vendor_product
+ result | where result = "Found" | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `process_deleting_its_process_file_path_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -52,7 +52,7 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: A process $Image$ tries to delete its process path in commandline $CommandLine$
+ message: A process $process_name$ tries to delete its process path in commandline $process$
as part of defense evasion in host $dest$ by user $user$
risk_objects:
- field: dest
@@ -79,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/clop/clop_a/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/clop/clop_a/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/process_execution_via_wmi.yml b/detections/endpoint/process_execution_via_wmi.yml
index 2c46069609..da336be457 100644
--- a/detections/endpoint/process_execution_via_wmi.yml
+++ b/detections/endpoint/process_execution_via_wmi.yml
@@ -1,6 +1,6 @@
name: Process Execution via WMI
id: 24869767-8579-485d-9a4f-d9ddfd8f0cac
-version: 8
+version: 9
date: '2024-11-13'
author: Rico Valdez, Michael Haag, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=WmiPrvSE.exe
- NOT (Processes.process IN ("*\\dismhost.exe*")) by Processes.dest Processes.user
- Processes.parent_process Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `process_execution_via_wmi_filter`'
+ NOT (Processes.process IN ("*\\dismhost.exe*")) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `process_execution_via_wmi_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/process_kill_base_on_file_path.yml b/detections/endpoint/process_kill_base_on_file_path.yml
index 1ec53796f1..290e6fa2d4 100644
--- a/detections/endpoint/process_kill_base_on_file_path.yml
+++ b/detections/endpoint/process_kill_base_on_file_path.yml
@@ -1,6 +1,6 @@
name: Process Kill Base On File Path
id: 5ffaa42c-acdb-11eb-9ad3-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -20,8 +20,12 @@ data_source:
search: '| tstats `security_content_summariesonly` values(Processes.process) as process
values(Processes.process_id) as process_id count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_wmic` AND Processes.process="*process*"
- AND Processes.process="*executablepath*" AND Processes.process="*delete*" by Processes.parent_process_name
- Processes.process_name Processes.original_file_name Processes.dest Processes.user
+ AND Processes.process="*executablepath*" AND Processes.process="*delete*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `process_kill_base_on_file_path_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/process_writing_dynamicwrapperx.yml b/detections/endpoint/process_writing_dynamicwrapperx.yml
index a76100c545..94ee9d47de 100644
--- a/detections/endpoint/process_writing_dynamicwrapperx.yml
+++ b/detections/endpoint/process_writing_dynamicwrapperx.yml
@@ -1,6 +1,6 @@
name: Process Writing DynamicWrapperX
id: b0a078e4-2601-11ec-9aec-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -14,18 +14,13 @@ description: The following analytic detects a process writing the dynwrapx.dll f
code, escalate privileges, or maintain persistence within the environment. Immediate
investigation of parallel processes and registry modifications is recommended.
data_source:
-- Sysmon EventID 1 AND Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- by _time Processes.process_id Processes.process_name Processes.dest Processes.process_guid
- Processes.user | `drop_dm_object_name(Processes)` | join process_guid [| tstats
- `security_content_summariesonly` count FROM datamodel=Endpoint.Filesystem where
- Filesystem.file_name="dynwrapx.dll" by _time Filesystem.dest Filesystem.file_create_time
- Filesystem.file_name Filesystem.file_path Filesystem.process_guid Filesystem.user
- | `drop_dm_object_name(Filesystem)` | fields _time process_guid file_path file_name
- file_create_time user dest process_name] | stats count min(_time) as firstTime max(_time)
- as lastTime by dest process_name process_guid file_name file_path file_create_time
- user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `process_writing_dynamicwrapperx_filter`'
+- Sysmon EventID 11
+search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Filesystem
+ where Filesystem.file_name="dynwrapx.dll" by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `process_writing_dynamicwrapperx_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` and `Filesystem`
@@ -56,7 +51,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/processes_launching_netsh.yml b/detections/endpoint/processes_launching_netsh.yml
index 212cf0f860..b5228dcfb5 100644
--- a/detections/endpoint/processes_launching_netsh.yml
+++ b/detections/endpoint/processes_launching_netsh.yml
@@ -1,6 +1,6 @@
name: Processes launching netsh
id: b89919ed-fe5f-492c-b139-95dbb162040e
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Josef Kuepker, Splunk
status: production
@@ -17,10 +17,13 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` count values(Processes.process)
- AS Processes.process min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
- where `process_netsh` by Processes.parent_process_name Processes.parent_process
- Processes.original_file_name Processes.process_name Processes.user Processes.dest
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
+ as lastTime from datamodel=Endpoint.Processes where `process_netsh` by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
|`drop_dm_object_name("Processes")` |`security_content_ctime(firstTime)` |`security_content_ctime(lastTime)`
|`processes_launching_netsh_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -44,7 +47,7 @@ drilldown_searches:
latest_offset: $info_max_time$
- name: View risk events for the last 7 days for - "$dest$" and "$user$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -82,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.004/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.004/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/ransomware_notes_bulk_creation.yml b/detections/endpoint/ransomware_notes_bulk_creation.yml
index 631b0fc764..85787d0b9d 100644
--- a/detections/endpoint/ransomware_notes_bulk_creation.yml
+++ b/detections/endpoint/ransomware_notes_bulk_creation.yml
@@ -1,7 +1,7 @@
name: Ransomware Notes bulk creation
id: eff7919a-8330-11eb-83f8-acde48001122
-version: '5'
-date: '2025-03-03'
+version: 6
+date: '2025-03-27'
author: Teoderick Contreras
status: production
type: Anomaly
@@ -14,11 +14,16 @@ description: The following analytic identifies the bulk creation of ransomware n
files inaccessible and potentially causing significant operational disruption.
data_source:
- Sysmon EventID 11
-search: '`sysmon` EventCode=11 file_name IN ("*\.txt","*\.html","*\.hta") |bin _time
+search: '`sysmon` EventCode=11 file_name IN ("*\.txt","*\.html","*\.hta") | bin _time
span=10s | stats min(_time) as firstTime max(_time) as lastTime dc(TargetFilename)
- as unique_readme_path_count values(TargetFilename) as list_of_readme_path by Computer
- Image file_name | rename Computer as dest | where unique_readme_path_count >= 15
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `ransomware_notes_bulk_creation_filter`'
+ as unique_readme_path_count values(TargetFilename) as list_of_readme_path values(action)
+ as action values(file_access_time) as file_access_time values(file_create_time)
+ as file_create_time values(file_hash) as file_hash values(file_modify_time) as file_modify_time
+ values(file_path) as file_path values(file_acl) as file_acl values(file_size) as
+ file_size values(process_guid) as process_guid values(process_id) as process_id
+ values(user) as user values(vendor_product) as vendor_product by dest file_name
+ | where unique_readme_path_count >= 15 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `ransomware_notes_bulk_creation_filter`'
how_to_implement: You must be ingesting data that records the filesystem activity
from your hosts to populate the Endpoint file-system data model node. If you are
using Sysmon, you will need a Splunk Universal Forwarder on each endpoint from which
diff --git a/detections/endpoint/recon_avproduct_through_pwh_or_wmi.yml b/detections/endpoint/recon_avproduct_through_pwh_or_wmi.yml
index b217c5d2a0..2f0e88c9a0 100644
--- a/detections/endpoint/recon_avproduct_through_pwh_or_wmi.yml
+++ b/detections/endpoint/recon_avproduct_through_pwh_or_wmi.yml
@@ -1,6 +1,6 @@
name: Recon AVProduct Through Pwh or WMI
id: 28077620-c9f6-11eb-8785-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -17,9 +17,10 @@ data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText = "*SELECT*" OR ScriptBlockText
= "*WMIC*") AND (ScriptBlockText = "*AntiVirusProduct*" OR ScriptBlockText = "*AntiSpywareProduct*")
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest | rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `recon_avproduct_through_pwh_or_wmi_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `recon_avproduct_through_pwh_or_wmi_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -32,13 +33,13 @@ references:
- https://www.crowdstrike.com/blog/investigating-powershell-command-and-script-logging/
- https://www.splunk.com/en_us/blog/security/hunting-for-malicious-powershell-using-script-block-logging.html
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -51,7 +52,7 @@ rba:
- field: dest
type: system
score: 56
- - field: user
+ - field: user_id
type: user
score: 56
threat_objects: []
@@ -76,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/t1592/pwh_av_recon/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/t1592/pwh_av_recon/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/recon_using_wmi_class.yml b/detections/endpoint/recon_using_wmi_class.yml
index 45443c4674..ba16fc76ea 100644
--- a/detections/endpoint/recon_using_wmi_class.yml
+++ b/detections/endpoint/recon_using_wmi_class.yml
@@ -1,6 +1,6 @@
name: Recon Using WMI Class
id: 018c1972-ca07-11eb-9473-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -20,9 +20,10 @@ search: '`powershell` EventCode=4104 (ScriptBlockText= "*SELECT*" OR ScriptBlock
OR ScriptBlockText= "*Win32_Processor*" OR ScriptBlockText= "*Win32_ComputerSystem*"
OR ScriptBlockText= "*Win32_PnPEntity*" OR ScriptBlockText= "*Win32_ShadowCopy*"
OR ScriptBlockText= "*Win32_DiskDrive*" OR ScriptBlockText= "*Win32_PhysicalMemory*")
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest | rename UserID as user| `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `recon_using_wmi_class_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `recon_using_wmi_class_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -37,13 +38,13 @@ references:
- https://www.welivesecurity.com/2022/04/12/industroyer2-industroyer-reloaded/
- https://blogs.vmware.com/security/2022/10/lockbit-3-0-also-known-as-lockbit-black.html
drilldown_searches:
-- name: View the detection results for - "$dest$" and "$user$"
- search: '%original_detection_search% | search dest = "$dest$" user = "$user$"'
+- name: View the detection results for - "$dest$" and "$user_id$"
+ search: '%original_detection_search% | search dest = "$dest$" user_id = "$user_id$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$dest$" and "$user$"
+- name: View risk events for the last 7 days for - "$dest$" and "$user_id$"
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$",
- "$user$") starthoursago=168 | stats count min(_time) as firstTime max(_time)
+ "$user_id$") 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"
@@ -57,7 +58,7 @@ rba:
- field: dest
type: system
score: 60
- - field: user
+ - field: user_id
type: user
score: 60
threat_objects: []
@@ -83,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/reconusingwmi.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/reconusingwmi.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/recursive_delete_of_directory_in_batch_cmd.yml b/detections/endpoint/recursive_delete_of_directory_in_batch_cmd.yml
index 89aa7cb4e4..2015337a39 100644
--- a/detections/endpoint/recursive_delete_of_directory_in_batch_cmd.yml
+++ b/detections/endpoint/recursive_delete_of_directory_in_batch_cmd.yml
@@ -1,6 +1,6 @@
name: Recursive Delete of Directory In Batch CMD
id: ba570b3a-d356-11eb-8358-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_cmd` Processes.process=*/c* Processes.process="*
- rd *" Processes.process="*/s*" Processes.process="*/q*" by Processes.user Processes.process_name
- Processes.parent_process_name Processes.parent_process Processes.process Processes.process_id
- Processes.dest |`drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `recursive_delete_of_directory_in_batch_cmd_filter`'
+ rd *" Processes.process="*/s*" Processes.process="*/q*" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ |`drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `recursive_delete_of_directory_in_batch_cmd_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -71,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ransomware_ttp/data2/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/reg_exe_manipulating_windows_services_registry_keys.yml b/detections/endpoint/reg_exe_manipulating_windows_services_registry_keys.yml
index 096acf7bf7..4a64b1a04b 100644
--- a/detections/endpoint/reg_exe_manipulating_windows_services_registry_keys.yml
+++ b/detections/endpoint/reg_exe_manipulating_windows_services_registry_keys.yml
@@ -1,6 +1,6 @@
name: Reg exe Manipulating Windows Services Registry Keys
id: 8470d755-0c13-45b3-bd63-387a373c10cf
-version: 10
+version: 11
date: '2025-02-10'
author: Rico Valdez, Splunk
status: production
@@ -21,9 +21,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime values(Processes.process_name) as process_name values(Processes.parent_process_name)
as parent_process_name values(Processes.user) as user FROM datamodel=Endpoint.Processes
where Processes.process_name=reg.exe Processes.process=*reg* Processes.process=*add*
- Processes.process=*Services* by Processes.process_id Processes.dest Processes.process
- | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `reg_exe_manipulating_windows_services_registry_keys_filter`'
+ Processes.process=*Services* by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name("Processes")`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `reg_exe_manipulating_windows_services_registry_keys_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1574.011/change_registry_path_service/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1574.011/change_registry_path_service/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/registry_keys_for_creating_shim_databases.yml b/detections/endpoint/registry_keys_for_creating_shim_databases.yml
index 9487738cc2..4f63116db3 100644
--- a/detections/endpoint/registry_keys_for_creating_shim_databases.yml
+++ b/detections/endpoint/registry_keys_for_creating_shim_databases.yml
@@ -1,6 +1,6 @@
name: Registry Keys for Creating SHIM Databases
id: f5f6af30-7aa7-4295-bfe9-07fe87c01bbb
-version: 12
+version: 13
date: '2025-02-10'
author: Patrick Bareiss, Teoderick Contreras, Splunk, Steven Dick, Bhavin Patel
status: production
@@ -17,11 +17,12 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path=*CurrentVersion\\AppCompatFlags\\Custom*
- OR Registry.registry_path=*CurrentVersion\\AppCompatFlags\\InstalledSDB*) BY Registry.dest
- Registry.user Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid | `drop_dm_object_name(Registry)`
- | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `registry_keys_for_creating_shim_databases_filter`'
+ OR Registry.registry_path=*CurrentVersion\\AppCompatFlags\\InstalledSDB*) by Registry.action
+ Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `registry_keys_for_creating_shim_databases_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -70,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.011/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.011/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/registry_keys_used_for_persistence.yml b/detections/endpoint/registry_keys_used_for_persistence.yml
index 65ff7b2113..113ece6636 100644
--- a/detections/endpoint/registry_keys_used_for_persistence.yml
+++ b/detections/endpoint/registry_keys_used_for_persistence.yml
@@ -1,7 +1,7 @@
name: Registry Keys Used For Persistence
id: f5f6af30-7aa7-4295-bfe9-07fe87c01a4b
-version: '18'
-date: '2025-02-28'
+version: 19
+date: '2025-03-27'
author: Jose Hernandez, David Dorsey, Teoderick Contreras, Rod Soto, Splunk
status: production
type: TTP
@@ -37,10 +37,12 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
AND Registry.registry_key_name="Load") OR (Registry.registry_path="*\\CurrentVersion"
AND Registry.registry_key_name="Svchost") OR (Registry.registry_path="*\\CurrentControlSet\Control\Session
Manager"AND Registry.registry_key_name="BootExecute") OR (Registry.registry_path="*\\Software\\Run"
- AND Registry.registry_key_name="auto_update")) by Registry.dest Registry.user Registry.registry_path
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
- Registry.registry_key_name | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `registry_keys_used_for_persistence_filter`'
+ AND Registry.registry_key_name="auto_update")) by Registry.action Registry.dest
+ Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `registry_keys_used_for_persistence_filter`'
how_to_implement: To successfully implement this search, you must be ingesting data
that records registry activity from your hosts to populate the endpoint data model
in the registry node. This is typically populated via endpoint detection-and-response
@@ -98,6 +100,7 @@ tags:
- Ransomware
- RedLine Stealer
- Remcos
+ - PHP-CGI RCE Attack on Japanese Organizations
- Snake Keylogger
- SnappyBee
- Sneaky Active Directory Persistence Tricks
diff --git a/detections/endpoint/registry_keys_used_for_privilege_escalation.yml b/detections/endpoint/registry_keys_used_for_privilege_escalation.yml
index 852eada1f8..8d384b1b5d 100644
--- a/detections/endpoint/registry_keys_used_for_privilege_escalation.yml
+++ b/detections/endpoint/registry_keys_used_for_privilege_escalation.yml
@@ -1,6 +1,6 @@
name: Registry Keys Used For Privilege Escalation
id: c9f4b923-f8af-4155-b697-1354f5bcbc5e
-version: 12
+version: 13
date: '2025-02-10'
author: David Dorsey, Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -18,10 +18,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE ((Registry.registry_path="*Microsoft\\Windows
NT\\CurrentVersion\\Image File Execution Options*") AND (Registry.registry_value_name=GlobalFlag
- OR Registry.registry_value_name=Debugger)) BY Registry.dest Registry.user Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `registry_keys_used_for_privilege_escalation_filter`'
+ OR Registry.registry_value_name=Debugger)) by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
+ | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `registry_keys_used_for_privilege_escalation_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the registry value name, registry path, and registry value data from your
endpoints. If you are using Sysmon, you must have at least version 2.0 of the official
@@ -74,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.012/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.012/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/regsvr32_silent_and_install_param_dll_loading.yml b/detections/endpoint/regsvr32_silent_and_install_param_dll_loading.yml
index 89f088a05b..1a66fdb18d 100644
--- a/detections/endpoint/regsvr32_silent_and_install_param_dll_loading.yml
+++ b/detections/endpoint/regsvr32_silent_and_install_param_dll_loading.yml
@@ -1,6 +1,6 @@
name: Regsvr32 Silent and Install Param Dll Loading
id: f421c250-24e7-11ec-bc43-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_regsvr32` AND Processes.process="*/i*"
- by Processes.dest Processes.parent_process Processes.process Processes.parent_process_name
- Processes.process_name Processes.original_file_name Processes.user | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | where
- match(process,"(?i)[\-|\/][Ss]{1}") | `regsvr32_silent_and_install_param_dll_loading_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | where match(process,"(?i)[\-|\/][Ss]{1}") | `regsvr32_silent_and_install_param_dll_loading_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -85,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.005/vbs_wscript/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.005/vbs_wscript/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/regsvr32_with_known_silent_switch_cmdline.yml b/detections/endpoint/regsvr32_with_known_silent_switch_cmdline.yml
index 43b74c27f5..2f3f9bba02 100644
--- a/detections/endpoint/regsvr32_with_known_silent_switch_cmdline.yml
+++ b/detections/endpoint/regsvr32_with_known_silent_switch_cmdline.yml
@@ -1,6 +1,6 @@
name: Regsvr32 with Known Silent Switch Cmdline
id: c9ef7dc4-eeaf-11eb-b2b6-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,11 +18,14 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes where `process_regsvr32` by Processes.user
- Processes.process_name Processes.process Processes.parent_process_name Processes.original_file_name
- Processes.dest Processes.process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | where match(process,"(?i)[\-|\/][Ss]{1}")
- | `regsvr32_with_known_silent_switch_cmdline_filter`'
+ as lastTime from datamodel=Endpoint.Processes where `process_regsvr32` by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | where match(process,"(?i)[\-|\/][Ss]{1}") | `regsvr32_with_known_silent_switch_cmdline_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -85,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remcos_client_registry_install_entry.yml b/detections/endpoint/remcos_client_registry_install_entry.yml
index 6a33393f9a..1d77d40f68 100644
--- a/detections/endpoint/remcos_client_registry_install_entry.yml
+++ b/detections/endpoint/remcos_client_registry_install_entry.yml
@@ -1,6 +1,6 @@
name: Remcos client registry install entry
id: f2a1615a-1d63-11ec-97d2-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Steven Dick, Bhavin Patel, Rod Soto, Teoderick Contreras, Splunk
status: production
@@ -14,22 +14,15 @@ description: The following analytic detects the presence of a registry key assoc
over the system, steal sensitive information, or use the compromised host for further
attacks. Immediate investigation and remediation are required.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
- Sysmon EventID 12
- Sysmon EventID 13
-search: '| tstats `security_content_summariesonly` count min(_time) AS firstTime max(_time)
- AS lastTime FROM datamodel=Endpoint.Processes BY _time span=1h Processes.user Processes.process_id
- Processes.process_name Processes.process Processes.process_path Processes.dest Processes.parent_process_name
- Processes.parent_process Processes.process_guid | `drop_dm_object_name(Processes)`
- | join process_guid [ | tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
- WHERE (Registry.registry_key_name=*\\Software\\Remcos*) BY _time span=1h Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)`] | fields firstTime lastTime
- dest user parent_process_name parent_process process_name process_path process registry_key_name
- registry_path registry_value_name registry_value_data process_guid | where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` |`remcos_client_registry_install_entry_filter`'
+search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
+ WHERE (Registry.registry_key_name=*\\Software\\Remcos*) by Registry.action Registry.dest
+ Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ |`remcos_client_registry_install_entry_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -79,7 +72,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos_registry/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos_registry/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remcos_rat_file_creation_in_remcos_folder.yml b/detections/endpoint/remcos_rat_file_creation_in_remcos_folder.yml
index 82a0d3c39b..7a7f557604 100644
--- a/detections/endpoint/remcos_rat_file_creation_in_remcos_folder.yml
+++ b/detections/endpoint/remcos_rat_file_creation_in_remcos_folder.yml
@@ -1,6 +1,6 @@
name: Remcos RAT File Creation in Remcos Folder
id: 25ae862a-1ac3-11ec-94a1-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk, Sanjay Govind
status: production
@@ -16,8 +16,10 @@ data_source:
- Sysmon EventID 11
search: '|tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_name IN ("*.dat")
- Filesystem.file_path = "*\\remcos\\*" by _time Filesystem.file_name Filesystem.file_path
- Filesystem.dest Filesystem.file_create_time | `drop_dm_object_name(Filesystem)`
+ Filesystem.file_path = "*\\remcos\\*" by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `remcos_rat_file_creation_in_remcos_folder_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -62,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos_agent/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos_agent/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_desktop_process_running_on_system.yml b/detections/endpoint/remote_desktop_process_running_on_system.yml
index 90532d273c..93c90ca2d7 100644
--- a/detections/endpoint/remote_desktop_process_running_on_system.yml
+++ b/detections/endpoint/remote_desktop_process_running_on_system.yml
@@ -1,6 +1,6 @@
name: Remote Desktop Process Running On System
id: f5939373-8054-40ad-8c64-cec478a22a4a
-version: 9
+version: 10
date: '2025-02-10'
author: David Dorsey, Splunk
status: experimental
@@ -19,9 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process=*mstsc.exe
- AND Processes.dest_category!=common_rdp_source by Processes.dest Processes.user
- Processes.process | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
- | `drop_dm_object_name(Processes)` | `remote_desktop_process_running_on_system_filter`'
+ AND Processes.dest_category!=common_rdp_source by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `drop_dm_object_name(Processes)`
+ | `remote_desktop_process_running_on_system_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/remote_process_instantiation_via_dcom_and_powershell.yml b/detections/endpoint/remote_process_instantiation_via_dcom_and_powershell.yml
index c9b9804885..7d41132bc8 100644
--- a/detections/endpoint/remote_process_instantiation_via_dcom_and_powershell.yml
+++ b/detections/endpoint/remote_process_instantiation_via_dcom_and_powershell.yml
@@ -1,6 +1,6 @@
name: Remote Process Instantiation via DCOM and PowerShell
id: d4f42098-4680-11ec-ad07-3e22fbd008af
-version: 7
+version: 8
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -20,10 +20,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_powershell` (Processes.process="*Document.ActiveView.ExecuteShellCommand*"
- OR Processes.process="*Document.Application.ShellExecute*") by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | `remote_process_instantiation_via_dcom_and_powershell_filter`'
+ OR Processes.process="*Document.Application.ShellExecute*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `remote_process_instantiation_via_dcom_and_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.003/lateral_movement/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.003/lateral_movement/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_process_instantiation_via_dcom_and_powershell_script_block.yml b/detections/endpoint/remote_process_instantiation_via_dcom_and_powershell_script_block.yml
index 2b3c8abaab..fe73976a20 100644
--- a/detections/endpoint/remote_process_instantiation_via_dcom_and_powershell_script_block.yml
+++ b/detections/endpoint/remote_process_instantiation_via_dcom_and_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: Remote Process Instantiation via DCOM and PowerShell Script Block
id: fa1c3040-4680-11ec-a618-3e22fbd008af
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -15,13 +15,13 @@ description: The following analytic detects the execution of PowerShell commands
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText="*Document.Application.ShellExecute*"
- OR ScriptBlockText="*Document.ActiveView.ExecuteShellCommand*") | stats count min(_time)
- as firstTime max(_time) as lastTime by EventCode ScriptBlockText Computer user_id
+ OR ScriptBlockText="*Document.ActiveView.ExecuteShellCommand*") | fillnull | stats
+ count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id
+ user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `remote_process_instantiation_via_dcom_and_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup instructions
- can be found
- https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
+ can be found https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
known_false_positives: Administrators may leverage DCOM to start a process on remote
systems, but this activity is usually limited to a small set of hosts or users.
references:
@@ -42,10 +42,10 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: A process was started on a remote endpoint from $Computer$ by abusing WMI
- using PowerShell.exe
+ message: A process was started on a remote endpoint from $dest$ by abusing WMI using
+ PowerShell.exe
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 63
threat_objects: []
@@ -63,7 +63,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/lateral_movement_psh/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/lateral_movement_psh/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_process_instantiation_via_winrm_and_powershell.yml b/detections/endpoint/remote_process_instantiation_via_winrm_and_powershell.yml
index fc7a0db67d..882dded535 100644
--- a/detections/endpoint/remote_process_instantiation_via_winrm_and_powershell.yml
+++ b/detections/endpoint/remote_process_instantiation_via_winrm_and_powershell.yml
@@ -1,6 +1,6 @@
name: Remote Process Instantiation via WinRM and PowerShell
id: ba24cda8-4716-11ec-8009-3e22fbd008af
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_powershell` (Processes.process="*Invoke-Command*"
- AND Processes.process="*-ComputerName*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
- | `remote_process_instantiation_via_winrm_and_powershell_filter`'
+ AND Processes.process="*-ComputerName*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `remote_process_instantiation_via_winrm_and_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/lateral_movement_psh/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/lateral_movement_psh/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_process_instantiation_via_winrm_and_powershell_script_block.yml b/detections/endpoint/remote_process_instantiation_via_winrm_and_powershell_script_block.yml
index 63c06643c1..834d32b394 100644
--- a/detections/endpoint/remote_process_instantiation_via_winrm_and_powershell_script_block.yml
+++ b/detections/endpoint/remote_process_instantiation_via_winrm_and_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: Remote Process Instantiation via WinRM and PowerShell Script Block
id: 7d4c618e-4716-11ec-951c-3e22fbd008af
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -15,13 +15,13 @@ description: The following analytic detects the execution of PowerShell commands
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText="*Invoke-Command*" AND ScriptBlockText="*-ComputerName*")
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer user_id | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `remote_process_instantiation_via_winrm_and_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup instructions
- can be found
- https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
+ can be found https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
known_false_positives: Administrators may leverage WinRM and `Invoke-Command` to start
a process on remote systems for system administration or automation use cases. This
activity is usually limited to a small set of hosts or users. In certain environments,
@@ -30,12 +30,12 @@ references:
- https://attack.mitre.org/techniques/T1021/006/
- https://pentestlab.blog/2018/05/15/lateral-movement-winrm/
drilldown_searches:
-- name: View the detection results for - "$Computer$"
- search: '%original_detection_search% | search Computer = "$Computer$"'
+- name: View the detection results for - "$dest$"
+ search: '%original_detection_search% | search dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$Computer$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$Computer$")
+- name: View risk events for the last 7 days for - "$dest$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$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)
@@ -44,10 +44,10 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: A process was started on a remote endpoint from $Computer$ by abusing WinRM
+ message: A process was started on a remote endpoint from $dest$ by abusing WinRM
using PowerShell.exe
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 45
threat_objects: []
@@ -65,7 +65,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/lateral_movement_psh/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/lateral_movement_psh/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_process_instantiation_via_winrm_and_winrs.yml b/detections/endpoint/remote_process_instantiation_via_winrm_and_winrs.yml
index f2d3dcf4d5..3843b4f62b 100644
--- a/detections/endpoint/remote_process_instantiation_via_winrm_and_winrs.yml
+++ b/detections/endpoint/remote_process_instantiation_via_winrm_and_winrs.yml
@@ -1,6 +1,6 @@
name: Remote Process Instantiation via WinRM and Winrs
id: 0dd296a2-4338-11ec-ba02-3e22fbd008af
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=winrs.exe
OR Processes.original_file_name=winrs.exe) (Processes.process="*-r:*" OR Processes.process="*-remote:*")
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `remote_process_instantiation_via_winrm_and_winrs_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `remote_process_instantiation_via_winrm_and_winrs_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -73,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/lateral_movement/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.006/lateral_movement/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_process_instantiation_via_wmi.yml b/detections/endpoint/remote_process_instantiation_via_wmi.yml
index 677dae13f9..8c6f4613b2 100644
--- a/detections/endpoint/remote_process_instantiation_via_wmi.yml
+++ b/detections/endpoint/remote_process_instantiation_via_wmi.yml
@@ -1,8 +1,8 @@
name: Remote Process Instantiation via WMI
id: d25d2c3d-d9d8-40ec-8fdf-e86fe155a3da
-version: '12'
-date: '2025-02-24'
-author: Rico Valdez, Mauricio Velazco, Splunk
+version: '13'
+date: '2025-03-27'
+author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects the execution of wmic.exe with parameters
@@ -20,8 +20,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_wmic` (Processes.process="*/node:*"
AND Processes.process="*process*" AND Processes.process="*call*" AND Processes.process="*create*")
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `remote_process_instantiation_via_wmi_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
diff --git a/detections/endpoint/remote_process_instantiation_via_wmi_and_powershell.yml b/detections/endpoint/remote_process_instantiation_via_wmi_and_powershell.yml
index 5ece97d2c9..384c412a26 100644
--- a/detections/endpoint/remote_process_instantiation_via_wmi_and_powershell.yml
+++ b/detections/endpoint/remote_process_instantiation_via_wmi_and_powershell.yml
@@ -1,7 +1,7 @@
name: Remote Process Instantiation via WMI and PowerShell
id: 112638b4-4634-11ec-b9ab-3e22fbd008af
-version: 5
-date: '2024-12-10'
+version: 15
+date: '2025-03-27'
author: Mauricio Velazco, Splunk
status: production
type: TTP
@@ -19,9 +19,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_powershell` (Processes.process="*Invoke-WmiMethod*"
AND Processes.process="*-CN*" AND Processes.process="*-Class Win32_Process*" AND Processes.process="*-Name
- create*") by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `remote_process_instantiation_via_wmi_and_powershell_filter`'
+ create*") by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `remote_process_instantiation_via_wmi_and_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/lateral_movement/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/lateral_movement/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_process_instantiation_via_wmi_and_powershell_script_block.yml b/detections/endpoint/remote_process_instantiation_via_wmi_and_powershell_script_block.yml
index 2338ea88f3..830f6215c6 100644
--- a/detections/endpoint/remote_process_instantiation_via_wmi_and_powershell_script_block.yml
+++ b/detections/endpoint/remote_process_instantiation_via_wmi_and_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: Remote Process Instantiation via WMI and PowerShell Script Block
id: 2a048c14-4634-11ec-a618-3e22fbd008af
-version: 5
+version: 6
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -17,13 +17,13 @@ data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText="*Invoke-WmiMethod*" AND (ScriptBlockText="*-CN*"
OR ScriptBlockText="*-ComputerName*") AND ScriptBlockText="*-Class Win32_Process*"
- AND ScriptBlockText="*-Name create*" | stats count min(_time) as firstTime max(_time)
- as lastTime by EventCode ScriptBlockText Computer UserID| `security_content_ctime(firstTime)`
+ AND ScriptBlockText="*-Name create*" | fillnull | stats count min(_time) as firstTime
+ max(_time) as lastTime by dest signature signature_id user_id vendor_product EventID
+ Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `remote_process_instantiation_via_wmi_and_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup instructions
- can be found
- https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
+ can be found https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
known_false_positives: Administrators may leverage WWMI and powershell.exe to start
a process on remote systems, but this activity is usually limited to a small set
of hosts or users.
@@ -31,12 +31,12 @@ references:
- https://attack.mitre.org/techniques/T1047/
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/invoke-wmimethod?view=powershell-5.1
drilldown_searches:
-- name: View the detection results for - "$Computer$"
- search: '%original_detection_search% | search Computer = "$Computer$"'
+- name: View the detection results for - "$dest$"
+ search: '%original_detection_search% | search dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$Computer$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$Computer$")
+- name: View risk events for the last 7 days for - "$dest$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$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)
@@ -45,10 +45,10 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: A process was started on a remote endpoint from $Computer$ by abusing WMI
- using PowerShell.exe
+ message: A process was started on a remote endpoint from $dest$ by abusing WMI using
+ PowerShell.exe
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 63
threat_objects: []
@@ -66,7 +66,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/lateral_movement/wmi_remote_process_powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/lateral_movement/wmi_remote_process_powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_system_discovery_with_adsisearcher.yml b/detections/endpoint/remote_system_discovery_with_adsisearcher.yml
index 33bc7de3b8..0420c5905e 100644
--- a/detections/endpoint/remote_system_discovery_with_adsisearcher.yml
+++ b/detections/endpoint/remote_system_discovery_with_adsisearcher.yml
@@ -1,6 +1,6 @@
name: Remote System Discovery with Adsisearcher
id: 70803451-0047-4e12-9d63-77fa7eb8649c
-version: 5
+version: 6
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -17,9 +17,9 @@ data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*adsisearcher*" AND ScriptBlockText
= "*objectcategory=computer*" AND ScriptBlockText IN ("*findAll()*","*findOne()*")
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest |rename UserID as user | `security_content_ctime(firstTime)`
- | `remote_system_discovery_with_adsisearcher_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `remote_system_discovery_with_adsisearcher_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -42,7 +42,7 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Remote system discovery enumeration with adsisearcher on $dest$ by $user$
+ message: Remote system discovery enumeration with adsisearcher on $dest$ by $user_id$
risk_objects:
- field: dest
type: system
@@ -62,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/adsisearcher-powershell.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/AD_discovery/adsisearcher-powershell.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_system_discovery_with_dsquery.yml b/detections/endpoint/remote_system_discovery_with_dsquery.yml
index 0f3b92aaf9..b5f44152e8 100644
--- a/detections/endpoint/remote_system_discovery_with_dsquery.yml
+++ b/detections/endpoint/remote_system_discovery_with_dsquery.yml
@@ -1,6 +1,6 @@
name: Remote System Discovery with Dsquery
id: 9fb562f4-42f8-4139-8e11-a82edf7ed718
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="dsquery.exe")
- (Processes.process="*computer*") by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `remote_system_discovery_with_dsquery_filter`'
+ (Processes.process="*computer*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `remote_system_discovery_with_dsquery_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -50,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_system_discovery_with_wmic.yml b/detections/endpoint/remote_system_discovery_with_wmic.yml
index 6db545d4bf..678659757f 100644
--- a/detections/endpoint/remote_system_discovery_with_wmic.yml
+++ b/detections/endpoint/remote_system_discovery_with_wmic.yml
@@ -1,6 +1,6 @@
name: Remote System Discovery with Wmic
id: d82eced3-b1dc-42ab-859e-a2fc98827359
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -20,10 +20,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="wmic.exe")
(Processes.process=*/NAMESPACE:\\\\root\\directory\\ldap* AND Processes.process=*ds_computer*
- AND Processes.process="*GET ds_samaccountname*") by Processes.dest Processes.user
- Processes.parent_process Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `remote_system_discovery_with_wmic_filter`'
+ AND Processes.process="*GET ds_samaccountname*") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `remote_system_discovery_with_wmic_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -72,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1018/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/remote_wmi_command_attempt.yml b/detections/endpoint/remote_wmi_command_attempt.yml
index 5bb7266b17..349c713ebd 100644
--- a/detections/endpoint/remote_wmi_command_attempt.yml
+++ b/detections/endpoint/remote_wmi_command_attempt.yml
@@ -1,6 +1,6 @@
name: Remote WMI Command Attempt
id: 272df6de-61f1-4784-877c-1fbc3e2d0838
-version: 7
+version: 8
date: '2024-11-13'
author: Rico Valdez, Michael Haag, Splunk
status: production
@@ -18,9 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_wmic` Processes.process=*node*
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `remote_wmi_command_attempt_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `remote_wmi_command_attempt_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -80,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/resize_shadowstorage_volume.yml b/detections/endpoint/resize_shadowstorage_volume.yml
index 56fa0680a6..805d8eb9a3 100644
--- a/detections/endpoint/resize_shadowstorage_volume.yml
+++ b/detections/endpoint/resize_shadowstorage_volume.yml
@@ -23,10 +23,14 @@ search: '| tstats `security_content_summariesonly` values(Processes.process) as
where Processes.parent_process_name = "cmd.exe" OR Processes.parent_process_name
= "powershell.exe" OR Processes.parent_process_name = "powershell_ise.exe" OR Processes.parent_process_name
= "wmic.exe" Processes.process_name = "vssadmin.exe" Processes.process="*resize*"
- Processes.process="*shadowstorage*" Processes.process="*/maxsize*" by Processes.parent_process_name
- Processes.parent_process Processes.process_name Processes.process Processes.dest
- Processes.user Processes.process_id Processes.process_guid | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)` | `resize_shadowstorage_volume_filter`'
+ Processes.process="*shadowstorage*" Processes.process="*/maxsize*" by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)`
+ | `resize_shadowstorage_volume_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -85,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/clop/clop_a/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/clop/clop_a/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/revil_common_exec_parameter.yml b/detections/endpoint/revil_common_exec_parameter.yml
index a4b2b3f7f5..1f9592d34a 100644
--- a/detections/endpoint/revil_common_exec_parameter.yml
+++ b/detections/endpoint/revil_common_exec_parameter.yml
@@ -1,6 +1,6 @@
name: Revil Common Exec Parameter
id: 85facebe-c382-11eb-9c3e-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -20,8 +20,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process = "* -nolan
*" OR Processes.process = "* -nolocal *" OR Processes.process = "* -fast *" OR Processes.process
- = "* -full *" by Processes.process_name Processes.process Processes.parent_process_name
- Processes.parent_process Processes.dest Processes.user Processes.process_id Processes.process_guid
+ = "* -full *" by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `revil_common_exec_parameter_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -78,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/revil/inf1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/revil/inf1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/revil_registry_entry.yml b/detections/endpoint/revil_registry_entry.yml
index f6f6c0e032..febc39bf6a 100644
--- a/detections/endpoint/revil_registry_entry.yml
+++ b/detections/endpoint/revil_registry_entry.yml
@@ -1,6 +1,6 @@
name: Revil Registry Entry
id: e3d3f57a-c381-11eb-9e35-acde48001122
-version: 6
+version: 7
date: '2024-11-13'
author: Steven Dick, Teoderick Contreras, Splunk
status: production
@@ -15,24 +15,16 @@ description: The following analytic identifies suspicious modifications in the r
attackers to maintain persistence, encrypt files, and store critical ransomware-related
information on compromised hosts.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
- Sysmon EventID 12
- Sysmon EventID 13
-search: '| tstats `security_content_summariesonly` count min(_time) AS firstTime max(_time)
- AS lastTime FROM datamodel=Endpoint.Processes BY _time span=1h Processes.user Processes.process_id
- Processes.process_name Processes.process Processes.process_path Processes.dest Processes.parent_process_name
- Processes.parent_process Processes.process_guid | `drop_dm_object_name(Processes)`
- | join process_guid [ | tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
+search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
WHERE (Registry.registry_path="*\\SOFTWARE\\WOW6432Node\\Facebook_Assistant\\*"
- OR Registry.registry_path="*\\SOFTWARE\\WOW6432Node\\BlackLivesMatter*") BY _time
- span=1h Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid | `drop_dm_object_name(Registry)`]
- | fields firstTime lastTime dest user parent_process_name parent_process process_name
- process_path process registry_key_name registry_path registry_value_name registry_value_data
- process_guid | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `revil_registry_entry_filter`'
+ OR Registry.registry_path="*\\SOFTWARE\\WOW6432Node\\BlackLivesMatter*") by Registry.action
+ Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `revil_registry_entry_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -87,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/revil/inf1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/revil/inf1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rubeus_command_line_parameters.yml b/detections/endpoint/rubeus_command_line_parameters.yml
index 8d0e78f4ef..997c6be4be 100644
--- a/detections/endpoint/rubeus_command_line_parameters.yml
+++ b/detections/endpoint/rubeus_command_line_parameters.yml
@@ -1,6 +1,6 @@
name: Rubeus Command Line Parameters
id: cca37478-8377-11ec-b59a-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -24,10 +24,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
OR Processes.process ="* silver* /service:*" OR Processes.process ="* kerberoast*"
OR Processes.process ="* asreproast*" OR Processes.process = "* renew* /ticket:*"
OR Processes.process = "* brute* /password:*" OR Processes.process = "* brute* /passwords:*"
- OR Processes.process ="* harvest*") by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.parent_process_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `rubeus_command_line_parameters_filter`'
+ OR Processes.process ="* harvest*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `rubeus_command_line_parameters_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -89,7 +92,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1550.003/rubeus/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1550.003/rubeus/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rubeus_kerberos_ticket_exports_through_winlogon_access.yml b/detections/endpoint/rubeus_kerberos_ticket_exports_through_winlogon_access.yml
index 5950c1ca67..2994bb7ba7 100644
--- a/detections/endpoint/rubeus_kerberos_ticket_exports_through_winlogon_access.yml
+++ b/detections/endpoint/rubeus_kerberos_ticket_exports_through_winlogon_access.yml
@@ -1,6 +1,6 @@
name: Rubeus Kerberos Ticket Exports Through Winlogon Access
id: 5ed8c50a-8869-11ec-876f-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -19,9 +19,12 @@ search: '`sysmon` EventCode=10 TargetImage=C:\\Windows\\system32\\winlogon.exe (
(SourceImage!=C:\\Windows\\system32\\svchost.exe AND SourceImage!=C:\\Windows\\system32\\lsass.exe
AND SourceImage!=C:\\Windows\\system32\\LogonUI.exe AND SourceImage!=C:\\Windows\\system32\\smss.exe
AND SourceImage!=C:\\Windows\\system32\\wbem\\wmiprvse.exe) | stats count min(_time)
- as firstTime max(_time) as lastTime by dest, SourceImage, SourceProcessId, TargetImage,
- TargetProcessId, EventCode, GrantedAccess | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)` | `rubeus_kerberos_ticket_exports_through_winlogon_access_filter`'
+ as firstTime max(_time) as lastTime by CallTrace EventID GrantedAccess Guid Opcode
+ ProcessID SecurityID SourceImage SourceProcessGUID SourceProcessId TargetImage TargetProcessGUID
+ TargetProcessId UserID dest granted_access parent_process_exec parent_process_guid
+ parent_process_id parent_process_name parent_process_path process_exec process_guid
+ process_id process_name process_path signature signature_id user_id vendor_product
+ | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `rubeus_kerberos_ticket_exports_through_winlogon_access_filter`'
how_to_implement: This search needs Sysmon Logs and a sysmon configuration, which
includes EventCode 10. This search uses an input macro named `sysmon`. We strongly
recommend that you specify your environment-specific configurations (index, source,
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1550.003/rubeus/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1550.003/rubeus/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/runas_execution_in_commandline.yml b/detections/endpoint/runas_execution_in_commandline.yml
index 0ed47331a5..69a09ff757 100644
--- a/detections/endpoint/runas_execution_in_commandline.yml
+++ b/detections/endpoint/runas_execution_in_commandline.yml
@@ -1,6 +1,6 @@
name: Runas Execution in CommandLine
id: 4807e716-43a4-11ec-a0e7-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_runas` AND Processes.process
- = "*/user:*" AND Processes.process = "*admin*" by Processes.dest Processes.user
- Processes.parent_process_name Processes.parent_process Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `runas_execution_in_commandline_filter`'
+ = "*/user:*" AND Processes.process = "*admin*" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `runas_execution_in_commandline_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -53,7 +57,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/vilsel/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/vilsel/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rundll32_control_rundll_hunt.yml b/detections/endpoint/rundll32_control_rundll_hunt.yml
index b1ad8f7ef5..d9743f4a1f 100644
--- a/detections/endpoint/rundll32_control_rundll_hunt.yml
+++ b/detections/endpoint/rundll32_control_rundll_hunt.yml
@@ -1,6 +1,6 @@
name: Rundll32 Control RunDLL Hunt
id: c8e7ced0-10c5-11ec-8b03-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,9 +18,12 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*Control_RunDLL* by
- Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.original_file_name
+ as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*Control_RunDLL*
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `rundll32_control_rundll_hunt_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -59,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.002/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.002/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rundll32_control_rundll_world_writable_directory.yml b/detections/endpoint/rundll32_control_rundll_world_writable_directory.yml
index 1d2585be25..457f7a21bf 100644
--- a/detections/endpoint/rundll32_control_rundll_world_writable_directory.yml
+++ b/detections/endpoint/rundll32_control_rundll_world_writable_directory.yml
@@ -1,6 +1,6 @@
name: Rundll32 Control RunDLL World Writable Directory
id: 1adffe86-10c3-11ec-8ce6-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,9 +19,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*Control_RunDLL*
- AND Processes.process IN ("*\\appdata\\*", "*\\windows\\temp\\*", "*\\programdata\\*") by
- Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id Processes.original_file_name
+ AND Processes.process IN ("*\\appdata\\*", "*\\windows\\temp\\*", "*\\programdata\\*")
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `rundll32_control_rundll_world_writable_directory_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -90,7 +93,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.002/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.002/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rundll32_create_remote_thread_to_a_process.yml b/detections/endpoint/rundll32_create_remote_thread_to_a_process.yml
index 7aca900e66..d4312ff4e3 100644
--- a/detections/endpoint/rundll32_create_remote_thread_to_a_process.yml
+++ b/detections/endpoint/rundll32_create_remote_thread_to_a_process.yml
@@ -1,6 +1,6 @@
name: Rundll32 Create Remote Thread To A Process
id: 2dbeee3a-f067-11eb-96c0-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -15,9 +15,13 @@ description: The following analytic detects the creation of a remote thread by r
data_source:
- Sysmon EventID 8
search: '`sysmon` EventCode=8 SourceImage = "*\\rundll32.exe" TargetImage = "*.exe"
- | stats count min(_time) as firstTime max(_time) as lastTime by SourceImage TargetImage
- TargetProcessId SourceProcessId StartAddress EventCode dest | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `rundll32_create_remote_thread_to_a_process_filter`'
+ | stats count min(_time) as firstTime max(_time) as lastTime by EventID Guid NewThreadId
+ ProcessID SecurityID SourceImage SourceProcessGuid SourceProcessId StartAddress
+ StartFunction StartModule TargetImage TargetProcessGuid TargetProcessId UserID dest
+ parent_process_exec parent_process_guid parent_process_id parent_process_name parent_process_path
+ process_exec process_guid process_id process_name process_path signature signature_id
+ user_id vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `rundll32_create_remote_thread_to_a_process_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the SourceImage, TargetImage, and EventCode executions from your endpoints
related to create remote thread or injecting codes. If you are using Sysmon, you
@@ -64,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rundll32_createremotethread_in_browser.yml b/detections/endpoint/rundll32_createremotethread_in_browser.yml
index 0076a94683..0155ed9b96 100644
--- a/detections/endpoint/rundll32_createremotethread_in_browser.yml
+++ b/detections/endpoint/rundll32_createremotethread_in_browser.yml
@@ -1,6 +1,6 @@
name: Rundll32 CreateRemoteThread In Browser
id: f8a22586-ee2d-11eb-a193-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -17,9 +17,12 @@ data_source:
- Sysmon EventID 8
search: '`sysmon` EventCode=8 SourceImage = "*\\rundll32.exe" TargetImage IN ("*\\firefox.exe",
"*\\chrome.exe", "*\\iexplore.exe","*\\microsoftedgecp.exe") | stats count min(_time)
- as firstTime max(_time) as lastTime by SourceImage TargetImage TargetProcessId SourceProcessId
- StartAddress EventCode dest | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `rundll32_createremotethread_in_browser_filter`'
+ as firstTime max(_time) as lastTime by EventID Guid NewThreadId ProcessID SecurityID
+ SourceImage SourceProcessGuid SourceProcessId StartAddress StartFunction StartModule
+ TargetImage TargetProcessGuid TargetProcessId UserID dest parent_process_exec parent_process_guid
+ parent_process_id parent_process_name parent_process_path process_exec process_guid
+ process_id process_name process_path signature signature_id user_id vendor_product
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `rundll32_createremotethread_in_browser_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the SourceImage, TargetImage, and EventCode executions from your endpoints
related to create remote thread or injecting codes. If you are using Sysmon, you
@@ -66,7 +69,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rundll32_lockworkstation.yml b/detections/endpoint/rundll32_lockworkstation.yml
index 4f3f8a2188..e18797739a 100644
--- a/detections/endpoint/rundll32_lockworkstation.yml
+++ b/detections/endpoint/rundll32_lockworkstation.yml
@@ -1,6 +1,6 @@
name: Rundll32 LockWorkStation
id: fa90f372-f91d-11eb-816c-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=rundll32.exe
- Processes.process= "*user32.dll,LockWorkStation*" by Processes.dest Processes.user
- Processes.parent_process Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id Processes.parent_process_name | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `rundll32_lockworkstation_filter`'
+ Processes.process= "*user32.dll,LockWorkStation*" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `rundll32_lockworkstation_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -71,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/conti/conti_leak/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/conti/conti_leak/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rundll32_process_creating_exe_dll_files.yml b/detections/endpoint/rundll32_process_creating_exe_dll_files.yml
index b3203c8ad4..4fcd4e901e 100644
--- a/detections/endpoint/rundll32_process_creating_exe_dll_files.yml
+++ b/detections/endpoint/rundll32_process_creating_exe_dll_files.yml
@@ -1,6 +1,6 @@
name: Rundll32 Process Creating Exe Dll Files
id: 6338266a-ee2a-11eb-bf68-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,8 +15,8 @@ description: The following analytic detects a rundll32 process creating executab
data_source:
- Sysmon EventID 11
search: '`sysmon` EventCode=11 Image="*rundll32.exe" TargetFilename IN ("*.exe", "*.dll")
- | stats count min(_time) as firstTime max(_time) as lastTime by Image TargetFilename
- Computer | rename Computer as dest | rename TargetFilename as file_name | `security_content_ctime(firstTime)`
+ | stats count min(_time) as firstTime max(_time) as lastTime by action dest file_name
+ file_path process_guid process_id user_id vendor_product | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `rundll32_process_creating_exe_dll_files_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, TargetFilename, and eventcode 11 executions from your
@@ -63,7 +63,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rundll32_shimcache_flush.yml b/detections/endpoint/rundll32_shimcache_flush.yml
index b2f5d5934a..dd2b27110a 100644
--- a/detections/endpoint/rundll32_shimcache_flush.yml
+++ b/detections/endpoint/rundll32_shimcache_flush.yml
@@ -1,6 +1,6 @@
name: Rundll32 Shimcache Flush
id: a913718a-25b6-11ec-96d3-acde48001122
-version: 5
+version: 6
date: '2024-12-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rundll32` AND Processes.process
- = "*apphelp.dll,ShimFlushCache*" by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.original_file_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `rundll32_shimcache_flush_filter`'
+ = "*apphelp.dll,ShimFlushCache*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `rundll32_shimcache_flush_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +77,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1112/shimcache_flush/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1112/shimcache_flush/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rundll32_with_no_command_line_arguments_with_network.yml b/detections/endpoint/rundll32_with_no_command_line_arguments_with_network.yml
index 23f1723414..1abab7ac49 100644
--- a/detections/endpoint/rundll32_with_no_command_line_arguments_with_network.yml
+++ b/detections/endpoint/rundll32_with_no_command_line_arguments_with_network.yml
@@ -1,6 +1,6 @@
name: Rundll32 with no Command Line Arguments with Network
id: 35307032-a12d-11eb-835f-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Steven Dick, Michael Haag, Splunk
status: production
@@ -15,16 +15,37 @@ description: The following analytic detects the execution of rundll32.exe withou
of the system.
data_source:
- Sysmon EventID 1 AND Sysmon EventID 3
-search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime FROM datamodel=Endpoint.Processes where `process_rundll32` AND Processes.action!="blocked"
- by host _time span=1h Processes.process_id Processes.process_name Processes.dest
- Processes.process_path Processes.process Processes.parent_process_name Processes.parent_process
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | regex process="(?i)(rundll32\.exe.{0,4}$)" | rename dest as src | join host process_id
- [| tstats `security_content_summariesonly` count latest(All_Traffic.dest) as dest
- latest(All_Traffic.dest_ip) as dest_ip latest(All_Traffic.dest_port) as dest_port
- FROM datamodel=Network_Traffic.All_Traffic where All_Traffic.dest_port != 0 by host
- All_Traffic.process_id | `drop_dm_object_name(All_Traffic)`] | `rundll32_with_no_command_line_arguments_with_network_filter`'
+search: '| tstats prestats=t `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
+ where `process_rundll32` AND Processes.action!="blocked" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | tstats prestats=t append=t `security_content_summariesonly`
+ count min(_time) as firstTime max(_time) as lastTime from datamodel=Network_Traffic.All_Traffic
+ where All_Traffic.dest_port != 0 by All_Traffic.action All_Traffic.app All_Traffic.dest
+ All_Traffic.dest_ip All_Traffic.dest_port All_Traffic.direction All_Traffic.dvc
+ All_Traffic.protocol All_Traffic.protocol_version All_Traffic.src All_Traffic.src_ip
+ All_Traffic.src_port All_Traffic.transport All_Traffic.user All_Traffic.vendor_product
+ All_Traffic.process_id | `drop_dm_object_name(All_Traffic)` | table action dest
+ original_file_name parent_process parent_process_exec parent_process_guid parent_process_id
+ parent_process_name parent_process_path process process_exec process_guid process_hash
+ process_id process_integrity_level process_name process_path user user_id vendor_product
+ app dest_ip dest_port direction dvc protocol protocol_version src src_ip src_port
+ transport | stats values(action) as action values(dest) as dest values(original_file_name)
+ as original_file_name values(parent_process) as parent_process values(parent_process_exec)
+ as parent_process_exec values(parent_process_guid) as parent_process_guid values(parent_process_id)
+ as parent_process_id values(parent_process_name) as parent_process_name values(parent_process_path)
+ as parent_process_path values(process) as process values(process_exec) as process_exec
+ values(process_hash) as process_hash values(process_guid) as process_guid values(process_integrity_level)
+ as process_integrity_level values(process_name) as process_name values(process_path)
+ as process_path values(user) as user values(user_id) as user_id values(vendor_product)
+ as vendor_product values(app) as app values(dest_ip) as dest_ip values(dest_port)
+ as dest_port values(direction) as direction values(dvc) as dvc values(protocol)
+ as protocol values(protocol_version) as protocol_version values(src) as src values(src_ip)
+ as src_ip values(src_port) as src_port values(transport) as transport by process_id
+ | where isnotnull(process_name) AND isnotnull(dest_port) | `rundll32_with_no_command_line_arguments_with_network_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -87,7 +108,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/rundll_loading_dll_by_ordinal.yml b/detections/endpoint/rundll_loading_dll_by_ordinal.yml
index fc41b88df5..7087d5b7a0 100644
--- a/detections/endpoint/rundll_loading_dll_by_ordinal.yml
+++ b/detections/endpoint/rundll_loading_dll_by_ordinal.yml
@@ -1,6 +1,6 @@
name: RunDLL Loading DLL By Ordinal
id: 6c135f8d-5e60-454e-80b7-c56eed739833
-version: 10
+version: 11
date: '2025-02-10'
author: Michael Haag, David Dorsey, Splunk
status: production
@@ -18,11 +18,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` values(Processes.process) as process
min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
- where `process_rundll32` by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.original_file_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | where match(process,"rundll32.+\#\d+") |
- `rundll_loading_dll_by_ordinal_filter`'
+ where `process_rundll32` by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | where
+ match(process,"rundll32.+\#\d+") | `rundll_loading_dll_by_ordinal_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -81,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/ordinal_windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/ordinal_windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/ryuk_test_files_detected.yml b/detections/endpoint/ryuk_test_files_detected.yml
index e2fdf3bd6c..0156fd6b54 100644
--- a/detections/endpoint/ryuk_test_files_detected.yml
+++ b/detections/endpoint/ryuk_test_files_detected.yml
@@ -1,6 +1,6 @@
name: Ryuk Test Files Detected
id: 57d44d70-28d9-4ed1-acf5-1c80ae2bbce3
-version: 4
+version: 5
date: '2024-11-13'
author: Rod Soto, Jose Hernandez, Splunk
status: production
@@ -17,8 +17,11 @@ data_source:
- Sysmon EventID 11
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Filesystem WHERE "Filesystem.file_path"=C:\\*Ryuk*
- BY "Filesystem.dest", "Filesystem.user", "Filesystem.file_path" | `drop_dm_object_name(Filesystem)`
- | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `ryuk_test_files_detected_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `ryuk_test_files_detected_filter`'
how_to_implement: You must be ingesting data that records the filesystem activity
from your hosts to populate the Endpoint Filesystem data-model object. If you are
using Sysmon, you will need a Splunk Universal Forwarder on each endpoint from which
@@ -64,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ryuk/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/ryuk/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/ryuk_wake_on_lan_command.yml b/detections/endpoint/ryuk_wake_on_lan_command.yml
index 4bfc808d08..d47ad551ef 100644
--- a/detections/endpoint/ryuk_wake_on_lan_command.yml
+++ b/detections/endpoint/ryuk_wake_on_lan_command.yml
@@ -1,6 +1,6 @@
name: Ryuk Wake on LAN Command
id: 538d0152-7aaa-11eb-beaa-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process="*8 LAN*"
- OR Processes.process="*9 REP*") by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
- | `ryuk_wake_on_lan_command_filter`'
+ OR Processes.process="*9 REP*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `ryuk_wake_on_lan_command_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.003/ryuk/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.003/ryuk/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/samsam_test_file_write.yml b/detections/endpoint/samsam_test_file_write.yml
index 25bc5a6808..173c7a8881 100644
--- a/detections/endpoint/samsam_test_file_write.yml
+++ b/detections/endpoint/samsam_test_file_write.yml
@@ -1,6 +1,6 @@
name: Samsam Test File Write
id: 493a879d-519d-428f-8f57-a06a0fdc107e
-version: 4
+version: 5
date: '2024-11-13'
author: Rico Valdez, Splunk
status: production
@@ -18,8 +18,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime values(Filesystem.user) as user values(Filesystem.dest) as dest values(Filesystem.file_name)
as file_name from datamodel=Endpoint.Filesystem where Filesystem.file_path=*\\windows\\system32\\test.txt
- by Filesystem.file_path | `drop_dm_object_name(Filesystem)` | `security_content_ctime(lastTime)`
- | `security_content_ctime(firstTime)` | `samsam_test_file_write_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `samsam_test_file_write_filter`'
how_to_implement: You must be ingesting data that records the file-system activity
from your hosts to populate the Endpoint file-system data-model node. If you are
using Sysmon, you will need a Splunk Universal Forwarder on each endpoint from which
@@ -64,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1486/sam_sam_note/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1486/sam_sam_note/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/sc_exe_manipulating_windows_services.yml b/detections/endpoint/sc_exe_manipulating_windows_services.yml
index d08cad9a5b..9eb470e3b0 100644
--- a/detections/endpoint/sc_exe_manipulating_windows_services.yml
+++ b/detections/endpoint/sc_exe_manipulating_windows_services.yml
@@ -1,6 +1,6 @@
name: Sc exe Manipulating Windows Services
id: f0c693d8-2a89-4ce7-80b4-98fea4c3ea6d
-version: 9
+version: 10
date: '2025-02-10'
author: Rico Valdez, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` values(Processes.process) as process
min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
where Processes.process_name = sc.exe (Processes.process="* create *" OR Processes.process="*
- config *") by Processes.process_name Processes.parent_process_name Processes.dest
- Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `sc_exe_manipulating_windows_services_filter`'
+ config *") by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `sc_exe_manipulating_windows_services_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -84,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1543.003/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1543.003/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/schcache_change_by_app_connect_and_create_adsi_object.yml b/detections/endpoint/schcache_change_by_app_connect_and_create_adsi_object.yml
index 1d84e7384b..59d238eeea 100644
--- a/detections/endpoint/schcache_change_by_app_connect_and_create_adsi_object.yml
+++ b/detections/endpoint/schcache_change_by_app_connect_and_create_adsi_object.yml
@@ -1,6 +1,6 @@
name: SchCache Change By App Connect And Create ADSI Object
id: 991eb510-0fc6-11ec-82d3-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,11 +15,15 @@ description: The following analytic detects an application attempting to connect
within the network.
data_source:
- Sysmon EventID 11
-search: '`sysmon` EventCode=11 TargetFilename = "*\\Windows\\SchCache\\*" TargetFilename
- = "*.sch*" NOT (Image IN ("*\\Windows\\system32\\mmc.exe")) |stats count min(_time)
- as firstTime max(_time) as lastTime by Image TargetFilename EventCode process_id process_name
- dest | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `schcache_change_by_app_connect_and_create_adsi_object_filter`'
+search: |-
+ `sysmon` EventCode=11 TargetFilename = "*\\Windows\\SchCache\\*" TargetFilename
+ = "*.sch*" NOT (Image IN ("*\\Windows\\system32\\mmc.exe"))
+ | stats count min(_time)
+ as firstTime max(_time) as lastTime by action dest file_name file_path process_guid
+ process_id user_id vendor_product process_name
+ | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)`
+ | `schcache_change_by_app_connect_and_create_adsi_object_filter`
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
@@ -44,7 +48,7 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: process $Image$ create a file $TargetFilename$ in host $dest$
+ message: Process $process_name$ created a file $file_name$ on host $dest$
risk_objects:
- field: dest
type: system
@@ -64,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/blackmatter_schcache/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087.002/blackmatter_schcache/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/scheduled_task_creation_on_remote_endpoint_using_at.yml b/detections/endpoint/scheduled_task_creation_on_remote_endpoint_using_at.yml
index f23eb706b0..3119d1ae64 100644
--- a/detections/endpoint/scheduled_task_creation_on_remote_endpoint_using_at.yml
+++ b/detections/endpoint/scheduled_task_creation_on_remote_endpoint_using_at.yml
@@ -1,6 +1,6 @@
name: Scheduled Task Creation on Remote Endpoint using At
id: 4be54858-432f-11ec-8209-3e22fbd008af
-version: 6
+version: 7
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=at.exe
- OR Processes.original_file_name=at.exe) (Processes.process=*\\\\*) by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `scheduled_task_creation_on_remote_endpoint_using_at_filter`'
+ OR Processes.original_file_name=at.exe) (Processes.process=*\\\\*) by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `scheduled_task_creation_on_remote_endpoint_using_at_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.002/lateral_movement/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.002/lateral_movement/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/scheduled_task_deleted_or_created_via_cmd.yml b/detections/endpoint/scheduled_task_deleted_or_created_via_cmd.yml
index f8dd98ccb9..91961eeebd 100644
--- a/detections/endpoint/scheduled_task_deleted_or_created_via_cmd.yml
+++ b/detections/endpoint/scheduled_task_deleted_or_created_via_cmd.yml
@@ -1,7 +1,7 @@
name: Scheduled Task Deleted Or Created via CMD
id: d5af132c-7c17-439c-9d31-13d55340f36c
-version: '13'
-date: '2025-02-24'
+version: 14
+date: '2025-03-27'
author: Bhavin Patel, Splunk
status: production
type: TTP
@@ -20,9 +20,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process)
as process values(Processes.parent_process) as parent_process min(_time) as firstTime
max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_name=schtasks.exe
- (Processes.process=*delete* OR Processes.process=*create*) by Processes.user Processes.process_name
- Processes.parent_process_name Processes.dest | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `scheduled_task_deleted_or_created_via_cmd_filter`'
+ (Processes.process=*delete* OR Processes.process=*create*) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `scheduled_task_deleted_or_created_via_cmd_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/scheduled_task_initiation_on_remote_endpoint.yml b/detections/endpoint/scheduled_task_initiation_on_remote_endpoint.yml
index e6122cd10f..dd331b984e 100644
--- a/detections/endpoint/scheduled_task_initiation_on_remote_endpoint.yml
+++ b/detections/endpoint/scheduled_task_initiation_on_remote_endpoint.yml
@@ -19,9 +19,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=schtasks.exe
OR Processes.original_file_name=schtasks.exe) (Processes.process= "* /S *" AND Processes.process=*/run*)
- by Processes.dest Processes.user Processes.parent_process_name Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `scheduled_task_initiation_on_remote_endpoint_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ | `scheduled_task_initiation_on_remote_endpoint_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.005/lateral_movement/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.005/lateral_movement/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/schtasks_run_task_on_demand.yml b/detections/endpoint/schtasks_run_task_on_demand.yml
index 189d728507..ed057e794e 100644
--- a/detections/endpoint/schtasks_run_task_on_demand.yml
+++ b/detections/endpoint/schtasks_run_task_on_demand.yml
@@ -1,6 +1,6 @@
name: Schtasks Run Task On Demand
id: bb37061e-af1f-11eb-a159-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -21,9 +21,13 @@ data_source:
search: '| tstats `security_content_summariesonly` values(Processes.process) as process
values(Processes.process_id) as process_id count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "schtasks.exe"
- Processes.process = "*/run*" by Processes.process_name Processes.parent_process_name
- Processes.dest Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `schtasks_run_task_on_demand_filter`'
+ Processes.process = "*/run*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `schtasks_run_task_on_demand_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -82,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/xmrig_miner/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/schtasks_scheduling_job_on_remote_system.yml b/detections/endpoint/schtasks_scheduling_job_on_remote_system.yml
index 48b5d1fa98..104fda64cd 100644
--- a/detections/endpoint/schtasks_scheduling_job_on_remote_system.yml
+++ b/detections/endpoint/schtasks_scheduling_job_on_remote_system.yml
@@ -1,6 +1,6 @@
name: Schtasks scheduling job on remote system
id: 1297fb80-f42a-4b4a-9c8a-88c066237cf6
-version: 12
+version: 13
date: '2025-02-10'
author: David Dorsey, Mauricio Velazco, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name = schtasks.exe
OR Processes.original_file_name=schtasks.exe) (Processes.process="*/create*" AND
- Processes.process="*/s*") by Processes.process_name Processes.process Processes.parent_process_name
- Processes.dest Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `schtasks_scheduling_job_on_remote_system_filter`'
+ Processes.process="*/s*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `schtasks_scheduling_job_on_remote_system_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -84,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.005/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.005/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/schtasks_used_for_forcing_a_reboot.yml b/detections/endpoint/schtasks_used_for_forcing_a_reboot.yml
index ff5ff09caa..d9f6109f8d 100644
--- a/detections/endpoint/schtasks_used_for_forcing_a_reboot.yml
+++ b/detections/endpoint/schtasks_used_for_forcing_a_reboot.yml
@@ -1,6 +1,6 @@
name: Schtasks used for forcing a reboot
id: 1297fb80-f42a-4b4a-9c8a-88c066437cf6
-version: 9
+version: 10
date: '2025-02-10'
author: Bhavin Patel, Splunk
status: production
@@ -20,7 +20,11 @@ data_source:
search: '| tstats `security_content_summariesonly` values(Processes.process) as process
min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
where Processes.process_name=schtasks.exe Processes.process="*shutdown*" Processes.process="*/create
- *" by Processes.process_name Processes.parent_process_name Processes.dest Processes.user
+ *" by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `schtasks_used_for_forcing_a_reboot_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -77,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.005/schtask_shutdown/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.005/schtask_shutdown/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/screensaver_event_trigger_execution.yml b/detections/endpoint/screensaver_event_trigger_execution.yml
index e158fff091..9ffb31f772 100644
--- a/detections/endpoint/screensaver_event_trigger_execution.yml
+++ b/detections/endpoint/screensaver_event_trigger_execution.yml
@@ -1,6 +1,6 @@
name: Screensaver Event Trigger Execution
id: 58cea3ec-1f6d-11ec-8560-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,8 +17,10 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
max(_time) as lastTime FROM datamodel=Endpoint.Registry where (Registry.registry_path="*\\Control
- Panel\\Desktop\\SCRNSAVE.EXE*") by Registry.dest Registry.user Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name | `security_content_ctime(lastTime)`
+ Panel\\Desktop\\SCRNSAVE.EXE*") by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `security_content_ctime(lastTime)`
| `security_content_ctime(firstTime)` | `drop_dm_object_name(Registry)` | `screensaver_event_trigger_execution_filter`'
how_to_implement: To successfully implement this search, you must be ingesting data
that records registry activity from your hosts to populate the endpoint data model
@@ -72,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.002/scrnsave_reg/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.002/scrnsave_reg/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/script_execution_via_wmi.yml b/detections/endpoint/script_execution_via_wmi.yml
index 3e4e7d0663..fba0c46299 100644
--- a/detections/endpoint/script_execution_via_wmi.yml
+++ b/detections/endpoint/script_execution_via_wmi.yml
@@ -1,6 +1,6 @@
name: Script Execution via WMI
id: aa73f80d-d728-4077-b226-81ea0c8be589
-version: 7
+version: 8
date: '2024-11-13'
author: Rico Valdez, Michael Haag, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=scrcons.exe
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `script_execution_via_wmi_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `script_execution_via_wmi_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/execution_scrcons/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1047/execution_scrcons/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/sdclt_uac_bypass.yml b/detections/endpoint/sdclt_uac_bypass.yml
index c6c89c02b0..3e0c8ae436 100644
--- a/detections/endpoint/sdclt_uac_bypass.yml
+++ b/detections/endpoint/sdclt_uac_bypass.yml
@@ -1,6 +1,6 @@
name: Sdclt UAC Bypass
id: d71efbf6-da63-11eb-8c6e-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Steven Dick, Teoderick Contreras, Splunk
status: production
@@ -14,24 +14,17 @@ description: The following analytic detects suspicious modifications to the sdcl
privilege escalation, and potential persistence within the environment, posing a
severe security risk.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
- Sysmon EventID 12
- Sysmon EventID 13
-search: '| tstats `security_content_summariesonly` count min(_time) AS firstTime max(_time)
- AS lastTime FROM datamodel=Endpoint.Processes BY _time span=1h Processes.user Processes.process_id
- Processes.process_name Processes.process Processes.process_path Processes.dest Processes.parent_process_name
- Processes.parent_process Processes.process_guid | `drop_dm_object_name(Processes)`
- | join process_guid [ | tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
+search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
WHERE ((Registry.registry_path= "*\\Windows\\CurrentVersion\\App Paths\\control.exe*"
OR Registry.registry_path= "*\\exefile\\shell\\runas\\command\\*") (Registry.registry_value_name
- = "(Default)" OR Registry.registry_value_name = "IsolatedCommand")) BY _time span=1h
- Registry.registry_path Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)`] | fields firstTime lastTime
- dest user parent_process_name parent_process process_name process_path process registry_key_name
- registry_path registry_value_name registry_value_data process_guid | where isnotnull(registry_value_data)
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `sdclt_uac_bypass_filter`'
+ = "(Default)" OR Registry.registry_value_name = "IsolatedCommand")) by Registry.action
+ Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path
+ Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
+ | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `sdclt_uac_bypass_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -83,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/uac_bypass/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/uac_bypass/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/sdelete_application_execution.yml b/detections/endpoint/sdelete_application_execution.yml
index 10aefc21a4..47e81ad9f6 100644
--- a/detections/endpoint/sdelete_application_execution.yml
+++ b/detections/endpoint/sdelete_application_execution.yml
@@ -1,6 +1,6 @@
name: Sdelete Application Execution
id: 31702fc0-2682-11ec-85c3-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -20,10 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` values(Processes.process) as process
values(Processes.parent_process) as parent_process values(Processes.process_id)
as process_id count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
- where `process_sdelete` by Processes.process_name Processes.original_file_name
- Processes.dest Processes.user Processes.parent_process_name Processes.parent_process
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `sdelete_application_execution_filter`'
+ where `process_sdelete` by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `sdelete_application_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +78,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/sdelete/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1485/sdelete/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/searchprotocolhost_with_no_command_line_with_network.yml b/detections/endpoint/searchprotocolhost_with_no_command_line_with_network.yml
index fc8584a30d..8f0ba79412 100644
--- a/detections/endpoint/searchprotocolhost_with_no_command_line_with_network.yml
+++ b/detections/endpoint/searchprotocolhost_with_no_command_line_with_network.yml
@@ -1,6 +1,6 @@
name: SearchProtocolHost with no Command Line with Network
id: b690df8c-a145-11eb-a38b-acde48001122
-version: 7
+version: 8
date: '2024-12-10'
author: Michael Haag, Splunk
status: production
@@ -15,15 +15,37 @@ description: The following analytic detects instances of searchprotocolhost.exe
and control, potentially leading to data exfiltration or further system compromise.
data_source:
- Sysmon EventID 1 AND Sysmon EventID 3
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name=searchprotocolhost.exe by _time span=1h Processes.process_id
- Processes.process_name Processes.dest Processes.process_path Processes.process Processes.parent_process_name
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | regex process="(?i)(searchprotocolhost\.exe.{0,4}$)" | join process_id [| tstats
- `security_content_summariesonly` count FROM datamodel=Network_Traffic.All_Traffic
- where All_Traffic.dest_port != 0 by All_Traffic.process_id All_Traffic.dest All_Traffic.dest_port
- | `drop_dm_object_name(All_Traffic)` | rename dest as C2 ] | table _time dest parent_process_name
- process_name process_path process process_id dest_port C2 | `searchprotocolhost_with_no_command_line_with_network_filter`'
+search: '| tstats prestats=t `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
+ where Processes.process_name=searchprotocolhost.exe by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | tstats prestats=t append=t `security_content_summariesonly`
+ count min(_time) as firstTime max(_time) as lastTime from datamodel=Network_Traffic.All_Traffic
+ where All_Traffic.dest_port != 0 by All_Traffic.action All_Traffic.app All_Traffic.dest
+ All_Traffic.dest_ip All_Traffic.dest_port All_Traffic.direction All_Traffic.dvc
+ All_Traffic.protocol All_Traffic.protocol_version All_Traffic.src All_Traffic.src_ip
+ All_Traffic.src_port All_Traffic.transport All_Traffic.user All_Traffic.vendor_product
+ All_Traffic.process_id | `drop_dm_object_name(All_Traffic)` | table action dest
+ original_file_name parent_process parent_process_exec parent_process_guid parent_process_id
+ parent_process_name parent_process_path process process_exec process_guid process_hash
+ process_id process_integrity_level process_name process_path user user_id vendor_product
+ app dest_ip dest_port direction dvc protocol protocol_version src src_ip src_port
+ transport | stats values(action) as action values(dest) as dest values(original_file_name)
+ as original_file_name values(parent_process) as parent_process values(parent_process_exec)
+ as parent_process_exec values(parent_process_guid) as parent_process_guid values(parent_process_id)
+ as parent_process_id values(parent_process_name) as parent_process_name values(parent_process_path)
+ as parent_process_path values(process) as process values(process_exec) as process_exec
+ values(process_hash) as process_hash values(process_guid) as process_guid values(process_integrity_level)
+ as process_integrity_level values(process_name) as process_name values(process_path)
+ as process_path values(user) as user values(user_id) as user_id values(vendor_product)
+ as vendor_product values(app) as app values(dest_ip) as dest_ip values(dest_port)
+ as dest_port values(direction) as direction values(dvc) as dvc values(protocol)
+ as protocol values(protocol_version) as protocol_version values(src) as src values(src_ip)
+ as src_ip values(src_port) as src_port values(transport) as transport by process_id
+ | where isnotnull(process_name) AND isnotnull(dest_port) | `searchprotocolhost_with_no_command_line_with_network_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -78,7 +100,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon_searchprotocolhost.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon_searchprotocolhost.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/secretdumps_offline_ntds_dumping_tool.yml b/detections/endpoint/secretdumps_offline_ntds_dumping_tool.yml
index fb76934525..c65492da7e 100644
--- a/detections/endpoint/secretdumps_offline_ntds_dumping_tool.yml
+++ b/detections/endpoint/secretdumps_offline_ntds_dumping_tool.yml
@@ -1,6 +1,6 @@
name: SecretDumps Offline NTDS Dumping Tool
id: 5672819c-be09-11eb-bbfb-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -21,10 +21,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = "python*.exe"
Processes.process = "*.py*" Processes.process = "*-ntds*" (Processes.process = "*-system*"
OR Processes.process = "*-sam*" OR Processes.process = "*-security*" OR Processes.process
- = "*-bootkey*") by Processes.process_name Processes.process Processes.parent_process_name
- Processes.parent_process Processes.dest Processes.user Processes.process_id Processes.process_guid
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `secretdumps_offline_ntds_dumping_tool_filter`'
+ = "*-bootkey*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `secretdumps_offline_ntds_dumping_tool_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -79,7 +82,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/honeypots/casper/datasets1/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/honeypots/casper/datasets1/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/serviceprincipalnames_discovery_with_powershell.yml b/detections/endpoint/serviceprincipalnames_discovery_with_powershell.yml
index c584719964..568cc0f475 100644
--- a/detections/endpoint/serviceprincipalnames_discovery_with_powershell.yml
+++ b/detections/endpoint/serviceprincipalnames_discovery_with_powershell.yml
@@ -1,6 +1,6 @@
name: ServicePrincipalNames Discovery with PowerShell
id: 13243068-2d38-11ec-8908-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -15,9 +15,10 @@ description: The following analytic detects the use of `powershell.exe` to query
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText="*KerberosRequestorSecurityToken*"
- | stats count min(_time) as firstTime max(_time) as lastTime by ScriptBlockText
- Opcode Computer UserID EventCode | rename Computer as dest | rename UserID as user
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `serviceprincipalnames_discovery_with_powershell_filter`'
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `serviceprincipalnames_discovery_with_powershell_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -38,12 +39,12 @@ references:
- https://static1.squarespace.com/static/552092d5e4b0661088167e5c/t/59c1814829f18782e24f1fe2/1505853768977/Windows+PowerShell+Logging+Cheat+Sheet+ver+Sept+2017+v2.1.pdf
- https://www.crowdstrike.com/blog/investigating-powershell-command-and-script-logging/
drilldown_searches:
-- name: View the detection results for - "$user$" and "$dest$"
- search: '%original_detection_search% | search user = "$user$" dest = "$dest$"'
+- name: View the detection results for - "$user_id$" and "$dest$"
+ search: '%original_detection_search% | search user_id = "$user_id$" dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
-- name: View risk events for the last 7 days for - "$user$" and "$dest$"
- search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user$",
+- name: View risk events for the last 7 days for - "$user_id$" and "$dest$"
+ search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$user_id$",
"$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)
@@ -55,7 +56,7 @@ rba:
message: An instance of attempting to identify service principle detected on $dest$
names.
risk_objects:
- - field: user
+ - field: user_id
type: user
score: 80
- field: dest
@@ -79,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/sbl_xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/serviceprincipalnames_discovery_with_setspn.yml b/detections/endpoint/serviceprincipalnames_discovery_with_setspn.yml
index 1abd21eb3c..3cbff7af05 100644
--- a/detections/endpoint/serviceprincipalnames_discovery_with_setspn.yml
+++ b/detections/endpoint/serviceprincipalnames_discovery_with_setspn.yml
@@ -1,6 +1,6 @@
name: ServicePrincipalNames Discovery with SetSPN
id: ae8b3efc-2d2e-11ec-8b57-acde48001122
-version: 7
+version: 8
date: '2024-12-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_setspn` (Processes.process="*-t*"
AND Processes.process="*-f*") OR (Processes.process="*-q*" AND Processes.process="**/**")
- OR (Processes.process="*-q*") OR (Processes.process="*-s*") by Processes.dest Processes.user
- Processes.parent_process_name Processes.process_name Processes.original_file_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `serviceprincipalnames_discovery_with_setspn_filter`'
+ OR (Processes.process="*-q*") OR (Processes.process="*-s*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
+ `serviceprincipalnames_discovery_with_setspn_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -90,7 +94,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1558.003/atomic_red_team/windows-sysmon_setspn.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1558.003/atomic_red_team/windows-sysmon_setspn.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/services_escalate_exe.yml b/detections/endpoint/services_escalate_exe.yml
index dcfbd904f1..125ed133e1 100644
--- a/detections/endpoint/services_escalate_exe.yml
+++ b/detections/endpoint/services_escalate_exe.yml
@@ -1,6 +1,6 @@
name: Services Escalate Exe
id: c448488c-b7ec-11eb-8253-acde48001122
-version: 6
+version: 7
date: '2024-12-10'
author: Michael Haag, Splunk
status: production
@@ -19,9 +19,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=services.exe
- Processes.process_path=*admin$* by Processes.process_path Processes.dest Processes.user
- Processes.parent_process_name Processes.parent_process Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
+ Processes.process_path=*admin$* by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `services_escalate_exe_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -81,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/services_lolbas_execution_process_spawn.yml b/detections/endpoint/services_lolbas_execution_process_spawn.yml
index 50ab6ea4fd..22cd55a917 100644
--- a/detections/endpoint/services_lolbas_execution_process_spawn.yml
+++ b/detections/endpoint/services_lolbas_execution_process_spawn.yml
@@ -1,6 +1,6 @@
name: Services LOLBAS Execution Process Spawn
id: ba9e1954-4c04-11ec-8b74-3e22fbd008af
-version: 5
+version: 6
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -29,10 +29,14 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
"Mavinject.exe", "Regasm.exe", "Gpscript.exe", "Rundll32.exe", "Regsvr32.exe", "Msiexec.exe",
"Wuauclt.exe", "Presentationhost.exe", "Wmic.exe", "Runonce.exe", "Syncappvpublishingserver.exe",
"Verclsid.exe", "Infdefaultinstall.exe", "Explorer.exe", "Installutil.exe", "Netsh.exe",
- "Wab.exe", "Dnscmd.exe", "At.exe", "Pcalua.exe", "Msconfig.exe")) by Processes.dest
- Processes.user Processes.parent_process Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `services_lolbas_execution_process_spawn_filter`'
+ "Wab.exe", "Dnscmd.exe", "At.exe", "Pcalua.exe", "Msconfig.exe")) by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `services_lolbas_execution_process_spawn_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -86,7 +90,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1543.003/lateral_movement_lolbas/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1543.003/lateral_movement_lolbas/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/set_default_powershell_execution_policy_to_unrestricted_or_bypass.yml b/detections/endpoint/set_default_powershell_execution_policy_to_unrestricted_or_bypass.yml
index 071b4ea163..a7e3bbd35a 100644
--- a/detections/endpoint/set_default_powershell_execution_policy_to_unrestricted_or_bypass.yml
+++ b/detections/endpoint/set_default_powershell_execution_policy_to_unrestricted_or_bypass.yml
@@ -1,7 +1,7 @@
name: Set Default PowerShell Execution Policy To Unrestricted or Bypass
id: c2590137-0b08-4985-9ec5-6ae23d92f63d
-version: 14
-date: '2025-02-28'
+version: 15
+date: '2025-03-27'
author: Steven Dick, Patrick Bareiss, Splunk
status: production
type: TTP
@@ -13,23 +13,15 @@ description: The following analytic detects changes to the PowerShell ExecutionP
confirmed malicious, this could enable an attacker to execute arbitrary code, leading
to further compromise of the system and potential escalation of privileges.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
- Sysmon EventID 12
- Sysmon EventID 13
-search: '| tstats `security_content_summariesonly` count min(_time) AS firstTime max(_time)
- AS lastTime FROM datamodel=Endpoint.Processes BY _time span=1h Processes.user Processes.process_id
- Processes.process_name Processes.process Processes.process_path Processes.dest Processes.parent_process_name
- Processes.parent_process Processes.process_guid | `drop_dm_object_name(Processes)`
- | join process_guid [ | tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
+search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
WHERE (Registry.registry_path=*Software\\Microsoft\\Powershell\\1\\ShellIds\\Microsoft.PowerShell*
Registry.registry_value_name=ExecutionPolicy (Registry.registry_value_data=Unrestricted
- OR Registry.registry_value_data=Bypass)) BY _time span=1h Registry.registry_path
- Registry.registry_key_name Registry.registry_value_name Registry.registry_value_data
- Registry.process_guid | `drop_dm_object_name(Registry)`] | fields firstTime lastTime
- dest user parent_process_name parent_process process_name process_path process registry_key_name
- registry_path registry_value_name registry_value_data process_guid | where isnotnull(registry_value_data)
+ OR Registry.registry_value_data=Bypass)) by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `set_default_powershell_execution_policy_to_unrestricted_or_bypass_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -89,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_execution_policy/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_execution_policy/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/shim_database_file_creation.yml b/detections/endpoint/shim_database_file_creation.yml
index 21bd64b76b..74e21fdc98 100644
--- a/detections/endpoint/shim_database_file_creation.yml
+++ b/detections/endpoint/shim_database_file_creation.yml
@@ -1,6 +1,6 @@
name: Shim Database File Creation
id: 6e4c4588-ba2f-42fa-97e6-9f6f548eaa33
-version: 8
+version: 9
date: '2025-02-10'
author: David Dorsey, Splunk
status: production
@@ -17,8 +17,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Filesystem.action)
values(Filesystem.file_hash) as file_hash values(Filesystem.file_path) as file_path min(_time)
as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path=*Windows\\AppPatch\\Custom*
- by Filesystem.file_name Filesystem.dest | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`
- |`drop_dm_object_name(Filesystem)` | `shim_database_file_creation_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `security_content_ctime(lastTime)` |
+ `security_content_ctime(firstTime)` |`drop_dm_object_name(Filesystem)` | `shim_database_file_creation_filter`'
how_to_implement: You must be ingesting data that records the filesystem activity
from your hosts to populate the Endpoint file-system data model node. If you are
using Sysmon, you will need a Splunk Universal Forwarder on each endpoint from which
@@ -64,7 +67,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.011/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.011/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/shim_database_installation_with_suspicious_parameters.yml b/detections/endpoint/shim_database_installation_with_suspicious_parameters.yml
index 37302453aa..7879ac2b79 100644
--- a/detections/endpoint/shim_database_installation_with_suspicious_parameters.yml
+++ b/detections/endpoint/shim_database_installation_with_suspicious_parameters.yml
@@ -1,6 +1,6 @@
name: Shim Database Installation With Suspicious Parameters
id: 404620de-46d8-48b6-90cc-8a8d7b0876a3
-version: 9
+version: 10
date: '2025-02-10'
author: David Dorsey, Splunk
status: production
@@ -20,9 +20,14 @@ data_source:
search: '| tstats `security_content_summariesonly` values(Processes.process) as process
min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
where Processes.process_name = sdbinst.exe NOT Processes.process IN ("\"C:\\Windows\\System32\\sdbinst.exe\"",
- "C:\\Windows\\System32\\sdbinst.exe", "*-mm", "*-?", "*-m -bg") by Processes.process_name
- Processes.parent_process_name Processes.dest Processes.user | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `shim_database_installation_with_suspicious_parameters_filter`'
+ "C:\\Windows\\System32\\sdbinst.exe", "*-mm", "*-?", "*-m -bg") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `shim_database_installation_with_suspicious_parameters_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.011/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.011/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/silentcleanup_uac_bypass.yml b/detections/endpoint/silentcleanup_uac_bypass.yml
index a18bda03a1..0c7e56afe0 100644
--- a/detections/endpoint/silentcleanup_uac_bypass.yml
+++ b/detections/endpoint/silentcleanup_uac_bypass.yml
@@ -1,6 +1,6 @@
name: SilentCleanup UAC Bypass
id: 56d7cfcc-da63-11eb-92d4-acde48001122
-version: 7
+version: 8
date: '2025-02-10'
author: Steven Dick, Teoderick Contreras, Splunk
status: production
@@ -14,22 +14,14 @@ description: The following analytic detects suspicious modifications to the regi
this could lead to unauthorized administrative access, enabling further system compromise
and persistence.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
- Sysmon EventID 12
- Sysmon EventID 13
-search: '| tstats `security_content_summariesonly` count min(_time) AS firstTime max(_time)
- AS lastTime FROM datamodel=Endpoint.Processes BY _time span=1h Processes.user Processes.process_id
- Processes.process_name Processes.process Processes.process_path Processes.dest Processes.parent_process_name
- Processes.parent_process Processes.process_guid | `drop_dm_object_name(Processes)`
- | join process_guid [ | tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
+search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Registry
WHERE (Registry.registry_path= "*\\Environment\\windir" Registry.registry_value_data
- = "*.exe*") BY _time span=1h Registry.registry_path Registry.registry_key_name Registry.registry_value_name
- Registry.registry_value_data Registry.process_guid | `drop_dm_object_name(Registry)`]
- | fields firstTime lastTime dest user parent_process_name parent_process process_name
- process_path process registry_key_name registry_path registry_value_name registry_value_data
- process_guid | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)`
+ = "*.exe*") by Registry.action Registry.dest Registry.process_guid Registry.process_id
+ Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data
+ Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user
+ Registry.vendor_product | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `silentcleanup_uac_bypass_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -82,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/uac_bypass/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/uac_bypass/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/single_letter_process_on_endpoint.yml b/detections/endpoint/single_letter_process_on_endpoint.yml
index 8c6caa9566..b41d166e23 100644
--- a/detections/endpoint/single_letter_process_on_endpoint.yml
+++ b/detections/endpoint/single_letter_process_on_endpoint.yml
@@ -1,6 +1,6 @@
name: Single Letter Process On Endpoint
id: a4214f0b-e01c-41bc-8cc4-d2b71e3056b4
-version: 8
+version: 9
date: '2025-02-10'
author: David Dorsey, Splunk
status: production
@@ -19,12 +19,15 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes by Processes.dest, Processes.user,
- Processes.process, Processes.process_name | `drop_dm_object_name(Processes)` | `security_content_ctime(lastTime)`
- | `security_content_ctime(firstTime)` | eval process_name_length = len(process_name),
- endExe = if(substr(process_name, -4) == ".exe", 1, 0) | search process_name_length=5
- AND endExe=1 | table count, firstTime, lastTime, dest, user, process, process_name
- | `single_letter_process_on_endpoint_filter`'
+ as lastTime from datamodel=Endpoint.Processes by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)`
+ | eval process_name_length = len(process_name), endExe = if(substr(process_name,
+ -4) == ".exe", 1, 0) | search process_name_length=5 AND endExe=1 | `single_letter_process_on_endpoint_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1204.002/single_letter_exe/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1204.002/single_letter_exe/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/slui_runas_elevated.yml b/detections/endpoint/slui_runas_elevated.yml
index fccaeca2c1..d3017b42f5 100644
--- a/detections/endpoint/slui_runas_elevated.yml
+++ b/detections/endpoint/slui_runas_elevated.yml
@@ -1,6 +1,6 @@
name: SLUI RunAs Elevated
id: 8d124810-b3e4-11eb-96c7-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=slui.exe
- (Processes.process=*-verb* Processes.process=*runas*) by Processes.dest Processes.user
- Processes.parent_process Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `slui_runas_elevated_filter`'
+ (Processes.process=*-verb* Processes.process=*runas*) by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `slui_runas_elevated_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -81,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/slui/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/slui/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/slui_spawning_a_process.yml b/detections/endpoint/slui_spawning_a_process.yml
index 118a53b0ef..366a743d10 100644
--- a/detections/endpoint/slui_spawning_a_process.yml
+++ b/detections/endpoint/slui_spawning_a_process.yml
@@ -1,6 +1,6 @@
name: SLUI Spawning a Process
id: 879c4330-b3e0-11eb-b1b1-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=slui.exe
- by Processes.dest Processes.user Processes.parent_process_name Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `slui_spawning_a_process_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -79,7 +82,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/slui/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548.002/slui/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/spoolsv_spawning_rundll32.yml b/detections/endpoint/spoolsv_spawning_rundll32.yml
index e65d63e295..355a304e5b 100644
--- a/detections/endpoint/spoolsv_spawning_rundll32.yml
+++ b/detections/endpoint/spoolsv_spawning_rundll32.yml
@@ -1,7 +1,7 @@
name: Spoolsv Spawning Rundll32
id: 15d905f6-da6b-11eb-ab82-acde48001122
-version: '8'
-date: '2025-03-03'
+version: 9
+date: '2025-03-27'
author: Mauricio Velazco, Michael Haag, Splunk
status: production
type: TTP
@@ -20,10 +20,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=spoolsv.exe
- `process_rundll32` by Processes.dest Processes.user Processes.parent_process_name
- Processes.original_file_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `spoolsv_spawning_rundll32_filter`'
+ `process_rundll32` by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `spoolsv_spawning_rundll32_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/spoolsv_suspicious_loaded_modules.yml b/detections/endpoint/spoolsv_suspicious_loaded_modules.yml
index fa3847f8b0..d64d76ce85 100644
--- a/detections/endpoint/spoolsv_suspicious_loaded_modules.yml
+++ b/detections/endpoint/spoolsv_suspicious_loaded_modules.yml
@@ -1,7 +1,7 @@
name: Spoolsv Suspicious Loaded Modules
id: a5e451f8-da81-11eb-b245-acde48001122
-version: '7'
-date: '2025-03-03'
+version: 8
+date: '2025-03-27'
author: Mauricio Velazco, Michael Haag, Teoderick Contreras, Splunk
status: production
type: TTP
@@ -16,8 +16,14 @@ data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode=7 Image ="*\\spoolsv.exe" ImageLoaded="*\\Windows\\System32\\spool\\drivers\\x64\\*"
ImageLoaded = "*.dll" | stats dc(ImageLoaded) as countImgloaded values(ImageLoaded)
- as ImageLoaded count min(_time) as firstTime max(_time) as lastTime by Image Computer
- ProcessId EventCode | rename Computer as dest | where countImgloaded >= 3 | `security_content_ctime(firstTime)`
+ as ImageLoaded values(loaded_file) as loaded_file values(loaded_file_path) as loaded_file_path
+ values(original_file_name) as original_file_name values(process_exec) as process_exec
+ values(process_guid) as process_guid values(process_hash) as process_hash values(process_name)
+ as process_name values(service_dll_signature_exists) as service_dll_signature_exists
+ values(service_dll_signature_verified) as service_dll_signature_verified values(signature)
+ as signature values(signature_id) as signature_id values(user_id) as user_id values(vendor_product)
+ as vendor_product values(Image) as Image count min(_time) as firstTime max(_time) as lastTime by process_path
+ dest process_id | where countImgloaded >= 3 | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `spoolsv_suspicious_loaded_modules_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name and imageloaded executions from your endpoints. If you
@@ -40,7 +46,7 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: $Image$ with process id $ProcessId$ has loaded a driver from $ImageLoaded$
+ message: $Image$ with process id $process_id$ has loaded a driver from $ImageLoaded$
on endpoint $dest$. This behavior is suspicious and related to PrintNightmare.
risk_objects:
- field: dest
diff --git a/detections/endpoint/spoolsv_suspicious_process_access.yml b/detections/endpoint/spoolsv_suspicious_process_access.yml
index 3b7ec83687..de75324a63 100644
--- a/detections/endpoint/spoolsv_suspicious_process_access.yml
+++ b/detections/endpoint/spoolsv_suspicious_process_access.yml
@@ -1,7 +1,7 @@
name: Spoolsv Suspicious Process Access
id: 799b606e-da81-11eb-93f8-acde48001122
-version: '7'
-date: '2025-03-03'
+version: 8
+date: '2025-03-27'
author: Mauricio Velazco, Michael Haag, Teoderick Contreras, Splunk
status: production
type: TTP
@@ -17,9 +17,13 @@ data_source:
- Sysmon EventID 10
search: '`sysmon` EventCode=10 SourceImage = "*\\spoolsv.exe" CallTrace = "*\\Windows\\system32\\spool\\DRIVERS\\x64\\*"
TargetImage IN ("*\\rundll32.exe", "*\\spoolsv.exe") GrantedAccess = 0x1fffff |
- stats count min(_time) as firstTime max(_time) as lastTime by dest SourceImage
- TargetImage GrantedAccess CallTrace EventCode ProcessID| `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `spoolsv_suspicious_process_access_filter`'
+ stats count min(_time) as firstTime max(_time) as lastTime by CallTrace EventID
+ GrantedAccess Guid Opcode ProcessID SecurityID SourceImage SourceProcessGUID SourceProcessId
+ TargetImage TargetProcessGUID TargetProcessId UserID dest granted_access parent_process_exec
+ parent_process_guid parent_process_id parent_process_name parent_process_path process_exec
+ process_guid process_id process_name process_path signature signature_id user_id
+ vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `spoolsv_suspicious_process_access_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with process access event where SourceImage, TargetImage, GrantedAccess and
CallTrace executions from your endpoints. If you are using Sysmon, you must have
diff --git a/detections/endpoint/spoolsv_writing_a_dll.yml b/detections/endpoint/spoolsv_writing_a_dll.yml
index a8fab8f7b0..ac3e2aeaef 100644
--- a/detections/endpoint/spoolsv_writing_a_dll.yml
+++ b/detections/endpoint/spoolsv_writing_a_dll.yml
@@ -1,7 +1,7 @@
name: Spoolsv Writing a DLL
id: d5bf5cf2-da71-11eb-92c2-acde48001122
-version: '8'
-date: '2025-03-03'
+version: 9
+date: '2025-03-27'
author: Mauricio Velazco, Michael Haag, Splunk
status: production
type: TTP
@@ -14,20 +14,40 @@ description: The following analytic detects `spoolsv.exe` writing a `.dll` file,
confirmed malicious, this could lead to unauthorized code execution and potential
system compromise. Immediate endpoint isolation and further investigation are recommended.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
-- Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name=spoolsv.exe by _time Processes.process_guid Processes.process_name
- Processes.dest | `drop_dm_object_name(Processes)` | join process_guid, _time [|
- tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path="*\\spool\\drivers\\x64\\*"
- Filesystem.file_name="*.dll" by _time Filesystem.dest Filesystem.process_guid Filesystem.file_create_time
- Filesystem.file_name Filesystem.file_path | `drop_dm_object_name(Filesystem)` |
- fields _time dest file_create_time file_name file_path process_name process_path
- process_guid process] | dedup file_create_time | table dest file_create_time, file_name,
- file_path, process_name process_guid | `spoolsv_writing_a_dll_filter`'
+- Sysmon EventID 1 AND Sysmon EventID 11
+- Windows Event Log Security 4688 AND Sysmon EventID 11
+search: '| tstats prestats=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes where Processes.process_name=spoolsv.exe
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | tstats prestats=t append=t `security_content_summariesonly`
+ count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
+ where Filesystem.file_path="*\\spool\\drivers\\x64\\*" Filesystem.file_name="*.dll"
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ table action dest original_file_name parent_process parent_process_exec parent_process_guid
+ parent_process_id parent_process_name parent_process_path process process_exec process_guid
+ process_hash process_id process_integrity_level process_name process_path user user_id
+ vendor_product file_access_time file_create_time file_hash file_modify_time file_name
+ file_path file_acl file_size firstTime lastTime | stats values(action) as action
+ values(dest) as dest values(original_file_name) as original_file_name values(parent_process)
+ as parent_process values(parent_process_exec) as parent_process_exec values(parent_process_guid)
+ as parent_process_guid values(parent_process_id) as parent_process_id values(parent_process_name)
+ as parent_process_name values(parent_process_path) as parent_process_path values(process)
+ as process values(process_exec) as process_exec values(process_hash) as process_hash
+ values(process_id) as process_id values(process_integrity_level) as process_integrity_level
+ values(process_name) as process_name values(process_path) as process_path values(user)
+ as user values(user_id) as user_id values(vendor_product) as vendor_product values(file_access_time)
+ as file_access_time values(file_create_time) as file_create_time values(file_hash)
+ as file_hash values(file_modify_time) as file_modify_time values(file_name) as file_name
+ values(file_path) as file_path values(file_acl) as file_acl values(file_size) as
+ file_size by process_guid | where isnotnull(process_name) AND isnotnull(file_name)
+ | `spoolsv_writing_a_dll_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Processes` node and `Filesystem`
diff --git a/detections/endpoint/spoolsv_writing_a_dll___sysmon.yml b/detections/endpoint/spoolsv_writing_a_dll___sysmon.yml
index 3fce3b68aa..04f1f2476a 100644
--- a/detections/endpoint/spoolsv_writing_a_dll___sysmon.yml
+++ b/detections/endpoint/spoolsv_writing_a_dll___sysmon.yml
@@ -1,8 +1,8 @@
name: Spoolsv Writing a DLL - Sysmon
id: 347fd388-da87-11eb-836d-acde48001122
-version: '6'
-date: '2025-03-03'
-author: Mauricio Velazco, Michael Haag, Splunk
+version: '7'
+date: '2025-03-27'
+author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects `spoolsv.exe` writing a `.dll` file, which
@@ -17,8 +17,8 @@ data_source:
- Sysmon EventID 11
search: '`sysmon` EventID=11 process_name=spoolsv.exe file_path="*\\spool\\drivers\\x64\\*"
file_name=*.dll | stats count min(_time) as firstTime max(_time) as lastTime by
- dest, UserID, process_name, file_path, file_name, TargetFilename, process_id | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `spoolsv_writing_a_dll___sysmon_filter`'
+ action dest file_name file_path process_guid process_id user_id vendor_product
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `spoolsv_writing_a_dll___sysmon_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
@@ -44,15 +44,13 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: $process_name$ has been identified writing dll's to $file_path$ on endpoint
+ message: A process has been identified writing dll's to $file_path$ on endpoint
$dest$. This behavior is suspicious and related to PrintNightmare.
risk_objects:
- field: dest
type: system
score: 72
threat_objects:
- - field: process_name
- type: process_name
- field: file_name
type: file_name
tags:
diff --git a/detections/endpoint/sqlite_module_in_temp_folder.yml b/detections/endpoint/sqlite_module_in_temp_folder.yml
index abcf4b35d0..d6476ae1db 100644
--- a/detections/endpoint/sqlite_module_in_temp_folder.yml
+++ b/detections/endpoint/sqlite_module_in_temp_folder.yml
@@ -1,6 +1,6 @@
name: Sqlite Module In Temp Folder
id: 0f216a38-f45f-11eb-b09c-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -16,8 +16,8 @@ data_source:
- Sysmon EventID 11
search: '`sysmon` EventCode=11 (TargetFilename = "*\\sqlite32.dll" OR TargetFilename
= "*\\sqlite64.dll") (TargetFilename = "*\\temp\\*") | stats count min(_time) as
- firstTime max(_time) as lastTime by dest signature signature_id process_name file_name
- file_path action process_guid| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ firstTime max(_time) as lastTime by action dest file_name file_path process_guid
+ process_id user_id vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `sqlite_module_in_temp_folder_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -41,14 +41,12 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Process $process_name$ create a file $file_name$ in host $dest$
+ message: Process creates a file $file_name$ in host $dest$
risk_objects:
- field: dest
type: system
score: 9
- threat_objects:
- - field: process_name
- type: process_name
+ threat_objects: []
tags:
analytic_story:
- IcedID
@@ -63,7 +61,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/simulated_icedid/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/simulated_icedid/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/sunburst_correlation_dll_and_network_event.yml b/detections/endpoint/sunburst_correlation_dll_and_network_event.yml
index 4a2fde1696..5ef3ce8d63 100644
--- a/detections/endpoint/sunburst_correlation_dll_and_network_event.yml
+++ b/detections/endpoint/sunburst_correlation_dll_and_network_event.yml
@@ -1,6 +1,6 @@
name: Sunburst Correlation DLL and Network Event
id: 701a8740-e8db-40df-9190-5516d3819787
-version: 4
+version: 5
date: '2024-11-13'
author: Patrick Bareiss, Splunk
status: experimental
@@ -17,10 +17,11 @@ data_source:
- Sysmon EventID 22
search: (`sysmon` EventCode=7 ImageLoaded=*SolarWinds.Orion.Core.BusinessLayer.dll)
OR (`sysmon` EventCode=22 QueryName=*avsvmcloud.com) | eventstats dc(EventCode)
- AS dc_events | where dc_events=2 | stats min(_time) as firstTime max(_time) as lastTime
- values(ImageLoaded) AS ImageLoaded values(QueryName) AS QueryName by host | rename
- host as dest | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
- | `sunburst_correlation_dll_and_network_event_filter`
+ AS dc_events | where dc_events=2 | 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)` | `sunburst_correlation_dll_and_network_event_filter`
how_to_implement: This detection relies on sysmon logs with the Event ID 7, Driver
loaded. Please tune your sysmon config that you DriverLoad event for SolarWinds.Orion.Core.BusinessLayer.dll
is captured by Sysmon. Additionally, you need sysmon logs for Event ID 22, DNS Query.
diff --git a/detections/endpoint/suspicious_copy_on_system32.yml b/detections/endpoint/suspicious_copy_on_system32.yml
index f7e4fd4845..744ffbb470 100644
--- a/detections/endpoint/suspicious_copy_on_system32.yml
+++ b/detections/endpoint/suspicious_copy_on_system32.yml
@@ -1,7 +1,7 @@
name: Suspicious Copy on System32
id: ce633e56-25b2-11ec-9e76-acde48001122
-version: 7
-date: '2025-02-21'
+version: 8
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: TTP
@@ -21,12 +21,15 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name
IN("cmd.exe", "powershell*","pwsh.exe", "sqlps.exe", "sqltoolsps.exe", "powershell_ise.exe")
AND `process_copy` AND Processes.process IN("*\\Windows\\System32\\*", "*\\Windows\\SysWow64\\*")
- AND Processes.process = "*copy*" by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | eval splitted_commandline=split(process,"
- ") | eval first_cmdline=lower(mvindex(splitted_commandline,0)) | where NOT LIKE(first_cmdline,"%\\windows\\system32\\%")
- AND NOT LIKE(first_cmdline,"%\\windows\\syswow64\\%") | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` |`suspicious_copy_on_system32_filter`'
+ AND Processes.process = "*copy*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | eval splitted_commandline=split(process," ") | eval first_cmdline=lower(mvindex(splitted_commandline,0))
+ | where NOT LIKE(first_cmdline,"%\\windows\\system32\\%") AND NOT LIKE(first_cmdline,"%\\windows\\syswow64\\%")
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` |`suspicious_copy_on_system32_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -84,7 +87,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.003/copy_sysmon/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.003/copy_sysmon/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_curl_network_connection.yml b/detections/endpoint/suspicious_curl_network_connection.yml
index 82b88a7252..eae5a20bd9 100644
--- a/detections/endpoint/suspicious_curl_network_connection.yml
+++ b/detections/endpoint/suspicious_curl_network_connection.yml
@@ -1,6 +1,6 @@
name: Suspicious Curl Network Connection
id: 3f613dc0-21f2-4063-93b1-5d3c15eef22f
-version: 4
+version: 5
date: '2024-11-13'
author: Michael Haag, Splunk
status: experimental
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=curl
- Processes.process=s3.amazonaws.com by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
- | `suspicious_curl_network_connection_filter`'
+ Processes.process=s3.amazonaws.com by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `suspicious_curl_network_connection_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/suspicious_dllhost_no_command_line_arguments.yml b/detections/endpoint/suspicious_dllhost_no_command_line_arguments.yml
index 2a3b40ce3e..398d97df35 100644
--- a/detections/endpoint/suspicious_dllhost_no_command_line_arguments.yml
+++ b/detections/endpoint/suspicious_dllhost_no_command_line_arguments.yml
@@ -1,6 +1,6 @@
name: Suspicious DLLHost no Command Line Arguments
id: ff61e98c-0337-4593-a78f-72a676c56f26
-version: 7
+version: 8
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where `process_dllhost` by _time span=1h Processes.process_id Processes.process_name
- Processes.dest Processes.user Processes.process_path Processes.process Processes.parent_process_name
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | regex process="(?i)(dllhost\.exe.{0,4}$)" | `suspicious_dllhost_no_command_line_arguments_filter`'
+ where `process_dllhost` by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | regex
+ process="(?i)(dllhost\.exe.{0,4}$)" | `suspicious_dllhost_no_command_line_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_gpupdate_no_command_line_arguments.yml b/detections/endpoint/suspicious_gpupdate_no_command_line_arguments.yml
index 9dd5badbbf..a905407a44 100644
--- a/detections/endpoint/suspicious_gpupdate_no_command_line_arguments.yml
+++ b/detections/endpoint/suspicious_gpupdate_no_command_line_arguments.yml
@@ -1,6 +1,6 @@
name: Suspicious GPUpdate no Command Line Arguments
id: f308490a-473a-40ef-ae64-dd7a6eba284a
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where `process_gpupdate` by _time span=1h Processes.process_id Processes.process_name
- Processes.dest Processes.user Processes.process_path Processes.process Processes.parent_process_name
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | regex process="(?i)(gpupdate\.exe.{0,4}$)" | `suspicious_gpupdate_no_command_line_arguments_filter`'
+ where `process_gpupdate` by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | regex
+ process="(?i)(gpupdate\.exe.{0,4}$)" | `suspicious_gpupdate_no_command_line_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +81,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_icedid_rundll32_cmdline.yml b/detections/endpoint/suspicious_icedid_rundll32_cmdline.yml
index 0af0bc7214..67f2c841c9 100644
--- a/detections/endpoint/suspicious_icedid_rundll32_cmdline.yml
+++ b/detections/endpoint/suspicious_icedid_rundll32_cmdline.yml
@@ -1,6 +1,6 @@
name: Suspicious IcedID Rundll32 Cmdline
id: bed761f8-ee29-11eb-8bf3-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,9 +18,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*/i:*
- by Processes.process_name Processes.process Processes.parent_process_name Processes.parent_process
- Processes.process_id Processes.parent_process_id Processes.dest Processes.user |
- `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `suspicious_icedid_rundll32_cmdline_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -73,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_image_creation_in_appdata_folder.yml b/detections/endpoint/suspicious_image_creation_in_appdata_folder.yml
index 101fd0c2cb..9cc0d39dc3 100644
--- a/detections/endpoint/suspicious_image_creation_in_appdata_folder.yml
+++ b/detections/endpoint/suspicious_image_creation_in_appdata_folder.yml
@@ -1,6 +1,6 @@
name: Suspicious Image Creation In Appdata Folder
id: f6f904c4-1ac0-11ec-806b-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -15,17 +15,39 @@ description: The following analytic detects the creation of image files in the A
compromising sensitive information and user privacy.
data_source:
- Sysmon EventID 1 AND Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name=*.exe Processes.process_path="*\\appdata\\Roaming\\*"
- by _time span=1h Processes.process_id Processes.process_name Processes.process Processes.dest
- Processes.process_guid | `drop_dm_object_name(Processes)` |rename process_guid as
- proc_guid |join proc_guid, _time [| tstats `security_content_summariesonly` count
- min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
- where Filesystem.file_name IN ("*.png","*.jpg","*.bmp","*.gif","*.tiff") Filesystem.file_path=
- "*\\appdata\\Roaming\\*" by _time span=1h Filesystem.dest Filesystem.file_create_time
- Filesystem.file_name Filesystem.file_path Filesystem.process_guid | `drop_dm_object_name(Filesystem)`
- |rename process_guid as proc_guid | fields _time dest file_create_time file_name
- file_path process_name process_path process proc_guid] | `suspicious_image_creation_in_appdata_folder_filter`'
+search: '| tstats prestats=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes where Processes.process_name=*.exe
+ Processes.process_path="*\\appdata\\Roaming\\*" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | tstats prestats=t append=t `security_content_summariesonly`
+ count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
+ where Filesystem.file_name IN ("*.png","*.jpg","*.bmp","*.gif","*.tiff") Filesystem.file_path="*\\appdata\\Roaming\\*"
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ table action dest original_file_name parent_process parent_process_exec parent_process_guid
+ parent_process_id parent_process_name parent_process_path process process_exec process_guid
+ process_hash process_id process_integrity_level process_name process_path user user_id
+ vendor_product file_access_time file_create_time file_hash file_modify_time file_name
+ file_path file_acl file_size firstTime lastTime | stats values(action) as action
+ values(dest) as dest values(original_file_name) as original_file_name values(parent_process)
+ as parent_process values(parent_process_exec) as parent_process_exec values(parent_process_guid)
+ as parent_process_guid values(parent_process_id) as parent_process_id values(parent_process_name)
+ as parent_process_name values(parent_process_path) as parent_process_path values(process)
+ as process values(process_exec) as process_exec values(process_hash) as process_hash
+ values(process_id) as process_id values(process_integrity_level) as process_integrity_level
+ values(process_name) as process_name values(process_path) as process_path values(user)
+ as user values(user_id) as user_id values(vendor_product) as vendor_product values(file_access_time)
+ as file_access_time values(file_create_time) as file_create_time values(file_hash)
+ as file_hash values(file_modify_time) as file_modify_time values(file_name) as file_name
+ values(file_path) as file_path values(file_acl) as file_acl values(file_size) as
+ file_size by process_guid | where isnotnull(process_name) AND isnotnull(file_name)
+ | `suspicious_image_creation_in_appdata_folder_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
@@ -71,7 +93,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos_agent/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos_agent/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_linux_discovery_commands.yml b/detections/endpoint/suspicious_linux_discovery_commands.yml
index 4012c6fa6d..b5bd2f3e97 100644
--- a/detections/endpoint/suspicious_linux_discovery_commands.yml
+++ b/detections/endpoint/suspicious_linux_discovery_commands.yml
@@ -1,6 +1,6 @@
name: Suspicious Linux Discovery Commands
id: 0edd5112-56c9-11ec-b990-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Bhavin Patel, Splunk
status: production
@@ -14,17 +14,23 @@ description: The following analytic detects the execution of suspicious bash com
information, identify vulnerabilities, and potentially escalate privileges, posing
a severe threat to the environment.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` count values(Processes.process)
- values(Processes.process_name) values(Processes.parent_process_name) dc(Processes.process)
- as distinct_commands dc(Processes.process_name) as distinct_process_names min(_time)
- as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where [|inputlookup
- linux_tool_discovery_process | rename process as Processes.process |table Processes.process]
- by _time span=5m Processes.user Processes.dest | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| where
- distinct_commands > 40 AND distinct_process_names > 3| `suspicious_linux_discovery_commands_filter`'
+- Sysmon for Linux EventID 1
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
+ as lastTime values(Processes.action) as action values(Processes.original_file_name)
+ as original_file_name values(Processes.parent_process) as parent_process values(Processes.parent_process_exec)
+ as parent_process_exec values(Processes.parent_process_guid) as parent_process_guid
+ values(Processes.parent_process_id) as parent_process_id values(Processes.parent_process_name)
+ as parent_process_name values(Processes.parent_process_path) as parent_process_path
+ values(Processes.process) as process values(Processes.process_exec) as process_exec
+ values(Processes.process_guid) as process_guid values(Processes.process_hash) as
+ process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level)
+ as process_integrity_level values(Processes.process_path) as process_path values(Processes.user_id)
+ as user_id values(Processes.vendor_product) as vendor_product dc(Processes.process)
+ as distinct_commands dc(Processes.process_name) as distinct_process_names from datamodel=Endpoint.Processes
+ where [|inputlookup linux_tool_discovery_process | rename process as Processes.process
+ |table Processes.process] by _time span=5m Processes.user Processes.dest | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | where
+ distinct_commands > 40 AND distinct_process_names > 3 | `suspicious_linux_discovery_commands_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +83,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.004/linux_discovery_tools/sysmon_linux.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.004/linux_discovery_tools/sysmon_linux.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/suspicious_microsoft_workflow_compiler_rename.yml b/detections/endpoint/suspicious_microsoft_workflow_compiler_rename.yml
index 4484fb6321..0f3b36c71c 100644
--- a/detections/endpoint/suspicious_microsoft_workflow_compiler_rename.yml
+++ b/detections/endpoint/suspicious_microsoft_workflow_compiler_rename.yml
@@ -1,6 +1,6 @@
name: Suspicious microsoft workflow compiler rename
id: f0db4464-55d9-11eb-ae93-0242ac130002
-version: 9
+version: 10
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name!=microsoft.workflow.compiler.exe
- AND Processes.original_file_name=Microsoft.Workflow.Compiler.exe by Processes.dest
- Processes.user Processes.parent_process_name Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.original_file_name |
- `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ AND Processes.original_file_name=Microsoft.Workflow.Compiler.exe by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `suspicious_microsoft_workflow_compiler_rename_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -57,7 +60,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_microsoft_workflow_compiler_usage.yml b/detections/endpoint/suspicious_microsoft_workflow_compiler_usage.yml
index 18c7eafe0b..d7f25f34e2 100644
--- a/detections/endpoint/suspicious_microsoft_workflow_compiler_usage.yml
+++ b/detections/endpoint/suspicious_microsoft_workflow_compiler_usage.yml
@@ -1,6 +1,6 @@
name: Suspicious microsoft workflow compiler usage
id: 9bbc62e8-55d8-11eb-ae93-0242ac130002
-version: 5
+version: 6
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -19,9 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_microsoftworkflowcompiler`
- by Processes.dest Processes.parent_process Processes.process_name Processes.original_file_name
- Processes.process Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `suspicious_microsoft_workflow_compiler_usage_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `suspicious_microsoft_workflow_compiler_usage_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -75,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_msbuild_path.yml b/detections/endpoint/suspicious_msbuild_path.yml
index fc2f44999f..c297f11693 100644
--- a/detections/endpoint/suspicious_msbuild_path.yml
+++ b/detections/endpoint/suspicious_msbuild_path.yml
@@ -1,6 +1,6 @@
name: Suspicious msbuild path
id: f5198224-551c-11eb-ae93-0242ac130002
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,7 +19,11 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process_name)
as process_name values(Processes.process) as process min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_msbuild` AND (Processes.process_path!=*\\framework*\\v*\\*)
- by Processes.dest Processes.original_file_name Processes.parent_process Processes.user
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
`suspicious_msbuild_path_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -82,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127.001/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127.001/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_msbuild_rename.yml b/detections/endpoint/suspicious_msbuild_rename.yml
index f9bd30e77d..e93ac70537 100644
--- a/detections/endpoint/suspicious_msbuild_rename.yml
+++ b/detections/endpoint/suspicious_msbuild_rename.yml
@@ -1,6 +1,6 @@
name: Suspicious MSBuild Rename
id: 4006adac-5937-11eb-ae93-0242ac130002
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name!=msbuild.exe
- AND Processes.original_file_name=MSBuild.exe by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- Processes.original_file_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `suspicious_msbuild_rename_filter`'
+ AND Processes.original_file_name=MSBuild.exe by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `suspicious_msbuild_rename_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -58,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127.001/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127.001/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_msbuild_spawn.yml b/detections/endpoint/suspicious_msbuild_spawn.yml
index 897b1fd22e..ae55e276bb 100644
--- a/detections/endpoint/suspicious_msbuild_spawn.yml
+++ b/detections/endpoint/suspicious_msbuild_spawn.yml
@@ -1,6 +1,6 @@
name: Suspicious MSBuild Spawn
id: a115fba6-5514-11eb-ae93-0242ac130002
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process_name)
as process_name values(Processes.process) as process min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=wmiprvse.exe
- AND `process_msbuild` by Processes.dest Processes.parent_process Processes.original_file_name
- Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `suspicious_msbuild_spawn_filter`'
+ AND `process_msbuild` by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `suspicious_msbuild_spawn_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127.001/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1127.001/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_mshta_child_process.yml b/detections/endpoint/suspicious_mshta_child_process.yml
index 7e5a50e44b..c6c8e2f0ce 100644
--- a/detections/endpoint/suspicious_mshta_child_process.yml
+++ b/detections/endpoint/suspicious_mshta_child_process.yml
@@ -1,6 +1,6 @@
name: Suspicious mshta child process
id: 60023bb6-5500-11eb-ae93-0242ac130002
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -17,16 +17,19 @@ data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
-search: '| tstats `security_content_summariesonly` count values(Processes.process_name)
- as process_name values(Processes.process) as process min(_time) as firstTime max(_time)
+search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=mshta.exe
AND (Processes.process_name=powershell.exe OR Processes.process_name=colorcpl.exe
OR Processes.process_name=msbuild.exe OR Processes.process_name=microsoft.workflow.compiler.exe
OR Processes.process_name=searchprotocolhost.exe OR Processes.process_name=scrcons.exe
OR Processes.process_name=cscript.exe OR Processes.process_name=wscript.exe OR Processes.process_name=powershell.exe
- OR Processes.process_name=cmd.exe) by Processes.dest Processes.parent_process Processes.user
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `suspicious_mshta_child_process_filter`'
+ OR Processes.process_name=cmd.exe) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `suspicious_mshta_child_process_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -83,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_mshta_spawn.yml b/detections/endpoint/suspicious_mshta_spawn.yml
index bffd402f2c..3a8d8ea1bb 100644
--- a/detections/endpoint/suspicious_mshta_spawn.yml
+++ b/detections/endpoint/suspicious_mshta_spawn.yml
@@ -1,6 +1,6 @@
name: Suspicious mshta spawn
id: 4d33a488-5b5f-11eb-ae93-0242ac130002
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -20,9 +20,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process_name)
as process_name values(Processes.process) as process min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.parent_process_name=svchost.exe
- OR Processes.parent_process_name=wmiprvse.exe) AND `process_mshta` by Processes.dest
- Processes.parent_process Processes.user Processes.original_file_name| `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `suspicious_mshta_spawn_filter`'
+ OR Processes.parent_process_name=wmiprvse.exe) AND `process_mshta` by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `suspicious_mshta_spawn_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,7 +79,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.005/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_process_executed_from_container_file.yml b/detections/endpoint/suspicious_process_executed_from_container_file.yml
index 61d0e8d0ad..8be239d567 100644
--- a/detections/endpoint/suspicious_process_executed_from_container_file.yml
+++ b/detections/endpoint/suspicious_process_executed_from_container_file.yml
@@ -1,6 +1,6 @@
name: Suspicious Process Executed From Container File
id: d8120352-3b62-411c-8cb6-7b47584dd5e8
-version: 4
+version: 5
date: '2024-11-13'
author: Steven Dick
status: production
@@ -19,8 +19,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process_name)
as process_name min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
where Processes.process IN ("*.ZIP\\*","*.ISO\\*","*.IMG\\*","*.CAB\\*","*.TAR\\*","*.GZ\\*","*.RAR\\*","*.7Z\\*")
- AND Processes.action="allowed" by Processes.dest Processes.parent_process Processes.process
- Processes.user| `drop_dm_object_name(Processes)`| regex process="(?i).*(ZIP|ISO|IMG|CAB|TAR|GZ|RAR|7Z)\\\\.+\.(BAT|BIN|CAB|CMD|COM|CPL|EX_|EXE|GADGET|INF1|INS|INX||HTM|HTML|ISU|JAR|JOB|JS|JSE|LNK|MSC|MSI|MSP|MST|PAF|PIF|PS1|REG|RGS|SCR|SCT|SHB|SHS|U3P|VB|VBE|VBS|VBSCRIPT|WS|WSF|WSH)\"?$"
+ AND Processes.action="allowed" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | regex process="(?i).*(ZIP|ISO|IMG|CAB|TAR|GZ|RAR|7Z)\\\\.+\.(BAT|BIN|CAB|CMD|COM|CPL|EX_|EXE|GADGET|INF1|INS|INX||HTM|HTML|ISU|JAR|JOB|JS|JSE|LNK|MSC|MSI|MSP|MST|PAF|PIF|PS1|REG|RGS|SCR|SCT|SHB|SHS|U3P|VB|VBE|VBS|VBSCRIPT|WS|WSF|WSH)\"?$"
| rex field=process "(?i).+\\\\(?[^\\\]+\.(ZIP|ISO|IMG|CAB|TAR|GZ|RAR|7Z))\\\\((.+\\\\)+)?(?.+\.(BAT|BIN|CAB|CMD|COM|CPL|EX_|EXE|GADGET|INF1|INS|INX||HTM|HTML|ISU|JAR|JOB|JS|JSE|LNK|MSC|MSI|MSP|MST|PAF|PIF|PS1|REG|RGS|SCR|SCT|SHB|SHS|U3P|VB|VBE|VBS|VBSCRIPT|WS|WSF|WSH))\"?$"|
`security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `suspicious_process_executed_from_container_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -81,7 +86,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/gootloader/partial_ttps/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/gootloader/partial_ttps/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_reg_exe_process.yml b/detections/endpoint/suspicious_reg_exe_process.yml
index 0add6178bb..13523532b8 100644
--- a/detections/endpoint/suspicious_reg_exe_process.yml
+++ b/detections/endpoint/suspicious_reg_exe_process.yml
@@ -1,6 +1,6 @@
name: Suspicious Reg exe Process
id: a6b3ab4e-dd77-4213-95fa-fc94701995e0
-version: 9
+version: 10
date: '2024-11-13'
author: David Dorsey, Splunk
status: production
@@ -20,8 +20,12 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Processes where Processes.parent_process_name
- != explorer.exe Processes.process_name =cmd.exe by Processes.user Processes.process_name
- Processes.parent_process_name Processes.dest Processes.process_id Processes.parent_process_id
+ != explorer.exe Processes.process_name =cmd.exe by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| search [| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
where Processes.parent_process_name=cmd.exe Processes.process_name= reg.exe by Processes.parent_process_id
@@ -87,7 +91,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1112/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1112/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_regsvr32_register_suspicious_path.yml b/detections/endpoint/suspicious_regsvr32_register_suspicious_path.yml
index f4e90ec9b2..d009b01ced 100644
--- a/detections/endpoint/suspicious_regsvr32_register_suspicious_path.yml
+++ b/detections/endpoint/suspicious_regsvr32_register_suspicious_path.yml
@@ -1,7 +1,7 @@
name: Suspicious Regsvr32 Register Suspicious Path
id: 62732736-6250-11eb-ae93-0242ac130002
-version: '13'
-date: '2025-02-24'
+version: 14
+date: '2025-03-27'
author: Michael Haag, Splunk
status: production
type: TTP
@@ -20,9 +20,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_regsvr32` Processes.process
IN ("*\\appdata\\*", "*\\programdata\\*","*\\windows\\temp\\*") NOT (Processes.process
- IN ("*.dll*", "*.ax*", "*.ocx*")) by Processes.dest Processes.user Processes.parent_process_name
- Processes.parent_process Processes.process_name Processes.process Processes.original_file_name
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
+ IN ("*.dll*", "*.ax*", "*.ocx*")) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `suspicious_regsvr32_register_suspicious_path_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
diff --git a/detections/endpoint/suspicious_rundll32_dllregisterserver.yml b/detections/endpoint/suspicious_rundll32_dllregisterserver.yml
index 3a91a79903..56e226eb0e 100644
--- a/detections/endpoint/suspicious_rundll32_dllregisterserver.yml
+++ b/detections/endpoint/suspicious_rundll32_dllregisterserver.yml
@@ -1,6 +1,6 @@
name: Suspicious Rundll32 dllregisterserver
id: 8c00a385-9b86-4ac0-8932-c9ec3713b159
-version: 8
+version: 9
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*dllregisterserver*
- by Processes.dest Processes.user Processes.parent_process_name Processes.parent_process
- Processes.original_file_name Processes.process_name Processes.process Processes.process_id
- Processes.parent_process_id | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `suspicious_rundll32_dllregisterserver_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `suspicious_rundll32_dllregisterserver_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -87,7 +90,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_rundll32_no_command_line_arguments.yml b/detections/endpoint/suspicious_rundll32_no_command_line_arguments.yml
index a409f211ca..563a0fc5e4 100644
--- a/detections/endpoint/suspicious_rundll32_no_command_line_arguments.yml
+++ b/detections/endpoint/suspicious_rundll32_no_command_line_arguments.yml
@@ -1,6 +1,6 @@
name: Suspicious Rundll32 no Command Line Arguments
id: e451bd16-e4c5-4109-8eb1-c4c6ecf048b4
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -18,10 +18,14 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where `process_rundll32` by _time span=1h Processes.process_id Processes.process_name
- Processes.dest Processes.user Processes.process_path Processes.process Processes.parent_process_name
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | regex process="(?i)(rundll32\.exe.{0,4}$)" | `suspicious_rundll32_no_command_line_arguments_filter`'
+ where `process_rundll32` by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | regex
+ process="(?i)(rundll32\.exe.{0,4}$)" | `suspicious_rundll32_no_command_line_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -83,7 +87,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_rundll32_plugininit.yml b/detections/endpoint/suspicious_rundll32_plugininit.yml
index 1d83ad1012..f7c649ce9b 100644
--- a/detections/endpoint/suspicious_rundll32_plugininit.yml
+++ b/detections/endpoint/suspicious_rundll32_plugininit.yml
@@ -1,6 +1,6 @@
name: Suspicious Rundll32 PluginInit
id: 92d51712-ee29-11eb-b1ae-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,10 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*PluginInit*
- by Processes.process_name Processes.process Processes.parent_process_name Processes.original_file_name
- Processes.parent_process Processes.process_id Processes.parent_process_id Processes.dest
- Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `suspicious_rundll32_plugininit_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `suspicious_rundll32_plugininit_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -72,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/icedid/inf_icedid/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_rundll32_startw.yml b/detections/endpoint/suspicious_rundll32_startw.yml
index 734b077b09..7760a93a89 100644
--- a/detections/endpoint/suspicious_rundll32_startw.yml
+++ b/detections/endpoint/suspicious_rundll32_startw.yml
@@ -1,6 +1,6 @@
name: Suspicious Rundll32 StartW
id: 9319dda5-73f2-4d43-a85a-67ce961bddb7
-version: 7
+version: 8
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_rundll32` Processes.process=*start*
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.original_file_name Processes.process_id Processes.parent_process_id
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `suspicious_rundll32_startw_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -82,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.011/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_scheduled_task_from_public_directory.yml b/detections/endpoint/suspicious_scheduled_task_from_public_directory.yml
index 2f4d734922..f1afcb005e 100644
--- a/detections/endpoint/suspicious_scheduled_task_from_public_directory.yml
+++ b/detections/endpoint/suspicious_scheduled_task_from_public_directory.yml
@@ -1,7 +1,7 @@
name: Suspicious Scheduled Task from Public Directory
id: 7feb7972-7ac3-11eb-bac8-acde48001122
-version: '7'
-date: '2025-02-24'
+version: 8
+date: '2025-03-27'
author: Michael Haag, Splunk
status: production
type: Anomaly
@@ -20,10 +20,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=schtasks.exe
(Processes.process=*\\users\\public\\* OR Processes.process=*\\programdata\\* OR
- Processes.process=*windows\\temp*) Processes.process=*/create* by Processes.dest
- Processes.user Processes.parent_process Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`| `suspicious_scheduled_task_from_public_directory_filter`'
+ Processes.process=*windows\\temp*) Processes.process=*/create* by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`|
+ `suspicious_scheduled_task_from_public_directory_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/suspicious_searchprotocolhost_no_command_line_arguments.yml b/detections/endpoint/suspicious_searchprotocolhost_no_command_line_arguments.yml
index 99ee59cae4..6cd8b789c9 100644
--- a/detections/endpoint/suspicious_searchprotocolhost_no_command_line_arguments.yml
+++ b/detections/endpoint/suspicious_searchprotocolhost_no_command_line_arguments.yml
@@ -1,6 +1,6 @@
name: Suspicious SearchProtocolHost no Command Line Arguments
id: f52d2db8-31f9-4aa7-a176-25779effe55c
-version: 6
+version: 7
date: '2024-11-13'
author: Michael Haag, Splunk
status: production
@@ -18,11 +18,14 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name=searchprotocolhost.exe by _time span=1h Processes.process_id
- Processes.process_name Processes.dest Processes.user Processes.process_path Processes.process
- Processes.parent_process_name | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | regex process="(?i)(searchprotocolhost\.exe.{0,4}$)"
- | `suspicious_searchprotocolhost_no_command_line_arguments_filter`'
+ where Processes.process_name=searchprotocolhost.exe by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | regex process="(?i)(searchprotocolhost\.exe.{0,4}$)" | `suspicious_searchprotocolhost_no_command_line_arguments_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -77,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1055/cobalt_strike/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_sqlite3_lsquarantine_behavior.yml b/detections/endpoint/suspicious_sqlite3_lsquarantine_behavior.yml
index 970e1f8f20..16925a2c26 100644
--- a/detections/endpoint/suspicious_sqlite3_lsquarantine_behavior.yml
+++ b/detections/endpoint/suspicious_sqlite3_lsquarantine_behavior.yml
@@ -1,6 +1,6 @@
name: Suspicious SQLite3 LSQuarantine Behavior
id: e1997b2e-655f-4561-82fd-aeba8e1c1a86
-version: 4
+version: 5
date: '2024-11-13'
author: Michael Haag, Splunk
status: experimental
@@ -19,10 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=sqlite3
- Processes.process=*LSQuarantine* by Processes.dest Processes.user Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
- | `suspicious_sqlite3_lsquarantine_behavior_filter`'
+ Processes.process=*LSQuarantine* by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)` | `suspicious_sqlite3_lsquarantine_behavior_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/suspicious_wav_file_in_appdata_folder.yml b/detections/endpoint/suspicious_wav_file_in_appdata_folder.yml
index ea46ed5259..9464b212cf 100644
--- a/detections/endpoint/suspicious_wav_file_in_appdata_folder.yml
+++ b/detections/endpoint/suspicious_wav_file_in_appdata_folder.yml
@@ -1,6 +1,6 @@
name: Suspicious WAV file in Appdata Folder
id: 5be109e6-1ac5-11ec-b421-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -14,21 +14,41 @@ description: The following analytic detects the creation of .wav files in the Ap
information being sent to an attacker's command and control server, compromising
the affected system's confidentiality.
data_source:
-- Sysmon EventID 1
-- Windows Event Log Security 4688
-- CrowdStrike ProcessRollup2
-- Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name=*.exe Processes.process_path="*\\appdata\\Roaming\\*"
- by _time span=1h Processes.process_id Processes.process_name Processes.process Processes.dest
- Processes.process_guid | `drop_dm_object_name(Processes)` |rename process_guid as
- proc_guid | join proc_guid, _time [ | tstats `security_content_summariesonly` count
- min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
+- Sysmon EventID 1 AND Sysmon EventID 11
+- Windows Event Log Security 4688 AND Sysmon EventID 11
+search: '| tstats prestats=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes where Processes.process_name=*.exe
+ Processes.process_path="*\\appdata\\Roaming\\*" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | tstats prestats=t append=t `security_content_summariesonly`
+ count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
where Filesystem.file_name IN ("*.wav") Filesystem.file_path = "*\\appdata\\Roaming\\*"
- by _time span=1h Filesystem.dest Filesystem.file_create_time Filesystem.file_name
- Filesystem.file_path Filesystem.process_guid | `drop_dm_object_name(Filesystem)`
- |rename process_guid as proc_guid | fields file_name file_path process_name process_path
- process dest file_create_time _time proc_guid] | `suspicious_wav_file_in_appdata_folder_filter`'
+ by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
+ Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
+ Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
+ Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` |
+ table action dest original_file_name parent_process parent_process_exec parent_process_guid
+ parent_process_id parent_process_name parent_process_path process process_exec process_guid
+ process_hash process_id process_integrity_level process_name process_path user user_id
+ vendor_product file_access_time file_create_time file_hash file_modify_time file_name
+ file_path file_acl file_size firstTime lastTime | stats values(action) as action
+ values(dest) as dest values(original_file_name) as original_file_name values(parent_process)
+ as parent_process values(parent_process_exec) as parent_process_exec values(parent_process_guid)
+ as parent_process_guid values(parent_process_id) as parent_process_id values(parent_process_name)
+ as parent_process_name values(parent_process_path) as parent_process_path values(process)
+ as process values(process_exec) as process_exec values(process_hash) as process_hash
+ values(process_id) as process_id values(process_integrity_level) as process_integrity_level
+ values(process_name) as process_name values(process_path) as process_path values(user)
+ as user values(user_id) as user_id values(vendor_product) as vendor_product values(file_access_time)
+ as file_access_time values(file_create_time) as file_create_time values(file_hash)
+ as file_hash values(file_modify_time) as file_modify_time values(file_name) as file_name
+ values(file_path) as file_path values(file_acl) as file_acl values(file_size) as
+ file_size by process_guid | where isnotnull(process_name) AND isnotnull(file_name)
+ | `suspicious_wav_file_in_appdata_folder_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, file_name, file_path and command-line
executions from your endpoints. If you are using Sysmon, you must have at least
@@ -74,7 +94,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos_agent/sysmon_wav.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/remcos/remcos_agent/sysmon_wav.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_wevtutil_usage.yml b/detections/endpoint/suspicious_wevtutil_usage.yml
index 39b6278f58..64b4701545 100644
--- a/detections/endpoint/suspicious_wevtutil_usage.yml
+++ b/detections/endpoint/suspicious_wevtutil_usage.yml
@@ -1,6 +1,6 @@
name: Suspicious wevtutil Usage
id: 2827c0fd-e1be-4868-ae25-59d28e0f9d4f
-version: 10
+version: 11
date: '2025-02-10'
author: David Dorsey, Michael Haag, Teoderick Contreras, Splunk
status: production
@@ -21,10 +21,13 @@ search: '| tstats `security_content_summariesonly` values(Processes.process) as
min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
where Processes.process_name=wevtutil.exe Processes.process IN ("* cl *", "*clear-log*",
"* -cl *") Processes.process IN ("*System*", "*Security*", "*Setup*", "*Application*",
- "*trace*", "*powershell*") by Processes.parent_process_name Processes.parent_process
- Processes.process Processes.process_guid Processes.process_id Processes.dest Processes.user
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)`
- | `suspicious_wevtutil_usage_filter`'
+ "*trace*", "*powershell*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` |`security_content_ctime(lastTime)` | `suspicious_wevtutil_usage_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -81,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070.001/windows_pwh_log_cleared/wevtutil_clear_log.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070.001/windows_pwh_log_cleared/wevtutil_clear_log.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/suspicious_writes_to_windows_recycle_bin.yml b/detections/endpoint/suspicious_writes_to_windows_recycle_bin.yml
index b179bc80c6..ce4e741840 100644
--- a/detections/endpoint/suspicious_writes_to_windows_recycle_bin.yml
+++ b/detections/endpoint/suspicious_writes_to_windows_recycle_bin.yml
@@ -1,6 +1,6 @@
name: Suspicious writes to windows Recycle Bin
id: b5541828-8ffd-4070-9d95-b3da4de924cb
-version: 5
+version: 6
date: '2024-11-13'
author: Rico Valdez, Splunk
status: production
@@ -15,15 +15,38 @@ description: The following analytic detects when a process other than explorer.e
tools.
data_source:
- Sysmon EventID 1 AND Sysmon EventID 11
-search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime values(Filesystem.file_path) as file_path values(Filesystem.file_name)
- as file_name FROM datamodel=Endpoint.Filesystem where Filesystem.file_path = "*$Recycle.Bin*"
- by Filesystem.process_name Filesystem.process_id Filesystem.dest | `drop_dm_object_name("Filesystem")`
- | join process_id [| tstats `security_content_summariesonly` values(Processes.user)
- as user values(Processes.process_name) as process_name values(Processes.parent_process_name)
- as parent_process_name FROM datamodel=Endpoint.Processes where Processes.process_name
- != "explorer.exe" by Processes.process_id Processes.dest | `drop_dm_object_name("Processes")`
- | table user process_name process_id dest] | `suspicious_writes_to_windows_recycle_bin_filter`'
+search: '| tstats prestats=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes where Processes.process_name
+ != "explorer.exe" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | tstats prestats=t append=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_path
+ = "*$Recycle.Bin*" by Filesystem.action Filesystem.dest Filesystem.file_access_time
+ Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name
+ Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid
+ Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)`
+ | table action dest original_file_name parent_process parent_process_exec parent_process_guid
+ parent_process_id parent_process_name parent_process_path process process_exec process_guid
+ process_hash process_id process_integrity_level process_name process_path user user_id
+ vendor_product file_access_time file_create_time file_hash file_modify_time file_name
+ file_path file_acl file_size firstTime lastTime | stats values(action) as action
+ values(dest) as dest values(original_file_name) as original_file_name values(parent_process)
+ as parent_process values(parent_process_exec) as parent_process_exec values(parent_process_guid)
+ as parent_process_guid values(parent_process_id) as parent_process_id values(parent_process_name)
+ as parent_process_name values(parent_process_path) as parent_process_path values(process)
+ as process values(process_exec) as process_exec values(process_hash) as process_hash
+ values(process_id) as process_id values(process_integrity_level) as process_integrity_level
+ values(process_name) as process_name values(process_path) as process_path values(user)
+ as user values(user_id) as user_id values(vendor_product) as vendor_product values(file_access_time)
+ as file_access_time values(file_create_time) as file_create_time values(file_hash)
+ as file_hash values(file_modify_time) as file_modify_time values(file_name) as file_name
+ values(file_path) as file_path values(file_acl) as file_acl values(file_size) as
+ file_size by process_guid | where isnotnull(process_name) AND isnotnull(file_name)
+ | `suspicious_writes_to_windows_recycle_bin_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information
on filesystem and process logs responsible for the changes from your endpoints into
the `Endpoint` datamodel in the `Processes` and `Filesystem` nodes.
@@ -69,7 +92,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036/write_to_recycle_bin/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036/write_to_recycle_bin/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/svchost_lolbas_execution_process_spawn.yml b/detections/endpoint/svchost_lolbas_execution_process_spawn.yml
index ef195b0980..95ed69ec10 100644
--- a/detections/endpoint/svchost_lolbas_execution_process_spawn.yml
+++ b/detections/endpoint/svchost_lolbas_execution_process_spawn.yml
@@ -1,6 +1,6 @@
name: Svchost LOLBAS Execution Process Spawn
id: 09e5c72a-4c0d-11ec-aa29-3e22fbd008af
-version: 7
+version: 8
date: '2025-02-10'
author: Mauricio Velazco, Splunk
status: production
@@ -29,8 +29,12 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
"Regsvr32.exe", "Msiexec.exe", "Wuauclt.exe", "Presentationhost.exe", "Wmic.exe",
"Runonce.exe", "Syncappvpublishingserver.exe", "Verclsid.exe", "Infdefaultinstall.exe",
"Installutil.exe", "Netsh.exe", "Wab.exe", "Dnscmd.exe", "At.exe", "Pcalua.exe",
- "Msconfig.exe")) by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
+ "Msconfig.exe")) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `svchost_lolbas_execution_process_spawn_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -84,7 +88,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.005/svchost_lolbas_execution_process_spawn/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1053.005/svchost_lolbas_execution_process_spawn/windows-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/system_info_gathering_using_dxdiag_application.yml b/detections/endpoint/system_info_gathering_using_dxdiag_application.yml
index 39d3aac52b..d443ae2127 100644
--- a/detections/endpoint/system_info_gathering_using_dxdiag_application.yml
+++ b/detections/endpoint/system_info_gathering_using_dxdiag_application.yml
@@ -1,6 +1,6 @@
name: System Info Gathering Using Dxdiag Application
id: f92d74f2-4921-11ec-b685-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -19,8 +19,11 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_dxdiag` AND Processes.process
- = "* /t *" by Processes.dest Processes.user Processes.parent_process_name Processes.parent_process
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
+ = "* /t *" by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `system_info_gathering_using_dxdiag_application_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -50,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/t1592/host_info_dxdiag/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/t1592/host_info_dxdiag/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/system_information_discovery_detection.yml b/detections/endpoint/system_information_discovery_detection.yml
index 095ef26ee7..b18446019f 100644
--- a/detections/endpoint/system_information_discovery_detection.yml
+++ b/detections/endpoint/system_information_discovery_detection.yml
@@ -1,6 +1,6 @@
name: System Information Discovery Detection
id: 8e99f89e-ae58-4ebc-bf52-ae0b1a277e72
-version: 7
+version: 8
date: '2024-12-16'
author: Patrick Bareiss, Splunk
status: production
@@ -19,10 +19,21 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process="*wmic* qfe*"
- OR Processes.process=*systeminfo* OR Processes.process=*hostname*) by Processes.user
- Processes.process_name Processes.process Processes.dest Processes.parent_process_name
+ OR Processes.process=*systeminfo* OR Processes.process=*hostname*) by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | eventstats dc(process) as dc_processes_by_dest
- by dest | where dc_processes_by_dest > 2 | stats values(process) as process min(firstTime)
+ by dest | where dc_processes_by_dest > 2 | stats values(process) as process values(action)
+ as action values(original_file_name) as original_file_name values(parent_process)
+ as parent_process values(parent_process_exec) as parent_process_exec values(parent_process_guid)
+ as parent_process_guid values(parent_process_id) as parent_process_id values(parent_process_path)
+ as parent_process_path values(process_exec) as process_exec values(process_guid)
+ as process_guid values(.process_hash) as process_hash values(process_id) as process_id
+ values(process_integrity_level) as process_integrity_level values(process_path)
+ as process_path values(user_id) as user_id values(vendor_product) as vendor_product min(firstTime)
as firstTime max(lastTime) as lastTime by user, dest parent_process_name | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `system_information_discovery_detection_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -78,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1082/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1082/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/system_processes_run_from_unexpected_locations.yml b/detections/endpoint/system_processes_run_from_unexpected_locations.yml
index 4821dfd05e..52ded1d414 100644
--- a/detections/endpoint/system_processes_run_from_unexpected_locations.yml
+++ b/detections/endpoint/system_processes_run_from_unexpected_locations.yml
@@ -1,6 +1,6 @@
name: System Processes Run From Unexpected Locations
id: a34aae96-ccf8-4aef-952c-3ea21444444d
-version: 10
+version: 11
date: '2025-02-10'
author: David Dorsey, Michael Haag, Splunk
status: production
@@ -18,11 +18,14 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Processes where Processes.process_path !="C:\\Windows\\System32*"
- Processes.process_path !="C:\\Windows\\SysWOW64*" by Processes.dest Processes.user
- Processes.parent_process Processes.process_path Processes.process_name Processes.process
- Processes.process_id Processes.parent_process_id Processes.process_hash | `drop_dm_object_name("Processes")`
- | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`| `is_windows_system_file_macro`
- | `system_processes_run_from_unexpected_locations_filter`'
+ Processes.process_path !="C:\\Windows\\SysWOW64*" by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`|
+ `is_windows_system_file_macro` | `system_processes_run_from_unexpected_locations_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -81,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.003/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1036.003/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/system_user_discovery_with_query.yml b/detections/endpoint/system_user_discovery_with_query.yml
index cd0788aeb9..517614b6d4 100644
--- a/detections/endpoint/system_user_discovery_with_query.yml
+++ b/detections/endpoint/system_user_discovery_with_query.yml
@@ -1,6 +1,6 @@
name: System User Discovery With Query
id: ad03bfcf-8a91-4bc2-a500-112993deba87
-version: 5
+version: 6
date: '2025-02-05'
author: Mauricio Velazco, Splunk
status: production
@@ -17,10 +17,16 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="query.exe" OR Processes.original_file_name="query.exe")
- AND Processes.process="*user*" AND ((NOT Processes.process="*/server*") OR Processes.process IN ("*/server:localhost*", "*/server:127.0.0.1*")) by Processes.dest Processes.user Processes.parent_process Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `system_user_discovery_with_query_filter`'
+ as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="query.exe"
+ OR Processes.original_file_name="query.exe") AND Processes.process="*user*" AND
+ ((NOT Processes.process="*/server*") OR Processes.process IN ("*/server:localhost*",
+ "*/server:127.0.0.1*")) by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `system_user_discovery_with_query_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -47,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/system_user_discovery_with_whoami.yml b/detections/endpoint/system_user_discovery_with_whoami.yml
index 594b175c8d..d1a3e665a0 100644
--- a/detections/endpoint/system_user_discovery_with_whoami.yml
+++ b/detections/endpoint/system_user_discovery_with_whoami.yml
@@ -1,6 +1,6 @@
name: System User Discovery With Whoami
id: 894fc43e-6f50-47d5-a68b-ee9ee23e18f4
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -19,9 +19,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="whoami.exe")
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `system_user_discovery_with_whoami_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `system_user_discovery_with_whoami_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -41,6 +45,7 @@ tags:
- Rhysida Ransomware
- Qakbot
- CISA AA23-347A
+ - PHP-CGI RCE Attack on Japanese Organizations
asset_type: Endpoint
mitre_attack_id:
- T1033
@@ -52,7 +57,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/time_provider_persistence_registry.yml b/detections/endpoint/time_provider_persistence_registry.yml
index 29378235ab..cdd16a30c0 100644
--- a/detections/endpoint/time_provider_persistence_registry.yml
+++ b/detections/endpoint/time_provider_persistence_registry.yml
@@ -1,6 +1,6 @@
name: Time Provider Persistence Registry
id: 5ba382c4-2105-11ec-8d8f-acde48001122
-version: 9
+version: 10
date: '2025-02-10'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
@@ -17,8 +17,9 @@ data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime FROM datamodel=Endpoint.Registry WHERE (Registry.registry_path="*\\CurrentControlSet\\Services\\W32Time\\TimeProviders*")
- BY Registry.dest Registry.user Registry.registry_path Registry.registry_key_name
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
+ by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive
+ Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name
+ Registry.registry_value_type Registry.status Registry.user Registry.vendor_product
| `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `time_provider_persistence_registry_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
@@ -71,7 +72,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1547.003/timeprovider_reg/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1547.003/timeprovider_reg/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/trickbot_named_pipe.yml b/detections/endpoint/trickbot_named_pipe.yml
index 409104955e..778873856c 100644
--- a/detections/endpoint/trickbot_named_pipe.yml
+++ b/detections/endpoint/trickbot_named_pipe.yml
@@ -1,6 +1,6 @@
name: Trickbot Named Pipe
id: 1804b0a4-a682-11eb-8f68-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -16,9 +16,10 @@ data_source:
- Sysmon EventID 17
- Sysmon EventID 18
search: '`sysmon` EventCode IN (17,18) PipeName="\\pipe\\*lacesomepipe" | stats min(_time)
- as firstTime max(_time) as lastTime count by dest user_id EventCode PipeName signature
- Image process_id | rename Image as process_name | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `trickbot_named_pipe_filter`'
+ as firstTime max(_time) as lastTime count by dest dvc pipe_name process_exec process_guid
+ process_id process_name process_path signature signature_id user_id vendor_product
+ Image PipeName | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `trickbot_named_pipe_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name and pipename from your endpoints. If you are using Sysmon,
you must have at least version 6.0.4 of the Sysmon TA. .
@@ -63,7 +64,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/namedpipe/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/namedpipe/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/uac_bypass_mmc_load_unsigned_dll.yml b/detections/endpoint/uac_bypass_mmc_load_unsigned_dll.yml
index 03661c70d7..12df8b9de7 100644
--- a/detections/endpoint/uac_bypass_mmc_load_unsigned_dll.yml
+++ b/detections/endpoint/uac_bypass_mmc_load_unsigned_dll.yml
@@ -1,6 +1,6 @@
name: UAC Bypass MMC Load Unsigned Dll
id: 7f04349c-e30d-11eb-bc7f-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,11 @@ description: The following analytic detects the loading of an unsigned DLL by th
data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode=7 ImageLoaded = "*.dll" Image = "*\\mmc.exe" Signed=false
- Company != "Microsoft Corporation" | stats count min(_time) as firstTime max(_time)
- as lastTime by Image ImageLoaded Signed ProcessId OriginalFileName dest EventCode
- Company | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `uac_bypass_mmc_load_unsigned_dll_filter`'
+ Company != "Microsoft Corporation" | 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)` | `uac_bypass_mmc_load_unsigned_dll_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name and imageloaded executions from your endpoints. If you
are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
@@ -44,7 +45,6 @@ drilldown_searches:
latest_offset: $info_max_time$
rba:
message: Suspicious unsigned $ImageLoaded$ loaded by $Image$ on endpoint $dest$
- with EventCode $EventCode$
risk_objects:
- field: dest
type: system
@@ -65,7 +65,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/uac_bypass/windows-sysmon2.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1548/uac_bypass/windows-sysmon2.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/uac_bypass_with_colorui_com_object.yml b/detections/endpoint/uac_bypass_with_colorui_com_object.yml
index 3b5ec1cdb6..85cd67c5c2 100644
--- a/detections/endpoint/uac_bypass_with_colorui_com_object.yml
+++ b/detections/endpoint/uac_bypass_with_colorui_com_object.yml
@@ -1,6 +1,6 @@
name: UAC Bypass With Colorui COM Object
id: 2bcccd20-fc2b-11eb-8d22-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -15,9 +15,11 @@ description: The following analytic detects a potential UAC bypass using the col
data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode=7 ImageLoaded="*\\colorui.dll" process_name != "colorcpl.exe"
- NOT(Image IN("*\\windows\\*", "*\\program files*")) | stats count min(_time) as
- firstTime max(_time) as lastTime by Image ImageLoaded process_name dest user_id
- EventCode Signed ProcessId | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ NOT(Image IN("*\\windows\\*", "*\\program files*")) | 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)`
| `uac_bypass_with_colorui_com_object_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
@@ -63,7 +65,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.015/uac_colorui/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546.015/uac_colorui/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/uninstall_app_using_msiexec.yml b/detections/endpoint/uninstall_app_using_msiexec.yml
index 06248d5f3b..25daf99ff7 100644
--- a/detections/endpoint/uninstall_app_using_msiexec.yml
+++ b/detections/endpoint/uninstall_app_using_msiexec.yml
@@ -1,6 +1,6 @@
name: Uninstall App Using MsiExec
id: 1fca2b28-f922-11eb-b2dd-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=msiexec.exe
Processes.process= "* /qn *" Processes.process= "*/X*" Processes.process= "*REBOOT=*"
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `uninstall_app_using_msiexec_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `uninstall_app_using_msiexec_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -72,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/conti/conti_leak/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/conti/conti_leak/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/unknown_process_using_the_kerberos_protocol.yml b/detections/endpoint/unknown_process_using_the_kerberos_protocol.yml
index f1a31e9ae9..b907525320 100644
--- a/detections/endpoint/unknown_process_using_the_kerberos_protocol.yml
+++ b/detections/endpoint/unknown_process_using_the_kerberos_protocol.yml
@@ -1,6 +1,6 @@
name: Unknown Process Using The Kerberos Protocol
id: c91a0852-9fbb-11ec-af44-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -15,14 +15,37 @@ description: The following analytic identifies a non-lsass.exe process making an
access or lateral movement within the network.
data_source:
- Sysmon EventID 1 AND Sysmon EventID 3
-search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- where Processes.process_name!=lsass.exe by _time Processes.process_id Processes.process_name
- Processes.dest Processes.process_path Processes.process Processes.parent_process_name
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | join process_id dest [| tstats `security_content_summariesonly` count FROM datamodel=Network_Traffic.All_Traffic
- where All_Traffic.dest_port = 88 by All_Traffic.src All_Traffic.process_id All_Traffic.dest_port
- | `drop_dm_object_name(All_Traffic)` | rename src as dest ] | table _time dest
- parent_process_name process_name process_path process process_id dest_port | `unknown_process_using_the_kerberos_protocol_filter`'
+search: '| tstats prestats=t `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
+ where Processes.process_name!=lsass.exe by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | tstats prestats=t append=t `security_content_summariesonly` count min(_time) as
+ firstTime max(_time) as lastTime from datamodel=Network_Traffic.All_Traffic where
+ All_Traffic.dest_port = 88 by All_Traffic.action All_Traffic.app All_Traffic.dest
+ All_Traffic.dest_ip All_Traffic.dest_port All_Traffic.direction All_Traffic.dvc
+ All_Traffic.protocol All_Traffic.protocol_version All_Traffic.src All_Traffic.src_ip
+ All_Traffic.src_port All_Traffic.transport All_Traffic.user All_Traffic.vendor_product
+ All_Traffic.process_id | `drop_dm_object_name(All_Traffic)` | table action dest
+ original_file_name parent_process parent_process_exec parent_process_guid parent_process_id
+ parent_process_name parent_process_path process process_exec process_guid process_hash
+ process_id process_integrity_level process_name process_path user user_id vendor_product
+ app dest_ip dest_port direction dvc protocol protocol_version src src_ip src_port
+ transport | stats values(action) as action values(dest) as dest values(original_file_name)
+ as original_file_name values(parent_process) as parent_process values(parent_process_exec)
+ as parent_process_exec values(parent_process_guid) as parent_process_guid values(parent_process_id)
+ as parent_process_id values(parent_process_name) as parent_process_name values(parent_process_path)
+ as parent_process_path values(process) as process values(process_exec) as process_exec
+ values(process_hash) as process_hash values(process_guid) as process_guid values(process_integrity_level)
+ as process_integrity_level values(process_name) as process_name values(process_path)
+ as process_path values(user) as user values(user_id) as user_id values(vendor_product)
+ as vendor_product values(app) as app values(dest_ip) as dest_ip values(dest_port)
+ as dest_port values(direction) as direction values(dvc) as dvc values(protocol)
+ as protocol values(protocol_version) as protocol_version values(src) as src values(src_ip)
+ as src_ip values(src_port) as src_port values(transport) as transport by process_id
+ | where isnotnull(process_name) AND isnotnull(dest_port) | `unknown_process_using_the_kerberos_protocol_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -74,11 +97,9 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1550/rubeus/windows-security.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1550/rubeus/windows-security.log
source: WinEventLog:Security
sourcetype: WinEventLog
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1550/rubeus/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1550/rubeus/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/unload_sysmon_filter_driver.yml b/detections/endpoint/unload_sysmon_filter_driver.yml
index 74f3715365..48405327e2 100644
--- a/detections/endpoint/unload_sysmon_filter_driver.yml
+++ b/detections/endpoint/unload_sysmon_filter_driver.yml
@@ -1,6 +1,6 @@
name: Unload Sysmon Filter Driver
id: e5928ff3-23eb-4d8b-b8a4-dcbc844fdfbe
-version: 8
+version: 9
date: '2025-02-10'
author: Bhavin Patel, Splunk
status: production
@@ -18,9 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime values(Processes.process)
as process max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_name=fltMC.exe
- AND Processes.process=*unload* AND Processes.process=*SysmonDrv* by Processes.process_name
- Processes.process_id Processes.parent_process_name Processes.process Processes.dest
- Processes.user | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)`|`security_content_ctime(lastTime)`
+ AND Processes.process=*unload* AND Processes.process=*SysmonDrv* by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)`|`security_content_ctime(lastTime)`
| table firstTime lastTime dest user count process_name process_id parent_process_name
process | `unload_sysmon_filter_driver_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -71,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/unload_sysmon/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1562.001/unload_sysmon/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/unloading_amsi_via_reflection.yml b/detections/endpoint/unloading_amsi_via_reflection.yml
index 63a2cee57d..3dbd8dbd42 100644
--- a/detections/endpoint/unloading_amsi_via_reflection.yml
+++ b/detections/endpoint/unloading_amsi_via_reflection.yml
@@ -1,6 +1,6 @@
name: Unloading AMSI via Reflection
id: a21e3484-c94d-11eb-b55b-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -16,8 +16,9 @@ description: The following analytic detects the tampering of AMSI (Antimalware S
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = *system.management.automation.amsi*
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer user_id | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest
+ signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID
+ ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `unloading_amsi_via_reflection_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
@@ -44,9 +45,9 @@ drilldown_searches:
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
- message: Possible AMSI Unloading via Reflection using PowerShell on $Computer$
+ message: Possible AMSI Unloading via Reflection using PowerShell on $dest$
risk_objects:
- - field: Computer
+ - field: dest
type: system
score: 49
threat_objects: []
@@ -67,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.001/powershell_script_block_logging/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/unusual_number_of_kerberos_service_tickets_requested.yml b/detections/endpoint/unusual_number_of_kerberos_service_tickets_requested.yml
index 58affd514e..250a39176b 100644
--- a/detections/endpoint/unusual_number_of_kerberos_service_tickets_requested.yml
+++ b/detections/endpoint/unusual_number_of_kerberos_service_tickets_requested.yml
@@ -1,6 +1,6 @@
name: Unusual Number of Kerberos Service Tickets Requested
id: eb3e6702-8936-11ec-98fe-acde48001122
-version: 8
+version: 9
date: '2025-02-10'
author: Mauricio Velazco, Dean Luxton, Splunk
status: production
@@ -14,16 +14,13 @@ description: The following analytic identifies an unusual number of Kerberos ser
to sensitive accounts and escalation of privileges within the Active Directory environment.
data_source:
- Windows Event Log Security 4769
-search: >-
- `wineventlog_security` EventCode=4769 ServiceName!="*$" TicketEncryptionType=0x17
+search: '`wineventlog_security` EventCode=4769 ServiceName!="*$" TicketEncryptionType=0x17
| bucket span=2m _time | stats dc(ServiceName) AS unique_services values(ServiceName)
as requested_services values(user_category) as user_category values(src_category)
- as src_category by _time, user, src
- | eventstats avg(unique_services) as comp_avg , stdev(unique_services) as comp_std
- by user, src
- | eval upperBound=(comp_avg+comp_std*3) | eval isOutlier=if(unique_services > 2
- and unique_services >= upperBound, 1, 0) | search isOutlier=1
- | `unusual_number_of_kerberos_service_tickets_requested_filter`
+ as src_category values(dest) as dest by _time, user, src | eventstats avg(unique_services)
+ as comp_avg , stdev(unique_services) as comp_std by user, src | eval upperBound=(comp_avg+comp_std*3) |
+ eval isOutlier=if(unique_services > 2 and unique_services >= upperBound, 1, 0) |
+ search isOutlier=1 | `unusual_number_of_kerberos_service_tickets_requested_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
Domain Controller and Kerberos events. The Advanced Security Audit policy setting
`Audit Kerberos Authentication Service` within `Account Logon` needs to be enabled.
@@ -73,7 +70,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1558.003/unusual_number_of_kerberos_service_tickets_requested/windows-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1558.003/unusual_number_of_kerberos_service_tickets_requested/windows-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/unusually_long_command_line.yml b/detections/endpoint/unusually_long_command_line.yml
index bf72181614..989043e935 100644
--- a/detections/endpoint/unusually_long_command_line.yml
+++ b/detections/endpoint/unusually_long_command_line.yml
@@ -1,6 +1,6 @@
name: Unusually Long Command Line
id: c77162d3-f93c-45cc-80c8-22f6a4264e7f
-version: 8
+version: 9
date: '2024-11-13'
author: David Dorsey, Splunk
status: experimental
@@ -18,13 +18,17 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime FROM datamodel=Endpoint.Processes by Processes.user Processes.dest Processes.process_name
- Processes.process | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)`| eval processlen=len(process) | eventstats stdev(processlen)
- as stdev, avg(processlen) as avg by dest | stats max(processlen) as maxlen, values(stdev)
- as stdevperhost, values(avg) as avgperhost by dest, user, process_name, process
- | `unusually_long_command_line_filter` |eval threshold = 3 | where maxlen > ((threshold*stdevperhost)
- + avgperhost)'
+ as lastTime FROM datamodel=Endpoint.Processes by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name("Processes")` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`| eval
+ processlen=len(process) | eventstats stdev(processlen) as stdev, avg(processlen)
+ as avg by dest | stats max(processlen) as maxlen, values(stdev) as stdevperhost,
+ values(avg) as avgperhost by dest, user, process_name, process | `unusually_long_command_line_filter`
+ |eval threshold = 3 | where maxlen > ((threshold*stdevperhost) + avgperhost)'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/unusually_long_command_line___mltk.yml b/detections/endpoint/unusually_long_command_line___mltk.yml
index a1449bf5e2..517981b6a1 100644
--- a/detections/endpoint/unusually_long_command_line___mltk.yml
+++ b/detections/endpoint/unusually_long_command_line___mltk.yml
@@ -1,6 +1,6 @@
name: Unusually Long Command Line - MLTK
id: 57edaefa-a73b-45e5-bbae-f39c1473f941
-version: 5
+version: 6
date: '2024-12-16'
author: Rico Valdez, Splunk
status: experimental
@@ -17,12 +17,16 @@ data_source:
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime FROM datamodel=Endpoint.Processes by Processes.user Processes.dest Processes.process_name
- Processes.process | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`|
- `security_content_ctime(lastTime)`| eval processlen=len(process) | search user!=unknown
- | apply cmdline_pdfmodel threshold=0.01 | rename "IsOutlier(processlen)" as isOutlier
- | search isOutlier > 0 | table firstTime lastTime user dest process_name process
- processlen count | `unusually_long_command_line___mltk_filter`'
+ as lastTime FROM datamodel=Endpoint.Processes by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`|
+ eval processlen=len(process) | search user!=unknown | apply cmdline_pdfmodel threshold=0.01
+ | rename "IsOutlier(processlen)" as isOutlier | search isOutlier > 0 | table firstTime
+ lastTime user dest process_name process processlen count | `unusually_long_command_line___mltk_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/user_discovery_with_env_vars_powershell.yml b/detections/endpoint/user_discovery_with_env_vars_powershell.yml
index 79d4aea5e9..cc31ead507 100644
--- a/detections/endpoint/user_discovery_with_env_vars_powershell.yml
+++ b/detections/endpoint/user_discovery_with_env_vars_powershell.yml
@@ -1,6 +1,6 @@
name: User Discovery With Env Vars PowerShell
id: 0cdf318b-a0dd-47d7-b257-c621c0247de8
-version: 4
+version: 5
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name="powershell.exe")
(Processes.process="*$env:UserName*" OR Processes.process="*[System.Environment]::UserName*")
- by Processes.dest Processes.user Processes.parent_process Processes.process_name
- Processes.process Processes.process_id Processes.parent_process_id | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `user_discovery_with_env_vars_powershell_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `user_discovery_with_env_vars_powershell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -49,7 +53,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/user_discovery_with_env_vars_powershell_script_block.yml b/detections/endpoint/user_discovery_with_env_vars_powershell_script_block.yml
index 840a2991e0..c8b9cfffb5 100644
--- a/detections/endpoint/user_discovery_with_env_vars_powershell_script_block.yml
+++ b/detections/endpoint/user_discovery_with_env_vars_powershell_script_block.yml
@@ -1,6 +1,6 @@
name: User Discovery With Env Vars PowerShell Script Block
id: 77f41d9e-b8be-47e3-ab35-5776f5ec1d20
-version: 5
+version: 6
date: '2024-11-13'
author: Mauricio Velazco, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects the use of PowerShell environment va
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 (ScriptBlockText = "*$env:UserName*" OR ScriptBlockText
- = "*[System.Environment]::UserName*") | stats count min(_time) as firstTime max(_time)
- as lastTime by EventCode ScriptBlockText Computer user_id | rename Computer as dest,
- user_id as user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `user_discovery_with_env_vars_powershell_script_block_filter`'
+ = "*[System.Environment]::UserName*") | fillnull | stats count min(_time) as firstTime
+ max(_time) as lastTime by dest signature signature_id user_id vendor_product EventID
+ Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `user_discovery_with_env_vars_powershell_script_block_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.
@@ -41,7 +41,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-powershell-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1033/AD_discovery/windows-powershell-xml.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/usn_journal_deletion.yml b/detections/endpoint/usn_journal_deletion.yml
index 7be7337d7e..5e3d7de7eb 100644
--- a/detections/endpoint/usn_journal_deletion.yml
+++ b/detections/endpoint/usn_journal_deletion.yml
@@ -1,6 +1,6 @@
name: USN Journal Deletion
id: b6e0ff70-b122-4227-9368-4cf322ab43c3
-version: 5
+version: 6
date: '2024-11-13'
author: David Dorsey, Splunk
status: production
@@ -20,8 +20,12 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process)
as process values(Processes.parent_process) as parent_process min(_time) as firstTime
max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_name=fsutil.exe
- by Processes.user Processes.process_name Processes.parent_process_name Processes.dest |
- `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`| `security_content_ctime(lastTime)`
| search process="*deletejournal*" AND process="*usn*" | `usn_journal_deletion_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -70,7 +74,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1070/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/vbscript_execution_using_wscript_app.yml b/detections/endpoint/vbscript_execution_using_wscript_app.yml
index 1924be3cfb..a8848fa26a 100644
--- a/detections/endpoint/vbscript_execution_using_wscript_app.yml
+++ b/detections/endpoint/vbscript_execution_using_wscript_app.yml
@@ -1,6 +1,6 @@
name: Vbscript Execution Using Wscript App
id: 35159940-228f-11ec-8a49-acde48001122
-version: 6
+version: 7
date: '2025-02-19'
author: Teoderick Contreras, Splunk
status: production
@@ -19,10 +19,14 @@ data_source:
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where (Processes.parent_process_name
= "wscript.exe" AND Processes.parent_process = "*//e:vbscript*") OR (Processes.process_name
- = "wscript.exe" AND Processes.process = "*//e:vbscript*") by Processes.parent_process_name
- Processes.parent_process Processes.process_name Processes.process_id Processes.process
- Processes.dest Processes.user | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `vbscript_execution_using_wscript_app_filter`'
+ = "wscript.exe" AND Processes.process = "*//e:vbscript*") by Processes.action Processes.dest
+ Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `vbscript_execution_using_wscript_app_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -76,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.005/vbs_wscript/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1059.005/vbs_wscript/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/verclsid_clsid_execution.yml b/detections/endpoint/verclsid_clsid_execution.yml
index f45344915b..754649a4c0 100644
--- a/detections/endpoint/verclsid_clsid_execution.yml
+++ b/detections/endpoint/verclsid_clsid_execution.yml
@@ -1,6 +1,6 @@
name: Verclsid CLSID Execution
id: 61e9a56a-20fa-11ec-8ba3-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -21,10 +21,13 @@ search: '| tstats `security_content_summariesonly` values(Processes.process) as
values(Processes.parent_process) as parent_process values(Processes.process_id)
as process_id count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
where `process_verclsid` AND Processes.process="*/S*" Processes.process="*/C*" AND Processes.process="*{*"
- AND Processes.process="*}*" by Processes.process_name Processes.original_file_name
- Processes.dest Processes.user Processes.parent_process_name Processes.parent_process
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `verclsid_clsid_execution_filter`'
+ AND Processes.process="*}*" by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `verclsid_clsid_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -53,7 +56,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.012/verclsid_exec/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.012/verclsid_exec/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/w3wp_spawning_shell.yml b/detections/endpoint/w3wp_spawning_shell.yml
index 21d2e3fb4f..06125dcc35 100644
--- a/detections/endpoint/w3wp_spawning_shell.yml
+++ b/detections/endpoint/w3wp_spawning_shell.yml
@@ -1,6 +1,6 @@
name: W3WP Spawning Shell
id: 0f03423c-7c6a-11eb-bc47-acde48001122
-version: 6
+version: 7
date: '2025-02-10'
author: Michael Haag, Splunk
status: production
@@ -20,9 +20,13 @@ data_source:
search: '| tstats `security_content_summariesonly` count values(Processes.process_name)
as process_name values(Processes.process) as process min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=w3wp.exe
- AND `process_cmd` OR `process_powershell` by Processes.dest Processes.parent_process
- Processes.original_file_name Processes.user | `drop_dm_object_name(Processes)` |
- `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `w3wp_spawning_shell_filter`'
+ AND `process_cmd` OR `process_powershell` by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `w3wp_spawning_shell_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -73,6 +77,7 @@ tags:
- CISA AA22-264A
- Flax Typhoon
- WS FTP Server Critical Vulnerabilities
+ - PHP-CGI RCE Attack on Japanese Organizations
asset_type: Endpoint
cve:
- CVE-2021-34473
@@ -88,7 +93,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1505.003/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1505.003/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/wbadmin_delete_system_backups.yml b/detections/endpoint/wbadmin_delete_system_backups.yml
index 01aead7047..c42cdcb33a 100644
--- a/detections/endpoint/wbadmin_delete_system_backups.yml
+++ b/detections/endpoint/wbadmin_delete_system_backups.yml
@@ -1,6 +1,6 @@
name: WBAdmin Delete System Backups
id: cd5aed7e-5cea-11eb-ae93-0242ac130002
-version: 5
+version: 6
date: '2024-12-10'
author: Michael Haag, Splunk
status: production
@@ -18,9 +18,13 @@ data_source:
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where `process_wbadmin` AND Processes.process="*delete*"
- AND (Processes.process="*catalog*" OR Processes.process="*backup*") by Processes.process_name
- Processes.process Processes.parent_process_name Processes.dest Processes.user |
- `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
+ AND (Processes.process="*catalog*" OR Processes.process="*backup*") by Processes.action
+ Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
+ Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
+ Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid
+ Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name
+ Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
`wbadmin_delete_system_backups_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
@@ -76,7 +80,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1490/atomic_red_team/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1490/atomic_red_team/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/wbemprox_com_object_execution.yml b/detections/endpoint/wbemprox_com_object_execution.yml
index 3a63ebc37c..a7b63ba7e6 100644
--- a/detections/endpoint/wbemprox_com_object_execution.yml
+++ b/detections/endpoint/wbemprox_com_object_execution.yml
@@ -1,6 +1,6 @@
name: Wbemprox COM Object Execution
id: 9d911ce0-c3be-11eb-b177-acde48001122
-version: 5
+version: 6
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,10 +17,12 @@ data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode=7 ImageLoaded IN ("*\\fastprox.dll", "*\\wbemprox.dll",
"*\\wbemcomn.dll") NOT (process_name IN ("wmiprvse.exe", "WmiApSrv.exe", "unsecapp.exe"))
- NOT(Image IN("*\\windows\\*","*\\program files*", "*\\wbem\\*")) | stats count min(_time)
- as firstTime max(_time) as lastTime by Image ImageLoaded process_name dest EventCode
- Signed ProcessId Hashes IMPHASH | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `wbemprox_com_object_execution_filter`'
+ NOT(Image IN("*\\windows\\*","*\\program files*", "*\\wbem\\*")) | 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)` | `wbemprox_com_object_execution_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name and imageloaded executions from your endpoints. If you
are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
@@ -66,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/revil/inf2/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/revil/inf2/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/application/web_servers_executing_suspicious_processes.yml b/detections/endpoint/web_servers_executing_suspicious_processes.yml
similarity index 79%
rename from detections/application/web_servers_executing_suspicious_processes.yml
rename to detections/endpoint/web_servers_executing_suspicious_processes.yml
index 728ef8c11c..f3ebb90e10 100644
--- a/detections/application/web_servers_executing_suspicious_processes.yml
+++ b/detections/endpoint/web_servers_executing_suspicious_processes.yml
@@ -1,6 +1,6 @@
name: Web Servers Executing Suspicious Processes
id: ec3b7601-689a-4463-94e0-c9f45638efb9
-version: 4
+version: 5
date: '2025-01-21'
author: David Dorsey, Splunk
status: experimental
@@ -19,8 +19,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where Processes.dest_category="web_server"
AND (Processes.process="*whoami*" OR Processes.process="*ping*" OR Processes.process="*iptables*"
OR Processes.process="*wget*" OR Processes.process="*service*" OR Processes.process="*curl*")
- by Processes.process Processes.process_name, Processes.dest Processes.user| `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `web_servers_executing_suspicious_processes_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `web_servers_executing_suspicious_processes_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
diff --git a/detections/endpoint/wermgr_process_create_executable_file.yml b/detections/endpoint/wermgr_process_create_executable_file.yml
index f648718227..8c3ad7e96b 100644
--- a/detections/endpoint/wermgr_process_create_executable_file.yml
+++ b/detections/endpoint/wermgr_process_create_executable_file.yml
@@ -1,6 +1,6 @@
name: Wermgr Process Create Executable File
id: ab3bcce0-a105-11eb-973c-acde48001122
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -15,9 +15,9 @@ description: The following analytic detects the wermgr.exe process creating an e
data_source:
- Sysmon EventID 11
search: '`sysmon` EventCode=11 process_name = "wermgr.exe" TargetFilename = "*.exe"
- | stats min(_time) as firstTime max(_time) as lastTime count by Image TargetFilename
- process_name dest EventCode ProcessId | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `wermgr_process_create_executable_file_filter`'
+ | stats min(_time) as firstTime max(_time) as lastTime count by action dest file_name
+ file_path process_guid process_id user_id vendor_product | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `wermgr_process_create_executable_file_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name, parent process, and command-line executions from your
endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the
@@ -61,7 +61,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/infection/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/infection/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/wermgr_process_spawned_cmd_or_powershell_process.yml b/detections/endpoint/wermgr_process_spawned_cmd_or_powershell_process.yml
index 73dc26d297..ff5005175c 100644
--- a/detections/endpoint/wermgr_process_spawned_cmd_or_powershell_process.yml
+++ b/detections/endpoint/wermgr_process_spawned_cmd_or_powershell_process.yml
@@ -1,6 +1,6 @@
name: Wermgr Process Spawned CMD Or Powershell Process
id: e8fc95bc-a107-11eb-a978-acde48001122
-version: 5
+version: 6
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -20,8 +20,11 @@ data_source:
search: '| tstats `security_content_summariesonly` values(Processes.process) as cmdline
min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes
where Processes.parent_process_name = "wermgr.exe" `process_cmd` OR `process_powershell`
- by Processes.parent_process_name Processes.original_file_name Processes.parent_process_id Processes.process_name
- Processes.process Processes.process_id Processes.process_guid Processes.dest Processes.user
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `wermgr_process_spawned_cmd_or_powershell_process_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -73,7 +76,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/infection/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/trickbot/infection/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/wget_download_and_bash_execution.yml b/detections/endpoint/wget_download_and_bash_execution.yml
index 6e8ced3331..58e34abd66 100644
--- a/detections/endpoint/wget_download_and_bash_execution.yml
+++ b/detections/endpoint/wget_download_and_bash_execution.yml
@@ -1,6 +1,6 @@
name: Wget Download and Bash Execution
id: 35682718-5a85-11ec-b8f7-acde48001122
-version: 7
+version: 8
date: '2024-12-10'
author: Michael Haag, Splunk, DipsyTipsy
status: production
@@ -21,10 +21,13 @@ search: '| tstats `security_content_summariesonly` count min(_time) as firstTime
as lastTime from datamodel=Endpoint.Processes where (Processes.process_name=wget
OR Processes.process_name=wget.exe) ((Processes.process="*-q *" OR Processes.process="*-q"
OR Processes.process="*--quiet*") AND Processes.process="*-O- *") AND (Processes.process="*|*"
- AND Processes.process="*bash*") by Processes.dest Processes.user Processes.parent_process_name
- Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
- | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `wget_download_and_bash_execution_filter`'
+ AND Processes.process="*bash*") by Processes.action Processes.dest Processes.original_file_name
+ Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
+ Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
+ Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
+ Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
+ Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `wget_download_and_bash_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -89,7 +92,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/linux-sysmon_curlwget.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/linux-sysmon_curlwget.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon:linux
diff --git a/detections/endpoint/windows_access_token_manipulation_sedebugprivilege.yml b/detections/endpoint/windows_access_token_manipulation_sedebugprivilege.yml
index cc2242510c..28005dd373 100644
--- a/detections/endpoint/windows_access_token_manipulation_sedebugprivilege.yml
+++ b/detections/endpoint/windows_access_token_manipulation_sedebugprivilege.yml
@@ -1,7 +1,7 @@
name: Windows Access Token Manipulation SeDebugPrivilege
id: 6ece9ed0-5f92-4315-889d-48560472b188
-version: '12'
-date: '2025-02-24'
+version: 13
+date: '2025-03-27'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
@@ -19,7 +19,7 @@ search: '`wineventlog_security` EventCode=4703 EnabledPrivilegeList = "*SeDebugP
"*\\SysWOW64\\svchost.exe*", "*\\System32\\svchost.exe*")) | stats count min(_time)
as firstTime max(_time) as lastTime by Computer ProcessName ProcessId SubjectDomainName
SubjectUserName SubjectUserSid TargetUserName TargetLogonId TargetDomainName EnabledPrivilegeList
- action | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ action dest | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `windows_access_token_manipulation_sedebugprivilege_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
Windows Security Event Logs with 4703 EventCode enabled. The Windows TA is also
diff --git a/detections/endpoint/windows_access_token_manipulation_winlogon_duplicate_token_handle.yml b/detections/endpoint/windows_access_token_manipulation_winlogon_duplicate_token_handle.yml
index dd647d1112..957a0d2fda 100644
--- a/detections/endpoint/windows_access_token_manipulation_winlogon_duplicate_token_handle.yml
+++ b/detections/endpoint/windows_access_token_manipulation_winlogon_duplicate_token_handle.yml
@@ -1,6 +1,6 @@
name: Windows Access Token Manipulation Winlogon Duplicate Token Handle
id: dda126d7-1d99-4f0b-b72a-4c14031f9398
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -17,9 +17,12 @@ data_source:
- Sysmon EventID 10
search: '`sysmon` EventCode=10 TargetImage IN("*\\system32\\winlogon.exe*", "*\\SysWOW64\\winlogon.exe*")
GrantedAccess = 0x1040 | stats count min(_time) as firstTime max(_time) as lastTime
- by SourceImage TargetImage SourceProcessGUID TargetProcessGUID SourceProcessId TargetProcessId
- GrantedAccess CallTrace dest user_id | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `windows_access_token_manipulation_winlogon_duplicate_token_handle_filter`'
+ by CallTrace EventID GrantedAccess Guid Opcode ProcessID SecurityID SourceImage
+ SourceProcessGUID SourceProcessId TargetImage TargetProcessGUID TargetProcessId
+ UserID dest granted_access parent_process_exec parent_process_guid parent_process_id
+ parent_process_name parent_process_path process_exec process_guid process_id process_name
+ process_path signature signature_id user_id vendor_product | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `windows_access_token_manipulation_winlogon_duplicate_token_handle_filter`'
how_to_implement: To successfully implement this search, you must be ingesting data
that records process activity from your hosts to populate the endpoint data model
in the processes node. If you are using Sysmon, you must have at least version 6.0.4
@@ -43,7 +46,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/brute_ratel/brute_duplicate_token/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/brute_ratel/brute_duplicate_token/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/windows_access_token_winlogon_duplicate_handle_in_uncommon_path.yml b/detections/endpoint/windows_access_token_winlogon_duplicate_handle_in_uncommon_path.yml
index 662e51dcaf..1fafbf3d87 100644
--- a/detections/endpoint/windows_access_token_winlogon_duplicate_handle_in_uncommon_path.yml
+++ b/detections/endpoint/windows_access_token_winlogon_duplicate_handle_in_uncommon_path.yml
@@ -1,6 +1,6 @@
name: Windows Access Token Winlogon Duplicate Handle In Uncommon Path
id: b8f7ed6b-0556-4c84-bffd-839c262b0278
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -18,9 +18,12 @@ data_source:
search: '`sysmon` EventCode=10 TargetImage IN("*\\system32\\winlogon.exe*", "*\\SysWOW64\\winlogon.exe*")
AND GrantedAccess = 0x1040 AND NOT (SourceImage IN("C:\\Windows\\*", "C:\\Program
File*", "%systemroot%\\*")) | stats count min(_time) as firstTime max(_time) as
- lastTime by Computer SourceImage TargetImage SourceProcessGUID TargetProcessGUID
- SourceProcessId TargetProcessId GrantedAccess CallTrace | rename Computer as dest|
- `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_access_token_winlogon_duplicate_handle_in_uncommon_path_filter`'
+ lastTime by CallTrace EventID GrantedAccess Guid Opcode ProcessID SecurityID SourceImage
+ SourceProcessGUID SourceProcessId TargetImage TargetProcessGUID TargetProcessId
+ UserID dest granted_access parent_process_exec parent_process_guid parent_process_id
+ parent_process_name parent_process_path process_exec process_guid process_id process_name
+ process_path signature signature_id user_id vendor_product | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `windows_access_token_winlogon_duplicate_handle_in_uncommon_path_filter`'
how_to_implement: To successfully implement this search, you must be ingesting data
that records process activity from your hosts to populate the endpoint data model
in the processes node. If you are using Sysmon, you must have at least version 6.0.4
@@ -68,7 +71,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/brute_ratel/brute_duplicate_token/sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/malware/brute_ratel/brute_duplicate_token/sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/windows_account_access_removal_via_logoff_exec.yml b/detections/endpoint/windows_account_access_removal_via_logoff_exec.yml
index efd6e3dd18..599f0d52c1 100644
--- a/detections/endpoint/windows_account_access_removal_via_logoff_exec.yml
+++ b/detections/endpoint/windows_account_access_removal_via_logoff_exec.yml
@@ -1,24 +1,28 @@
name: Windows Account Access Removal via Logoff Exec
id: 223572ab-8768-4e20-9b39-c38707af80dc
-version: 2
+version: 3
date: '2025-02-10'
author: Teoderick Contreras, Splunk
data_source:
- Sysmon EventID 1
type: Anomaly
status: production
-description: The following analytic detects the process of logging off a user through
- the use of the quser and logoff commands. By monitoring for these commands, the
- analytic identifies actions where a user session is forcibly terminated, which could
- be part of an administrative task or a potentially unauthorized access attempt.
- This detection helps identify potential misuse or malicious activity where a user’s
- access is revoked without proper authorization, providing insight into potential
- security incidents involving account management or session manipulation.
+description: "The following analytic detects the process of logging off a user through\
+ \ the use of the quser and logoff commands. By monitoring for these commands, the\
+ \ analytic identifies actions where a user session is forcibly terminated, which\
+ \ could be part of an administrative task or a potentially unauthorized access attempt.\
+ \ This detection helps identify potential misuse or malicious activity where a user\u2019\
+ s access is revoked without proper authorization, providing insight into potential\
+ \ security incidents involving account management or session manipulation."
search: '| tstats `security_content_summariesonly` min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name = logoff.exe
- by Processes.parent_process_name Processes.parent_process Processes.process_name
- Processes.process Processes.process_guid Processes.dest Processes.user | `drop_dm_object_name(Processes)`
- | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_account_access_removal_via_logoff_exec_filter`'
+ by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
+ Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
+ Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
+ Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
+ Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
+ | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
+ | `windows_account_access_removal_via_logoff_exec_filter`'
how_to_implement: The following Hunting analytic requires PowerShell operational logs
to be imported. Modify the powershell macro as needed to match the sourcetype or
add index. This analytic is specific to 4104, or PowerShell Script Block Logging.
@@ -64,7 +68,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1531/powershell_log_process_tree/powershell_logoff.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1531/powershell_log_process_tree/powershell_logoff.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/windows_account_discovery_for_none_disable_user_account.yml b/detections/endpoint/windows_account_discovery_for_none_disable_user_account.yml
index 7ddbfdb697..8a24683df4 100644
--- a/detections/endpoint/windows_account_discovery_for_none_disable_user_account.yml
+++ b/detections/endpoint/windows_account_discovery_for_none_disable_user_account.yml
@@ -1,6 +1,6 @@
name: Windows Account Discovery for None Disable User Account
id: eddbf5ba-b89e-47ca-995e-2d259804e55e
-version: 6
+version: 7
date: '2025-02-10'
author: Teoderick Contreras, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects the execution of the PowerView Power
for further exploitation. If confirmed malicious, this activity could lead to unauthorized
access, privilege escalation, or lateral movement within the network.
search: '`powershell` EventCode=4104 ScriptBlockText = "*Get-NetUser*" ScriptBlockText
- = "*NOT_ACCOUNTDISABLE*" ScriptBlockText = "*-UACFilter*" | rename Computer as dest,
- UserID as user | stats count min(_time) as firstTime max(_time) as lastTime by EventCode
- ScriptBlockText dest user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `windows_account_discovery_for_none_disable_user_account_filter`'
+ = "*NOT_ACCOUNTDISABLE*" ScriptBlockText = "*-UACFilter*" | fillnull | stats count
+ min(_time) as firstTime max(_time) as lastTime by dest signature signature_id user_id
+ vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_account_discovery_for_none_disable_user_account_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.=
@@ -44,7 +44,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087/powerview_get_netuser_preauthnotrequire/get-netuser-not-require-pwh.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087/powerview_get_netuser_preauthnotrequire/get-netuser-not-require-pwh.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/windows_account_discovery_for_sam_account_name.yml b/detections/endpoint/windows_account_discovery_for_sam_account_name.yml
index 13e239cb64..a9c8b57f1a 100644
--- a/detections/endpoint/windows_account_discovery_for_sam_account_name.yml
+++ b/detections/endpoint/windows_account_discovery_for_sam_account_name.yml
@@ -1,6 +1,6 @@
name: Windows Account Discovery for Sam Account Name
id: 69934363-e1dd-4c49-8651-9d7663dd4d2f
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -16,10 +16,10 @@ description: The following analytic detects the execution of the PowerView Power
this activity could allow an attacker to map out user accounts, potentially leading
to further exploitation and unauthorized access within the network.
search: '`powershell` EventCode=4104 ScriptBlockText = "*Get-NetUser*" ScriptBlockText
- IN ("*samaccountname*", "*pwdlastset*") | rename Computer as dest, UserID as user
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- dest user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `windows_account_discovery_for_sam_account_name_filter`'
+ IN ("*samaccountname*", "*pwdlastset*") | fillnull | stats count min(_time) as firstTime
+ max(_time) as lastTime by dest signature signature_id user_id vendor_product EventID
+ Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `windows_account_discovery_for_sam_account_name_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.=
@@ -62,7 +62,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087/powerview_get_netuser_preauthnotrequire/get-netuser-not-require-pwh.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087/powerview_get_netuser_preauthnotrequire/get-netuser-not-require-pwh.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/windows_account_discovery_with_netuser_preauthnotrequire.yml b/detections/endpoint/windows_account_discovery_with_netuser_preauthnotrequire.yml
index 27a5351a7d..64367c7e25 100644
--- a/detections/endpoint/windows_account_discovery_with_netuser_preauthnotrequire.yml
+++ b/detections/endpoint/windows_account_discovery_with_netuser_preauthnotrequire.yml
@@ -1,6 +1,6 @@
name: Windows Account Discovery With NetUser PreauthNotRequire
id: cf056b65-44b2-4d32-9172-d6b6f081a376
-version: 4
+version: 5
date: '2024-11-13'
author: Teoderick Contreras, Splunk
status: production
@@ -15,10 +15,10 @@ description: The following analytic detects the execution of the PowerView Power
accounts. If confirmed malicious, this behavior could lead to further exploitation,
such as unauthorized access or privilege escalation within the network.
search: '`powershell` EventCode=4104 ScriptBlockText = "*Get-NetUser*" ScriptBlockText
- = "*-PreauthNotRequire*" | rename Computer as dest, UserID as user | stats count
- min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText dest
- user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | `windows_account_discovery_with_netuser_preauthnotrequire_filter`'
+ = "*-PreauthNotRequire*" | fillnull | stats count min(_time) as firstTime max(_time)
+ as lastTime by dest signature signature_id user_id vendor_product EventID Guid Opcode
+ Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)`
+ | `security_content_ctime(lastTime)` | `windows_account_discovery_with_netuser_preauthnotrequire_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable
PowerShell Script Block Logging on some or all endpoints. Additional setup here
https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell#Configure_module_logging_for_PowerShell.=
@@ -40,7 +40,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087/powerview_get_netuser_preauthnotrequire/get-netuser-not-require-pwh.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1087/powerview_get_netuser_preauthnotrequire/get-netuser-not-require-pwh.log
source: XmlWinEventLog:Microsoft-Windows-PowerShell/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/application/windows_ad_add_self_to_group.yml b/detections/endpoint/windows_ad_add_self_to_group.yml
similarity index 90%
rename from detections/application/windows_ad_add_self_to_group.yml
rename to detections/endpoint/windows_ad_add_self_to_group.yml
index 898b7fbfb8..d2a79bb882 100644
--- a/detections/application/windows_ad_add_self_to_group.yml
+++ b/detections/endpoint/windows_ad_add_self_to_group.yml
@@ -1,6 +1,6 @@
name: Windows AD add Self to Group
id: 065f2701-b7ea-42f5-9ec4-fbc2261165f9
-version: 3
+version: 4
date: '2025-01-21'
author: Dean Luxton
status: production
@@ -16,7 +16,7 @@ description: This analytic detects instances where a user adds themselves to an
search: '`wineventlog_security` EventCode IN (4728) | where user=src_user | stats
min(_time) as _time dc(user) as usercount, values(user) as user values(user_category)
as user_category values(src_user_category) as src_user_category values(dvc) as dvc
- by signature, Group_Name, src_user | `windows_ad_add_self_to_group_filter`'
+ by signature, Group_Name, src_user, dest | `windows_ad_add_self_to_group_filter`'
how_to_implement: This analytic requires eventCode 4728 to be ingested.
known_false_positives: Unknown
references: []
@@ -56,7 +56,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098/account_manipulation/xml-windows-security.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098/account_manipulation/xml-windows-security.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/windows_ad_adminsdholder_acl_modified.yml b/detections/endpoint/windows_ad_adminsdholder_acl_modified.yml
index 87740e631d..1aa986e497 100644
--- a/detections/endpoint/windows_ad_adminsdholder_acl_modified.yml
+++ b/detections/endpoint/windows_ad_adminsdholder_acl_modified.yml
@@ -1,6 +1,6 @@
name: Windows AD AdminSDHolder ACL Modified
id: 00d877c3-7b7b-443d-9562-6b231e2abab9
-version: 6
+version: 7
date: '2024-11-13'
author: Mauricio Velazco, Dean Luxton, Splunk
type: TTP
@@ -15,35 +15,35 @@ description: The following analytic detects modifications to the Access Control
can allow attackers to establish persistence and escalate privileges. If confirmed
malicious, this could enable an attacker to control domain-level permissions, compromising
the entire Active Directory environment.
-search: "`wineventlog_security` EventCode=5136 ObjectClass=container ObjectDN=\"CN=AdminSDHolder,CN=System*\"\
- \ | stats min(_time) as _time values(eval(if(OperationType==\"%%14675\",AttributeValue,null)))
- as old_value values(eval(if(OperationType==\"%%14674\",AttributeValue,null))) as
- new_value values(OperationType) as OperationType by ObjectClass ObjectDN OpCorrelationID
- src_user SubjectLogonId | rex field=old_value max_match=10000 \"\\((?P.*?)\\\
- )\" | rex field=new_value max_match=10000 \"\\((?P.*?)\\)\" | mvexpand
- new_ace | where NOT new_ace IN (old_values) | rex field=new_ace \"(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$\"\
- \ | rex max_match=100 field=aceAccessRights \"(?P[A-Z]{2})\" | rex
- max_match=100 field=aceFlags \"(?P[A-Z]{2})\" | lookup msad_guid_lookup
- guid as aceObjectGuid OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup
- access_rights_string as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup
- ace_type_string as aceType OUTPUT ace_type_value | lookup ace_flag_lookup flag_string
- as aceFlags OUTPUT flag_value as ace_flag_value ``` Optional SID resolution lookups
- | lookup identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName
- as user | lookup admon_groups_def objectSid as aceSid OUTPUT cn as group``` | lookup
- builtin_groups_lookup builtin_group_string as aceSid OUTPUTNEW builtin_group_name
- as builtin_group | eval aceType=coalesce(ace_type_value,aceType), aceFlags=coalesce(ace_flag_value,\"\
- This object only\"), aceAccessRights=if(aceAccessRights=\"CCDCLCSWRPWPDTLOCRSDRCWDWO\"\
- ,\"Full control\",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=coalesce(ControlAccessRights,aceObjectGuid),
+search: '`wineventlog_security` EventCode=5136 ObjectClass=container ObjectDN="CN=AdminSDHolder,CN=System*" |
+ stats min(_time) as _time values(eval(if(OperationType=="%%14675",AttributeValue,null)))
+ as old_value values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value
+ values(OperationType) as OperationType values(dest) as dest by ObjectClass ObjectDN
+ OpCorrelationID src_user SubjectLogonId | rex field=old_value max_match=10000 "\((?P.*?)\)" |
+ rex field=new_value max_match=10000 "\((?P.*?)\)" | mvexpand new_ace |
+ where NOT new_ace IN (old_values) | rex field=new_ace "(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$"
+ | rex max_match=100 field=aceAccessRights "(?P[A-Z]{2})" | rex max_match=100
+ field=aceFlags "(?P[A-Z]{2})" | lookup msad_guid_lookup guid as aceObjectGuid
+ OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup access_rights_string
+ as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup ace_type_string
+ as aceType OUTPUT ace_type_value | lookup ace_flag_lookup flag_string as aceFlags
+ OUTPUT flag_value as ace_flag_value ``` Optional SID resolution lookups | lookup
+ identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName as user |
+ lookup admon_groups_def objectSid as aceSid OUTPUT cn as group``` | lookup builtin_groups_lookup
+ builtin_group_string as aceSid OUTPUTNEW builtin_group_name as builtin_group |
+ eval aceType=coalesce(ace_type_value,aceType), aceFlags=coalesce(ace_flag_value,"This
+ object only"), aceAccessRights=if(aceAccessRights="CCDCLCSWRPWPDTLOCRSDRCWDWO","Full
+ control",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=coalesce(ControlAccessRights,aceObjectGuid),
user=coalesce(user, group, builtin_group, aceSid) | stats min(_time) as _time values(aceType)
as aceType values(aceFlags) as aceFlags(inheritance) values(aceControlAccessRights)
as aceControlAccessRights values(aceAccessRights) as aceAccessRights values(new_ace)
as new_ace values(SubjectLogonId) as SubjectLogonId by ObjectClass ObjectDN src_user
- user | eval aceControlAccessRights=if(mvcount(aceControlAccessRights)=1 AND aceControlAccessRights=\"\
- \",\"All rights\",'aceControlAccessRights') | search NOT aceType IN (*denied*,D,OD,XD)
- AND aceAccessRights IN (\"Full control\",\"All extended rights\",\"All validated
- writes\",\"Create all child objects\",\"Delete all child objects\",\"Delete subtree\"\
- ,\"Delete\",\"Modify permissions\",\"Modify owner\",\"Write all properties\",CC,CR,DC,DT,SD,SW,WD,WO,WP)
- | `windows_ad_adminsdholder_acl_modified_filter`"
+ user | eval aceControlAccessRights=if(mvcount(aceControlAccessRights)=1 AND aceControlAccessRights="","All
+ rights",''aceControlAccessRights'') | search NOT aceType IN (*denied*,D,OD,XD) AND
+ aceAccessRights IN ("Full control","All extended rights","All validated writes","Create
+ all child objects","Delete all child objects","Delete subtree","Delete","Modify
+ permissions","Modify owner","Write all properties",CC,CR,DC,DT,SD,SW,WD,WO,WP) |
+ `windows_ad_adminsdholder_acl_modified_filter`'
how_to_implement: To successfully implement this search, you ned to be ingesting eventcode
`5136`. The Advanced Security Audit policy setting `Audit Directory Services Changes`
within `DS Access` needs to be enabled. Additionally, a SACL needs to be created
@@ -97,7 +97,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546/adminsdholder_modified/windows-security.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1546/adminsdholder_modified/windows-security.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/windows_ad_cross_domain_sid_history_addition.yml b/detections/endpoint/windows_ad_cross_domain_sid_history_addition.yml
index 79de518830..10aae41670 100644
--- a/detections/endpoint/windows_ad_cross_domain_sid_history_addition.yml
+++ b/detections/endpoint/windows_ad_cross_domain_sid_history_addition.yml
@@ -1,6 +1,6 @@
name: Windows AD Cross Domain SID History Addition
id: 41bbb371-28ba-439c-bb5c-d9930c28365d
-version: 7
+version: 8
date: '2025-02-10'
author: Dean Luxton
type: TTP
@@ -20,7 +20,7 @@ search: '`wineventlog_security` (EventCode=4742 OR EventCode=4738) NOT SidHistor
IN ("%%1793", -) | rex field=SidHistory "(^%{|^)(?P.*)(\-|\\\)"
| rex field=TargetSid "^(?P.*)(\-|\\\)" | where SidHistoryMatch!=TargetSidmatch
AND SidHistoryMatch!=TargetDomainName | rename TargetSid as userSid | table _time
- action status host user userSid SidHistory Logon_ID src_user | `windows_ad_cross_domain_sid_history_addition_filter`'
+ action status host user userSid SidHistory Logon_ID src_user dest | `windows_ad_cross_domain_sid_history_addition_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
eventcodes `4738` and `4742`. The Advanced Security Audit policy settings `Audit
User Account Management` and `Audit Computer Account Management` within `Account
@@ -70,7 +70,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1134.005/mimikatz/windows-security-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1134.005/mimikatz/windows-security-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/application/windows_ad_dangerous_deny_acl_modification.yml b/detections/endpoint/windows_ad_dangerous_deny_acl_modification.yml
similarity index 61%
rename from detections/application/windows_ad_dangerous_deny_acl_modification.yml
rename to detections/endpoint/windows_ad_dangerous_deny_acl_modification.yml
index 4ca51f8ecb..8137dd2fb4 100644
--- a/detections/application/windows_ad_dangerous_deny_acl_modification.yml
+++ b/detections/endpoint/windows_ad_dangerous_deny_acl_modification.yml
@@ -1,6 +1,6 @@
name: Windows AD Dangerous Deny ACL Modification
id: 8e897153-2ebd-4cb2-85d3-09ad57db2fb7
-version: 4
+version: 5
date: '2025-02-10'
author: Dean Luxton
status: production
@@ -10,33 +10,32 @@ data_source:
description: This detection identifies an Active Directory access-control list (ACL)
modification event, which applies permissions that deny the ability to enumerate
permissions of the object.
-search: "`wineventlog_security` EventCode=5136 | stats min(_time) as _time values(eval(if(OperationType==\"\
- %%14675\",AttributeValue,null))) as old_value values(eval(if(OperationType==\"%%14674\"\
- ,AttributeValue,null))) as new_value values(OperationType) as OperationType by ObjectClass
- ObjectDN OpCorrelationID src_user SubjectLogonId | rex field=old_value max_match=10000
- \"\\((?P.*?)\\)\" | rex field=new_value max_match=10000 \"\\((?P.*?)\\\
- )\" | mvexpand new_ace | where NOT new_ace IN (old_values) | rex field=new_ace
- \"(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$\"\
- \ | rex max_match=100 field=aceAccessRights \"(?P[A-Z]{2})\" | rex
- max_match=100 field=aceFlags \"(?P[A-Z]{2})\" | lookup msad_guid_lookup
- guid as aceObjectGuid OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup
- access_rights_string as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup
- ace_type_string as aceType OUTPUT ace_type_value as aceType | lookup ace_flag_lookup
- flag_string as aceFlags OUTPUT flag_value as ace_flag_value ``` Optional SID resolution
- lookups | lookup identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName
+search: '`wineventlog_security` EventCode=5136 | stats min(_time) as _time values(eval(if(OperationType=="%%14675",AttributeValue,null)))
+ as old_value values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value
+ values(OperationType) as OperationType values(dest) as dest by ObjectClass ObjectDN
+ OpCorrelationID src_user SubjectLogonId | rex field=old_value max_match=10000 "\((?P.*?)\)" |
+ rex field=new_value max_match=10000 "\((?P.*?)\)" | mvexpand new_ace |
+ where NOT new_ace IN (old_values) | rex field=new_ace "(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$" |
+ rex max_match=100 field=aceAccessRights "(?P[A-Z]{2})" | rex max_match=100
+ field=aceFlags "(?P[A-Z]{2})" | lookup msad_guid_lookup guid as aceObjectGuid
+ OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup access_rights_string
+ as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup ace_type_string
+ as aceType OUTPUT ace_type_value as aceType | lookup ace_flag_lookup flag_string
+ as aceFlags OUTPUT flag_value as ace_flag_value ``` Optional SID resolution lookups
+ | lookup identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName
as user | lookup admon_groups_def objectSid as aceSid OUTPUT cn as group ``` |
lookup builtin_groups_lookup builtin_group_string as aceSid OUTPUT builtin_group_name
- as builtin_group | eval aceType=coalesce(ace_type_value,aceType), aceFlags=coalesce(ace_flag_value,\"\
- This object only\"), aceAccessRights=if(aceAccessRights=\"CCDCLCSWRPWPDTLOCRSDRCWDWO\"\
- ,\"Full control\",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=coalesce(ControlAccessRights,aceObjectGuid),
+ as builtin_group | eval aceType=coalesce(ace_type_value,aceType), aceFlags=coalesce(ace_flag_value,"This
+ object only"), aceAccessRights=if(aceAccessRights="CCDCLCSWRPWPDTLOCRSDRCWDWO","Full
+ control",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=coalesce(ControlAccessRights,aceObjectGuid),
user=coalesce(user, group, builtin_group, aceSid) | stats values(aceType) as aceType
values(aceFlags) as aceFlags values(aceControlAccessRights) as aceControlAccessRights
values(aceAccessRights) as aceAccessRights values(new_ace) as new_ace values(aceInheritedTypeGuid)
as aceInheritedTypeGuid by _time ObjectClass ObjectDN src_user SubjectLogonId user
OpCorrelationID | eval aceControlAccessRights=if(mvcount(aceControlAccessRights)=1
- AND aceControlAccessRights=\"\",\"All rights\",'aceControlAccessRights') | search
- aceType IN (\"Access denied\",D) AND aceAccessRights IN (\"Full control\",\"Read
- permissions\",RC) | `windows_ad_dangerous_deny_acl_modification_filter`"
+ AND aceControlAccessRights="","All rights",''aceControlAccessRights'') | search
+ aceType IN ("Access denied",D) AND aceAccessRights IN ("Full control","Read permissions",RC)
+ | `windows_ad_dangerous_deny_acl_modification_filter`'
how_to_implement: Ensure you are ingesting Active Directory audit logs - specifically
event 5136. See lantern article in references for further on how to onboard AD audit
data. Ensure the wineventlog_security macro is configured with the correct indexes
@@ -86,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/hidden_object_windows-security-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/hidden_object_windows-security-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/application/windows_ad_dangerous_group_acl_modification.yml b/detections/endpoint/windows_ad_dangerous_group_acl_modification.yml
similarity index 64%
rename from detections/application/windows_ad_dangerous_group_acl_modification.yml
rename to detections/endpoint/windows_ad_dangerous_group_acl_modification.yml
index b16d8e4701..2c4b8152a2 100644
--- a/detections/application/windows_ad_dangerous_group_acl_modification.yml
+++ b/detections/endpoint/windows_ad_dangerous_group_acl_modification.yml
@@ -1,6 +1,6 @@
name: Windows AD Dangerous Group ACL Modification
id: 59b0fc85-7a0d-4585-97ec-06a382801990
-version: 4
+version: 5
date: '2025-02-10'
author: Dean Luxton
status: production
@@ -13,38 +13,37 @@ description: 'This detection monitors the addition of the following ACLs to an A
permissions", "Modify owner", and "Write all properties". Such modifications can
indicate potential privilege escalation or malicious activity. Immediate investigation
is recommended upon alert.'
-search: "`wineventlog_security` EventCode=5136 ObjectClass=group | stats min(_time)
- as _time values(eval(if(OperationType==\"%%14675\",AttributeValue,null))) as old_value
- values(eval(if(OperationType==\"%%14674\",AttributeValue,null))) as new_value values(OperationType)
- as OperationType by ObjectClass ObjectDN OpCorrelationID src_user SubjectLogonId\
- \ | rex field=old_value max_match=10000 \"\\((?P.*?)\\)\" | rex field=new_value
- max_match=10000 \"\\((?P.*?)\\)\" | mvexpand new_ace | where NOT new_ace
- IN (old_values) | rex field=new_ace \"(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$\"\
- \ | rex max_match=100 field=aceAccessRights \"(?P[A-Z]{2})\" | rex
- max_match=100 field=aceFlags \"(?P[A-Z]{2})\" | lookup ace_type_lookup
- ace_type_string as aceType OUTPUT ace_type_value as aceType | lookup ace_flag_lookup
- flag_string as aceFlags OUTPUT flag_value as ace_flag_value | lookup ace_access_rights_lookup
+search: '`wineventlog_security` EventCode=5136 ObjectClass=group | stats min(_time)
+ as _time values(eval(if(OperationType=="%%14675",AttributeValue,null))) as old_value
+ values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value values(OperationType)
+ as OperationType values(dest) as dest by ObjectClass ObjectDN OpCorrelationID src_user
+ SubjectLogonId | rex field=old_value max_match=10000 "\((?P.*?)\)" |
+ rex field=new_value max_match=10000 "\((?P.*?)\)" | mvexpand new_ace |
+ where NOT new_ace IN (old_values) | rex field=new_ace "(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$" |
+ rex max_match=100 field=aceAccessRights "(?P[A-Z]{2})" | rex max_match=100
+ field=aceFlags "(?P[A-Z]{2})" | lookup ace_type_lookup ace_type_string
+ as aceType OUTPUT ace_type_value as aceType | lookup ace_flag_lookup flag_string
+ as aceFlags OUTPUT flag_value as ace_flag_value | lookup ace_access_rights_lookup
access_rights_string as AccessRights OUTPUT access_rights_value | lookup msad_guid_lookup
guid as aceObjectGuid OUTPUT displayName as ControlAccessRights ``` Optional SID
resolution lookups | lookup identity_lookup_expanded objectSid as aceSid OUTPUT
downLevelDomainName as user | lookup admon_groups_def objectSid as aceSid OUTPUT
cn as group ``` | lookup builtin_groups_lookup builtin_group_string as aceSid OUTPUT
builtin_group_name as builtin_group | eval aceType=coalesce(ace_type_value,aceType),
- aceInheritance=coalesce(ace_flag_value,\"This object only\"), aceAccessRights=if(aceAccessRights=\"\
- CCDCLCSWRPWPDTLOCRSDRCWDWO\",\"Full control\",coalesce(access_rights_value,AccessRights)),
- aceControlAccessRights=if((ControlAccessRights=\"Write member\" OR aceObjectGuid=\"\
- bf9679c0-0de6-11d0-a285-00aa003049e2\") AND (aceAccessRights=\"All validated writes\"\
- \ OR AccessRights=\"SW\"),\"Add/remove self as member\",coalesce(ControlAccessRights,aceObjectGuid)),
+ aceInheritance=coalesce(ace_flag_value,"This object only"), aceAccessRights=if(aceAccessRights="CCDCLCSWRPWPDTLOCRSDRCWDWO","Full
+ control",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=if((ControlAccessRights="Write
+ member" OR aceObjectGuid="bf9679c0-0de6-11d0-a285-00aa003049e2") AND (aceAccessRights="All
+ validated writes" OR AccessRights="SW"),"Add/remove self as member",coalesce(ControlAccessRights,aceObjectGuid)),
user=coalesce(user, group, builtin_group, aceSid) | stats values(aceType) as aceType
values(aceInheritance) as aceInheritance values(aceControlAccessRights) as aceControlAccessRights
values(aceAccessRights) as aceAccessRights values(new_ace) as new_ace values(aceInheritedTypeGuid)
as aceInheritedTypeGuid by _time ObjectClass ObjectDN src_user SubjectLogonId user
OpCorrelationID | eval aceControlAccessRights=if(mvcount(aceControlAccessRights)=1
- AND aceControlAccessRights=\"\",\"All rights\",'aceControlAccessRights') | search
- NOT aceType IN (\"*denied*\",\"D\",\"OD\",\"XD\") AND aceAccessRights IN (\"Full
- control\",\"All extended rights\",\"All validated writes\",\"Create all child objects\"\
- ,\"Delete all child objects\",\"Delete subtree\",\"Delete\",\"Modify permissions\"\
- ,\"Modify owner\",\"Write all properties\",CC,CR,DC,DT,SD,SW,WD,WO,WP) | `windows_ad_dangerous_group_acl_modification_filter`"
+ AND aceControlAccessRights="","All rights",''aceControlAccessRights'') | search
+ NOT aceType IN ("*denied*","D","OD","XD") AND aceAccessRights IN ("Full control","All
+ extended rights","All validated writes","Create all child objects","Delete all child
+ objects","Delete subtree","Delete","Modify permissions","Modify owner","Write all
+ properties",CC,CR,DC,DT,SD,SW,WD,WO,WP) | `windows_ad_dangerous_group_acl_modification_filter`'
how_to_implement: Ensure you are ingesting Active Directory audit logs - specifically
event 5136. See lantern article in references for further on how to onboard AD audit
data. Ensure the wineventlog_security macro is configured with the correct indexes
@@ -95,7 +94,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/group_dacl_mod_windows-security-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/group_dacl_mod_windows-security-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/application/windows_ad_dangerous_user_acl_modification.yml b/detections/endpoint/windows_ad_dangerous_user_acl_modification.yml
similarity index 62%
rename from detections/application/windows_ad_dangerous_user_acl_modification.yml
rename to detections/endpoint/windows_ad_dangerous_user_acl_modification.yml
index b1da8218eb..50a4431520 100644
--- a/detections/application/windows_ad_dangerous_user_acl_modification.yml
+++ b/detections/endpoint/windows_ad_dangerous_user_acl_modification.yml
@@ -1,6 +1,6 @@
name: Windows AD Dangerous User ACL Modification
id: ec5b6790-595a-4fb8-ad43-56e5b55a9617
-version: 4
+version: 5
date: '2025-02-10'
author: Dean Luxton
status: production
@@ -13,35 +13,35 @@ description: 'This detection monitors the addition of the following ACLs to an A
permissions","Modify owner","Write all properties". Such modifications can indicate
potential privilege escalation or malicious activity. Immediate investigation is
recommended upon alert.'
-search: "`wineventlog_security` EventCode=5136 ObjectClass=user | stats min(_time)
- as _time values(eval(if(OperationType==\"%%14675\",AttributeValue,null))) as old_value
- values(eval(if(OperationType==\"%%14674\",AttributeValue,null))) as new_value values(OperationType)
- as OperationType by ObjectClass ObjectDN OpCorrelationID src_user SubjectLogonId\
- \ | rex field=old_value max_match=10000 \"\\((?P.*?)\\)\" | rex field=new_value
- max_match=10000 \"\\((?P.*?)\\)\" | mvexpand new_ace | where NOT new_ace
- IN (old_values) | rex field=new_ace \"(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$\"\
- \ | rex max_match=100 field=aceAccessRights \"(?P[A-Z]{2})\" | rex
- max_match=100 field=aceFlags \"(?P[A-Z]{2})\" | lookup msad_guid_lookup
- guid as aceObjectGuid OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup
- access_rights_string as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup
- ace_type_string as aceType OUTPUT ace_type_value as aceType | lookup ace_flag_lookup
- flag_string as aceFlags OUTPUT flag_value as ace_flag_value ``` Optional SID resolution
- lookups | lookup identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName
+search: '`wineventlog_security` EventCode=5136 ObjectClass=user | stats min(_time)
+ as _time values(eval(if(OperationType=="%%14675",AttributeValue,null))) as old_value
+ values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value values(OperationType)
+ as OperationType values(dest) as dest by ObjectClass ObjectDN OpCorrelationID src_user
+ SubjectLogonId | rex field=old_value max_match=10000 "\((?P.*?)\)" |
+ rex field=new_value max_match=10000 "\((?P.*?)\)" | mvexpand new_ace |
+ where NOT new_ace IN (old_values) | rex field=new_ace "(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$" |
+ rex max_match=100 field=aceAccessRights "(?P[A-Z]{2})" | rex max_match=100
+ field=aceFlags "(?P[A-Z]{2})" | lookup msad_guid_lookup guid as aceObjectGuid
+ OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup access_rights_string
+ as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup ace_type_string
+ as aceType OUTPUT ace_type_value as aceType | lookup ace_flag_lookup flag_string
+ as aceFlags OUTPUT flag_value as ace_flag_value ``` Optional SID resolution lookups
+ | lookup identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName
as user | lookup admon_groups_def objectSid as aceSid OUTPUT cn as group ``` |
lookup builtin_groups_lookup builtin_group_string as aceSid OUTPUT builtin_group_name
- as builtin_group | eval aceType=coalesce(ace_type_value,aceType), aceFlags=coalesce(ace_flag_value,\"\
- This object only\"), aceAccessRights=if(aceAccessRights=\"CCDCLCSWRPWPDTLOCRSDRCWDWO\"\
- ,\"Full control\",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=coalesce(ControlAccessRights,aceObjectGuid),
+ as builtin_group | eval aceType=coalesce(ace_type_value,aceType), aceFlags=coalesce(ace_flag_value,"This
+ object only"), aceAccessRights=if(aceAccessRights="CCDCLCSWRPWPDTLOCRSDRCWDWO","Full
+ control",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=coalesce(ControlAccessRights,aceObjectGuid),
user=coalesce(user, group, builtin_group, aceSid) | stats values(aceType) as aceType
values(aceFlags) as aceFlags values(aceControlAccessRights) as aceControlAccessRights
values(aceAccessRights) as aceAccessRights values(new_ace) as new_ace values(aceInheritedTypeGuid)
as aceInheritedTypeGuid by _time ObjectClass ObjectDN src_user SubjectLogonId user
OpCorrelationID | eval aceControlAccessRights=if(mvcount(aceControlAccessRights)=1
- AND aceControlAccessRights=\"\",\"All rights\",'aceControlAccessRights') | search
- NOT aceType IN (*denied*,D,OD,XD) AND aceAccessRights IN (\"Full control\",\"All
- extended rights\",\"All validated writes\",\"Create all child objects\",\"Delete
- all child objects\",\"Delete subtree\",\"Delete\",\"Modify permissions\",\"Modify
- owner\",\"Write all properties\",CC,CR,DC,DT,SD,SW,WD,WO,WP) | `windows_ad_dangerous_user_acl_modification_filter`"
+ AND aceControlAccessRights="","All rights",''aceControlAccessRights'') | search
+ NOT aceType IN (*denied*,D,OD,XD) AND aceAccessRights IN ("Full control","All extended
+ rights","All validated writes","Create all child objects","Delete all child objects","Delete
+ subtree","Delete","Modify permissions","Modify owner","Write all properties",CC,CR,DC,DT,SD,SW,WD,WO,WP)
+ | `windows_ad_dangerous_user_acl_modification_filter`'
how_to_implement: Ensure you are ingesting Active Directory audit logs - specifically
event 5136. See lantern article in references for further on how to onboard AD audit
data. Ensure the wineventlog_security macro is configured with the correct indexes
@@ -92,7 +92,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/user_dacl_mod_windows-security-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/user_dacl_mod_windows-security-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/application/windows_ad_dcshadow_privileges_acl_addition.yml b/detections/endpoint/windows_ad_dcshadow_privileges_acl_addition.yml
similarity index 89%
rename from detections/application/windows_ad_dcshadow_privileges_acl_addition.yml
rename to detections/endpoint/windows_ad_dcshadow_privileges_acl_addition.yml
index f99443215b..2f0dfc601c 100644
--- a/detections/application/windows_ad_dcshadow_privileges_acl_addition.yml
+++ b/detections/endpoint/windows_ad_dcshadow_privileges_acl_addition.yml
@@ -1,6 +1,6 @@
name: Windows AD DCShadow Privileges ACL Addition
id: ae915743-1aa8-4a94-975c-8062ebc8b723
-version: 4
+version: 5
date: '2025-02-17'
author: Dean Luxton
status: production
@@ -13,10 +13,10 @@ description: This detection identifies an Active Directory access-control list (
search: '`wineventlog_security` EventCode=5136 ObjectClass=domainDNS | stats min(_time)
as _time values(eval(if(OperationType=="%%14675",AttributeValue,null))) as old_value
values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value values(OperationType)
- as OperationType by ObjectClass ObjectDN OpCorrelationID src_user SubjectLogonId |
- rex field=old_value max_match=10000 "\((?P.*?)\)" | rex field=new_value
- max_match=10000 "\((?P.*?)\)" | mvexpand new_ace | where NOT new_ace IN
- (old_values) | rex field=new_ace "(?P.*?);(?P.*?);(?P.*?);(?P.*?);;(?P.*?)$"
+ as OperationType values(dest) as dest by ObjectClass ObjectDN OpCorrelationID src_user
+ SubjectLogonId | rex field=old_value max_match=10000 "\((?P.*?)\)" |
+ rex field=new_value max_match=10000 "\((?P.*?)\)" | mvexpand new_ace |
+ where NOT new_ace IN (old_values) | rex field=new_ace "(?P.*?);(?P.*?);(?P.*?);(?P.*?);;(?P.*?)$"
| search aceObjectGuid IN ("9923a32a-3607-11d2-b9be-0000f87a36b2","1131f6ab-9c07-11d1-f79f-00c04fc2dcd2","1131f6ac-9c07-11d1-f79f-00c04fc2dcd2")
| rex max_match=100 field=aceAccessRights "(?P[A-Z]{2})" | rex max_match=100
field=aceFlags "(?P[A-Z]{2})" | lookup msad_guid_lookup guid as aceObjectGuid
@@ -89,7 +89,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484/DCShadowPermissions/windows-security-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484/DCShadowPermissions/windows-security-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/windows_ad_domain_replication_acl_addition.yml b/detections/endpoint/windows_ad_domain_replication_acl_addition.yml
index 3aca3b0ac0..1b5d4510fe 100644
--- a/detections/endpoint/windows_ad_domain_replication_acl_addition.yml
+++ b/detections/endpoint/windows_ad_domain_replication_acl_addition.yml
@@ -1,6 +1,6 @@
name: Windows AD Domain Replication ACL Addition
id: 8c372853-f459-4995-afdc-280c114d33ab
-version: 8
+version: 9
date: '2024-12-10'
author: Dean Luxton
type: TTP
@@ -39,7 +39,7 @@ search: '`wineventlog_security` EventCode=5136 ObjectClass=domainDNS | stats mi
as aceType values(aceFlags) as aceFlags(inheritance) values(aceControlAccessRights)
as aceControlAccessRights values(aceAccessRights) as aceAccessRights values(new_ace)
as new_ace values(SubjectLogonId) as SubjectLogonId by ObjectClass ObjectDN src_user
- user | search (aceControlAccessRights="DS-Replication-Get-Changes" AND aceControlAccessRights="DS-Replication-Get-Changes-All")
+ user dest | search (aceControlAccessRights="DS-Replication-Get-Changes" AND aceControlAccessRights="DS-Replication-Get-Changes-All")
OR (aceControlAccessRights="1131f6aa-9c07-11d1-f79f-00c04fc2dcd2" AND aceControlAccessRights="1131f6ad-9c07-11d1-f79f-00c04fc2dcd2")
| `windows_ad_domain_replication_acl_addition_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting
@@ -100,7 +100,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484/aclmodification/windows-security-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484/aclmodification/windows-security-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/application/windows_ad_domain_root_acl_deletion.yml b/detections/endpoint/windows_ad_domain_root_acl_deletion.yml
similarity index 60%
rename from detections/application/windows_ad_domain_root_acl_deletion.yml
rename to detections/endpoint/windows_ad_domain_root_acl_deletion.yml
index 9650179024..975ecf1e0b 100644
--- a/detections/application/windows_ad_domain_root_acl_deletion.yml
+++ b/detections/endpoint/windows_ad_domain_root_acl_deletion.yml
@@ -1,6 +1,6 @@
name: Windows AD Domain Root ACL Deletion
id: 3cb56e57-5642-4638-907f-8dfde9afb889
-version: 4
+version: 5
date: '2025-02-10'
author: Dean Luxton
status: production
@@ -11,30 +11,30 @@ description: ACL deletion performed on the domain root object, significant AD ch
with high impact. Following MS guidance all changes at this level should be reviewed.
Drill into the logonID within EventCode 4624 for information on the source device
during triage.
-search: "`wineventlog_security` EventCode=5136 ObjectClass=domainDNS | stats min(_time)
- as _time values(eval(if(OperationType==\"%%14675\",AttributeValue,null))) as old_value
- values(eval(if(OperationType==\"%%14674\",AttributeValue,null))) as new_value values(OperationType)
- as OperationType by ObjectClass ObjectDN OpCorrelationID src_user SubjectLogonId\
- \ | rex field=old_value max_match=10000 \"\\((?P.*?)\\)\" | rex field=new_value
- max_match=10000 \"\\((?P.*?)\\)\" | mvexpand old_values | where NOT
- old_values IN (new_values) | rex field=old_values \"(?P.*?);(?P.*?);(?P.*?);(?P.*?);;(?P.*?)$\"\
- \ | rex max_match=100 field=aceAccessRights \"(?P[A-Z]{2})\" | rex
- max_match=100 field=aceFlags \"(?P[A-Z]{2})\" | lookup msad_guid_lookup
- guid as aceObjectGuid OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup
- access_rights_string as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup
- ace_type_string as aceType OUTPUT ace_type_value | lookup ace_flag_lookup flag_string
- as aceFlags OUTPUT flag_value as ace_flag_value ``` Optional SID resolution lookups
- | lookup identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName
- as user | lookup admon_groups_def objectSid as aceSid OUTPUT cn as group ``` |
- lookup builtin_groups_lookup builtin_group_string as aceSid OUTPUT builtin_group_name
- as builtin_group | eval aceType=coalesce(ace_type_value,aceType), aceFlags=coalesce(ace_flag_value,\"\
- This object only\"), aceAccessRights=if(aceAccessRights=\"CCDCLCSWRPWPDTLOCRSDRCWDWO\"\
- ,\"Full control\",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=coalesce(ControlAccessRights,aceObjectGuid),
+search: '`wineventlog_security` EventCode=5136 ObjectClass=domainDNS | stats min(_time)
+ as _time values(eval(if(OperationType=="%%14675",AttributeValue,null))) as old_value
+ values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value values(OperationType)
+ as OperationType values(dest) as dest by ObjectClass ObjectDN OpCorrelationID src_user
+ SubjectLogonId | rex field=old_value max_match=10000 "\((?P.*?)\)" |
+ rex field=new_value max_match=10000 "\((?P.*?)\)" | mvexpand old_values |
+ where NOT old_values IN (new_values) | rex field=old_values "(?P.*?);(?P.*?);(?P.*?);(?P.*?);;(?P.*?)$" |
+ rex max_match=100 field=aceAccessRights "(?P[A-Z]{2})" | rex max_match=100
+ field=aceFlags "(?P[A-Z]{2})" | lookup msad_guid_lookup guid as aceObjectGuid
+ OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup access_rights_string
+ as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup ace_type_string
+ as aceType OUTPUT ace_type_value | lookup ace_flag_lookup flag_string as aceFlags
+ OUTPUT flag_value as ace_flag_value ``` Optional SID resolution lookups | lookup
+ identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName as user |
+ lookup admon_groups_def objectSid as aceSid OUTPUT cn as group ``` | lookup builtin_groups_lookup
+ builtin_group_string as aceSid OUTPUT builtin_group_name as builtin_group | eval
+ aceType=coalesce(ace_type_value,aceType), aceFlags=coalesce(ace_flag_value,"This
+ object only"), aceAccessRights=if(aceAccessRights="CCDCLCSWRPWPDTLOCRSDRCWDWO","Full
+ control",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=coalesce(ControlAccessRights,aceObjectGuid),
user=coalesce(user, group, builtin_group, aceSid) | stats values(aceType) as aceType
values(aceFlags) as aceFlags(inheritance) values(aceControlAccessRights) as aceControlAccessRights
values(aceAccessRights) as aceAccessRights values(old_values) as old_values by _time
ObjectClass ObjectDN src_user SubjectLogonId user OpCorrelationID | eval aceControlAccessRights=if(mvcount(aceControlAccessRights)=1
- AND aceControlAccessRights=\"\",\"All rights\",'aceControlAccessRights') | `windows_ad_domain_root_acl_deletion_filter`"
+ AND aceControlAccessRights="","All rights",''aceControlAccessRights'') | `windows_ad_domain_root_acl_deletion_filter`'
how_to_implement: Ensure you are ingesting Active Directory audit logs - specifically
event 5136. See lantern article in references for further on how to onboard AD audit
data. Ensure the wineventlog_security macro is configured with the correct indexes
@@ -85,7 +85,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/domain_root_acl_deletion_windows-security-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/domain_root_acl_deletion_windows-security-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/application/windows_ad_domain_root_acl_modification.yml b/detections/endpoint/windows_ad_domain_root_acl_modification.yml
similarity index 57%
rename from detections/application/windows_ad_domain_root_acl_modification.yml
rename to detections/endpoint/windows_ad_domain_root_acl_modification.yml
index 93713d4782..0fa0eea7ff 100644
--- a/detections/application/windows_ad_domain_root_acl_modification.yml
+++ b/detections/endpoint/windows_ad_domain_root_acl_modification.yml
@@ -1,6 +1,6 @@
name: Windows AD Domain Root ACL Modification
id: 4981e2db-1372-440d-816e-3e7e2ed74433
-version: 4
+version: 5
date: '2025-02-10'
author: Dean Luxton
status: production
@@ -11,30 +11,29 @@ description: ACL modification performed on the domain root object, significant A
change with high impact. Following MS guidance all changes at this level should
be reviewed. Drill into the logonID within EventCode 4624 for information on the
source device during triage.
-search: "`wineventlog_security` EventCode=5136 ObjectClass=domainDNS | stats min(_time)
- as _time values(eval(if(OperationType==\"%%14675\",AttributeValue,null))) as old_value
- values(eval(if(OperationType==\"%%14674\",AttributeValue,null))) as new_value values(OperationType)
- as OperationType by ObjectClass ObjectDN OpCorrelationID src_user SubjectLogonId\
- \ | rex field=old_value max_match=10000 \"\\((?P.*?)\\)\" | rex field=new_value
- max_match=10000 \"\\((?P.*?)\\)\" | mvexpand new_ace | where NOT new_ace
- IN (old_values) | rex field=new_ace \"(?P.*?);(?P.*?);(?P.*?);(?P.*?);;(?P.*?)$\"\
- \ | rex max_match=100 field=aceAccessRights \"(?P[A-Z]{2})\" | rex
- max_match=100 field=aceFlags \"(?P[A-Z]{2})\" | lookup msad_guid_lookup
- guid as aceObjectGuid OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup
- access_rights_string as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup
- ace_type_string as aceType OUTPUT ace_type_value | lookup ace_flag_lookup flag_string
- as aceFlags OUTPUT flag_value as ace_flag_value ``` Optional SID resolution lookups
- | lookup identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName
- as user | lookup admon_groups_def objectSid as aceSid OUTPUT cn as group ``` |
- lookup builtin_groups_lookup builtin_group_string as aceSid OUTPUT builtin_group_name
- as builtin_group | eval aceAccessRights=if(aceAccessRights=\"CCDCLCSWRPWPDTLOCRSDRCWDWO\"\
- ,\"Full control\",'access_rights_value'), aceType=ace_type_value, aceFlags=coalesce(ace_flag_value,\"\
- This object only\"), aceControlAccessRights=ControlAccessRights, user=coalesce(user,
- group, builtin_group, aceSid) | stats values(aceType) as aceType values(aceFlags)
- as aceFlags(inheritance) values(aceControlAccessRights) as aceControlAccessRights
+search: '`wineventlog_security` EventCode=5136 ObjectClass=domainDNS | stats min(_time)
+ as _time values(eval(if(OperationType=="%%14675",AttributeValue,null))) as old_value
+ values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value values(OperationType)
+ as OperationType values(dest) as dest by ObjectClass ObjectDN OpCorrelationID src_user
+ SubjectLogonId | rex field=old_value max_match=10000 "\((?P.*?)\)" |
+ rex field=new_value max_match=10000 "\((?P.*?)\)" | mvexpand new_ace |
+ where NOT new_ace IN (old_values) | rex field=new_ace "(?P.*?);(?P.*?);(?P.*?);(?P.*?);;(?P.*?)$"
+ | rex max_match=100 field=aceAccessRights "(?P[A-Z]{2})" | rex max_match=100
+ field=aceFlags "(?P[A-Z]{2})" | lookup msad_guid_lookup guid as aceObjectGuid
+ OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup access_rights_string
+ as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup ace_type_string
+ as aceType OUTPUT ace_type_value | lookup ace_flag_lookup flag_string as aceFlags
+ OUTPUT flag_value as ace_flag_value ``` Optional SID resolution lookups | lookup
+ identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName as user |
+ lookup admon_groups_def objectSid as aceSid OUTPUT cn as group ``` | lookup builtin_groups_lookup
+ builtin_group_string as aceSid OUTPUT builtin_group_name as builtin_group | eval
+ aceAccessRights=if(aceAccessRights="CCDCLCSWRPWPDTLOCRSDRCWDWO","Full control",''access_rights_value''),
+ aceType=ace_type_value, aceFlags=coalesce(ace_flag_value,"This object only"), aceControlAccessRights=ControlAccessRights,
+ user=coalesce(user, group, builtin_group, aceSid) | stats values(aceType) as aceType
+ values(aceFlags) as aceFlags(inheritance) values(aceControlAccessRights) as aceControlAccessRights
values(aceAccessRights) as aceAccessRights values(new_ace) as new_ace by _time ObjectClass
ObjectDN src_user SubjectLogonId user OpCorrelationID | eval aceControlAccessRights=if(mvcount(aceControlAccessRights)=1
- AND aceControlAccessRights=\"\",\"All rights\",'aceControlAccessRights') | `windows_ad_domain_root_acl_modification_filter`"
+ AND aceControlAccessRights="","All rights",''aceControlAccessRights'') | `windows_ad_domain_root_acl_modification_filter`'
how_to_implement: Ensure you are ingesting Active Directory audit logs - specifically
event 5136. See lantern article in references for further on how to onboard AD audit
data. Ensure the wineventlog_security macro is configured with the correct indexes
@@ -85,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/domain_root_acl_mod_windows-security-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/domain_root_acl_mod_windows-security-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/endpoint/windows_ad_dsrm_account_changes.yml b/detections/endpoint/windows_ad_dsrm_account_changes.yml
index 47a929e7b3..172a75fe1a 100644
--- a/detections/endpoint/windows_ad_dsrm_account_changes.yml
+++ b/detections/endpoint/windows_ad_dsrm_account_changes.yml
@@ -1,13 +1,13 @@
name: Windows AD DSRM Account Changes
id: 08cb291e-ea77-48e8-a95a-0799319bf056
-version: 5
+version: 6
date: '2024-11-13'
author: Dean Luxton
type: TTP
status: production
data_source:
-- Sysmon EventID 1 AND Sysmon EventID 12
-- Sysmon EventID 1 AND Sysmon EventID 13
+- Sysmon EventID 12
+- Sysmon EventID 13
description: The following analytic identifies changes to the Directory Services Restore
Mode (DSRM) account behavior via registry modifications. It detects alterations
in the registry path "*\\System\\CurrentControlSet\\Control\\Lsa\\DSRMAdminLogonBehavior"
@@ -16,16 +16,13 @@ description: The following analytic identifies changes to the Directory Services
similar to a local administrator account. If confirmed malicious, an attacker could
gain persistent administrative access to a Domain Controller, leading to potential
domain-wide compromise and unauthorized access to sensitive information.
-search: '| tstats `security_content_summariesonly` min(_time) as _time from datamodel=Endpoint.Registry
- where Registry.registry_path= "*\\System\\CurrentControlSet\\Control\\Lsa\\DSRMAdminLogonBehavior"
- Registry.registry_value_data IN ("*1","*2") by Registry.action Registry.registry_path
- Registry.registry_value_data Registry.registry_value_type Registry.process_guid
- Registry.dest Registry.user | `drop_dm_object_name(Registry)` | join type=outer
- process_guid [| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
- by Processes.user Processes.process_name Processes.process Processes.dest Processes.parent_process_name
- Processes.parent_process Processes.process_guid | `drop_dm_object_name(Processes)`]
- | table _time action dest user parent_process_name parent_process process_name process
- process_guid registry_path registry_value_data registry_value_type | `windows_ad_dsrm_account_changes_filter`'
+search: '| tstats `security_content_summariesonly` min(_time) as firstTime max(_time)
+ as lastTime from datamodel=Endpoint.Registry where Registry.registry_path= "*\\System\\CurrentControlSet\\Control\\Lsa\\DSRMAdminLogonBehavior"
+ Registry.registry_value_data IN ("*1","*2") by Registry.action Registry.dest Registry.process_guid
+ Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name
+ Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type
+ Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`
+ | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_ad_dsrm_account_changes_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
@@ -78,7 +75,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098/dsrm_account/windows-sysmon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1098/dsrm_account/windows-sysmon.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
diff --git a/detections/application/windows_ad_gpo_deleted.yml b/detections/endpoint/windows_ad_gpo_deleted.yml
similarity index 70%
rename from detections/application/windows_ad_gpo_deleted.yml
rename to detections/endpoint/windows_ad_gpo_deleted.yml
index f55edba197..18cd993086 100644
--- a/detections/application/windows_ad_gpo_deleted.yml
+++ b/detections/endpoint/windows_ad_gpo_deleted.yml
@@ -1,6 +1,6 @@
name: Windows AD GPO Deleted
id: 0d41772b-35ab-4e1c-a2ba-d0b455481aee
-version: 4
+version: 5
date: '2025-02-17'
author: Dean Luxton
status: production
@@ -12,15 +12,16 @@ description: This detection identifies when an Active Directory Group Policy is
search: '`wineventlog_security` EventCode=5136 AttributeLDAPDisplayName=gpLink | eval ObjectDN=upper(ObjectDN)
| stats min(_time) as eventTime values(eval(if(OperationType=="%%14675",AttributeValue,null)))
as old_value values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value
- values(OperationType) as OperationType values(src_user) as src_user by OpCorrelationID
- ObjectDN SubjectLogonId | rex field=old_value max_match=10000 "(?i)LDAP://(?Pcn.*?);(?P\d)\]"
- | rex field=new_value max_match=10000 "(?i)LDAP://(?Pcn.*?);(?P\d)\]"
- | mvexpand old_dn | where NOT old_dn IN (new_dn) | eval ObjectDN=upper(old_dn) |
- join ObjectDN type=outer [| search `admon` objectCategory="CN=Group-Policy-Container*"
- admonEventType=Update | eval ObjectDN=upper(distinguishedName) | stats latest(displayName)
- as displayName by ObjectDN ] | stats min(eventTime) as _time values(OpCorrelationID)
- as OpCorrelationID values(displayName) as policyName values(src_user) as src_user
- by ObjectDN SubjectLogonId | `windows_ad_gpo_deleted_filter`'
+ values(OperationType) as OperationType values(src_user) as src_user values(dest)
+ as dest by OpCorrelationID ObjectDN SubjectLogonId | rex field=old_value max_match=10000
+ "(?i)LDAP://(?Pcn.*?);(?P\d)\]" | rex field=new_value max_match=10000
+ "(?i)LDAP://(?Pcn.*?);(?P\d)\]" | mvexpand old_dn | where NOT
+ old_dn IN (new_dn) | eval ObjectDN=upper(old_dn) | join ObjectDN type=outer [| search
+ `admon` objectCategory="CN=Group-Policy-Container*" admonEventType=Update | eval
+ ObjectDN=upper(distinguishedName) | stats latest(displayName) as displayName by
+ ObjectDN ] | stats min(eventTime) as _time values(OpCorrelationID) as OpCorrelationID
+ values(displayName) as policyName values(src_user) as src_user by ObjectDN SubjectLogonId
+ | `windows_ad_gpo_deleted_filter`'
how_to_implement: Ensure you are ingesting Active Directory audit logs - specifically
event 5136, admon data is also used to display the display name of the GPO. See
lantern article in references for further on how to onboard AD audit data. Ensure
@@ -64,11 +65,9 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_deleted/windows-security.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_deleted/windows-security.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_deleted/windows-admon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_deleted/windows-admon.log
source: ActiveDirectory
sourcetype: ActiveDirectory
diff --git a/detections/application/windows_ad_gpo_disabled.yml b/detections/endpoint/windows_ad_gpo_disabled.yml
similarity index 89%
rename from detections/application/windows_ad_gpo_disabled.yml
rename to detections/endpoint/windows_ad_gpo_disabled.yml
index a661dafbe6..4e19e9e2fe 100644
--- a/detections/application/windows_ad_gpo_disabled.yml
+++ b/detections/endpoint/windows_ad_gpo_disabled.yml
@@ -1,6 +1,6 @@
name: Windows AD GPO Disabled
id: 72793bc0-c0cd-400e-9e60-fdf36f278917
-version: 4
+version: 5
date: '2025-02-17'
author: Dean Luxton
status: production
@@ -18,7 +18,7 @@ search: '`wineventlog_security` EventCode=5136 AttributeLDAPDisplayName=flags Op
by ObjectDN ] | stats min(_time) as _time values(AttributeValue) as AttributeValue
values(AttributeValueExp) as AttributeValueExp values(OpCorrelationID) as OpCorrelationID
values(displayName) as policyName values(src_user) as src_user by ObjectDN SubjectLogonId
- | `windows_ad_gpo_disabled_filter`'
+ dest | `windows_ad_gpo_disabled_filter`'
how_to_implement: Ensure you are ingesting Active Directory audit logs - specifically
event 5136, admon data is also used to display the display name of the GPO. See
lantern article in references for further on how to onboard AD audit data. Ensure
@@ -62,11 +62,9 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_disabled/windows-security.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_disabled/windows-security.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_disabled/windows-admon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_disabled/windows-admon.log
source: ActiveDirectory
sourcetype: ActiveDirectory
diff --git a/detections/application/windows_ad_gpo_new_cse_addition.yml b/detections/endpoint/windows_ad_gpo_new_cse_addition.yml
similarity index 86%
rename from detections/application/windows_ad_gpo_new_cse_addition.yml
rename to detections/endpoint/windows_ad_gpo_new_cse_addition.yml
index fa51530e81..3d3c84a333 100644
--- a/detections/application/windows_ad_gpo_new_cse_addition.yml
+++ b/detections/endpoint/windows_ad_gpo_new_cse_addition.yml
@@ -1,6 +1,6 @@
name: Windows AD GPO New CSE Addition
id: 700c11d1-da09-47b2-81aa-358c143c7986
-version: 4
+version: 5
date: '2025-02-10'
author: Dean Luxton
status: production
@@ -12,9 +12,9 @@ description: This detection identifies when a a new client side extension is add
search: '`wineventlog_security` EventCode=5136 ObjectClass=groupPolicyContainer AttributeLDAPDisplayName=gPCMachineExtensionNames
| stats min(_time) as _time values(eval(if(OperationType=="%%14675",AttributeValue,null)))
as old_value values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value
- values(OperationType) as OperationType by ObjectClass ObjectDN OpCorrelationID src_user
- SubjectLogonId | rex field=old_value max_match=10000 "(?P\{.*?\})" |
- rex field=new_value max_match=10000 "(?P\{.*?\})" | rex field=ObjectDN
+ values(OperationType) as OperationType values(dest) as dest by ObjectClass ObjectDN
+ OpCorrelationID src_user SubjectLogonId | rex field=old_value max_match=10000 "(?P\{.*?\})"
+ | rex field=new_value max_match=10000 "(?P\{.*?\})" | rex field=ObjectDN
max_match=10000 "CN=(?P\{.*?\})" | mvexpand new_values | where NOT
new_values IN (old_values,"{00000000-0000-0000-0000-000000000000}",policy_guid)
AND match(new_values, "^\{[A-Z|\d]+\-[A-Z|\d]+\-[A-Z|\d]+\-[A-Z|\d]+\-[A-Z|\d]+\}")
@@ -74,11 +74,9 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_new_cse/windows-security.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_new_cse/windows-security.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_new_cse/windows-admon.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1484.001/group_policy_new_cse/windows-admon.log
source: ActiveDirectory
sourcetype: ActiveDirectory
diff --git a/detections/application/windows_ad_hidden_ou_creation.yml b/detections/endpoint/windows_ad_hidden_ou_creation.yml
similarity index 61%
rename from detections/application/windows_ad_hidden_ou_creation.yml
rename to detections/endpoint/windows_ad_hidden_ou_creation.yml
index 53fb735b3e..a1c09abd68 100644
--- a/detections/application/windows_ad_hidden_ou_creation.yml
+++ b/detections/endpoint/windows_ad_hidden_ou_creation.yml
@@ -1,6 +1,6 @@
name: Windows AD Hidden OU Creation
id: 66b6ad5e-339a-40af-b721-dacefc7bdb75
-version: 4
+version: 5
date: '2025-02-10'
author: Dean Luxton
status: production
@@ -10,33 +10,33 @@ data_source:
description: This analytic is looking for when an ACL is applied to an OU which denies
listing the objects residing in the OU. This activity combined with modifying the
owner of the OU will hide AD objects even from domain administrators.
-search: "`wineventlog_security` EventCode=5136 ObjectClass=organizationalUnit | stats
- min(_time) as _time values(eval(if(OperationType==\"%%14675\",AttributeValue,null)))
- as old_value values(eval(if(OperationType==\"%%14674\",AttributeValue,null))) as
- new_value values(OperationType) as OperationType by ObjectClass ObjectDN OpCorrelationID
- src_user SubjectLogonId | rex field=old_value max_match=10000 \"\\((?P.*?)\\\
- )\" | rex field=new_value max_match=10000 \"\\((?P.*?)\\)\" | mvexpand
- new_ace | where NOT new_ace IN (old_values) | rex field=new_ace \"(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$\"\
- \ | rex max_match=100 field=aceAccessRights \"(?P[A-Z]{2})\" | rex
- max_match=100 field=aceFlags \"(?P[A-Z]{2})\" | lookup msad_guid_lookup
- guid as aceObjectGuid OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup
- access_rights_string as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup
- ace_type_string as aceType OUTPUT ace_type_value as aceType | lookup ace_flag_lookup
- flag_string as aceFlags OUTPUT flag_value as ace_flag_value ``` Optional SID resolution
- lookups | lookup identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName
+search: '`wineventlog_security` EventCode=5136 ObjectClass=organizationalUnit | stats
+ min(_time) as _time values(eval(if(OperationType=="%%14675",AttributeValue,null)))
+ as old_value values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value
+ values(OperationType) as OperationType values(dest) as dest by ObjectClass ObjectDN
+ OpCorrelationID src_user SubjectLogonId | rex field=old_value max_match=10000 "\((?P.*?)\)" |
+ rex field=new_value max_match=10000 "\((?P.*?)\)" | mvexpand new_ace |
+ where NOT new_ace IN (old_values) | rex field=new_ace "(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?);(?P.*?)$" |
+ rex max_match=100 field=aceAccessRights "(?P[A-Z]{2})" | rex max_match=100
+ field=aceFlags "(?P[A-Z]{2})" | lookup msad_guid_lookup guid as aceObjectGuid
+ OUTPUT displayName as ControlAccessRights | lookup ace_access_rights_lookup access_rights_string
+ as AccessRights OUTPUT access_rights_value | lookup ace_type_lookup ace_type_string
+ as aceType OUTPUT ace_type_value as aceType | lookup ace_flag_lookup flag_string
+ as aceFlags OUTPUT flag_value as ace_flag_value ``` Optional SID resolution lookups
+ | lookup identity_lookup_expanded objectSid as aceSid OUTPUT downLevelDomainName
as user | lookup admon_groups_def objectSid as aceSid OUTPUT cn as group ``` |
lookup builtin_groups_lookup builtin_group_string as aceSid OUTPUT builtin_group_name
- as builtin_group | eval aceType=coalesce(ace_type_value,aceType), aceFlags=coalesce(ace_flag_value,\"\
- This object only\"), aceAccessRights=if(aceAccessRights=\"CCDCLCSWRPWPDTLOCRSDRCWDWO\"\
- ,\"Full control\",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=coalesce(ControlAccessRights,aceObjectGuid),
+ as builtin_group | eval aceType=coalesce(ace_type_value,aceType), aceFlags=coalesce(ace_flag_value,"This
+ object only"), aceAccessRights=if(aceAccessRights="CCDCLCSWRPWPDTLOCRSDRCWDWO","Full
+ control",coalesce(access_rights_value,AccessRights)), aceControlAccessRights=coalesce(ControlAccessRights,aceObjectGuid),
user=coalesce(user, group, builtin_group, aceSid) | stats values(aceType) as aceType
values(aceFlags) as aceFlags values(aceControlAccessRights) as aceControlAccessRights
values(aceAccessRights) as aceAccessRights values(new_ace) as new_ace values(aceInheritedTypeGuid)
as aceInheritedTypeGuid by _time ObjectClass ObjectDN src_user SubjectLogonId user
OpCorrelationID | eval aceControlAccessRights=if(mvcount(aceControlAccessRights)=1
- AND aceControlAccessRights=\"\",\"All rights\",'aceControlAccessRights') | search
- aceType IN (\"Access denied\",D) AND aceAccessRights IN (\"List contents\",\"List
- objects\",LC,LO) | `windows_ad_hidden_ou_creation_filter`"
+ AND aceControlAccessRights="","All rights",''aceControlAccessRights'') | search
+ aceType IN ("Access denied",D) AND aceAccessRights IN ("List contents","List objects",LC,LO)
+ | `windows_ad_hidden_ou_creation_filter`'
how_to_implement: Ensure you are ingesting Active Directory audit logs - specifically
event 5136. See lantern article in references for further on how to onboard AD audit
data. Ensure the wineventlog_security macro is configured with the correct indexes
@@ -84,7 +84,6 @@ tags:
tests:
- name: True Positive Test
attack_data:
- - data:
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/hidden_ou_windows-security-xml.log
+ - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1222.001/dacl_abuse/hidden_ou_windows-security-xml.log
source: XmlWinEventLog:Security
sourcetype: XmlWinEventLog
diff --git a/detections/application/windows_ad_object_owner_updated.yml b/detections/endpoint/windows_ad_object_owner_updated.yml
similarity index 75%
rename from detections/application/windows_ad_object_owner_updated.yml
rename to detections/endpoint/windows_ad_object_owner_updated.yml
index 3f41be4cf1..a9d80aa33b 100644
--- a/detections/application/windows_ad_object_owner_updated.yml
+++ b/detections/endpoint/windows_ad_object_owner_updated.yml
@@ -1,6 +1,6 @@
name: Windows AD Object Owner Updated
id: 4af01f6b-d8d4-4f96-8635-758a01557130
-version: 5
+version: 6
date: '2025-02-10'
author: Dean Luxton
status: production
@@ -12,16 +12,16 @@ description: AD Object Owner Updated. The owner provides Full control level priv
precursor activity for hiding an AD object.
search: '`wineventlog_security` EventCode=5136 | stats min(_time) as _time values(eval(if(OperationType=="%%14675",AttributeValue,null)))
as old_value values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value
- values(OperationType) as OperationType by ObjectClass ObjectDN OpCorrelationID src_user
- SubjectLogonId DSName | rex field=old_value "O:(?P