Detection rules › Splunk

ESXi External Root Login Activity

Status
production
Severity
low
Group by
dest, src_ip
Author
Raven Tait, Splunk
Source
github.com/splunk/security_content

This detection identifies instances where the ESXi UI is accessed using the root account instead of a delegated administrative user. Direct root access to the UI bypasses role-based access controls and auditing practices, and may indicate risky behavior, misconfiguration, or unauthorized activity by a malicious actor using compromised credentials.

Known false positives

  • Limited false positives in most environments, however tune as needed. Administrators may use the root account for troubleshooting or initial user creation.

MITRE ATT&CK coverage

TacticTechniques
Initial Access
Persistence
Privilege Escalation
Stealth

Rule body

name: ESXi External Root Login Activity
id: 218bf991-6c63-4c26-a682-6ac1a53ad8f8
version: 4
creation_date: '2025-07-11'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: This detection identifies instances where the ESXi UI is accessed using the root account instead of a delegated administrative user. Direct root access to the UI bypasses role-based access controls and auditing practices, and may indicate risky behavior, misconfiguration, or unauthorized activity by a malicious actor using compromised credentials.
data_source:
    - VMWare ESXi Syslog
search: '`esxi_syslog` Message="*root*" AND Message="*logged in*" | rex field=_raw "root@(?<SrcIpAddr>\d{1,3}(?:\.\d{1,3}){3})" | rex field=_raw "Z (?<dest>[\w\.]+)\s" | search SrcIpAddr != "127.0.0.1" AND SrcIpAddr != 192.168.0.0/16 AND SrcIpAddr != 172.16.0.0/12 AND SrcIpAddr != 10.0.0.0/8 | stats min(_time) as firstTime max(_time) as lastTime count by dest SrcIpAddr | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `esxi_external_root_login_activity_filter`'
how_to_implement: This is based on syslog data generated by VMware ESXi hosts. To implement this search, you must configure your ESXi systems to forward syslog output to your Splunk deployment. These logs must be ingested with the appropriate Splunk Technology Add-on for VMware ESXi Logs, which provides field extractions and CIM compatibility.
known_false_positives: Limited false positives in most environments, however tune as needed. Administrators may use the root account for troubleshooting or initial user creation.
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: Root logged in on ESXi host $dest$ from $SrcIpAddr$.
        - field: SrcIpAddr
          type: system
          score: 20
          message: Root logged in on ESXi host $dest$ from $SrcIpAddr$.
analytic_story:
    - ESXi Post Compromise
    - Black Basta Ransomware
asset_type: Infrastructure
mitre_attack_id:
    - T1078
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: application
security_domain: endpoint

Stages and Predicates

Stage 1: search

`esxi_syslog` Message="*root*" AND Message="*logged in*"

Stage 2: rex

| rex field=_raw "root@(?<SrcIpAddr>\d{1,3}(?:\.\d{1,3}){3})"

Stage 3: rex

| rex field=_raw "Z (?<dest>[\w\.]+)\s"

Stage 4: search

| search SrcIpAddr != "127.0.0.1" AND SrcIpAddr != 192.168.0.0/16 AND SrcIpAddr != 172.16.0.0/12 AND SrcIpAddr != 10.0.0.0/8

Stage 5: stats

| stats min(_time) as firstTime max(_time) as lastTime count by dest SrcIpAddr

Stage 6: search

| `security_content_ctime(firstTime)`

Stage 7: search

| `security_content_ctime(lastTime)`

Stage 8: search

| `esxi_external_root_login_activity_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Messageeq
  • "*logged in*"
  • "*root*"
field:"Message" kind:eq
SrcIpAddrne
  • "127.0.0.1"
  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
field:"src_ip" kind:ne
sourcetypein
  • vmw-syslog
  • vmware:esxlog*
field:"sourcetype" kind:in