Detection rules › Splunk

Windows Driver Load Non-Standard Path

Status
production
Severity
medium
Group by
ImagePath, ServiceType, computer_name, service_name, signature_id
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

The following analytic detects the loading of new Kernel Mode Drivers from non-standard paths using Windows EventCode 7045. It identifies drivers not located in typical directories like Windows, Program Files, or SystemRoot. This activity is significant because adversaries may use these non-standard paths to load malicious or vulnerable drivers, potentially bypassing security controls. If confirmed malicious, this could allow attackers to execute code at the kernel level, escalate privileges, or maintain persistence within the environment, posing a severe threat to system integrity and security.

MITRE ATT&CK coverage

TacticTechniques
Privilege EscalationT1068 Exploitation for Privilege Escalation
StealthT1014 Rootkit

Event coverage

Rule body splunk

name: Windows Driver Load Non-Standard Path
id: 9216ef3d-066a-4958-8f27-c84589465e62
version: 12
creation_date: '2022-05-16'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects the loading of new Kernel Mode Drivers from non-standard paths using Windows EventCode 7045. It identifies drivers not located in typical directories like Windows, Program Files, or SystemRoot. This activity is significant because adversaries may use these non-standard paths to load malicious or vulnerable drivers, potentially bypassing security controls. If confirmed malicious, this could allow attackers to execute code at the kernel level, escalate privileges, or maintain persistence within the environment, posing a severe threat to system integrity and security.
data_source:
    - Windows Event Log System 7045
search: >-
    `wineventlog_system`
    EventCode = 7045
    ServiceType = "kernel mode driver"
    | regex ImagePath != "(?i)^(\w:\\\\Program Files\\\\|\w:\\\\Program Files \(x86\)\\\\|\w:\\\\Windows\\\\System32\\\\|\w:\\\\Windows\\\\SysWOW64\\\\|\w:\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\Definition Updates\\\\|\w:\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\Platform\\\\|%SystemRoot%|\\\\SystemRoot\\\\|SystemRoot\\\\)"
    | stats count min(_time) as firstTime max(_time) as lastTime by
      Computer EventCode ImagePath ServiceName ServiceType
    | rename Computer as dest
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_driver_load_non_standard_path_filter`
how_to_implement: |
    To implement this analytic, the Windows EventCode 7045 will need to be logged.
    The Windows TA for Splunk is also recommended.
known_false_positives: |
    False positives may be present based on legitimate third party applications needing to install drivers.
    Filter, or allow list known good drivers consistently being installed in these paths.
references:
    - https://redcanary.com/blog/tracking-driver-inventory-to-expose-rootkits/
    - https://attack.mitre.org/techniques/T1014/
    - https://www.fuzzysecurity.com/tutorials/28.html
drilldown_searches:
    - name: View the detection results for - "$dest$"
      search: '%original_detection_search% | search  dest = "$dest$"'
      earliest_offset: $info_min_time$
      latest_offset: $info_max_time$
    - name: View risk events for the last 7 days for - "$dest$"
      search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$") | 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)`'
      earliest_offset: 7d
      latest_offset: "0"
finding:
    title: A kernel mode driver was loaded from a non-standard path on $dest$.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Windows Drivers
    - CISA AA22-320A
    - AgentTesla
    - BlackByte Ransomware
    - BlackSuit Ransomware
asset_type: Endpoint
mitre_attack_id:
    - T1014
    - T1068
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint
tests:
    - name: True Positive Test
      attack_data:
        - data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1068/drivers/xml7045_windows-system.log
          source: XmlWinEventLog:System
          sourcetype: XmlWinEventLog
      test_type: unit

Stages and Predicates

Stage 1: search

`wineventlog_system` EventCode = 7045 ServiceType = "kernel mode driver"

Stage 2: regex

| regex ImagePath != "(?i)^(\w:\\\\Program Files\\\\|\w:\\\\Program Files \(x86\)\\\\|\w:\\\\Windows\\\\System32\\\\|\w:\\\\Windows\\\\SysWOW64\\\\|\w:\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\Definition Updates\\\\|\w:\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\Platform\\\\|%SystemRoot%|\\\\SystemRoot\\\\|SystemRoot\\\\)"

Stage 3: stats

| stats count min(_time) as firstTime max(_time) as lastTime by
  Computer EventCode ImagePath ServiceName ServiceType

Stage 4: rename

| rename Computer as dest

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: search

| `windows_driver_load_non_standard_path_filter`

Exclusions

Top-level NOT(...) conjuncts: predicates this rule actively suppresses.

FieldKindExcluded values
ImagePathregex_match"(?i)^(\w:\\Program Files\\|\w:\\Program Files (x86)\\|\w:\\Windows\\System32\\|\w:\\Windows\\SysWOW64\\|\w:\\ProgramData\\Microsoft\\Windows Defender\\Definition Updates\\|\w:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\|%SystemRoot%|\\SystemRoot\\|SystemRoot\\)"

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
EventCodeeq
  • 7045 corpus 20 (splunk 18, chronicle 1, kusto 1)
ServiceTypeeq
  • "kernel mode driver" corpus 2 (splunk 2)