Skip to content

Runtime Blocks: Guardian Profiles and Policies

Guardian Profiles define the expected behavioral envelope for a specific binary running on a specific sensor. They capture what the process is allowed to spawn, connect to, read, and how it may use capabilities. Guardian Policies are alert and enforcement rules that fire when events deviate from the profile.

Together, profiles and policies implement an allowlist-based confinement model: instead of blocking individual known-bad patterns, they alert or kill when the process behaves outside its documented normal behavior.

Prerequisites

  • operator role
  • Sensor already enrolled and in observe mode
  • At least 300 seconds of event history on the sensor for the target binary

Guardian Profiles

A profile is tied to a single target_binary path and optionally to a specific sensor (target_sensor_id) and NF role (target_nf_role). The allowlists define what the binary is permitted to do.

Profile modes

ModeWhat it does
observeNo active enforcement. Profile is stored but no TracingPolicy is generated. Use this while building the baseline.
auditA TracingPolicy is generated and deployed. Deviations from the allowlist trigger Sigkill on the matching process. Use for controlled testing before full enforcement.
enforceA TracingPolicy is generated and deployed. Deviations trigger Override (BPF LSM denial) where applicable. Full production enforcement.

Note: The TracingPolicy YAML is only generated and deployed when mode is audit or enforce. Setting mode to observe returns no policy YAML from the export endpoint.

Profile ID format

Profile IDs use the format gp_ followed by 12 hex characters.

Creating a profile

Requires operator role. In the Console, go to Policies > Guardian Profiles and click New Profile. Provide the target binary path and optional scope fields.

Profile fields:

FieldRequiredDescription
nameYesProfile label (max 128 characters)
descriptionNoExplanation (max 2,000 characters)
target_binaryYesAbsolute path of the binary this profile applies to
target_nf_roleNoDeclare the NF role for context
target_sensor_idNoScope to a specific sensor
modeNoobserve (default), audit, or enforce
allowed_spawnsNoBinaries this process is permitted to exec
allowed_filesNoFile path prefixes this process is permitted to read/write
allowed_dst_portsNoDestination TCP/UDP ports this process may connect to
allowed_dst_cidrsNoDestination IP address ranges this process may connect to
allowed_capabilitiesNoLinux capabilities this process may use
blocked_syscallsNoSyscalls to deny (used in generate; may not apply in all modes)
observation_window_hoursNoHow many hours of history to use when auto-generating the profile
New Profile form showing target binary, mode selector, and allowlist fields.
New Profile form showing target binary, mode selector, and allowlist fields. Click to enlarge

Auto-generating allowlists from event history

The Telovix Console can analyze event history from ClickHouse and populate the allowlists automatically. In the Console, go to Policies > Guardian Profiles > [profile] > Generate Allowlists. Set the source sensor and optional window (default: 24 hours) and click Generate.

Requires operator role.

The result populates spawned_binaries, file_path_prefixes, dst_ports, dst_cidrs, and capabilities arrays into the profile's allowlists, and marks the profile auto_generated = true.

Review the generated allowlists before advancing the profile to audit or enforce. Auto-generated profiles may include maintenance or startup behaviors that are legitimate but should not be part of the steady-state envelope.


Updating a profile

In the Console, go to Policies > Guardian Profiles > [profile] and edit the allowlist fields or change the mode using the mode selector.


Exporting a profile as TracingPolicy YAML

In the Console, go to Policies > Guardian Profiles > [profile] > Export. The Console compiles the profile into deployable TracingPolicy YAML and downloads it as a file.

The generated YAML is named guardian-profile-{profile_id}-{mode}.yaml. In audit mode the action is Sigkill; in enforce mode the action is Override (BPF LSM).

In observe mode, the export returns a comment-only file with no active rules.


Comparing two profiles

In the Console, go to Policies > Guardian Profiles > [profile] > Diff and select a second profile to compare against. The diff view shows added and removed entries for each allowlist dimension.


Listing and deleting profiles

In the Console, go to Policies > Guardian Profiles to see all profiles. Select a profile and click Delete to remove it. Requires operator role.


Guardian Policies

Guardian Policies are event-matching alert and enforcement rules associated with a profile. When an incoming heartbeat event matches a policy's conditions, the Console acts immediately.

Policy actions

ActionWhat happens
flagStored as a flag match; visible in the Custom Flags view
alertFires an alert into the Console alert inbox
kill_processAdds the matching event's PID to the sensor's pending kill queue; delivered at the next heartbeat
create_investigationAutomatically creates or links an investigation case

The kill_process and create_investigation actions are evaluated against each incoming heartbeat's event batch. flag and alert are passive records.

Policy matching

Each policy matches on any combination of:

Match fieldComparison
match_event_kindExact match against the event kind string
match_process_patternSubstring match against process_executable
match_parent_patternSubstring match against parent_executable
match_uidExact match against the event's UID
match_dst_portDestination port (for network events)
match_dst_ip_prefixDestination IP prefix (for network events)

All specified conditions must match (AND logic). Fields left null are not evaluated.

Creating a Guardian Policy

Requires operator role. In the Console, go to Policies > Guardian Profiles > [profile] > Policies and click New Policy.

Policy fields:

FieldRequiredDescription
nameYesPolicy label
descriptionNoExplanation
sensor_idNoScope to a specific sensor
target_group_idNoScope to a sensor group
match_event_kindNoEvent kind to match
match_process_patternNoProcess executable substring
match_parent_patternNoParent executable substring
match_uidNoUID to match
match_dst_portNoDestination port (string, may include ranges)
match_dst_ip_prefixNoDestination IP prefix
actionNoflag (default), alert, kill_process, or create_investigation
severityNoinfo, warning (default), or critical
exceptionsNoProcess patterns to exempt from this policy
compliance_tagsNoCompliance control IDs for evidence reports

Managing policies

In the Console, go to Policies > Guardian Profiles > [profile] > Policies to list, enable, disable, update exceptions, and delete policies.


rApp catalog integration

Guardian Profiles can be linked to rApp catalog entries. When a profile's mode changes, the linked rApp's status updates automatically:

Profile moderApp status
observeobserving
auditprofiled
enforceenforced

The rApp catalog tracks binary path, vendor, version, and expected gRPC services alongside the behavioral profile. Policies referencing the rApp binary benefit from this additional context in investigation views.


  1. Create a profile with mode: observe and set the target_binary to the binary you want to confine.
  2. Run Generate Allowlists after 24–72 hours of normal operation to build the initial allowlists from event history.
  3. Review the generated allowlists. Remove any entries that represent startup-only behavior not expected in steady state.
  4. Advance mode to audit. Review Sigkill events in the Console to confirm only unexpected behavior is being matched. Add exceptions if legitimate patterns are being caught.
  5. After at least one deliberate deviation test (unexpected spawn or unauthorized connection), advance to enforce if audit results are clean.
  6. Create Guardian Policies with kill_process or create_investigation actions for the highest-risk deviation patterns.

::: note Do not advance from observe directly to enforce. The audit mode with Sigkill action allows you to see what would be blocked before relying on Override denial. Skipping this step risks blocking legitimate workload behavior. :::


Further reading

Released under the Telovix Commercial License.