Skip to content

Commit 1c9debe

Browse files
author
Patrick Bareiss
committed
update versions
1 parent ca24571 commit 1c9debe

File tree

1,022 files changed

+10713
-11483
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,022 files changed

+10713
-11483
lines changed

detections/application/detect_html_help_spawn_child_process.yml

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Detect HTML Help Spawn Child Process
22
id: 723716de-ee55-4cd4-9759-c44e7e55ba4b
3-
version: 9
3+
version: 10
44
date: '2025-02-10'
55
author: Michael Haag, Splunk
66
status: production
@@ -19,11 +19,11 @@ data_source:
1919
- CrowdStrike ProcessRollup2
2020
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
2121
as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=hh.exe
22-
by Processes.action Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec
23-
Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name
24-
Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid Processes.process_hash
25-
Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path
26-
Processes.user Processes.user_id Processes.vendor_product
22+
by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
23+
Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
24+
Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
25+
Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
26+
Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
2727
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
2828
| `detect_html_help_spawn_child_process_filter`'
2929
how_to_implement: The detection is based on data that originates from Endpoint Detection
@@ -90,7 +90,6 @@ tags:
9090
tests:
9191
- name: True Positive Test
9292
attack_data:
93-
- data:
94-
https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.001/atomic_red_team/windows-sysmon.log
93+
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1218.001/atomic_red_team/windows-sysmon.log
9594
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
9695
sourcetype: XmlWinEventLog

detections/application/detect_password_spray_attempts.yml

+30-38
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Detect Password Spray Attempts
22
id: 086ab581-8877-42b3-9aee-4a7ecb0923af
3-
version: 6
3+
version: 7
44
date: '2025-02-10'
55
author: Dean Luxton
66
status: production
@@ -13,41 +13,34 @@ description: This analytic employs the 3-sigma approach to detect an unusual vol
1313
many different accounts to avoid detection and account lockouts. By utilizing the
1414
Authentication Data Model, this detection is effective for all CIM-mapped authentication
1515
events, providing comprehensive coverage and enhancing security against these attacks.
16-
search: >-
17-
| tstats `security_content_summariesonly` values(Authentication.user) AS unique_user_names
18-
dc(Authentication.user) AS unique_accounts values(Authentication.app) as app count(Authentication.user)
19-
as total_failures from datamodel=Authentication.Authentication where Authentication.action="failure"
20-
NOT Authentication.src IN ("-","unknown") by Authentication.action Authentication.app Authentication.authentication_method Authentication.dest
21-
Authentication.signature Authentication.signature_id Authentication.src sourcetype _time span=5m
22-
| `drop_dm_object_name("Authentication")`
23-
```fill out time buckets for 0-count events during entire search length```
24-
| appendpipe [| timechart limit=0 span=5m count | table _time]
25-
| fillnull value=0 unique_accounts
26-
``` Create aggregation field & apply to all null events```
27-
| eval counter=src+"__"+sourcetype+"__"+signature_id | eventstats values(counter)
28-
as fnscounter | eval counter=coalesce(counter,fnscounter)
29-
``` stats version of mvexpand ```
30-
| stats values(app) as app values(unique_user_names) as unique_user_names values(total_failures)
31-
as total_failures values(src) as src values(signature_id) as signature_id values(sourcetype)
32-
as sourcetype count by counter unique_accounts _time
33-
``` remove duplicate time buckets for each unique source```
34-
| sort - _time unique_accounts
35-
| dedup _time counter
36-
```Find the outliers```
37-
| eventstats avg(unique_accounts) as comp_avg , stdev(unique_accounts) as comp_std
38-
by counter
39-
| eval upperBound=(comp_avg+comp_std*3)
40-
| eval isOutlier=if(unique_accounts > 30 and unique_accounts >= upperBound, 1, 0)
41-
| replace "::ffff:*" with * in src | where isOutlier=1 | foreach *
42-
[ eval <<FIELD>> = if(<<FIELD>>="null",null(),<<FIELD>>)]
43-
| table _time, src, action, app, unique_accounts, unique_user_names, total_failures,
44-
sourcetype, signature_id, counter
45-
| `detect_password_spray_attempts_filter`
46-
how_to_implement: >-
47-
Ensure in-scope authentication data is CIM mapped and the src field is populated
48-
with the source device. Also ensure fill_nullvalue is set within the macro security_content_summariesonly.
49-
This search opporates best on a 5 minute schedule, looking back over the past 70
50-
minutes. Configure 70 minute throttling on the two fields _time and counter.
16+
search: "| tstats `security_content_summariesonly` values(Authentication.user) AS\
17+
\ unique_user_names dc(Authentication.user) AS unique_accounts values(Authentication.app)\
18+
\ as app count(Authentication.user) as total_failures from datamodel=Authentication.Authentication\
19+
\ where Authentication.action=\"failure\" NOT Authentication.src IN (\"-\",\"unknown\"\
20+
) by Authentication.action Authentication.app Authentication.authentication_method\
21+
\ Authentication.dest \n Authentication.signature Authentication.signature_id Authentication.src\
22+
\ sourcetype _time span=5m \n| `drop_dm_object_name(\"Authentication\")`\n ```fill\
23+
\ out time buckets for 0-count events during entire search length```\n| appendpipe\
24+
\ [| timechart limit=0 span=5m count | table _time] | fillnull value=0 unique_accounts\n\
25+
\ ``` Create aggregation field & apply to all null events```\n| eval counter=src+\"\
26+
__\"+sourcetype+\"__\"+signature_id | eventstats values(counter) as fnscounter\
27+
\ | eval counter=coalesce(counter,fnscounter) \n ``` stats version of mvexpand\
28+
\ ```\n| stats values(app) as app values(unique_user_names) as unique_user_names\
29+
\ values(total_failures) as total_failures values(src) as src values(signature_id)\
30+
\ as signature_id values(sourcetype) as sourcetype count by counter unique_accounts\
31+
\ _time\n ``` remove duplicate time buckets for each unique source```\n| sort\
32+
\ - _time unique_accounts | dedup _time counter\n ```Find the outliers```\n|\
33+
\ eventstats avg(unique_accounts) as comp_avg , stdev(unique_accounts) as comp_std\
34+
\ by counter | eval upperBound=(comp_avg+comp_std*3) | eval isOutlier=if(unique_accounts\
35+
\ > 30 and unique_accounts >= upperBound, 1, 0) | replace \"::ffff:*\" with * in\
36+
\ src | where isOutlier=1 | foreach * \n [ eval <<FIELD>> = if(<<FIELD>>=\"\
37+
null\",null(),<<FIELD>>)] \n| table _time, src, action, app, unique_accounts, unique_user_names,\
38+
\ total_failures, sourcetype, signature_id, counter | `detect_password_spray_attempts_filter`"
39+
how_to_implement: 'Ensure in-scope authentication data is CIM mapped and the src field
40+
is populated with the source device. Also ensure fill_nullvalue is set within the
41+
macro security_content_summariesonly. This search opporates best on a 5 minute schedule,
42+
looking back over the past 70 minutes. Configure 70 minute throttling on the two
43+
fields _time and counter. '
5144
known_false_positives: Unknown
5245
references:
5346
- https://attack.mitre.org/techniques/T1110/003/
@@ -92,7 +85,6 @@ tags:
9285
tests:
9386
- name: True Positive Test
9487
attack_data:
95-
- data:
96-
https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/purplesharp_invalid_users_kerberos_xml/windows-security.log
88+
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.003/purplesharp_invalid_users_kerberos_xml/windows-security.log
9789
source: XmlWinEventLog:Security
9890
sourcetype: XmlWinEventLog

detections/application/email_files_written_outside_of_the_outlook_directory.yml

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Email files written outside of the Outlook directory
22
id: 8d52cf03-ba25-4101-aa78-07994aed4f74
3-
version: 7
3+
version: 8
44
date: '2025-02-10'
55
author: Bhavin Patel, Splunk
66
status: experimental
@@ -19,11 +19,11 @@ search: '| tstats `security_content_summariesonly` count values(Filesystem.file_
1919
as file_path min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Filesystem
2020
where (Filesystem.file_name=*.pst OR Filesystem.file_name=*.ost) Filesystem.file_path
2121
!= "C:\\Users\\*\\My Documents\\Outlook Files\\*" Filesystem.file_path!="C:\\Users\\*\\AppData\\Local\\Microsoft\\Outlook*"
22-
by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
23-
Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
24-
Filesystem.user Filesystem.vendor_product
25-
| `drop_dm_object_name("Filesystem")` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`|
26-
`email_files_written_outside_of_the_outlook_directory_filter`'
22+
by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
23+
Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path
24+
Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id
25+
Filesystem.user Filesystem.vendor_product | `drop_dm_object_name("Filesystem")`
26+
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `email_files_written_outside_of_the_outlook_directory_filter`'
2727
how_to_implement: To successfully implement this search, you must be ingesting data
2828
that records the file-system activity from your hosts to populate the Endpoint.Filesystem
2929
data model node. This is typically populated via endpoint detection-and-response

detections/application/okta_multi_factor_authentication_disabled.yml

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Okta Multi-Factor Authentication Disabled
22
id: 7c0348ce-bdf9-45f6-8a57-c18b5976f00a
3-
version: 6
3+
version: 7
44
date: '2025-02-10'
55
author: Mauricio Velazco, Splunk
66
data_source:
@@ -18,9 +18,9 @@ description: The following analytic identifies an attempt to disable multi-facto
1818
search: '| tstats `security_content_summariesonly` count max(_time) as lastTime, min(_time)
1919
as firstTime from datamodel=Change where sourcetype="OktaIM2:log" All_Changes.object_category=User
2020
AND All_Changes.action=modified All_Changes.command=user.mfa.factor.deactivate by
21-
All_Changes.user All_Changes.result All_Changes.command sourcetype All_Changes.src All_Changes.dest
22-
| `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
23-
| `okta_multi_factor_authentication_disabled_filter`'
21+
All_Changes.user All_Changes.result All_Changes.command sourcetype All_Changes.src
22+
All_Changes.dest | `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)`
23+
| `security_content_ctime(lastTime)` | `okta_multi_factor_authentication_disabled_filter`'
2424
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
2525
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
2626
known_false_positives: Legitimate use case may require for users to disable MFA. Filter
@@ -66,7 +66,6 @@ tags:
6666
tests:
6767
- name: True Positive Test
6868
attack_data:
69-
- data:
70-
https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1556.006/okta_mfa_method_disabled/okta_mfa_method_disabled.log
69+
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1556.006/okta_mfa_method_disabled/okta_mfa_method_disabled.log
7170
source: Okta
7271
sourcetype: OktaIM2:log

detections/application/okta_multiple_accounts_locked_out.yml

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Okta Multiple Accounts Locked Out
22
id: a511426e-184f-4de6-8711-cfd2af29d1e1
3-
version: 4
3+
version: 5
44
date: '2025-01-21'
55
author: Michael Haag, Mauricio Velazco, Splunk
66
data_source:
@@ -17,8 +17,8 @@ description: The following analytic detects multiple Okta accounts being locked
1717
search: '| tstats `security_content_summariesonly` count max(_time) as lastTime, min(_time)
1818
as firstTime values(All_Changes.user) as user from datamodel=Change where All_Changes.change_type=AAA
1919
All_Changes.object_category=User AND All_Changes.action=lockout AND All_Changes.command=user.account.lock
20-
by _time span=5m All_Changes.result All_Changes.command sourcetype All_Changes.src All_Changes.dest
21-
| where count > 5 | `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)`
20+
by _time span=5m All_Changes.result All_Changes.command sourcetype All_Changes.src
21+
All_Changes.dest | where count > 5 | `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)`
2222
| `security_content_ctime(lastTime)` | `okta_multiple_accounts_locked_out_filter`'
2323
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
2424
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
@@ -65,7 +65,6 @@ tags:
6565
tests:
6666
- name: True Positive Test
6767
attack_data:
68-
- data:
69-
https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110/okta_multiple_accounts_lockout/okta_multiple_accounts_lockout.log
68+
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110/okta_multiple_accounts_lockout/okta_multiple_accounts_lockout.log
7069
source: Okta
7170
sourcetype: OktaIM2:log

detections/application/okta_multiple_failed_mfa_requests_for_user.yml

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Okta Multiple Failed MFA Requests For User
22
id: 826dbaae-a1e6-4c8c-b384-d16898956e73
3-
version: 5
3+
version: 6
44
date: '2025-01-21'
55
author: Mauricio Velazco, Splunk
66
data_source:
@@ -17,8 +17,8 @@ description: The following analytic identifies multiple failed multi-factor auth
1717
search: '`okta` eventType=user.authentication.auth_via_mfa outcome.result=FAILURE
1818
debugContext.debugData.factor!=PASSWORD_AS_FACTOR | bucket _time span=5m | stats
1919
count min(_time) as firstTime max(_time) as lastTime values(displayMessage) values(src_ip)
20-
as src_ip values(debugContext.debugData.factor) values(dest) as dest by _time src_user | where count
21-
>= 10 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
20+
as src_ip values(debugContext.debugData.factor) values(dest) as dest by _time src_user
21+
| where count >= 10 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
2222
| `okta_multiple_failed_mfa_requests_for_user_filter`'
2323
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
2424
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
@@ -63,7 +63,6 @@ tags:
6363
tests:
6464
- name: True Positive Test
6565
attack_data:
66-
- data:
67-
https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1621/okta_multiple_failed_mfa_requests/okta_multiple_failed_mfa_requests.log
66+
- 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
6867
source: Okta
6968
sourcetype: OktaIM2:log

detections/application/okta_multiple_users_failing_to_authenticate_from_ip.yml

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Okta Multiple Users Failing To Authenticate From Ip
22
id: de365ffa-42f5-46b5-b43f-fa72290b8218
3-
version: 5
3+
version: 6
44
date: '2025-01-21'
55
author: Michael Haag, Mauricio Velazco, Splunk
66
data_source:
@@ -18,9 +18,10 @@ description: The following analytic identifies instances where more than 10 uniq
1818
search: '| tstats `security_content_summariesonly` count max(_time) as lastTime, min(_time)
1919
as firstTime dc(Authentication.user) as unique_accounts values(Authentication.signature)
2020
as signature values(Authentication.user) as user values(Authentication.app) as app
21-
values(Authentication.authentication_method) as authentication_method values(Authentication.dest) as dest from datamodel=Authentication
22-
where Authentication.action="failure" AND Authentication.signature=user.session.start
23-
by _time span=5m Authentication.src sourcetype | where unique_accounts > 9 | `drop_dm_object_name("Authentication")`
21+
values(Authentication.authentication_method) as authentication_method values(Authentication.dest)
22+
as dest from datamodel=Authentication where Authentication.action="failure" AND
23+
Authentication.signature=user.session.start by _time span=5m Authentication.src
24+
sourcetype | where unique_accounts > 9 | `drop_dm_object_name("Authentication")`
2425
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `okta_multiple_users_failing_to_authenticate_from_ip_filter`'
2526
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
2627
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
@@ -67,7 +68,6 @@ tags:
6768
tests:
6869
- name: True Positive Test
6970
attack_data:
70-
- data:
71-
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
71+
- 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
7272
source: Okta
7373
sourcetype: OktaIM2:log

detections/application/okta_new_api_token_created.yml

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Okta New API Token Created
22
id: c3d22720-35d3-4da4-bd0a-740d37192bd4
3-
version: 7
3+
version: 8
44
date: '2025-02-10'
55
author: Michael Haag, Mauricio Velazco, Splunk
66
status: production
@@ -18,8 +18,9 @@ data_source:
1818
search: '| tstats `security_content_summariesonly` count max(_time) as lastTime, min(_time)
1919
as firstTime from datamodel=Change where All_Changes.action=created AND All_Changes.command=system.api_token.create
2020
by _time span=5m All_Changes.user All_Changes.result All_Changes.command sourcetype
21-
All_Changes.src All_Changes.action All_Changes.object_category All_Changes.dest | `drop_dm_object_name("All_Changes")`
22-
| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `okta_new_api_token_created_filter`'
21+
All_Changes.src All_Changes.action All_Changes.object_category All_Changes.dest
22+
| `drop_dm_object_name("All_Changes")` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
23+
| `okta_new_api_token_created_filter`'
2324
how_to_implement: The analytic leverages Okta OktaIm2 logs to be ingested using the
2425
Splunk Add-on for Okta Identity Cloud (https://splunkbase.splunk.com/app/6553).
2526
known_false_positives: False positives may be present. Tune Okta and tune the analytic
@@ -63,7 +64,6 @@ tags:
6364
tests:
6465
- name: True Positive Test
6566
attack_data:
66-
- data:
67-
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
67+
- 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
6868
source: Okta
6969
sourcetype: OktaIM2:log

0 commit comments

Comments
 (0)