Entry-Point Dynamic Analysis

When a running container is available — for example, during runtime posture checks — the Stella Ops scanner augments its static entry-point inference with live process signals. This guide describes the Observational Exec Graph (OEG) that powers that dynamic mode: how it is captured, how steady-state processes are selected, and how its output merges with the static pipeline.

It is the dynamic counterpart to Entry-Point Static Analysis; both feed the same Runtime Detector Overview classification stage.

1) Goals

2) Observational Exec Graph (OEG)

2.1 Data sources

2.2 Graph model

public sealed record ExecNode(int HostPid, int NsPid, int Ppid, string Exe, string[] Argv, long StartTicks);
public sealed record ExecEdge(int ParentHostPid, int ChildHostPid, string Kind); // "clone" | "exec"

2.3 Steady-state candidate selection

For each node compute features:

FeatureRationale
Lifetime (until sampling end)Long-lived processes are more likely to be the real workload.
Additional execs downstreamZero execs after start implies terminal.
Listening socketsOwning LISTEN sockets strongly suggests a server.
Wrapper catalogue hitMark nodes that match known shims (tini, gosu, supervisord, etc.).
Children fan-outSupervisors spawn multiple children and remain parents.

Feed these into a scoring function; retain Top‑K candidates (usually 1–3) along with evidence.

3) Integration with static pipeline

  1. For each steady-state candidate, snapshot the command/argv and normalise via ResolvedCommand (as in static mode).
  2. Run wrapper reduction and ShellFlow analysis if the candidate is a script.
  3. Invoke runtime detectors to classify the binary.
  4. Merge dynamic evidence with static evidence. Conflicts drop confidence or trigger the “supervisor” classification.

4) Supervisors & multi-service containers

Some images (e.g., supervisord, s6, runit) intentionally start multiple long-lived processes. Handle them as follows:

5) Operational hints

6) Deliverables

The dynamic reducer returns an EntryTraceResult populated with:

Downstream modules (Policy, Vuln Explorer, Export Center) treat the result identically to static scans, enabling easy comparison between build-time and runtime observations.