Detection rules › Splunk

Explorer Child Process with Suspicious Command Line Padding (Sysmon)

Group by
_time, host
Source
github.com/anvilogic-forge/armory

Threat actors may abuse command-line padding with whitespace or non-printable control characters to hide malicious commands beyond the UI-visible limit, often using LNK files to launch payloads via explorer.exe. This technique enables stealthy execution by concealing the true command from the user's view. This use case detects processes launched by explorer.exe where the command line contains excessive whitespace padding, suggesting hidden execution activity consistent with LNK-based attacks. Note: Due to command line logging normalization/sanitization in other log sources, Sysmon or EDR logging is recommended for detection. This logic was verified with CrowdStrike FDR logs; if your organization uses a different EDR vendor, it is strongly recommended to perform the test found in the Threat Examples to validate that your logging source is not removing the whitespace padding.

MITRE ATT&CK coverage

References

Event coverage

ProviderEventTitle
SysmonEvent ID 1Process creation

Rule body yaml

id: '44252.86793'
title: Explorer Child Process with Suspicious Command Line Padding
description: 'Threat actors may abuse command-line padding with whitespace or non-printable
  control characters to hide malicious commands beyond the UI-visible limit, often
  using LNK files to launch payloads via explorer.exe. This technique enables stealthy
  execution by concealing the true command from the user''s view. This use case detects
  processes launched by explorer.exe where the command line contains excessive whitespace
  padding, suggesting hidden execution activity consistent with LNK-based attacks.
  Note: Due to command line logging normalization/sanitization in other log sources,
  Sysmon or EDR logging is recommended for detection. This logic was verified with
  CrowdStrike FDR logs; if your organization uses a different EDR vendor, it is strongly
  recommended to perform the test found in the Threat Examples to validate that your
  logging source is not removing the whitespace padding.'
logic_format: Splunk
logic: ' `get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  (TERM(explorer) OR "explorer.exe") | where match(process, "[\x09\x0A\x0B\x0C\x0D\x11\x12\x13]|(\n){5,}")
  and parent_process_name="explorer.exe" | table _time, host, user, process, process_path,
  process_name, parent_process_name, parent_process | bin span=1s | stats values(*)
  as * by _time, host '
techniques:
- execution:command and scripting interpreter
- execution:user execution:malicious file
technique_id:
- T1059
- T1204.002
data_category:
- Windows Sysmon
references:
- https://www.trendmicro.com/en_us/research/25/c/windows-shortcut-zero-day-exploit.html

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") (TERM(explorer) OR "explorer.exe")

Stage 2: where

| where match(process, "[\x09\x0A\x0B\x0C\x0D\x11\x12\x13]|(\n){5,}") and parent_process_name="explorer.exe"

Stage 3: table

| table _time, host, user, process, process_path, process_name, parent_process_name, parent_process

Stage 4: bucket

| bin span=1s

Stage 5: stats

| stats values(*) as * by _time, host

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
  • 1 corpus 237 (splunk 224, kusto 13)
parent_process_nameeq
  • "explorer.exe" corpus 20 (elastic 19, splunk 1)
processmatch
  • "[\x09\x0A\x0B\x0C\x0D\x11\x12\x13]|(\n){5,}"

Search terms

Bare-string tokens in the SPL search body. Splunk matches each token against _raw (the untyped raw event text) anywhere it appears, not against a specific field. These don't surface in the Indicators table because they aren't predicates on a known field.

StageTerm
1TERM
1"<EventID>1<"
1TERM
1explorer
1"explorer.exe"