Files
splunk-security_content/summary.yml
2024-07-08 13:08:47 -07:00

371 lines
16 KiB
YAML

summary:
success: false
total_detections: 11
total_pass: 8
total_fail: 3
total_skipped: 0
total_untested: 0
total_experimental_or_deprecated: 0
success_rate: 72.7%
tested_detections:
- name: Windows AD Replication Request Initiated from Unsanctioned Location
search: '`wineventlog_security` EventCode=4662 ObjectType IN ("%{19195a5b-6da0-11d0-afd3-00c04fd930c9}",
"domainDNS") AND Properties IN ("*Replicating Directory Changes All*", "*{1131f6ad-9c07-11d1-f79f-00c04fc2dcd2}*",
"*{9923a32a-3607-11d2-b9be-0000f87a36b2}*","*{1131f6ac-9c07-11d1-f79f-00c04fc2dcd2}*")
AND AccessMask="0x100" AND (SubjectUserSid="NT AUT*" OR SubjectUserSid="S-1-5-18"
OR SubjectDomainName="Window Manager" OR SubjectUserName="*$") | stats min(_time)
as attack_time, count by SubjectDomainName, SubjectUserName, Computer, Logon_ID,
ObjectName, ObjectServer, ObjectType, OperationType, status | rename SubjectDomainName
as Target_Domain, SubjectUserName as user, Logon_ID as TargetLogonId | appendpipe
[| map search="search `wineventlog_security` EventCode=4624 TargetLogonId=$TargetLogonId$"]
| table attack_time, AuthenticationPackageName, LogonProcessName, LogonType, TargetUserSid,
Target_Domain, user, Computer, TargetLogonId, status, src_ip, src_category, ObjectName,
ObjectServer, ObjectType, OperationType | stats min(attack_time) as _time, values(TargetUserSid)
as TargetUserSid, values(Target_Domain) as Target_Domain, values(user) as user,
values(Computer) as Computer, values(status) as status, values(src_category) as
src_category, values(src_ip) as src_ip by TargetLogonId | search NOT src_category="domain_controller"
| `windows_ad_replication_request_initiated_from_unsanctioned_location_filter`'
success: false
tests:
- name: True Positive Test
test_type: unit
success: false
message: TEST ERROR
exception: The observable field(s) {'src_ip'} are missing in the detection results
status: error
duration: 6.49
wait_duration: null
resultCount: '1'
runDuration: '1.320'
- name: True Positive Test
test_type: integration
success: false
message: 'TEST FAILED (PREEMPTIVE): associated unit test failed or encountered
an error'
exception: The observable field(s) {'src_ip'} are missing in the detection results
status: error
duration: 3.08
wait_duration: null
resultCount: null
runDuration: null
- name: Windows Admon Default Group Policy Object Modified
search: ' `admon` admonEventType=Update objectCategory="CN=Group-Policy-Container,CN=Schema,CN=Configuration,DC=*"
(displayName="Default Domain Policy" OR displayName="Default Domain Controllers
Policy") | appendpipe [ | map search="search `wineventlog_security` EventCode=5136 AttributeSyntaxOID=2.5.5.12
AttributeValue=$displayName$" | rename AttributeValue as displayName] | stats
min(_time) as _time values(displayName) as gp_name, values(gPCFileSysPath) as
gPCFileSysPath, values(src_user) as src_user, values(dcName) as dcName, values(dest_category)
as dest_category, values(src_user_category) as src_user_category by displayName
| `windows_admon_default_group_policy_object_modified_filter`'
success: false
tests:
- name: True Positive Test
test_type: unit
success: false
message: TEST ERROR
exception: The observable field(s) {'src_user'} are missing in the detection results
status: error
duration: 7.63
wait_duration: null
resultCount: '1'
runDuration: '2.158'
- name: True Positive Test
test_type: integration
success: false
message: 'TEST FAILED (PREEMPTIVE): associated unit test failed or encountered
an error'
exception: The observable field(s) {'src_user'} are missing in the detection results
status: error
duration: 3.17
wait_duration: null
resultCount: null
runDuration: null
- name: Windows Admon Group Policy Object Created
search: ' `admon` admonEventType=Update objectCategory="CN=Group-Policy-Container,CN=Schema,CN=Configuration,DC=*"
versionNumber=0 displayName!="New Group Policy Object" | appendpipe [ | map search="search
`wineventlog_security` EventCode=5136 AttributeSyntaxOID=2.5.5.12 AttributeValue=$displayName$"
| rename AttributeValue as displayName] | stats min(_time) as _time values(displayName)
as gp_name, values(gPCFileSysPath) as gPCFileSysPath, values(src_user) as src_user,
values(dcName) as dcName, values(dest_category) as dest_category, values(src_user_category)
as src_user_category by displayName | `windows_admon_group_policy_object_created_filter`'
success: false
tests:
- name: True Positive Test
test_type: unit
success: false
message: TEST ERROR
exception: The observable field(s) {'src_user'} are missing in the detection results
status: error
duration: 11.45
wait_duration: null
resultCount: '1'
runDuration: '1.270'
- name: True Positive Test
test_type: integration
success: false
message: 'TEST FAILED (PREEMPTIVE): associated unit test failed or encountered
an error'
exception: The observable field(s) {'src_user'} are missing in the detection results
status: error
duration: 3.26
wait_duration: null
resultCount: null
runDuration: null
- name: Azure AD Admin Consent Bypassed by Service Principal
search: '`azure_monitor_aad` (operationName="Add app role assignment to service
principal" OR operationName="Add member to role*") src_user_type=servicePrincipal |
rename properties.* as * | eval roleId = mvindex(''targetResources{}.modifiedProperties{}.newValue'',
0) | eval roleValue = mvindex(''targetResources{}.modifiedProperties{}.newValue'',
1) | eval roleDescription = mvindex(''targetResources{}.modifiedProperties{}.newValue'',
2) | eval user_id = mvindex(''targetResources{}.id'', 0), user=coalesce(user,mvindex(''targetResources{}.displayName'',
0)) | rename initiatedBy.app.displayName as src_user | stats count earliest(_time)
as firstTime latest(_time) as lastTime by src_user user user_id roleId roleValue
roleDescription | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` |
`azure_ad_admin_consent_bypassed_by_service_principal_filter`'
success: true
tests:
- name: True Positive Test
test_type: unit
success: true
message: TEST PASSED
exception: null
status: pass
duration: 5.84
wait_duration: null
resultCount: '1'
runDuration: '0.654'
- name: True Positive Test
test_type: integration
success: true
message: 'TEST SKIPPED: Skipping all integration tests'
exception: null
status: skip
duration: 0
wait_duration: null
resultCount: null
runDuration: null
- name: Azure AD Global Administrator Role Assigned
search: '`azure_monitor_aad` operationName="Add member to role" properties.targetResources{}.modifiedProperties{}.newValue="\"Global
Administrator\"" | rename properties.* as *, initiatedBy.user.userPrincipalName
as userPrincipalName, targetResources{}.displayName as displayName | eval initiatedBy
= coalesce(userPrincipalName,src_user) | eval user = coalesce(user,mvfilter(displayName!="null"))
| stats count min(_time) as firstTime max(_time) as lastTime values(user) as user
by initiatedBy, result, operationName | `security_content_ctime(firstTime)` |
`security_content_ctime(lastTime)` | `azure_ad_global_administrator_role_assigned_filter`'
success: true
tests:
- name: True Positive Test
test_type: unit
success: true
message: TEST PASSED
exception: null
status: pass
duration: 5.97
wait_duration: null
resultCount: '1'
runDuration: '0.666'
- name: True Positive Test
test_type: integration
success: true
message: 'TEST SKIPPED: Skipping all integration tests'
exception: null
status: skip
duration: 0
wait_duration: null
resultCount: null
runDuration: null
- name: Azure AD Privileged Role Assigned
search: ' `azure_monitor_aad` "operationName"="Add member to role" | rename properties.*
as *, initiatedBy.user.userPrincipalName as userPrincipalName, targetResources{}.displayName
as displayName | eval initiatedBy = coalesce(userPrincipalName,src_user) | eval
user = coalesce(user,mvfilter(displayName!="null")) | rename targetResources{}.modifiedProperties{}.newValue as
roles | eval role=mvindex(roles,1) | stats count min(_time) as firstTime max(_time)
as lastTime values(user) as user by initiatedBy, result, operationName, role |
lookup privileged_azure_ad_roles azureadrole AS role OUTPUT isprvilegedadrole
description | search isprvilegedadrole = True | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `azure_ad_privileged_role_assigned_filter`'
success: true
tests:
- name: True Positive Test
test_type: unit
success: true
message: TEST PASSED
exception: null
status: pass
duration: 5.94
wait_duration: null
resultCount: '1'
runDuration: '0.648'
- name: True Positive Test
test_type: integration
success: true
message: 'TEST SKIPPED: Skipping all integration tests'
exception: null
status: skip
duration: 0
wait_duration: null
resultCount: null
runDuration: null
- name: Azure AD Privileged Role Assigned to Service Principal
search: ' `azure_monitor_aad` operationName="Add member to role" | rename properties.*
as * | search "targetResources{}.type"=ServicePrincipal | rename initiatedBy.user.userPrincipalName
as initiatedBy | rename targetResources{}.modifiedProperties{}.newValue as roles
| eval role=mvindex(roles,1) | rename targetResources{}.displayName as apps |
eval displayName=mvindex(apps,0) | stats count min(_time) as firstTime max(_time)
as lastTime values(displayName) as displayName by initiatedBy, result, operationName,
role | lookup privileged_azure_ad_roles azureadrole AS role OUTPUT isprvilegedadrole
description | search isprvilegedadrole = True | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `azure_ad_privileged_role_assigned_to_service_principal_filter`'
success: true
tests:
- name: True Positive Test
test_type: unit
success: true
message: TEST PASSED
exception: null
status: pass
duration: 9.3
wait_duration: null
resultCount: '1'
runDuration: '3.134'
- name: True Positive Test
test_type: integration
success: true
message: 'TEST SKIPPED: Skipping all integration tests'
exception: null
status: skip
duration: 0
wait_duration: null
resultCount: null
runDuration: null
- name: Azure AD Service Principal New Client Credentials
search: ' `azure_monitor_aad` category=AuditLogs operationName="Update application*Certificates
and secrets management*" | rename properties.* as * | rename targetResources{}.*
as * | rename modifiedProperties{}.* as * | eval src_user=coalesce(user,identity),
newValue=mvfilter(newValue!="\"KeyDescription\"") | stats count min(_time) as
firstTime max(_time) as lastTime values(displayName) as displayName values(src_ip)
as src_ip values(eval(mvfilter(oldValue!="null"))) as oldValue by src_user, object,
newValue | spath input=oldValue output=oldValues path={} | spath input=newValue
output=newValues path={} | mvexpand newValues | where NOT newValues IN (oldValues)
| fields - newValue, oldValue, oldValues | rename newValues as newValue | `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)` | `azure_ad_service_principal_new_client_credentials_filter`'
success: true
tests:
- name: True Positive Test
test_type: unit
success: true
message: TEST PASSED
exception: null
status: pass
duration: 5.94
wait_duration: null
resultCount: '1'
runDuration: '0.782'
- name: True Positive Test
test_type: integration
success: true
message: 'TEST SKIPPED: Skipping all integration tests'
exception: null
status: skip
duration: 0
wait_duration: null
resultCount: null
runDuration: null
- name: Detect New Local Admin account
search: '`wineventlog_security` (EventCode=4720) OR (EventCode=4732 Group_Name=Administrators)
| stats dc(EventCode) as evCount min(_time) as _time range(_time) as duration
values(src_user) as src_user values(src_user_category) as src_user_category values(dest_category)
as dest_category by user dest | where evCount=2 | fields - evCount, duration |
`detect_new_local_admin_account_filter`'
success: true
tests:
- name: True Positive Test
test_type: unit
success: true
message: TEST PASSED
exception: null
status: pass
duration: 14.33
wait_duration: null
resultCount: '1'
runDuration: '0.696'
- name: True Positive Test
test_type: integration
success: true
message: 'TEST SKIPPED: Skipping all integration tests'
exception: null
status: skip
duration: 0
wait_duration: null
resultCount: null
runDuration: null
- name: Kerberos Pre-Authentication Flag Disabled in UserAccountControl
search: '`wineventlog_security` EventCode=4738 (UserAccountControl="%%2096" OR MSADChangedAttributes="*Don''t
Require Preauth'' - Enabled*") | eval MSADChangedAttributes="''Don''t Require
Preauth'' - Enabled" | table _time, source, EventCode, src_user, src_user_category,
user, user_category, MSADChangedAttributes | `kerberos_pre_authentication_flag_disabled_in_useraccountcontrol_filter`'
success: true
tests:
- name: True Positive Test
test_type: unit
success: true
message: TEST PASSED
exception: null
status: pass
duration: 6.08
wait_duration: null
resultCount: '1'
runDuration: '0.630'
- name: True Positive Test
test_type: integration
success: true
message: 'TEST SKIPPED: Skipping all integration tests'
exception: null
status: skip
duration: 0
wait_duration: null
resultCount: null
runDuration: null
- name: Windows AD Replication Request Initiated by User Account
search: '`wineventlog_security` EventCode=4662 ObjectType IN ("%{19195a5b-6da0-11d0-afd3-00c04fd930c9}",
"domainDNS") AND Properties IN ("*Replicating Directory Changes All*", "*{1131f6ad-9c07-11d1-f79f-00c04fc2dcd2}*",
"*{9923a32a-3607-11d2-b9be-0000f87a36b2}*","*{1131f6ac-9c07-11d1-f79f-00c04fc2dcd2}*")
AND AccessMask="0x100" AND NOT (SubjectUserSid="NT AUT*" OR SubjectUserSid="S-1-5-18"
OR SubjectDomainName="Window Manager" OR SubjectUserName="*$") | stats min(_time)
as _time, count by SubjectDomainName, SubjectUserName, Computer, Logon_ID, ObjectName,
ObjectServer, ObjectType, OperationType, status | rename SubjectDomainName as
Target_Domain, SubjectUserName as user, Logon_ID as TargetLogonId, _time as attack_time
| appendpipe [| map search="search `wineventlog_security` EventCode=4624 TargetLogonId=$TargetLogonId$"]
| table attack_time, AuthenticationPackageName, LogonProcessName, LogonType, TargetUserSid,
Target_Domain, user, Computer, TargetLogonId, status, src_ip, src_category, ObjectName,
ObjectServer, ObjectType, OperationType | stats min(attack_time) as _time values(TargetUserSid)
as TargetUserSid, values(Target_Domain) as Target_Domain, values(user) as user,
values(Computer) as Computer, values(status) as status, values(src_category) as
src_category, values(src_ip) as src_ip by TargetLogonId | `windows_ad_replication_request_initiated_by_user_account_filter`'
success: true
tests:
- name: True Positive Test
test_type: unit
success: true
message: TEST PASSED
exception: null
status: pass
duration: 11.26
wait_duration: null
resultCount: '1'
runDuration: '1.289'
- name: True Positive Test
test_type: integration
success: true
message: 'TEST SKIPPED: Skipping all integration tests'
exception: null
status: skip
duration: 0
wait_duration: null
resultCount: null
runDuration: null
untested_detections: []
percent_complete: UKNOWN
deprecated_detections: []
experimental_detections: []