Callstacks

Callstack reconstructs the sequence of function calls that led to the current thread state. Return addresses obtained directly from kernel space, are symbolized and enriched with a vital context that can be leveraged to boost behavioral detections and reduce false positive alerts.

By resolving raw instruction pointers into human-readable symbols such as module paths, function names, and offsets, Fibratus enables analysts to trace behavior back to its true origin, even across user-mode and kernel-mode boundaries. This capability is particularly valuable for detecting stealthy or indirect activity as it exposes the full execution path rather than relying solely on the initiating process. Callstacks can be filtered, symbolized, and enriched with metadata, allowing them to be incorporated into detection rules and forensic workflows for high-fidelity behavioral analysis.

A typical callstack summary is depicted in the screenshot below, delineating kernel, system, and user frames provenance.

!> For the console output to render callstack frames, the template shall define the {{ .Callstack }} segment. Segments can be customized by overriding the default rendering template.

Callstacks

Each line corresponds to the frame stack consisting of:

Stack enrichment is applied to the following event types:

Stack enrichment is enabled by default, but can be controlled via --eventsource.stack-enrichment configuration flag. To enable stack enrichment for kernel space return addresses, the symbolize-kernel-addresses config option needs to be set to true