Join our Newsletter — 33% off our NHI Course
Home› Guides› Falco Runtime Security Guide: Deploying, Tuning and Operating…
Guide SOC & Detection Engineering

Falco Runtime Security Guide: Deploying, Tuning and Operating Falco in Production

PDF for newsletter subscribers · free to read online

← All guides
By NHI Mgmt Group, edited by Lalit Choda Updated 11 November 2026 16 min read
On this page

Falco is easy to install and hard to run well: a default deployment produces alerts nobody owns, drops events under load and leaves its own configuration unprotected. This guide covers the operational side of Falco, the CNCF graduated runtime security project: choosing a driver and privilege level, managing the rules lifecycle with maturity levels and overrides, adding plugin data sources such as Kubernetes audit logs, routing alerts through Falcosidekick and Falco Talon, and measuring whether the sensor is healthy. It is written for platform engineers and detection engineers who already understand the runtime threat model. For the concepts behind eBPF sensors and runtime detection in general, start with the Container Runtime Security Guide; this page goes deeper on Falco itself.

This is an independent guide from NHI Mgmt Group, based on The Falco Project's public documentation as of November 2026. It is not sponsored or reviewed by The Falco Project. Product features change, so confirm settings against the project's current documentation.

Key takeaways

  • Pick the driver deliberately. The current falco.yaml lists four engine kinds (kmod, modern_ebpf, replay and nodriver); modern_ebpf is the default and can run with four capabilities instead of a fully privileged container.
  • Treat rules as a product with releases. Only maturity_stable rules ship with Falco; incubating and sandbox rules need explicit installation, and the project guarantees compatibility only between the latest rules and the latest Falco release.
  • Customise through overrides and exceptions, never by editing upstream files. The override key with append or replace keeps your changes separate so rule updates do not wipe them out.
  • Syscalls are only one source. Plugins add Kubernetes audit events, CloudTrail, Okta, GitHub and other identity-rich sources, which is where most credential misuse shows up.
  • Measure the sensor, not just the alerts. Event drops, output queue pressure and rules load errors tell you whether Falco is blind before an incident does.

What Falco is and how its parts fit together

Falco is a kernel monitoring and detection agent. It observes events such as system calls, evaluates them against rules, enriches them with container and Kubernetes metadata, and emits alerts that are meant to be analysed off-host in a SIEM or data lake. The project lives in the falcosecurity GitHub organisation, is licensed under Apache 2.0 and supports x86_64 and aarch64. The latest release recorded in the project changelog when this guide was checked (November 2026) was v0.45.2.

ComponentRepositoryRole in a deployment
Falco enginefalcosecurity/falcoThe agent: loads rules, evaluates events, writes outputs. Configured in falco.yaml
Core libraries and driversfalcosecurity/libsKernel instrumentation (kernel module and modern eBPF probe) and the event parsing state engine
Official rulesfalcosecurity/rulesRules files by maturity: falco_rules.yaml (stable), falco-incubating_rules.yaml, falco-sandbox_rules.yaml, falco-deprecated_rules.yaml
Pluginsfalcosecurity/pluginsExtra event sources and field extractors, each with its own rules files
falcoctlfalcosecurity/falcoctlInstalls and follows rules and plugin artefacts; reads the running Falco version from the embedded web server
Helm chartsfalcosecurity/chartsKubernetes deployment of Falco and its ecosystem
Falcosidekickfalcosecurity/falcosidekickEcosystem daemon (MIT licence) that receives events from many Falco instances and fans them out to chat, SIEM, queues, object storage and response engines
Falco Talonfalcosecurity/falco-talonResponse engine (status incubating) that takes actions in Kubernetes and cloud when rules fire

Choosing a driver and privilege level

The engine.kind key in falco.yaml selects how events are collected, and only one engine can be set. The master branch falco.yaml lists kmod (kernel module), modern_ebpf (the CO-RE eBPF probe, the default), replay (reads a .scap capture file) and nodriver (no driver injected, used for debugging and for plugin-only deployments). The Container Runtime Security Guide explains the kernel-level trade-offs; the operational decisions are below.

DecisionSettingWhen to choose it
Default syscall monitoring on modern kernelsengine.kind: modern_ebpfMost clusters and hosts with BTF-enabled kernels; no per-kernel build to manage
Least privilege on KubernetesHelm: driver.kind=modern_ebpf and driver.modernEbpf.leastPrivileged=trueWhere policy forbids privileged pods. The chart then adds only the BPF, SYS_RESOURCE, PERFMON and SYS_PTRACE capabilities instead of privileged: true
Older kernels without eBPF supportengine.kind: kmodLegacy hosts only; needs a privileged container and a module matching the kernel build
Plugin-only collectorengine.kind: nodriver, Helm driver.enabled=falseA central Falco that only consumes Kubernetes audit, CloudTrail or other plugin sources
Forensic replay and rule testingengine.kind: replay with replay.capture_fileTesting rule changes against recorded events in CI, or analysing a capture after an incident
  • Buffer sizing: engine.modern_ebpf.buf_size_preset (default 4, which is 8 MB per buffer on the documented index) and cpus_for_each_buffer (default 2, one ring buffer per CPU pair) control memory against drop risk. Raise the preset only after metrics show drops.
  • Syscall scope: base_syscalls.custom_set and base_syscalls.repair let you trim the monitored syscall set to what enabled rules need. The project warns that misconfiguring this can leave Falco unable to track processes, so change it only with replay testing.
  • Kernel visibility: the chart mounts /sys/kernel (or /sys/kernel/tracing or /sys/kernel/debug) for kernel-level access. Hardened node images sometimes block these paths, so test on the real node image, not a developer laptop.

Managing the rules lifecycle

Since rules version 2.0.0 the official rules are split by maturity, and every upstream rule carries its maturity level as its first tag. The rules repository describes the levels as follows: maturity_stable rules have been evaluated by experts with production experience and focus on universal detections such as reverse shells and container escapes; maturity_incubating rules address relevant threats for more specific use cases; maturity_sandbox rules are experimental; maturity_deprecated rules are kept as examples but no longer tuned. The project is explicit that maturity does not predict noise in your environment, and that adopters should treat the rules as examples and expect regular engineering effort.

Install, follow and load are three separate settings

  • Install: falcoctl.config.artifact.install.refs decides which rules artefacts (for example falco-rules, falco-incubating-rules) are downloaded at start-up.
  • Follow: falcoctl.config.artifact.follow.refs decides which artefacts are updated automatically while Falco runs. Auto-follow of incubating or sandbox rules in production means untested rule changes land without review; pin versions and promote through environments instead.
  • Load: rules_files in falco.yaml (falco.rules_files in Helm) decides which files the engine actually reads, in order. Your custom files must load after the upstream files they modify.

Customising without forking

Falco 0.37.0 and later support selective overrides. In a custom rules file loaded after the original, add an override block to a list, macro or rule naming each key and whether to append or replace it. The documented keys are: lists, items; macros, condition; rules with append, condition, output, desc, tags and exceptions; rules with replace, condition, output, desc, priority, tags, exceptions, enabled, warn_evttypes and skip-if-unknown-filter. Append and replace cannot be combined on the same key. The older append: true syntax is deprecated and the documentation says it will be removed in Falco 1.0.0. To switch a rule on or off, set enabled with an override of enabled: replace rather than redefining the rule.

Exceptions are the preferred way to express allowances. Each entry in a rule's exceptions list has a name, fields, comps (one operator per field, defaulting to = for a list of fields or in for a single field) and values as tuples. The documentation recommends thinking in terms of actor, action and target, and rejects process-name-only exceptions as too broad. In practice key exceptions on container image repository, namespace and Kubernetes service account, since process names are trivial to fake (ATT&CK T1036 Masquerading).

Customisation needMechanismExample of a good scope
Allow a known tool to do something a rule flagsoverride: exceptions: append with a values tupleImage repository plus namespace plus the file path it writes
Add your trusted registries or binaries to a listoverride: items: append on the listInternal registry hostnames used in container image macros
Raise or lower severity for your contextoverride: priority: replaceRaise a shell-in-container rule to CRITICAL for payment namespaces
Turn off a rule that does not fitoverride: enabled: replace with enabled: falseDocument the reason and the compensating control in the same file
Detection for your platform's invariantsNew rule in your own file, tagged with ATT&CK IDs"No package manager runs in production namespaces"
  • Matching order: rule_matching defaults to first, so only the first matching rule in load order fires for an event. Setting it to all evaluates every rule but costs performance; test before production.
  • Priority floor: the priority key loads only rules at or above the given level (default debug). Raising it to warning is a blunt noise control that also hides useful low-severity context; prefer tuning.

Adding identity-rich sources with plugins

Syscalls show what a process did on a node. Plugins add event sources that show who asked for it. The plugin registry includes k8saudit (plus managed-cluster variants k8saudit-eks, k8saudit-gke, k8saudit-aks and k8saudit-ovh), cloudtrail, gcpaudit, okta, github, gitlab, keycloak, salesforce, box, docker, journald, kafka and k8smeta and container for metadata enrichment. Plugin rules sit in the plugins repository and are outside the rules maturity framework, so review them as you would your own.

  • Kubernetes audit events: the k8saudit plugin defines the k8s_audit source and fields such as ka.user.name, ka.impuser.name, ka.verb, ka.target.name and ka.auth.decision. It receives events from the API server audit webhook backend, with an example open_params of http://:9765/k8s-audit. The plugin README recommends hosting the webhook backend outside the audited cluster. The detection logic itself is covered in the Kubernetes Audit Log Detection Guide.
  • Backpressure: the webhook refuses requests with HTTP 429 when its queue stays full for webhookEnqueueTimeout seconds (default 5), and the API server retries with back-off. Keep that value well below the API server's 30 second webhook timeout, as the README advises.
  • Cloud and SaaS identity: cloudtrail, gcpaudit, okta and github sources let one rule engine watch console logins, token creation and repository permission changes alongside workload behaviour. That matters because most container incidents end in a stolen cloud credential, not a kernel exploit.

Where identity fits

Falco itself handles several credentials, and its alerts are some of the best early evidence of credential theft from workloads.

  • Detecting credential access: upstream rules such as reads of sensitive files and searches for cloud credentials or private keys map to ATT&CK T1552.001 Credentials In Files, and container API access maps to T1552.007. Pair every hit with a review of what the pod's Kubernetes Service Account Token Guide scope and cloud workload identity could reach.
  • Falco's own service account: the chart creates a service account for metadata lookups. Keep it read-only and do not reuse it for response tooling.
  • Response credentials: Falco Talon actionners can terminate pods, apply network policies, cordon and drain nodes, run commands in pods and invoke AWS Lambda or GCP Cloud Functions. The identity running Talon is therefore a high-privilege non-human identity: scope its RBAC to exactly the actionners you enable, per namespace where possible. See the Kubernetes NHI Security Guide.
  • Output secrets: Falcosidekick holds webhook URLs, SIEM tokens and API keys for every output. Store them in a secrets manager and mount them, never in Helm values committed to Git.

Routing alerts and automating response

Falco has built-in outputs (stdout, syslog, file, program and http, all set in falco.yaml) and an embedded web server on port 8765 by default. For anything beyond a single host, the common pattern is Falco to Falcosidekick to many destinations, with Falco Talon taking actions.

PathKey settingsSecurity notes
Falco http_outputenabled, url, ca_cert or ca_path, mtls, client_cert, client_key; json_output must be true for FalcosidekickKeep insecure: false so the server certificate is verified; use mTLS between Falco and Falcosidekick
Falcosidekick fan-outOne endpoint for many Falco instances; outputs grouped as chat, alerting, logs, SIEM, object storage, queues, workflow and response enginetlsserver.deploy and tlsserver.mutualtls enable TLS and mTLS for inbound events; mutualtlsclient settings hold certificates for outbound outputs
Falco Talon responseRules that match on Falco rule names, priorities or tags and call actionners such as kubernetes:terminate, kubernetes:networkpolicy, kubernetes:label, kubernetes:cordonStart with label and log actions, move to isolate (network policy) and terminate only for high-confidence rules
Captures for forensicscapture.enabled, capture.mode (rules or all_rules), capture: true on specific rules, max_file_size_mbSandbox feature; .scap files contain sensitive process and file data, so store them like evidence

The embedded web server exposes /healthz and /versions, and GET /reload; it listens on 0.0.0.0 by default with ssl_enabled false. Restrict it with a network policy so only probes and falcoctl reach it, or enable TLS.

How to implement

  1. Define detection goals first: list the five to ten behaviours that must never happen in production (shell in container, write below binary directories, contact with the API server from application pods, crypto mining, access to cloud credential files). The project's own advice before deploying is to verify compatibility, define detection goals and plan SIEM integration.
  2. Pilot on one non-production node pool: deploy with Helm using modern_ebpf, leastPrivileged=true, stable rules only, and json_output to your log pipeline. Enable metrics from day one.
  3. Tune for two weeks: group alerts by rule, image and namespace. Write exceptions in a separate overrides file under version control, reviewed like code. Replay captured events through the changed rules in CI with engine.kind=replay before merging.
  4. Add the Kubernetes audit source: run a separate plugin-only Falco (nodriver) for k8saudit or the managed variant, ideally outside the audited cluster.
  5. Roll to production in rings: one node pool, then one cluster, then all. Keep incubating rules off until stable rules run with low false positives, as the rules maturity guidance recommends.
  6. Introduce response gradually: notify only, then label, then network isolation, then termination for named rules. Every automated action must have an owner and a documented undo, such as removing the label or deleting the generated policy.
  7. Rollback: keep the previous rules artefact version pinned and the previous Helm release available; rolling back Falco or its rules is a helm rollback, and response can be disabled by removing Talon rules without touching detection.

Decision guidance

  • Small teams: stable rules, Falcosidekick to one SIEM or chat channel, no automated response. Spend effort on exceptions and on a weekly review of the top five noisy rules.
  • Large platforms: central Falcosidekick per environment with mTLS, separate plugin collectors per cluster, rules promoted through dev, staging and production as versioned artefacts, and Talon for isolation of high-confidence detections.
  • Managed Kubernetes: confirm the node image allows eBPF and the required capabilities; use the provider-specific k8saudit plugin for control plane audit logs, since you cannot reach the API server's audit files.
  • Regulated workloads: enable captures for critical rules so evidence exists after the pod is gone, and route alerts to an immutable store.

Detection and measurement

Falco's metrics framework (metrics.enabled, off by default) emits falco. and scap. fields at an interval and can feed Prometheus through webserver.prometheus_metrics_enabled. syscall_event_drops raises log and alert actions when drops exceed a threshold (default 0.1, or 10 percent, in the last second).

  • Coverage: percentage of nodes running a healthy Falco pod (target 100 percent; alert on any DaemonSet gap).
  • Event drop rate: kernel drop percentage per node; sustained drops mean blind spots that an attacker can exploit by generating noise.
  • Alert precision: share of alerts in the last 30 days that led to action or a confirmed benign exception; aim to improve month on month.
  • Exception hygiene: number of exceptions without an owner or review date (target zero) and the age of the oldest.
  • Rules currency: days between an upstream rules release and its promotion to production.
  • Time to response: median minutes from a critical Falco alert to containment, automated or manual.

Common failure patterns

  • Alerts with nowhere to go: Falco logs to stdout and nobody reads them. In the Tesla Kubernetes Cryptojacking case, miners ran inside a cluster after credentials were exposed; runtime detection only helps if a mining process or unexpected outbound connection reaches someone who acts.
  • Editing upstream rules files: changes vanish at the next falcoctl update. Use overrides in your own file.
  • Exceptions on process name alone: attackers name their binary after an allowed one. Scope by image, namespace and service account.
  • Ignoring drops: a node under load silently drops events, and the threshold alert is rate limited to one message every 30 seconds by default. Watch the metric, not the log line.
  • Auto-following sandbox rules in production: rule changes from the main branch can break compatibility; the project recommends rules from release branches only.
  • Over-privileged response: Talon or a custom webhook with cluster-admin becomes the most valuable credential in the cluster.

Framework mapping

FrameworkReferenceHow Falco contributes
NIST CSF 2.0DE.CM-09, DE.AE-02Monitoring of runtime environments and analysis of adverse events
NIST SP 800-53 Rev. 5SI-4 System Monitoring, AU-6 Audit Record Review, Analysis, and ReportingHost and container behaviour monitoring, audit event analysis through plugins
CIS Controls v8.1Control 8 Audit Log Management, Control 13 Network Monitoring and DefenseCentralised runtime and audit telemetry with alerting
ISO/IEC 27001:2022Annex A 8.16 Monitoring activitiesMonitoring for anomalous behaviour of systems and applications
MITRE ATT&CKT1611 Escape to Host, T1609 Container Administration Command, T1610 Deploy Container, T1059.004 Unix Shell, T1496 Resource Hijacking, T1613 Container and Resource DiscoveryBehaviours the stable and incubating rules are written to detect; tag your own rules with the same IDs

Practitioner checklist

  • Run modern_ebpf with the least privileged capability set where the kernel allows it.
  • Pin rules artefact versions; promote incubating or sandbox rules only after testing.
  • Keep all customisations in a version-controlled overrides file using override and exceptions.
  • Scope exceptions by image, namespace and service account, never by process name alone.
  • Add the Kubernetes audit plugin through a separate collector outside the audited cluster.
  • Send JSON output over mTLS to Falcosidekick and store output credentials in a secrets manager.
  • Enable metrics and alert on event drops and missing DaemonSet pods.
  • Restrict the embedded web server on port 8765 with network policy or TLS.
  • Give any response engine the narrowest RBAC its enabled actionners need, with a documented undo.
  • Replay recorded events against rule changes in CI before production rollout.

Standards and references

Related NHI Mgmt Group resources: Container Runtime Security Guide · eBPF Security Guide · Kubernetes Audit Log Detection Guide · Detection Engineering Guide · Cryptojacking Guide

PDF for subscribers

Take this guide with you

Every section, table and checklist in one PDF, with links to the sources and related guides. Subscribe to our weekly NHI & AI Identity Journal and we’ll email you a download link.

Free weekly newsletter

Subscribe to the NHI & AI Identity Journal

The latest on NHI and Agentic AI security – articles, research, breaches, news and events every week.

Bonus 33% off our NHI Course when you subscribe.

NHIMG Editorial Note
Researched and written by the NHI Mgmt Group editorial team using AI tools, under the editorial direction of Lalit Choda. Facts are drawn from the sources listed on this page and checked by our automated quality process. Last updated 11 November 2026. Spotted an error? Use our contact page.
NHI Mgmt Group, the independent authority on Non-Human Identity, IAM and Agentic AI security. nhimg.org

PDF Downloads for Newsletter Subscribers

Get the guide

Enter your details and we’ll email you a download link.

The full guide is free to read online. The PDF is a thank you for subscribing.

Fill in all fields marked * and tick the PDF box to continue.