Kubernetes Runtime Security with Falco: A Practical Guide

Image scans and admission policies can keep known-bad artifacts out of a cluster, but they cannot show what a running container does after deployment. A compromised process may open an unexpected network connection, read sensitive files, or attempt an escape while the workload still matches its declared configuration.

Kubernetes runtime security is the practice of monitoring workloads while they run, using syscall-level signals to identify unexpected process execution, file access, and network activity inside pods. Falco turns those events into rule-based detections, enriches them with Kubernetes context, and routes actionable alerts to the systems your response team already uses.

That approach starts below the application layer, at the interface between processes and the operating system. Understanding why syscalls provide that visibility clarifies what Falco can detect, where it fits alongside preventive controls, and how to deploy it consistently across a fleet.

Get started with Plural in a free 14-day sandbox, no credit card required.

Why Kubernetes Runtime Security Needs Syscall-Level Monitoring

Admission controllers, image scans, and Kubernetes pod security standards establish important boundaries before a workload starts. They can reject a privileged pod, flag a vulnerable image, or enforce a security context. They cannot observe everything that happens after the container begins executing.

That gap matters because a running container is not a static artifact. Configuration can drift from the declared state. A process can open a network connection that was not visible during image analysis. An attacker who gains an initial foothold can inspect the environment, execute new processes, access files, and attempt lateral movement between pods. Static scanning misses these live interactions because it evaluates an image or configuration snapshot, not operating system activity.

NIST defines runtime security as monitoring and securing applications while they run. Its guidance also identifies system calls as the interface between an application and the operating system. That interface provides the most direct behavioral signal available to a runtime security control. File opens, process execution, privilege changes, and network activity all require system calls. Monitoring them makes it possible to compare observed behavior with the workload's expected behavior.

Runtime escapes

Preventing runtime escapes is a critical objective for container security in production. A compromised process may try to exploit excessive privileges, abuse a host-mounted path, or reach resources outside its intended isolation boundary. The specific technique can change, but the attempt still produces operating system activity that a syscall monitor can inspect.

This does not make syscall monitoring a replacement for preventive controls. Admission policies and image scanning reduce exposure before deployment. Runtime monitoring detects what those controls cannot see, including a trusted image behaving unexpectedly after compromise. Together, the layers provide a more complete view of workload risk.

For platform teams, the practical requirement is coverage across every node and namespace, with enough Kubernetes context to identify the affected workload. Syscall events become useful when they are tied to the pod, container, namespace, and cluster where they occurred. That context turns low-level operating system activity into an actionable security signal for day-2 operations.

How Falco Delivers Kubernetes Runtime Security

Falco is a CNCF-graduated, open-source runtime security tool built around a direct signal: what processes actually ask the operating system to do. It consumes Linux system calls at the kernel boundary, evaluates them against rules, and adds Kubernetes context before producing an event. That combination lets teams investigate suspicious behavior inside a running container rather than relying only on image scans or admission policies.

Event sources at the kernel boundary

Falco receives system call events through a driver. The modern eBPF probe is the default path for most installations. It is embedded, uses compile once, run everywhere (CO-RE), and runs on kernels 5.8 and newer when the host provides BTF and BPF ring buffers. It can operate with least-privilege capabilities: CAP_SYS_BPF, CAP_SYS_PERFMON, CAP_SYS_RESOURCE, and CAP_SYS_PTRACE.

The kernel module remains an option for environments that need it. Falco can install it through a package or the falcoctl driver loader. Unlike the eBPF probe, the module requires full privileges and cannot run with Linux capabilities. Review the Falco kernel event-source documentation against your node kernels and security policy before selecting a driver.

Falco driver options for Kubernetes nodes
DriverDeploymentKernel requirementsPrivilegesRecommended use
Modern eBPF probe.Embedded in Falco; no separate module build.Kernel 5.8 or newer, with BTF and BPF ring buffers.Runs with least-privilege Linux capabilities.Default for current Kubernetes nodes.
Kernel module.Package installation or falcoctl driver loader.Compatible kernel headers and module support.Requires full privileges; capabilities are not supported.Use when eBPF prerequisites are unavailable.

Kubernetes metadata turns events into findings

A raw syscall is useful, but an actionable alert needs workload identity. Falco enriches events with the pod, namespace, container, and labels associated with the process. An unexpected file read can therefore identify the affected deployment and namespace, not just a process ID on a node. This context makes triage faster and supports policies that distinguish an approved administrative action from the same behavior in an application pod.

Falco's rules can then identify behavior such as cryptocurrency mining, file exfiltration, privilege escalation, and rootkit installation in real time. Teams can use the event stream to connect a suspicious action to the workload that produced it. Route the finding into existing response systems, and preserve the context needed for follow-up.

This is a Falco-specific implementation deep dive. For category-level context before tuning a deployment, see our broader runtime security guide.

The Falco Rules That Matter Most for Pod Threat Detection

Falco's default rules provide a practical baseline for detecting suspicious behavior in containers, on hosts, across Kubernetes resources, and in cloud environments. They are loaded in order from /etc/falco/falco_rules.yaml, then falco_rules.local.yaml, followed by files in /etc/falco/rules.d. This layout separates shipped detections from local policy.

Keep the rule set current with falcoctl, which distributes rules as OCI artifacts. With Helm chart version 3.0.0 or later, the chart can automatically load the latest compatible rules. Review updates in a staging cluster before applying them across production, especially when custom exceptions depend on field names or rule behavior. See Falco's documentation on default and custom rules for the supported loading model.

Understand the anatomy of a useful rule

Every Falco rule has three important parts. The condition is a logical expression over syscall events and metadata fields, such as the process, user, container, namespace, or file path. The output is a message template that turns a matching event into an actionable alert. The priority communicates urgency and supports downstream routing.

The priority ladder runs from Emergency and Alert through Critical, Error, Warning, Notice, Informational, and Debug. Use it consistently rather than treating every match as an incident. A high-signal baseline should include a terminal shell spawned inside a container, a write below a binary directory, an unexpected outbound connection attempt, and indicators of privilege escalation. These signatures cover common paths from initial access to persistence or credential abuse. Falco's default rule reference explains the shipped detections and their conditions.

Tune detections to reduce noise

Default rules are a starting point, not a finished policy. A legitimate deployment may start a shell for a migration, write to a package-managed path, or contact an external service. Capture that expected context explicitly, using exceptions and narrower conditions rather than disabling a broad rule.

Put overrides in falco_rules.local.yaml and add organization-specific rules in /etc/falco/rules.d. Append or override shipped rules without editing falco_rules.yaml, so upgrades remain predictable. Test each exception against the namespace, image, executable, user, and workload identity that make the behavior legitimate. Then review alert volume and missed detections after rollout. The result is a smaller queue with clearer signals for Kubernetes runtime security operations, while preserving the upstream rule set for future updates.

How Do You Deploy Falco Across a Kubernetes Fleet?

Fleet deployment is where runtime monitoring becomes an operational control rather than a one-off experiment. CISA guidance notes that a consistent security posture across a Kubernetes fleet requires automated runtime protection on every node. The deployment should therefore be repeatable, least-privileged, and observable from the same operational plane as the clusters it protects.

  1. Install the official Helm chart. Add the Falco chart repository, update its index, and install Falco into a dedicated namespace. The chart deploys Falco as a DaemonSet, which schedules one sensor on every eligible node. That scheduling model matters when clusters scale or nodes are replaced: new nodes receive the sensor through the same declarative deployment rather than relying on a manual installation step. Review node selectors, tolerations, and resource requests before applying the chart to production.
  2. Configure the driver on each node. Use falcoctl to load and manage the driver required by the node's kernel. The modern eBPF probe is the default path for supported environments and is generally preferable because it avoids building a kernel module. For older kernels or environments that cannot support the eBPF requirements, use the kernel module fallback. Treat driver compatibility as part of cluster validation, not as an assumption hidden in the Helm values.
  3. Run with the minimum required capabilities. Do not grant CAP_SYS_ADMIN by default. For the eBPF path, configure the narrower capabilities Falco requires, such as CAP_SYS_BPF, CAP_SYS_PERFMON, CAP_SYS_RESOURCE, and CAP_SYS_PTRACE, subject to your kernel and deployment version. The kernel module path has different privilege requirements, so document that exception and apply it only to compatible nodes.
  4. Tune event buffers and CPU allocation. Falco processes high-volume system call activity, and under-sized buffers can increase drops while under-provisioned CPU can delay detection. Set buffer and CPU values against observed workload intensity, node size, and the number of monitored containers. Start with conservative resource requests, inspect Falco metrics and pod health, then adjust during normal and peak traffic. Record the chosen values in the same deployment configuration used across clusters.
  5. Verify that events flow. After rollout, trigger a controlled test rule in a non-production namespace, such as an expected shell execution or file-access event. Confirm that Falco reports the event with node, namespace, pod, and container context. Also verify that the DaemonSet has a ready pod on every intended node and that no driver or buffer errors appear in logs. Keep the test procedure in your operational documentation so upgrades can be validated consistently.

For teams managing 10 or more clusters, fleet-wide Falco deployment fits naturally into a single-pane-of-glass operating model. Plural's agent-based approach to runtime security complements node-level sensors: agents initiate outbound-only connections, and the self-hosted control plane does not require central credential storage. Use the agent-based approach to runtime security as the architectural reference, then apply the implementation details in the Plural documentation.

Manage runtime alerts alongside your entire Kubernetes fleet in one control plane with Plural.

How Do You Feed Falco Alerts into Your Response Pipeline?

A Falco event is useful only when it reaches the system that can act on it. Each event can carry Kubernetes context such as the pod name, namespace, container image, and labels, along with the syscall that triggered the rule. That context lets responders distinguish a known administrative action from an unexpected process or network connection without switching between several dashboards.

Falcosidekick is the companion forwarder for distributing Falco events to more than 50 destinations, including Slack, Microsoft Teams, PagerDuty-style ticketing systems, Kafka, Amazon SNS, serverless functions, and databases. See the Falco project documentation for the supported integration model and configuration details.

Route priority to the right response channel

Do not send every event to the on-call rotation. Use Falco priorities as an operational routing policy:

  • Emergency and Alert: page a human immediately. These signals indicate activity that warrants direct investigation and a defined incident owner.
  • Critical: send the event to the security operations channel and your SIEM, with enough Kubernetes metadata to support correlation and triage.
  • Error and Warning: retain them in the SOC channel or SIEM for review, trend analysis, and rule tuning. Escalate when they combine with other indicators.
  • Notice, Informational, and Debug: keep them out of on-call notifications unless a temporary investigation requires additional visibility.

This mapping prevents alert fatigue while preserving lower-severity evidence. It also gives security teams a repeatable way to change routing without changing detection logic.

Choose an integration pattern based on the response

For human triage, push high-priority events to a dedicated Slack or Microsoft Teams channel. Include the namespace, pod, image, rule name, priority, and triggering syscall in the message so the first responder has a usable starting point. Centralize that triage process in a unified control plane so operators see runtime alerts alongside change and audit context before defining next steps and ownership.

For centralized detection, stream Falco events to Kafka and let the SIEM consume them alongside Kubernetes audit logs, identity events, and cloud telemetry. The enrichment fields make correlation practical. A suspicious process in a pod becomes more meaningful when it aligns with a recent deployment, an unusual service-account action, or an audit event in the same namespace.

For repeatable containment, send selected rules to a serverless responder. A responder might isolate a workload, revoke a short-lived credential, or create a ticket for review. Keep automated actions narrow and rule-specific, with an audit trail and a human override. This approach turns Falco from a standalone detector into a controlled part of the incident response pipeline.

Kubernetes Runtime Security as a Compliance Requirement

For regulated organizations, compliance cannot end when an image passes a scanner or a pod satisfies an admission policy. Financial services, healthcare, and government teams must show that workloads remain monitored after deployment, including during an intrusion, configuration drift, or attempted escape. NIST SP 800-190 defines runtime security as "the process of monitoring and securing applications while they are running." That distinction changes what evidence a security program needs to collect. NIST's container security guidance treats runtime behavior as part of the security boundary, not an optional observability layer.

A practical control therefore needs to answer questions that static controls cannot. Did a process execute inside a container that normally runs one binary? Did the workload open an unexpected file, initiate a new network connection, or attempt to cross a privilege boundary? Syscall-level sensors can record those events while they happen. They also create an audit trail for investigation when a team must establish what occurred, which namespace was affected, and how quickly the response began. Preventing runtime escapes is a critical production security objective, as documented by research on container runtime escapes.

CISA's Kubernetes hardening guidance reinforces the operational requirement: security controls must be applied consistently across the cluster. In a fleet with many clusters, leaving even one node without runtime coverage creates an avoidable blind spot. Runtime alerts should feed the same incident response process as other high-value security signals, with retained event details and documented escalation paths.

That requirement is especially important in air-gapped and data-sensitive environments. Plural provides a self-hosted control plane with an agent-based pull architecture, so regulated teams can manage runtime sensors such as Falco across nodes. The model exposes no inbound ports and never places cluster credentials in a central service. It supports zero-trust operating principles and data sovereignty while keeping fleet-wide policy and evidence management practical. For regulated teams running infrastructure automation on Kubernetes, runtime monitoring belongs in the compliance architecture from the beginning, alongside identity, isolation, and response.

Frequently Asked Questions

What does runtime security add after a pod passes admission?

Admission checks validate configuration before deployment, but they cannot show what a process does after startup. Runtime monitoring observes behavior such as unexpected file access, outbound connections, and process execution through system calls. This helps teams identify compromise, drift, and attempted container escapes while workloads are running. NIST describes runtime security as monitoring and securing applications during execution.

How does Falco detect suspicious activity inside a container?

Falco observes system calls, evaluates them against rules, and enriches matching events with Kubernetes context. A rule can alert when a container starts an unexpected shell, writes below a binary directory, or makes an unusual network connection. The resulting event can include the pod, namespace, and container, giving responders enough context to investigate without treating every process as a generic host alert. Falco documents syscall monitoring for Kubernetes threat detection.

Does Falco use eBPF?

Yes. Falco supports a modern eBPF probe and a kernel module. The eBPF driver is the default path for supported kernels, while the module remains an option when eBPF prerequisites are unavailable. Confirm kernel compatibility, required capabilities, and driver loading behavior in a staging cluster before rolling the agent across production nodes.

How should teams install Falco across multiple clusters?

Deploy the Falco Helm chart as a DaemonSet so every node receives monitoring. Load the appropriate driver on each node, then verify that representative events arrive from every cluster. Keep configuration and rule versions consistent, and tune buffers for workload volume. Automated deployment matters because a distributed fleet can otherwise develop uneven protection. CISA Kubernetes hardening guidance emphasizes reducing risk through consistent cluster controls.

Which rules should be enabled first?

Start with rules for interactive shells in containers, writes to protected binary paths, unexpected privilege changes, and suspicious outbound connections. Review alerts against known deployment and debugging workflows, then narrow conditions or exceptions rather than disabling broad detection categories. Route high-priority events to incident response and retain lower-priority events for investigation and tuning.

Ready to manage runtime security across your fleet?

Falco can surface suspicious activity inside pods, but consistent deployment and response still require fleet-level visibility. Get started with Plural in a free 14-day sandbox, with no credit card required. Get started with Plural and bring runtime monitoring into the same operational view as your Kubernetes infrastructure.

g