Skip to content
Trust

We ask for kernel-level access. Here is exactly what we do with it.

Falak Neo runs inside your kernel and reads your workloads' behaviour. That is a serious amount of trust to ask for, so this page is specific rather than reassuring: what we collect, where it is stored, who can reach it, and what the architecture does to make a mistake on our side survivable.

Architecture

Isolation is structural, not procedural

Falak Neo architectureA Rust and eBPF sensor runs on every Linux host and Kubernetes node, attaching probes to process exec, file open, socket connect, DNS and kernel calls. It constructs OCSF v1.3 events and streams them over mutually authenticated gRPC directly to falak-neo-core, with no relay tier. Core validates the schema, enriches events with Kubernetes and cloud context, evaluates detection rules mapped to MITRE ATT&CK, writes events to ClickHouse and application state to PostgreSQL, and serves a REST and JSON API to the analyst console. Core also pushes signed sensor configuration and signed response actions back down to each sensor.YOUR INFRASTRUCTURELinux kerneleBPF programs, CO-RE, BTFsched_process_execfile_open (LSM)sys_enter_connectbpf() / ptrace / dnsfalak-neo-minionRust · ring buffer drainOCSF v1.3 constructionbatch · zstd · disk spool< 1% CPU, ~80 MiB RSSPods · containers · systemd unitsobserved, never instrumentedmTLS gRPCEventBatch→ BatchAckcontrolsigned SensorConfigsigned actionsFALAK-NEO-CORE (Go)Ingestschema validation · dedup · backpressureEnrichmentK8s informer · cloud metadata · intelDetectionsigma + behavioural · ATT&CK requiredControl planeenrollment · policy · signed actionsClickHouseOCSF eventstenant-partitionedPostgreSQLtenants · agentstriage · policyREST / JSONtenant-scopedCONSUMERSAnalyst consolealert triageattack graphthreat huntingfleet + policySIEM / SOARSplunk · ElasticPagerDuty · JiraOCSF NDJSON exportData lakeS3 · OCSF parquetyour own API clients
One sensor per host. One stream per sensor. No collector tier, no relay, no log shipper to babysit — the sensor speaks to core directly over mutually authenticated gRPC, and core is the only component that ever holds a tenant's data.

Tenancy is derived, never asserted

A sensor cannot choose which tenant it reports to. The tenant is bound to the mTLS peer identity or the signed enrollment token, and core overwrites whatever a client claims before the event reaches storage. The console has no code path that reads a tenant id from a request.

Mutual TLS on every sensor connection

Enrollment exchanges a one-time token for a Falak-issued client certificate, or a SPIFFE SVID where SPIRE is deployed. There is no bearer-token-only path to the ingest surface, and certificates carry an expiry that forces rotation.

Response actions are signed and expiring

The console can request a kill, an isolation or a quarantine. Core signs it and stamps an expiry; the sensor verifies the signature against the core CA and refuses anything unsigned, expired, or addressed to a different agent. A compromised console session cannot execute across a fleet.

Events and state are separated

OCSF event bodies live in ClickHouse, partitioned by tenant. Mutable application state — triage status, policy, membership — lives in PostgreSQL, with a tenant column and a tenant-prefixed index on every table. No table stores both.

Credentials are hashed or referenced, never stored

API keys and enrollment tokens are stored as SHA-256 digests with a non-secret display prefix; the plaintext is shown exactly once. Integration secrets are stored as a reference into a secret store, not as a value in our database.

Least privilege on the node

The sensor needs CAP_BPF and CAP_PERFMON, hostPID for cgroup resolution, and a read-only CRI socket mount. It does not need full privilege, it does not write to your workloads, and it never loads code it did not ship with.

Data handling

What we hold, where, and for how long

If a row below is not acceptable for your environment, tell us before you deploy — several of them are configurable, and the rest are honest constraints rather than defaults.

DataWhereRetentionNotes
Process, file, network, DNS and kernel eventsClickHouse, tenant-partitioned, in your chosen regionPlan hot window (30 / 90 / custom days)Command lines and file paths are included. Environment variables are collected only when explicitly enabled by policy.
Detection findingsClickHouse (document) + PostgreSQL (triage state)Hot window; triage state retained for the contract termThe finding document is the evidence; the triage row is your team's decisions about it.
Sensor inventory and healthPostgreSQLContract termHostname, kernel, distribution, cloud instance id, probe attachment state, resource usage.
Console user accountsPostgreSQLContract term + 30 daysEmail, display name, Argon2id password hash or SSO subject. No profile enrichment.
Audit logPostgreSQL, append-only13 months minimumActor, action, target, outcome, IP and user agent for every privileged operation, including denials.
Cold archiveObject storage in the tenant's region, OCSF parquetPlan cold windowOptional. Encrypted with a per-tenant key. Export is available on every plan.

What the sensor does not collect

  • — File contents. Paths, metadata and hashes only.
  • — Network payloads. Endpoints, volumes, TLS metadata and DNS names only.
  • — Keystrokes, screen contents, or anything resembling user monitoring.
  • — Environment variables, unless a policy explicitly enables it for a probe.
  • — Anything from a namespace your policy excludes.

Customer data and machine learning

Your events are never used to train models, ours or anyone else's. The AI analyst retrieves from your tenant only, at request time, and there is no shared or cross-tenant index. The feature is a per-tenant setting and it is off until you turn it on.

Controls

Operational security

Encryption in transit

TLS 1.3 everywhere. Mutual TLS on the sensor-to-core path. HSTS on all web surfaces.

Encryption at rest

AES-256 on all volumes and object storage, with per-tenant keys for the cold archive.

Access control

Five console roles enforced in the console and re-checked by core. SSO and SCIM on Business and above.

Session handling

12-hour JWT sessions, MFA enforceable per tenant, immediate revocation on role removal.

Audit trail

Append-only, actor-denormalised so it survives user deletion. Exportable to your SIEM.

Change management

Every core and sensor release is signed, reproducible, and accompanied by an SBOM.

Compliance posture

We would rather tell you where we are than imply where we are not. SOC 2 Type II is in progress with an observation window closing this year; ISO 27001 follows. GDPR: we act as processor for security telemetry, with a DPA and SCCs available on request. A full security questionnaire response, our penetration test summary and the current SBOM are available under NDA.

Request the security package

Sub-processors

Amazon Web Services

Compute, storage and networking for the managed service

eu-central-1, us-east-1

Cloudflare

CDN, DNS and DDoS protection for web surfaces

Global edge

Stripe

Payment processing for self-serve plans

US / EU

Postmark

Transactional email (invitations, alerts)

US

Self-hosted deployments have no sub-processors — nothing leaves your infrastructure.

Disclosure

Reporting a vulnerability

Email security@vax.sh with a description and reproduction steps. Please do not open a public issue. We acknowledge within two business days and aim to ship a fix or a mitigation within 30 days for high severity, 90 for the rest.

We do not run a paid bounty yet. We do credit reporters in the release notes unless you would rather we did not, and we will never threaten legal action against research conducted in good faith against your own deployment or our test environment.

Security advisories are published to the changelog and to the GitHub security advisory feed for the sensor and core.