Detection rules › Splunk

Unusual Number of Remote Endpoint Authentication Events

Status
experimental
Group by
Source_Account, Source_Network_Address, _time
Author
Mauricio Velazco, Splunk
Source
github.com/splunk/security_content

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

TacticTechniques
Initial AccessT1078 Valid Accounts
PersistenceT1078 Valid Accounts
Privilege EscalationT1078 Valid Accounts
StealthT1078 Valid Accounts

Event coverage

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 =
ifunique_targets > 10 AND unique_targets >= upperBound1
else0

Stage 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.

FieldKindValues
Account_Namene
  • "*$" corpus 3 (splunk 3)
EventCodeeq
  • 4624 corpus 25 (splunk 13, kusto 8, chronicle 4)
Logon_Typeeq
  • 3 corpus 40 (splunk 13, sigma 12, elastic 9, kusto 6)