Detection rules › Splunk
Unusual Number of Remote Endpoint Authentication Events
The following analytic identifies an unusual number of remote authentication attempts from a single source by leveraging Windows Event ID 4624, which logs successful account logons. It uses statistical analysis, specifically the 3-sigma rule, to detect deviations from normal behavior. This activity is significant for a SOC as it may indicate lateral movement, malware staging, or reconnaissance. If confirmed malicious, this behavior could allow an attacker to move laterally within the network, escalate privileges, or gather information for further attacks.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Initial Access | T1078 Valid Accounts |
| Persistence | T1078 Valid Accounts |
| Privilege Escalation | T1078 Valid Accounts |
| Stealth | T1078 Valid Accounts |
Event coverage
| Provider | Event | Title |
|---|---|---|
| Security-Auditing | Event ID 4624 | An account was successfully logged on. |
Rule body splunk
name: Unusual Number of Remote Endpoint Authentication Events
id: acb5dc74-5324-11ec-a36d-acde48001122
version: 8
creation_date: '2021-12-03'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: experimental
type: Hunting
description: The following analytic identifies an unusual number of remote authentication attempts from a single source by leveraging Windows Event ID 4624, which logs successful account logons. It uses statistical analysis, specifically the 3-sigma rule, to detect deviations from normal behavior. This activity is significant for a SOC as it may indicate lateral movement, malware staging, or reconnaissance. If confirmed malicious, this behavior could allow an attacker to move laterally within the network, escalate privileges, or gather information for further attacks.
data_source:
- Windows Event Log Security 4624
search: |-
`wineventlog_security` EventCode=4624 Logon_Type=3 Account_Name!="*$"
| eval Source_Account = mvindex(Account_Name, 1)
| bucket span=2m _time
| stats dc(ComputerName) AS unique_targets values(ComputerName) as target_hosts
BY _time, Source_Network_Address, Source_Account
| eventstats avg(unique_targets) as comp_avg , stdev(unique_targets) as comp_std
BY Source_Network_Address, Source_Account
| eval upperBound=(comp_avg+comp_std*3)
| eval isOutlier=if(unique_targets >10 and unique_targets >= upperBound, 1, 0)
| `unusual_number_of_remote_endpoint_authentication_events_filter`
how_to_implement: To successfully implement this search, you need to be ingesting Windows Event Logs from domain controllers as well as member servers and workstations. The Advanced Security Audit policy setting `Audit Logon` within `Logon/Logoff` needs to be enabled.
known_false_positives: An single endpoint authenticating to a large number of hosts is not common behavior. Possible false positive scenarios include but are not limited to vulnerability scanners, jump servers and missconfigured systems.
references:
- https://attack.mitre.org/techniques/T1078/
analytic_story:
- Active Directory Lateral Movement
- Active Directory Privilege Escalation
asset_type: Endpoint
mitre_attack_id:
- T1078
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`wineventlog_security` EventCode=4624 Logon_Type=3 Account_Name!="*$"
Stage 2: eval
| eval Source_Account = mvindex(Account_Name, 1)
Stage 3: bucket
| bucket span=2m _time
Stage 4: stats
| stats dc(ComputerName) AS unique_targets values(ComputerName) as target_hosts
BY _time, Source_Network_Address, Source_Account
Stage 5: eventstats
| eventstats avg(unique_targets) as comp_avg , stdev(unique_targets) as comp_std
BY Source_Network_Address, Source_Account
Stage 6: eval
| eval upperBound=(comp_avg+comp_std*3)
Stage 7: eval
| eval isOutlier=if(unique_targets >10 and unique_targets >= upperBound, 1, 0)
isOutlier =unique_targets > 10 AND unique_targets >= upperBound10Stage 8: search
| `unusual_number_of_remote_endpoint_authentication_events_filter`
Indicators
Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.
| Field | Kind | Values |
|---|---|---|
Account_Name | ne |
|
EventCode | eq |
|
Logon_Type | eq |
|