Skip to content
Severity: highConfidence: moderate

Living Off the Land: Detecting Execution That Uses Nothing but Trusted Binaries

When every tool in the intrusion ships with the operating system, signature-based detection has nothing to match. What remains is relationship, context and frequency.

Published
Read time
3 min

Executive summary

Executive summary

  • Signed, native binaries used for execution, download and persistence leave no malicious file to detect.
  • Effective detection shifts from "what ran" to "what launched it, with what arguments, in what context".
  • Parent-child process relationships and command-line telemetry carry most of the detection value.
  • Baselining is unavoidable: the same binary is routine in one environment and anomalous in another.

Quick facts

Quick facts

Detection surface
Process lineage and arguments
File-based detection value
Effectively none
Required telemetry
Command line capture
Main failure mode
Unbaselined alerting

Why this defeats file-centric detection#

Every layer of a traditional endpoint stack asks a version of the same question: is this file bad? Hash reputation, static analysis, signature matching and code signing checks all depend on the presence of an artifact that can be judged.

In an intrusion built from native tooling, that artifact does not exist. The interpreter is signed by the platform vendor. The transfer utility ships with the operating system. The scheduling mechanism is a documented administrative feature. Each component is not merely benign — it is required, and blocking it outright breaks legitimate administration.

Where the signal actually lives#

Three telemetry sources carry most of the detection value:

  • Process lineage. The binary is unremarkable; its parent frequently is not. A document viewer or a web server worker spawning a command interpreter is a strong signal in almost any environment.
  • Command-line arguments. Encoded payloads, download flags, and execution policy overrides appear in arguments rather than in files.
  • Frequency and distribution. A utility that runs on four hundred hosts nightly is administration. The same utility running once, on one host, at an unusual hour, is worth a look.
ObservationDetection valueRequires baseline
Binary hashNoneNo
Parent processHighPartially
Command-line contentHighYes
Execution frequencyModerateYes
Network destinationModerateYes
Signing statusNoneNo

A worked example of intent#

# Detection intent, not a production rule
process_creation
| where parent_image in~ ('document_viewer', 'web_worker', 'mail_client')
| where child_image in~ ('script_host', 'command_shell', 'management_shell')
| where command_line has_any ('-enc', 'downloadstring', '-nop', 'iex')
| summarize count() by host, user, bin(timestamp, 1h)

The final aggregation matters as much as the filter. Alerting on every match produces volume that a team will eventually mute; alerting on rarity within a baseline produces something an analyst can act on.

Building the baseline#

Baselining is where most of these detections succeed or fail, and it is not glamorous work:

  1. Collect thirty days of process telemetry without alerting.
  2. Rank parent-child pairs by frequency and host spread.
  3. Move pairs that appear on a large share of hosts into an explicit allow set, with an owner recorded for each entry.
  4. Alert on the remainder, tuned by host count rather than event count.
  5. Re-run the ranking quarterly, because deployment tooling changes and stale allow entries become blind spots.

Assessment#

Confidence is assessed as moderate rather than high, for a specific reason: the techniques themselves are well established and not in dispute, but detection efficacy varies substantially with environment size, telemetry retention and administrative practice. A rule that performs well in a homogeneous estate may be unusable in one with heavy local automation.

The realistic goal is not to detect native tooling. It is to make unusual use of native tooling expensive enough to surface, which requires the boring, ongoing work of knowing what normal looks like in one specific environment.

Timeline

Sequence of events

  1. Stage 101

    Execution via a trusted interpreter

    A scripting host or management utility executes attacker-supplied logic without dropping a distinct binary.

  2. Stage 202

    Retrieval using a native transfer utility

    A signed system tool fetches the next stage, blending into legitimate administrative traffic.

  3. Stage 303

    Persistence through a scheduled task

    A task named to resemble a platform component re-executes the chain on a schedule.

  4. Stage 404

    Discovery with built-in enumeration commands

    Domain and host enumeration performed entirely with commands present by default.

Tags

  • detection engineering
  • endpoint
  • persistence
  • evasion

Related records

IA-0001Severity: critical

Build Pipeline Compromise: When the Artifact Is the Payload

An intrusion that never touched production directly. The attacker modified a build agent, and the organisation shipped the backdoor itself through its own signed release channel.

Incident Analysis4 min read