π°οΈ Talus
**eBPF endpoint security agent for Linux β detect ransomware behaviour, respond at the kernel edge.** Talus traces `execve`, `openat`, `connect`, `accept`,...
π°οΈ Talus
π§ͺ View animated test results β 95/95 β
eBPF endpoint security agent for Linux β detect ransomware behaviour, respond at the kernel edge.
Talus traces execve, openat, connect, accept, sendto and recvfrom
syscalls at the kernel level using eBPF tracepoints, streams events into
userspace through per-CPU perf buffers, and surfaces them in a live terminal
FrankenTUI β while continuously scoring per-process file-open rates against
a sliding window to flag ransomware-style mass file access, and automatically
SIGKILL-ing offending processes.
Project status: production-quality Rust + eBPF engineering showcase, shipped with a commercial licensing system β Ed25519-signed keys and a live activation backend on Cloudflare Workers + D1 (free tier).
π― What it does
| Capability | Description |
|---|---|
| Kernel-level tracing | execve and openat tracepoints attached on every online CPU |
| Verifier-safe kernel code | Userspace pointers read exclusively via bpf_probe_read_user β never dereferenced |
| Zero-copy event pipeline | Fixed-size ProcessEvent records streamed through per-CPU PerfEventArray buffers |
| Live FrankenTUI | 7-panel cyberpunk interface: events, processes, network, files, extensions, alerts, heatmap |
| Sliding-window heuristic | 1-second rolling window per PID; alerts when a process exceeds the configured open rate |
| Multiple output modes | Human TUI, newline-delimited JSON, plain text log, and a built-in self-diagnostic |
| Lost-event accounting | Perf-buffer overruns are counted and reported, never silently dropped |
| Single static binary | Full LTO, panic = "abort", symbol-stripped release profile |
βοΈ Architecture
Kernel-side eBPF programs capture every execve/openat into a compact
ProcessEvent record pushed into a PerfEventArray. A dedicated userspace
reader thread opens one perf buffer per CPU, decodes events, and forwards
them over an MPSC channel to the monitor core, which feeds a 1-second sliding
window per PID and emits alerts when the threshold is crossed.
execve/openat ββΊ eBPF tracepoints ββΊ EVENTS (PerfEventArray)
β per-CPU perf buffers
reader thread βββββββ
β MPSC channel
monitor core (sliding window + alerting)
β
TUI / JSON / plain / diagnoseSee the full architecture for the complete design.
π Quick start
# Distro-aware installer (apt, dnf, pacman, zypper, apk, xbps)
./install.sh # user-local install to ~/.local
./install.sh --system # system-wide install to /usr/local
# Or build manually
./build.sh
sudo target/release/process-monitorπ₯οΈ Usage
sudo process-monitor # TUI (default when stdout is a terminal)
sudo process-monitor --alert-threshold 100 # raise alert threshold (opens/s)
sudo process-monitor --json | jq . # machine-readable NDJSON
sudo process-monitor --plain # plain text log
sudo process-monitor --diagnose # 5-second end-to-end self-diagnosticTUI keys: q / Esc / Ctrl+C quit Β· p pause/resume Β· c clear log Β·
β/β/j/k scroll Β· PgUp/PgDn faster Β· Home/End jump.
π‘οΈ The ransomware heuristic
For every PID, keep a 1-second sliding window of
openatcalls. If the window contains β₯ N opens (default 50), emit an alert.
- Sliding window, not a rate counter β bursts are caught as reliably as steady streams
- Per-process isolation β no cross-process false positives
--alert-threshold 0disables the heuristic entirely
β Licensing & Editions
Talus ships in two editions. Community is free and MIT-licensed; the Enterprise features (auto-kill, web dashboard, Kafka, ClickHouse, MemGraph, C FFI) are unlocked by a paid license key.
| Layer | Implementation |
|---|---|
| Signed keys | base64(payload).base64(Ed25519 signature) β the binary embeds the public key only; the signing key never leaves the owner's machine |
| Activation server | Cloudflare Worker + D1 (free tier) at talus-license-server.metaforicmail.workers.dev β verifies signatures server-side, enforces expiry, revocation and seat limits, rate-limits to 5 attempts / 5 min per machine |
| Seat control | Authoritative in D1 (max_seats); moving a machine is deactivate β activate; re-activation of the same machine is idempotent |
| Client hardening | Local cache re-verified against the signed key on every load (fail-closed), SHA-256 trial integrity tag, downgrade protection, 30-day offline grace |
| Trial | 30-day Enterprise trial on first run |
talus license activate <KEY> # activate online (one key = one machine)
talus license show # tier, expiry, seats, featuresPricing amounts are set per sale and never published in the repos β
see docs/pricing-tiers.md
for the structure and docs/EULA.txt
for the license terms.
π¦ Project layout
talus-process-monitor/
βββ process-monitor/ # Userspace: monitor core + TUI + web + FFI + licensing
β βββ src/
β βββ main.rs # CLI, mode selection, signal handling
β βββ monitor.rs # eBPF loading, perf reader, sliding-window tracker
β βββ license.rs # Ed25519 license verification, activation, feature gating
β βββ audit.rs # Tamper-evident hash-chain audit log
β βββ tui.rs # 7-panel frankentui (ftui) cyberpunk interface
βββ process-monitor-ebpf/ # Kernel side (#![no_std], aya-ebpf)
β βββ src/main.rs # tracepoint hooks β PerfEventArray
βββ license-keygen/ # Owner-only keygen CLI (keys live outside the repo)
βββ license-server/ # Cloudflare Worker + D1 activation backend
βββ scripts/ # issue / revoke / list-activations / health-check
βββ build.sh # Build script (nightly for eBPF, stable for TUI)
βββ install.sh # Distro-aware installer / uninstaller
βββ ARCHITECTURE.md # Full design document (incl. licensing subsystem)π§ Requirements
- Linux kernel 5.8+ (eBPF + tracepoint support)
- root (
CAP_BPF/CAP_SYS_ADMIN) to load and attach eBPF programs - Rust nightly +
rust-srcfor the eBPF crate; stable for userspace bpf-linker,clang, C compiler; BTF (/sys/kernel/btf/vmlinux) recommended