Detection rules › Elastic

Suspicious ImageLoad via Windows Update Auto Update Client

Time window
1m
Sequence by
process.entity_id
Source
github.com/elastic/protections-artifacts

Identifies abuse of the Windows Update Auto Update Client (wuauclt.exe) to load an arbitrary DLL. This behavior is used as a defense evasion technique to blend-in malicious activity with legitimate Windows software.

MITRE ATT&CK coverage

Rule body

[rule]
description = """
Identifies abuse of the Windows Update Auto Update Client (wuauclt.exe) to load an arbitrary DLL. This behavior is used
as a defense evasion technique to blend-in malicious activity with legitimate Windows software.
"""
id = "3788c03d-28a5-4466-b157-d6dd4dc449bb"
license = "Elastic License v2"
name = "Suspicious ImageLoad via Windows Update Auto Update Client"
os_list = ["windows"]
reference = [
    "https://dtm.uk/wuauclt/",
    "https://www.elastic.co/security-labs/Hunting-for-Suspicious-Windows-Libraries-for-Execution-and-Evasion",
]
version = "1.0.31"

query = '''
sequence by process.entity_id with maxspan=1m
 [process where event.action == "start" and
  (process.pe.original_file_name == "wuauclt.exe" or process.name : "wuauclt.exe") and
   process.parent.executable != null and
   process.args : "/RunHandlerComServer" and process.args : "/UpdateDeploymentProvider" and
   not process.parent.executable :
                    ("?:\\Windows\\System32\\svchost.exe",
                     "?:\\Windows\\System32\\MoUsoCoreWorker.exe",
                     "\\Device\\HarddiskVolume*\\Windows\\System32\\svchost.exe",
                     "\\Device\\HarddiskVolume*\\Windows\\System32\\MoUsoCoreWorker.exe")]
 [library where
  not (dll.code_signature.subject_name : ("Microsoft Windows", "Microsoft Corporation") and dll.code_signature.trusted == true) and
  not (dll.code_signature.trusted == true and
       dll.path : ("?:\\Program Files\\*.dll",
                  "?:\\Program Files (x86)\\*.dll",
                  "?:\\Windows\\System32\\*.dll",
                  "?:\\Windows\\SysWOW64\\*.dll",
                  "?:\\ProgramData\\Symantec\\Symantec Endpoint Protection\\*.dll")) and
  not dll.hash.sha256 : "dde77d27a7cb0189a9a3314e42f10666a2f69ca2b81ad03ae0cc9035a97a55ad"]
'''

min_endpoint_version = "7.16.0"
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0

[[optional_actions]]
action = "rollback"
field = "process.entity_id"
state = 0

[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1218"
name = "System Binary Proxy Execution"
reference = "https://attack.mitre.org/techniques/T1218/"


[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"

[internal]
min_endpoint_version = "7.16.0"

Stages and Predicates

Ordered sequence: each step below must occur in order within 1m, correlated by process.entity_id.

Stage 1: process

[process where event.action == "start" and
  (process.pe.original_file_name == "wuauclt.exe" or process.name : "wuauclt.exe") and
   process.parent.executable != null and
   process.args : "/RunHandlerComServer" and process.args : "/UpdateDeploymentProvider" and
   not process.parent.executable :
                    ("?:\\Windows\\System32\\svchost.exe",
                     "?:\\Windows\\System32\\MoUsoCoreWorker.exe",
                     "\\Device\\HarddiskVolume*\\Windows\\System32\\svchost.exe",
                     "\\Device\\HarddiskVolume*\\Windows\\System32\\MoUsoCoreWorker.exe")]

Stage 2: library

[library where
  not (dll.code_signature.subject_name : ("Microsoft Windows", "Microsoft Corporation") and dll.code_signature.trusted == true) and
  not (dll.code_signature.trusted == true and
       dll.path : ("?:\\Program Files\\*.dll",
                  "?:\\Program Files (x86)\\*.dll",
                  "?:\\Windows\\System32\\*.dll",
                  "?:\\Windows\\SysWOW64\\*.dll",
                  "?:\\ProgramData\\Symantec\\Symantec Endpoint Protection\\*.dll")) and
  not dll.hash.sha256 : "dde77d27a7cb0189a9a3314e42f10666a2f69ca2b81ad03ae0cc9035a97a55ad"]

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.parent.executablewildcard?:\Windows\System32\svchost.exe, ?:\Windows\System32\MoUsoCoreWorker.exe, \Device\HarddiskVolume*\Windows\System32\svchost.exe, \Device\HarddiskVolume*\Windows\System32\MoUsoCoreWorker.exeexcludes:process.parent.executable
dll.code_signature.subject_nameeqMicrosoft Windows, Microsoft Corporationexcludes:dll.code_signature.subject_name field:"dll.code_signature.subject_name" value:"Microsoft Windows" field:"dll.code_signature.subject_name" value:"Microsoft Corporation"
dll.code_signature.trustedeqtrueexcludes:dll.code_signature.trusted field:"dll.code_signature.trusted" value:"true"
dll.pathwildcard?:\Program Files\*.dll, ?:\Program Files (x86)\*.dll, ?:\Windows\System32\*.dll, ?:\Windows\SysWOW64\*.dll, ?:\ProgramData\Symantec\Symantec Endpoint Protection\*.dllexcludes:dll.path
dll.hash.sha256eqdde77d27a7cb0189a9a3314e42f10666a2f69ca2b81ad03ae0cc9035a97a55adexcludes:dll.hash.sha256 field:"dll.hash.sha256" value:"dde77d27a7cb0189a9a3314e42f10666a2f69ca2b81ad03ae0cc9035a97a55ad"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • start corpus 391 (elastic 391)
field:"EventType" kind:eq value:"start"
process.argswildcard
  • /RunHandlerComServer corpus 2 (elastic 2)
  • /UpdateDeploymentProvider corpus 2 (elastic 2)
field:"process.args" kind:wildcard
process.namewildcard
  • wuauclt.exe corpus 7 (elastic 7)
field:"process_name" kind:wildcard value:"wuauclt.exe"
process.parent.executableis_not_null
  • (no value, null check)
field:"ParentImage" kind:is_not_null
process.pe.original_file_nameeq
  • wuauclt.exe corpus 5 (elastic 3, sigma 2)
field:"OriginalFileName" kind:eq value:"wuauclt.exe"