implementing-ebpf-security-monitoring skill (Anthropic-Cybersecurity-Skills)
- Install
- SKILL.md (verbatim)
- When to Use
- Prerequisites
- Instructions
- 1. Install Tetragon on Kubernetes
- 2. Install Tetragon on Standalone Linux
- 3. Monitor Process Execution (Default)
- 4. Author TracingPolicy for File Access Monitoring
- 5. Author TracingPolicy for Network Connection Monitoring
- 6. Author TracingPolicy for Privilege Escalation Detection
- 7. Runtime Enforcement with Sigkill Action
- 8. Export Events to SIEM
- 9. Kubernetes-Aware Namespace Filtering
- Examples
- Detect Reverse Shell Connections
- Monitor Container Escape Attempts
- Full Event Pipeline: Tetragon to Elasticsearch
- Other files in this skill
- references/api-reference.md (verbatim)
- Tetragon Installation (Helm)
- TracingPolicy CRD Schema
- Common Kprobe Hook Points
- Argument Types
- Selector Operators
- Match Actions
- tetra CLI Commands
- Tetragon gRPC API
- JSON Event Types
- Log Export Configuration
- References
What it does. 'Implements eBPF-based security monitoring using Cilium Tetragon for Part of mukul975/Anthropic-Cybersecurity-Skills (817 security skills) (mukul975/Anthropic-Cybersecurity-Skills).
| Upstream | mukul975/Anthropic-Cybersecurity-Skills |
| Skill file | skills/implementing-ebpf-security-monitoring/SKILL.md |
| License | Apache-2.0 (skill folder LICENSE) |
| Author | mukul975 |
| Fetched | 2026-09-10 |
Install
npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill implementing-ebpf-security-monitoring, or copy the skill folder into~/.claude/skills/implementing-ebpf-security-monitoring/.- Raw file:
curl -sL https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/HEAD/skills/implementing-ebpf-security-monitoring/SKILL.md
SKILL.md (verbatim)
name: implementing-ebpf-security-monitoring
description: 'Implements eBPF-based security monitoring using Cilium Tetragon for
real-time process execution tracking, network connection observability, file access
auditing, and runtime enforcement. Covers TracingPolicy CRD authoring with kprobe/tracepoint
hooks, in-kernel filtering via matchArgs/matchBinaries selectors, JSON event export,
and integration with SIEM pipelines. Use when building kernel-level runtime security
observability for Linux hosts or Kubernetes clusters.
'
domain: cybersecurity
subdomain: security-operations
tags:
- ebpf
- tetragon
- cilium
- runtime-security
- observability
- kernel-security
- kubernetes-security
version: '1.0'
author: mukul975
license: Apache-2.0
nist_ai_rmf:
- MEASURE-2.7
- MAP-5.1
- MANAGE-2.4
atlas_techniques:
- AML.T0070
- AML.T0066
- AML.T0082
nist_csf:
- DE.CM-01
- RS.MA-01
- GV.OV-01
- DE.AE-02
mitre_attack:
- T1078
- T1190
- T1059
- T1685.002
- T1685.005
Implementing eBPF Security Monitoring
When to Use
- When deploying kernel-level runtime security monitoring on Linux hosts or Kubernetes clusters
- When you need sub-millisecond visibility into process execution, network connections, and file access
- When traditional userspace monitoring tools introduce unacceptable performance overhead
- When building detection pipelines that require in-kernel filtering before events reach userspace
- When enforcing runtime security policies (kill process, send signal) at the kernel level
Prerequisites
- Linux kernel 5.3+ with BTF (BPF Type Format) support enabled
- Kubernetes 1.24+ cluster (for Kubernetes deployment) or standalone Linux host
- Helm 3.x installed (for Kubernetes deployment)
kubectlconfigured with cluster accesstetraCLI installed for local event streaming- Python 3.8+ with
requests,kubernetes,pyyamldependencies - Root or CAP_BPF/CAP_SYS_ADMIN capabilities for eBPF program loading
Instructions
1. Install Tetragon on Kubernetes
Deploy Tetragon via Helm to get default process lifecycle observability:
helm repo add cilium https://helm.cilium.io
helm repo update
helm install tetragon cilium/tetragon -n kube-system \
--set tetragon.enableProcessCred=true \
--set tetragon.enableProcessNs=true
Verify the installation:
kubectl get pods -n kube-system -l app.kubernetes.io/name=tetragon
kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | head -20
2. Install Tetragon on Standalone Linux
For non-Kubernetes Linux hosts, install from the tarball release:
curl -LO https://github.com/cilium/tetragon/releases/latest/download/tetragon-linux-amd64.tar.gz
tar xzf tetragon-linux-amd64.tar.gz
sudo cp tetragon /usr/local/bin/
sudo cp tetra /usr/local/bin/
# Start tetragon daemon
sudo tetragon --btf /sys/kernel/btf/vmlinux &
# Stream events
tetra getevents -o compact
3. Monitor Process Execution (Default)
Tetragon generates process_exec and process_exit events by default without any TracingPolicy:
# Stream process events in compact format
tetra getevents -o compact
# Stream in JSON for SIEM ingestion
tetra getevents -o json | jq '.process_exec // .process_exit'
Example process_exec JSON event:
{
"process_exec": {
"process": {
"binary": "/usr/bin/curl",
"arguments": "https://malicious.example.com/payload",
"cwd": "/tmp",
"uid": 1000,
"pod": {
"namespace": "default",
"name": "webapp-7b4d9f8c6-x2k9p"
},
"parent": {
"binary": "/bin/bash",
"pid": 1234
}
}
}
}
4. Author TracingPolicy for File Access Monitoring
Create a TracingPolicy CRD to monitor access to sensitive files via the sys_openat kprobe:
# file-access-monitor.yaml
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: monitor-sensitive-file-access
spec:
kprobes:
- call: "fd_install"
syscall: false
args:
- index: 0
type: "int"
- index: 1
type: "file"
selectors:
- matchArgs:
- index: 1
operator: "Prefix"
values:
- "/etc/shadow"
- "/etc/passwd"
- "/etc/sudoers"
- "/root/.ssh/"
- "/etc/kubernetes/pki/"
matchActions:
- action: Post
Apply and observe:
kubectl apply -f file-access-monitor.yaml
tetra getevents -o compact --process-filter "event_set:PROCESS_KPROBE"
5. Author TracingPolicy for Network Connection Monitoring
Monitor outbound TCP connections using the tcp_connect kprobe:
# network-monitor.yaml
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: monitor-tcp-connections
spec:
kprobes:
- call: "tcp_connect"
syscall: false
args:
- index: 0
type: "sock"
selectors:
- matchActions:
- action: Post
6. Author TracingPolicy for Privilege Escalation Detection
Detect setuid/setgid calls that may indicate privilege escalation:
# privilege-escalation-detect.yaml
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: detect-privilege-escalation
spec:
kprobes:
- call: "__sys_setuid"
syscall: false
args:
- index: 0
type: "int"
selectors:
- matchArgs:
- index: 0
operator: "Equal"
values:
- "0"
matchActions:
- action: Post
- call: "commit_creds"
syscall: false
args:
- index: 0
type: "cred"
selectors:
- matchActions:
- action: Post
7. Runtime Enforcement with Sigkill Action
Block unauthorized binary execution by killing the process in-kernel:
# enforce-binary-allowlist.yaml
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: enforce-no-crypto-miners
spec:
kprobes:
- call: "sys_execve"
syscall: true
args:
- index: 0
type: "string"
selectors:
- matchArgs:
- index: 0
operator: "Postfix"
values:
- "xmrig"
- "minerd"
- "cpuminer"
- "cryptonight"
matchActions:
- action: Sigkill
8. Export Events to SIEM
Configure Tetragon to export JSON events to a file sink for Fluentd/Filebeat/Vector ingestion:
# Helm values for file export
helm upgrade tetragon cilium/tetragon -n kube-system \
--set tetragon.exportFilename=/var/log/tetragon/tetragon.log \
--set tetragon.exportFileMaxSizeMB=100 \
--set tetragon.exportFileMaxBackups=5
Then configure your log shipper (e.g., Filebeat) to tail /var/log/tetragon/tetragon.log and send to your SIEM.
9. Kubernetes-Aware Namespace Filtering
Use TracingPolicyNamespaced to scope monitoring to specific namespaces:
apiVersion: cilium.io/v1alpha1
kind: TracingPolicyNamespaced
metadata:
name: monitor-production-file-access
namespace: production
spec:
kprobes:
- call: "fd_install"
syscall: false
args:
- index: 0
type: "int"
- index: 1
type: "file"
selectors:
- matchArgs:
- index: 1
operator: "Prefix"
values:
- "/etc/shadow"
- "/etc/passwd"
Examples
Detect Reverse Shell Connections
# reverse-shell-detect.yaml
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: detect-reverse-shells
spec:
kprobes:
- call: "tcp_connect"
syscall: false
args:
- index: 0
type: "sock"
selectors:
- matchBinaries:
- operator: "In"
values:
- "/bin/bash"
- "/bin/sh"
- "/usr/bin/python3"
- "/usr/bin/perl"
- "/usr/bin/nc"
- "/usr/bin/ncat"
matchActions:
- action: Post
Monitor Container Escape Attempts
# container-escape-detect.yaml
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: detect-container-escape
spec:
kprobes:
- call: "sys_openat"
syscall: true
args:
- index: 0
type: "int"
- index: 1
type: "string"
selectors:
- matchArgs:
- index: 1
operator: "Prefix"
values:
- "/proc/1/root"
- "/proc/1/ns"
- "/sys/kernel/security"
- "/proc/sysrq-trigger"
matchActions:
- action: Post
- call: "sys_mount"
syscall: true
args:
- index: 0
type: "string"
- index: 1
type: "string"
- index: 2
type: "string"
selectors:
- matchActions:
- action: Post
Full Event Pipeline: Tetragon to Elasticsearch
# Use tetra CLI to pipe events through jq into Elasticsearch
tetra getevents -o json | jq -c 'select(.process_kprobe != null)' | \
while IFS= read -r line; do
curl -s -X POST "http://elasticsearch:9200/tetragon-events/_doc" \
-H "Content-Type: application/json" \
-d "$line"
done
Other files in this skill
references/api-reference.md (verbatim)
API Reference: Implementing eBPF Security Monitoring with Tetragon
Tetragon Installation (Helm)
# Add Cilium Helm repo
helm repo add cilium https://helm.cilium.io
helm repo update
# Install with recommended security settings
helm install tetragon cilium/tetragon -n kube-system \
--set tetragon.enableProcessCred=true \
--set tetragon.enableProcessNs=true \
--set tetragon.exportFilename=/var/log/tetragon/tetragon.log
# Standalone Linux (non-Kubernetes)
curl -LO https://github.com/cilium/tetragon/releases/latest/download/tetragon-linux-amd64.tar.gz
sudo tetragon --btf /sys/kernel/btf/vmlinux
TracingPolicy CRD Schema
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy # or TracingPolicyNamespaced
metadata:
name: policy-name
spec:
kprobes: # List of kprobe hooks
- call: "function_name" # Kernel function to hook
syscall: true|false # Whether this is a syscall
args: # Arguments to capture
- index: 0
type: "string|int|fd|file|sock|cred|char_buf|size_t"
selectors: # In-kernel filtering
- matchArgs:
- index: 0
operator: "Equal|NotEqual|Prefix|Postfix|Mask|In|NotIn"
values: ["value1", "value2"]
matchBinaries:
- operator: "In|NotIn"
values: ["/usr/bin/binary"]
matchActions:
- action: "Post|Sigkill|Signal|Override|FollowFD|CopyFD"
Common Kprobe Hook Points
| Hook Function | Syscall | Use Case |
|---|---|---|
sys_execve |
true | Process execution monitoring |
fd_install |
false | File descriptor / file open monitoring |
sys_openat |
true | File open with path |
sys_write |
true | File write monitoring |
tcp_connect |
false | Outbound TCP connections |
tcp_sendmsg |
false | TCP data sent |
__sys_setuid |
false | Privilege escalation (setuid) |
commit_creds |
false | Credential changes |
sys_mount |
true | Filesystem mount operations |
sys_ptrace |
true | Process tracing / debugging |
Argument Types
| Type | Description |
|---|---|
string |
Null-terminated string |
int |
Integer value |
fd |
File descriptor (resolved to path) |
file |
File structure (includes path) |
sock |
Socket structure (includes IP/port) |
cred |
Credentials structure (uid/gid) |
char_buf |
Character buffer (requires sizeArgIndex) |
size_t |
Size type |
Selector Operators
| Operator | Description | Example |
|---|---|---|
Equal |
Exact match | values: ["0"] |
NotEqual |
Not equal | values: ["0"] |
Prefix |
String prefix | values: ["/etc/"] |
Postfix |
String suffix | values: ["xmrig"] |
Mask |
Bitmask match | values: ["0x1"] |
In |
Value in set | values: ["/bin/bash", "/bin/sh"] |
NotIn |
Value not in set | values: ["/usr/sbin/sshd"] |
Match Actions
| Action | Description |
|---|---|
Post |
Emit event to userspace (default) |
Sigkill |
Kill the process immediately |
Signal |
Send specified signal |
Override |
Override return value |
FollowFD |
Track file descriptor across calls |
CopyFD |
Copy file descriptor info |
tetra CLI Commands
# Stream events in compact format
tetra getevents -o compact
# Stream events in JSON
tetra getevents -o json
# Filter by namespace
tetra getevents -o compact --namespace production
# Filter by pod
tetra getevents -o compact --pod webapp-7b4d9f8c6-x2k9p
# Health check
tetra status
# Version
tetra version
Tetragon gRPC API
service FineGuidanceSensors {
rpc GetEvents(GetEventsRequest) returns (stream GetEventsResponse) {}
rpc GetHealth(GetHealthStatusRequest) returns (GetHealthStatusResponse) {}
}
JSON Event Types
// process_exec event
{
"process_exec": {
"process": {
"exec_id": "abc123",
"pid": 1234,
"uid": 1000,
"binary": "/usr/bin/curl",
"arguments": "-O https://example.com/file",
"cwd": "/tmp",
"start_time": "2026-01-15T10:30:00Z",
"pod": {"namespace": "default", "name": "webapp-xxx"},
"parent": {"binary": "/bin/bash", "pid": 1200}
}
}
}
// process_kprobe event (triggered by TracingPolicy)
{
"process_kprobe": {
"process": {"binary": "/usr/bin/cat", "pid": 5678},
"policy_name": "monitor-sensitive-file-access",
"function_name": "fd_install",
"args": [
{"file_arg": {"path": "/etc/shadow"}}
]
}
}
// process_exit event
{
"process_exit": {
"process": {"binary": "/usr/bin/curl", "pid": 1234},
"status": 0,
"signal": ""
}
}
Log Export Configuration
# Helm values for SIEM integration
tetragon:
exportFilename: /var/log/tetragon/tetragon.log
exportFileMaxSizeMB: 100
exportFileMaxBackups: 5
exportRateLimit: 1000 # events/second
exportAllowList: "" # JSON filter for allowed events
exportDenyList: "" # JSON filter for denied events
References
- Tetragon Documentation: https://tetragon.io/docs/
- Tetragon GitHub: https://github.com/cilium/tetragon
- eBPF.io: https://ebpf.io/
- Cilium: https://cilium.io/
- TracingPolicy Examples: https://github.com/cilium/tetragon/tree/main/examples/tracingpolicy
- Tetragon gRPC API: https://tetragon.io/docs/reference/grpc-api/
- Isovalent Blog: https://isovalent.com/blog/
Back to mukul975/Anthropic-Cybersecurity-Skills (817 security skills) or Agent skills.