Detection rules › Splunk
Detect Unauthorized Assets by MAC address
The following analytic identifies unauthorized devices attempting to connect to the organization's network by inspecting DHCP request packets. It detects this activity by comparing the MAC addresses in DHCP requests against a list of known authorized devices stored in the assets_by_str.csv file. This activity is significant for a SOC because unauthorized devices can pose security risks, including potential data breaches or network disruptions. If confirmed malicious, this activity could allow an attacker to gain unauthorized network access, potentially leading to further exploitation or data exfiltration.
Rule body splunk
name: Detect Unauthorized Assets by MAC address
id: dcfd6b40-42f9-469d-a433-2e53f7489ff4
version: 9
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: Bhavin Patel, Splunk
status: experimental
type: TTP
description: The following analytic identifies unauthorized devices attempting to connect to the organization's network by inspecting DHCP request packets. It detects this activity by comparing the MAC addresses in DHCP requests against a list of known authorized devices stored in the assets_by_str.csv file. This activity is significant for a SOC because unauthorized devices can pose security risks, including potential data breaches or network disruptions. If confirmed malicious, this activity could allow an attacker to gain unauthorized network access, potentially leading to further exploitation or data exfiltration.
data_source: []
search: |-
| tstats `security_content_summariesonly` count FROM datamodel=Network_Sessions
WHERE nodename=All_Sessions.DHCP All_Sessions.tag=dhcp
BY All_Sessions.dest_ip All_Sessions.dest_mac
| dedup All_Sessions.dest_mac
| `drop_dm_object_name("Network_Sessions")`
| `drop_dm_object_name("All_Sessions")`
| search NOT [
| inputlookup asset_lookup_by_str
| rename mac as dest_mac
| fields + dest_mac]
| `detect_unauthorized_assets_by_mac_address_filter`
how_to_implement: This search uses the Network_Sessions data model shipped with Enterprise Security. It leverages the Assets and Identity framework to populate the assets_by_str.csv file located in SA-IdentityManagement, which will contain a list of known authorized organizational assets including their MAC addresses. Ensure that all inventoried systems have their MAC address populated.
known_false_positives: This search might be prone to high false positives. Please consider this when conducting analysis or investigations. Authorized devices may be detected as unauthorized. If this is the case, verify the MAC address of the system responsible for the false positive and add it to the Assets and Identity framework with the proper information.
references: []
finding:
title: Potentially Unauthorized Device observed [ $dest_ip$ ]
entity:
field: dest_ip
type: system
score: 50
analytic_story:
- Asset Tracking
asset_type: Infrastructure
mitre_attack_id: []
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: network
security_domain: network
baselines:
- Count of assets by category
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly` count FROM datamodel=Network_Sessions
WHERE nodename=All_Sessions.DHCP All_Sessions.tag=dhcp
BY All_Sessions.dest_ip All_Sessions.dest_mac
Stage 2: dedup
| dedup All_Sessions.dest_mac
Stage 3: search
| `drop_dm_object_name("Network_Sessions")`
Stage 4: search
| `drop_dm_object_name("All_Sessions")`
Stage 5: search
| search NOT [
| inputlookup asset_lookup_by_str
| rename mac as dest_mac
| fields + dest_mac]
Stage 6: search
| `detect_unauthorized_assets_by_mac_address_filter`
Exclusions
Top-level NOT(...) conjuncts: predicates this rule actively suppresses.
| Field | Kind | Excluded values |
|---|---|---|
1 | eq | 1 |
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 |
|---|---|---|
All_Sessions.tag | eq |
|
nodename | eq |
|