Skip to content

Commit 5cabf43

Browse files
authored
Merge pull request #3275 from splunk/rdp_brute
RDP bruteforce - production!
2 parents 59b99a0 + 471b490 commit 5cabf43

12 files changed

+206
-150
lines changed

data_sources/aws_cloudtrail_consolelogin.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@ fields:
9090
- vendor_product
9191
- vendor_region
9292
example_log: '{"eventVersion": "1.08", "userIdentity": {"type": "IAMUser", "accountId":
93-
"140429656527", "accessKeyId": "", "userName": "HIDDEN_DUE_TO_SECURITY_REASONS"},
93+
"111111111111", "accessKeyId": "", "userName": "HIDDEN_DUE_TO_SECURITY_REASONS"},
9494
"eventTime": "2022-10-19T20:33:38Z", "eventSource": "signin.amazonaws.com", "eventName":
9595
"ConsoleLogin", "awsRegion": "us-east-1", "sourceIPAddress": "142.254.89.27", "userAgent":
9696
"Go-http-client/1.1", "errorMessage": "No username found in supplied account", "requestParameters":
9797
null, "responseElements": {"ConsoleLogin": "Failure"}, "additionalEventData": {"LoginTo":
9898
"https://console.aws.amazon.com", "MobileVersion": "No", "MFAUsed": "No"}, "eventID":
9999
"9fcfb8c3-3fca-48db-85d2-7b107f9d95d0", "readOnly": false, "eventType": "AwsConsoleSignIn",
100-
"managementEvent": true, "recipientAccountId": "140429656527", "eventCategory":
100+
"managementEvent": true, "recipientAccountId": "111111111111", "eventCategory":
101101
"Management", "tlsDetails": {"tlsVersion": "TLSv1.2", "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
102102
"clientProvidedHostHeader": "signin.aws.amazon.com"}}'

data_sources/aws_cloudtrail_createvirtualmfadevice.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,13 @@ fields:
8888
- vendor_product
8989
- vendor_region
9090
example_log: '{"eventVersion": "1.08", "userIdentity": {"type": "Root", "principalId":
91-
"140429656527", "arn": "arn:aws:iam::140429656527:root", "accountId": "140429656527",
91+
"1111111111111111", "arn": "arn:aws:iam::1111111111111111:root", "accountId": "1111111111111111",
9292
"accessKeyId": "ASIASBMSCQHH2YXNXJBU", "sessionContext": {"sessionIssuer": {}, "webIdFederationData":
9393
{}, "attributes": {"creationDate": "2023-01-30T22:59:36Z", "mfaAuthenticated": "false"}}},
9494
"eventTime": "2023-01-30T23:02:23Z", "eventSource": "iam.amazonaws.com", "eventName":
9595
"CreateVirtualMFADevice", "awsRegion": "us-east-1", "sourceIPAddress": "23.93.193.6",
9696
"userAgent": "AWS Internal", "requestParameters": {"path": "/", "virtualMFADeviceName":
97-
"strt_mfa_2"}, "responseElements": {"virtualMFADevice": {"serialNumber": "arn:aws:iam::140429656527:mfa/strt_mfa_2"}},
97+
"strt_mfa_2"}, "responseElements": {"virtualMFADevice": {"serialNumber": "arn:aws:iam::1111111111111111:mfa/strt_mfa_2"}},
9898
"requestID": "2fbe2074-55f8-4ec6-ad32-0b250803cf46", "eventID": "7e1c493d-c3c3-4f4a-ae4f-8cdd38970027",
9999
"readOnly": false, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId":
100-
"140429656527", "eventCategory": "Management", "sessionCredentialFromConsole": "true"}'
100+
"1111111111111111", "eventCategory": "Management", "sessionCredentialFromConsole": "true"}'

data_sources/aws_cloudtrail_describeeventaggregates.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ fields:
8484
- vendor_product
8585
- vendor_region
8686
example_log: '{"eventVersion": "1.08", "userIdentity": {"type": "Root", "principalId":
87-
"140429656527", "arn": "arn:aws:iam::140429656527:root", "accountId": "140429656527",
87+
"1111111111111111", "arn": "arn:aws:iam::1111111111111111:root", "accountId": "1111111111111111",
8888
"accessKeyId": "ASIASBMSCQHHQQ6LB24V", "sessionContext": {"sessionIssuer": {}, "webIdFederationData":
8989
{}, "attributes": {"creationDate": "2023-01-31T21:58:17Z", "mfaAuthenticated": "true"}}},
9090
"eventTime": "2023-02-01T02:52:34Z", "eventSource": "health.amazonaws.com", "eventName":
@@ -93,5 +93,5 @@ example_log: '{"eventVersion": "1.08", "userIdentity": {"type": "Root", "princip
9393
"filter": {"eventStatusCodes": ["open", "upcoming"], "startTimes": [{"from": "Jan
9494
25, 2023 2:54:32 AM"}]}}, "responseElements": null, "requestID": "d6adf050-1d7a-4c25-9d48-0319e33f6f9a",
9595
"eventID": "201cee69-61ab-4ffb-80b7-bd31e81e0d82", "readOnly": true, "eventType":
96-
"AwsApiCall", "managementEvent": true, "recipientAccountId": "140429656527", "eventCategory":
96+
"AwsApiCall", "managementEvent": true, "recipientAccountId": "1111111111111111", "eventCategory":
9797
"Management", "sessionCredentialFromConsole": "true"}'

data_sources/aws_cloudtrail_modifyimageattribute.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ example_log: '{"eventVersion": "1.08", "userIdentity": {"type": "AssumedRole", "
101101
"ec2.amazonaws.com", "eventName": "ModifyImageAttribute", "awsRegion": "us-west-2",
102102
"sourceIPAddress": "72.135.245.10", "userAgent": "AWS Internal", "requestParameters":
103103
{"imageId": "ami-06dac31db29508566", "launchPermission": {"add": {"items": [{"userId":
104-
"140429656527"}]}}, "attributeType": "launchPermission"}, "responseElements": {"requestId":
104+
"1111111111111111"}]}}, "attributeType": "launchPermission"}, "responseElements": {"requestId":
105105
"84c431ce-6268-4218-aaf8-b4cdc1cd4055", "_return": true}, "requestID": "84c431ce-6268-4218-aaf8-b4cdc1cd4055",
106106
"eventID": "957e1b12-ea17-4006-aefd-20677ace72b8", "readOnly": false, "eventType":
107107
"AwsApiCall", "managementEvent": true, "recipientAccountId": "111111111111", "eventCategory":

data_sources/kubernetes_audit.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ fields:
5454
- user.username
5555
- userAgent
5656
- verb
57-
example_log: '{"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"RequestResponse","auditID":"582c31ab-4906-49bb-9ff9-872f980ccb84","stage":"ResponseComplete","requestURI":"/apis/batch/v1/namespaces/test2/jobs?fieldManager=kubectl-create\u0026fieldValidation=Strict","verb":"create","user":{"username":"k8s-test-user","uid":"aws-iam-authenticator:591511147606:AROAYTOGP2RLFHNBOTP5J","groups":["system:authenticated"]},"sourceIPs":["176.95.188.101"],"userAgent":"kubectl/v1.27.2
57+
example_log: '{"kind":"Event","apiVersion":"audit.k8s.io/v1","level":"RequestResponse","auditID":"582c31ab-4906-49bb-9ff9-872f980ccb84","stage":"ResponseComplete","requestURI":"/apis/batch/v1/namespaces/test2/jobs?fieldManager=kubectl-create\u0026fieldValidation=Strict","verb":"create","user":{"username":"k8s-test-user","uid":"aws-iam-authenticator:111111111111:AROAYTXXXXXXHNXXXXX","groups":["system:authenticated"]},"sourceIPs":["176.95.188.101"],"userAgent":"kubectl/v1.27.2
5858
(darwin/arm64) kubernetes/7f6f68f","objectRef":{"resource":"jobs","namespace":"test2","apiGroup":"batch","apiVersion":"v1"},"responseStatus":{"metadata":{},"status":"Failure","message":"jobs.batch
5959
is forbidden: User \"k8s-test-user\" cannot create resource \"jobs\" in API group
6060
\"batch\" in the namespace \"test2\"","reason":"Forbidden","details":{"group":"batch","kind":"jobs"},"code":403},"responseObject":{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"jobs.batch
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: Remote Desktop Network Bruteforce
2+
id: a98727cc-286b-4ff2-b898-41df64695923
3+
version: 7
4+
date: '2025-01-10'
5+
author: Jose Hernandez, Bhavin Patel, Splunk
6+
status: deprecated
7+
type: TTP
8+
description: The following analytic has been deprecated in favor of "Windows Remote Desktop Network Bruteforce Attempt". The following analytic identifies potential Remote Desktop Protocol (RDP) brute force attacks by monitoring network traffic for RDP application activity. This query detects potential RDP brute force attacks by identifying source IPs that have made more than 10 successful connection attempts to the same RDP port on a host within a one-hour window. The results are presented in a table that includes the source and destination IPs, destination port, number of attempts, and the times of the first and last connection attempts, helping to prioritize IPs based on the intensity of activity.
9+
data_source:
10+
- Sysmon EventID 3
11+
search: >-
12+
| tstats `security_content_summariesonly` count, min(_time) as firstTime, max(_time) as lastTime from datamodel=Network_Traffic where (All_Traffic.app=rdp OR All_Traffic.dest_port=3389) AND All_Traffic.action=allowed by All_Traffic.src, All_Traffic.dest, All_Traffic.dest_port All_Traffic.user All_Traffic.vendor_product
13+
| `drop_dm_object_name("All_Traffic")`
14+
| eval duration=lastTime-firstTime
15+
| where count > 10 AND duration < 3600
16+
| `security_content_ctime(firstTime)`
17+
| `security_content_ctime(lastTime)`
18+
| `remote_desktop_network_bruteforce_filter`
19+
how_to_implement: You must ensure that your network traffic data is populating the Network_Traffic data model. Adjust the count and duration thresholds as necessary to tune the sensitivity of your detection.
20+
known_false_positives: RDP gateways may have unusually high amounts of traffic from all other hosts' RDP applications in the network.Any legitimate RDP traffic using wrong/expired credentials will be also detected as a false positive.
21+
references:
22+
- https://www.zscaler.com/blogs/security-research/ransomware-delivered-using-rdp-brute-force-attack
23+
- https://www.reliaquest.com/blog/rdp-brute-force-attacks/
24+
drilldown_searches:
25+
- name: View the detection results for - "$dest$"
26+
search: '%original_detection_search% | search dest = "$dest$"'
27+
earliest_offset: $info_min_time$
28+
latest_offset: $info_max_time$
29+
- name: View risk events for the last 7 days for - "$dest$"
30+
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)` | `security_content_ctime(lastTime)`'
31+
earliest_offset: $info_min_time$
32+
latest_offset: $info_max_time$
33+
rba:
34+
message: RDP brute force attack on $dest$
35+
risk_objects:
36+
- field: dest
37+
type: system
38+
score: 25
39+
threat_objects: []
40+
tags:
41+
analytic_story:
42+
- SamSam Ransomware
43+
- Ryuk Ransomware
44+
- Compromised User Account
45+
asset_type: Endpoint
46+
mitre_attack_id:
47+
- T1110.001
48+
- T1110
49+
product:
50+
- Splunk Enterprise
51+
- Splunk Enterprise Security
52+
- Splunk Cloud
53+
security_domain: network
54+
tests:
55+
- name: True Positive Test
56+
attack_data:
57+
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1110.001/rdp_brute_sysmon/sysmon.log
58+
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
59+
sourcetype: XmlWinEventLog

detections/endpoint/windows_bitlockertogo_process_execution.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
name: Windows BitLockerToGo Process Execution
22
id: 68cbc9e9-2882-46f2-b636-3b5080589d58
3-
version: 2
3+
version: 3
44
date: '2025-01-21'
55
author: Michael Haag, Nasreddine Bencherchali, Splunk
66
data_source:
7-
- Sysmon Event ID 1
7+
- Sysmon EventID 1
88
- Windows Event Log Security 4688
99
type: Hunting
1010
status: production

detections/endpoint/windows_disable_or_stop_browser_process.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
name: Windows Disable or Stop Browser Process
22
id: 220d34b7-b6c7-45fe-8dbb-c35cdd9fe6d5
3-
version: 2
3+
version: 3
44
date: '2024-11-13'
55
author: Teoderick Contreras, Splunk
66
data_source:
7-
- Sysmon Event ID 1
7+
- Sysmon EventID 1
88
type: TTP
99
status: production
1010
description: The following analytic detects the use of the taskkill command in a process

detections/endpoint/windows_new_custom_security_descriptor_set_on_eventlog_channel.yml

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,9 @@ description: The following analytic detects suspicious modifications to the Even
1616
viewing, ingesting and interacting event logs.
1717
data_source:
1818
- Sysmon EventID 13
19-
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
20-
as lastTime FROM datamodel=Endpoint.Registry WHERE Registry.registry_path= "*\\Services\\Eventlog\\*"
21-
AND Registry.registry_value_name=CustomSD BY Registry.dest Registry.registry_value_data
22-
Registry.action Registry.process_guid Registry.process_id Registry.registry_key_name
23-
Registry.user Registry.registry_value_name Registry.registry_path | `drop_dm_object_name(Registry)` | where
24-
isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
25-
| `windows_new_custom_security_descriptor_set_on_eventlog_channel_filter`'
26-
how_to_implement: To successfully implement this search, you must be ingesting data
27-
that records registry activity from your hosts to populate the endpoint data model
28-
in the registry node. This is typically populated via endpoint detection-and-response
29-
product, such as Carbon Black or endpoint data sources, such as Sysmon. The data
30-
used for this search is typically generated via logs that report reads and writes
31-
to the registry. If you are using Sysmon, you must have at least version 2.0 of
32-
the official Sysmon TA. https://splunkbase.splunk.com/app/5709
33-
known_false_positives: None identified, setting up the "CustomSD" value is considered
34-
a legacy option and shouldn't be a common activity.
19+
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Registry WHERE Registry.registry_path= "*\\Services\\Eventlog\\*" AND Registry.registry_value_name=CustomSD BY Registry.dest Registry.registry_value_data Registry.action Registry.process_guid Registry.process_id Registry.registry_key_name Registry.user Registry.registry_value_name Registry.registry_path | `drop_dm_object_name(Registry)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_new_custom_security_descriptor_set_on_eventlog_channel_filter`'
20+
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 product, such as Carbon Black or endpoint data sources, such as Sysmon. The data used for this search is typically generated via logs that report reads and writes to the registry. If you are using Sysmon, you must have at least version 2.0 of the official Sysmon TA. https://splunkbase.splunk.com/app/5709
21+
known_false_positives: None identified, setting up the "CustomSD" value is considered a legacy option and shouldn't be a common activity.
3522
references:
3623
- https://learn.microsoft.com/en-us/troubleshoot/windows-server/group-policy/set-event-log-security-locally-or-via-group-policy
3724
- https://attack.mitre.org/techniques/T1562/002/

0 commit comments

Comments
 (0)