LA NINA // BLOG
Kembali ke Indeks Catatan

Arsitektur Kernel Runtime Security Skala Enterprise: In-Kernel Enforcement Cilium Tetragon eBPF LSM, Falco Modern eBPF, dan Wazuh SIEM/XDR Terdistribusi

Paradigma Pertahanan Runtime: Dari Deteksi Reaktif Asinkron ke Mitigasi In-Kernel Deterministik

Dalam lanskap ancaman siber modern (cloud-native threat landscape), serangan terhadap kluster Kubernetes dan infrastruktur Linux skala industri tidak lagi bergerak dalam hitungan menit, melainkan mencapai orde sub-milidetik. Eksploitasi zero-day container breakout, eskalasi hak akses (privilege escalation via kelemahan kernel), fileless in-memory execution, hingga penyusupan reverse shell otomatis mampu mencuri kredensial dan menginfeksi simpul kluster sebelum analis keamanan menerima peringatan awal.

Secara historis, industri mengandalkan mekanisme deteksi keamanan berbasis userspace atau modul audit tradisional seperti auditd dan implementasi awal Falco dengan Kernel Module (LKM). Namun, arsitektur deteksi asinkron konvensional memiliki kelemahan struktural fatal: adanya jeda waktu mitigasi (Time-To-Mitigate Delay).

Ketika sebuah biner berbahaya dieksekusi di dalam kontainer:

  1. Syscall execve dieksekusi secara mulus oleh CPU host.
  2. Kernel mencatat kejadian ke buffer audit.
  3. Daemon userspace membaca buffer, melakukan evaluasi pola regex, dan menghasilkan alert ke SIEM.
  4. Skrip respon aktif dipanggil untuk membunuh proses atau mengisolasi jaringan.

Rentang waktu antara eksekusi serangan (langkah 1) hingga eksekusi mitigasi (langkah 4) berkisar antara 50 milidetik hingga 5.000 milidetik. Dalam jendela waktu tersebut, penyerang telah berhasil membaca secret Kubernetes (/var/run/secrets/kubernetes.io/serviceaccount/token), mendistribusikan muatan berbahaya (payload), atau menghapus log jejak digital.

TEXT
TRADISIONAL: DETEKSI ASINKRON (Falco Legacy / Auditd / Agent SIEM)
========================================================================================
[Payload Jahat] ---> [Syscall execve] ---> [Biner Berjalan & Eksfiltrasi Secret!]
                           β”‚
                 (Event ke Ring Buffer)
                           β–Ό
                  [Falco / Agent Userspace]
                           β”‚
                 (Alerting 50ms - 2000ms kemudian)
                           β–Ό
                  [Skrip Response Membunuh Proses (TERLAMBAT - DATA SUDAH BOCOR!)]

MODERN: PENCEGAHAN SINKRON IN-KERNEL (Cilium Tetragon eBPF LSM)
========================================================================================
[Payload Jahat] ---> [Syscall Entry Hook]
                           β”‚
                    (LSM / Kprobe Hook)
                           β–Ό
             [Tetragon eBPF Program di Kernel]
                           β”‚
             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
             β–Ό                           β–Ό
        [PELANGGARAN]               [OPERASI VALID]
             β”‚                           β”‚
  1. bpf_send_signal(SIGKILL)            β–Ό
  2. Override Return Code -EPERM    [Syscall Diizinkan Lanjut]
             β”‚
             β–Ό
  [PROSES DIKILLED SECARA SINKRON DI KERNEL]
  [Zero Instruction Userspace Dijalankan!]

Transisi menuju In-Kernel Synchronous Enforcement menggunakan Cilium Tetragon eBPF LSM (Linux Security Modules) memungkinkan kernel Linux membatalkan eksekusi instruksi ilegal pada CPU thread yang bersangkutan secara instan (Time-To-Mitigate = 0 ms). Dipadukan dengan kemampuan analitik tingkah laku (behavioral analysis) dari Falco modern eBPF serta mesin korelasi telemetri terdistribusi dari Wazuh SIEM/XDR, kita dapat membangun arsitektur pertahanan Zero-Trust Runtime yang deterministik dan tangguh.

Seluruh alamat IP, topologi jaringan, dan pengujian dalam artikel ini disajikan menggunakan data sintetis standar RFC 5737 (198.51.100.0/24, 192.0.2.0/24, 203.0.113.0/24) dan RFC 3849.


DAFTAR ISI

  1. Arsitektur Mendalam & Low-Level Mechanics
    • 1.1 Falco vs Cilium Tetragon: Anatomi Komparasi Arsitektur
    • 1.2 Mekanika In-Kernel Enforcement Tetragon (LSM BPF Hooks, bpf_send_signal, dan Zero-Window Prevention)
    • 1.3 Taksonomi Hooking Kernel Linux: Tracepoints, Kprobes, Kretprobes, Fentry/Fexit, hingga LSM Hooks
    • 1.4 Arsitektur Wazuh SIEM/XDR Distributed Multi-Cluster: Analysisd Engine, Memory Ring Buffer, dan Pemetaan MITRE ATT&CK
    • 1.5 Pipeline Telemetri Terintegrasi: Falcosidekick, Fluent-Bit gRPC Socket, hingga OpenSearch Indexer
  2. Konfigurasi Nyata & Production-Ready Hardening
    • 2.1 Konfigurasi Produksi Cilium Tetragon Helm Values (tetragon-values.yaml)
    • 2.2 Tetragon TracingPolicy Enterprise CRDs:
      • tracingpolicy-binary-execution-prevention.yaml (Synchronous SIGKILL Unauthorized Binaries)
      • tracingpolicy-privilege-escalation.yaml (Namespace Escape & Capability Abuse Enforcement)
      • tracingpolicy-sensitive-file-integrity.yaml (Kernel-Level Blocking File /etc/shadow, /etc/pam.d)
      • tracingpolicy-tcp-egress-out-of-cluster.yaml (Deep Socket Socket-Connect Filter ke RFC 5737 C2)
    • 2.3 Konfigurasi High-Throughput Falco Modern eBPF (/etc/falco/falco.yaml)
    • 2.4 Konfigurasi Multi-Node Wazuh Manager/Worker (/var/ossec/etc/ossec.conf)
    • 2.5 Wazuh Custom Decoders & Ruleset MITRE ATT&CK (/var/ossec/etc/rules/tetragon_falco_rules.xml)
  3. Script Otomatisasi, Validasi, dan Benchmarking
    • 3.1 Script 1: audit-kernel-security-runtime.sh (Kernel BTF, eBPF JIT, LSM BPF, Cgroups v2 Readiness)
    • 3.2 Script 2: benchmark-ebpf-runtime-overhead.sh (Syscall Stress Testing, Tetragon/Falco Latency Footprint)
    • 3.3 Script 3: active-containment-orchestrator.sh (Multi-Layer Automated Containment Handler)
  4. Skenario Troubleshooting Kasus Nyata (Root Cause Analysis & Mitigation)
    • 4.1 Kasus 1: Tetragon Soft Lockup / Kernel Panic Akibat Recursive Kprobe Hooking pada High-Frequency File IO
    • 4.2 Kasus 2: Falco Ring Buffer Starvation & Syscall Drops pada Peak Ingress Bursts
    • 4.3 Kasus 3: BPF LSM Verification Failure bpf_send_signal() permission denied pada Restricted Kernel
    • 4.4 Kasus 4: Wazuh Cluster Remoted Queue Saturation & Split-Brain Analysis Engine Disconnect
  5. Tabel Komparasi & Standar Keamanan Industri 2026

1. ARSITEKTUR MENDALAM & LOW-LEVEL MECHANICS

1.1 Falco vs Cilium Tetragon: Anatomi Komparasi Arsitektur

Meskipun keduanya dibangun di atas teknologi Linux eBPF, rancangan fundamental keduanya memiliki filosofi desain dan karakteristik operasional yang saling melengkapi:

TEXT
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                 KUBERNETES WORKLOAD POD                                β”‚
β”‚  Container Process (PID: 28412, Namespace: production, Cgroup: kubepods.slice/...)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                            β”‚ Syscall (execve, openat, connect)
                                            β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                  LINUX KERNEL SPACE                                    β”‚
β”‚                                                                                        β”‚
β”‚  [ LSM Hook: security_bprm_check ] ──► Tetragon eBPF LSM Filter                        β”‚
β”‚                                            β”‚                                           β”‚
β”‚                                            β”œβ”€β–Ί Violation? -> Call bpf_send_signal(9)   β”‚
β”‚                                            β”‚                 Return -EPERM [BLOCKED!]  β”‚
β”‚                                            └─► Legitimate? -> Pass through             β”‚
β”‚                                                                                        β”‚
β”‚  [ Raw Tracepoint: sys_enter_* ]   ──► Falco Modern eBPF Driver                        β”‚
β”‚                                            β”‚                                           β”‚
β”‚                                            └─► Write structured event ke BPF Ringbuf   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚ Tetragon Perf/Ringbuf                  β”‚ Falco Ringbuf
                        β–Ό                                        β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       TETRAGON USERSPACE AGENT       β”‚        β”‚         FALCO ENGINE DAEMON          β”‚
β”‚ - Reads in-kernel events via gRPC    β”‚        β”‚ - Evaluates YAML ruleset (DSL)       β”‚
β”‚ - Enriches with Cgroups/Pod metadata β”‚        β”‚ - Correlates K8s context via cache   β”‚
β”‚ - Streams JSON to Unix Domain Socket β”‚        β”‚ - Sends alerts to Falcosidekick      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚                                          β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                             β–Ό
                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚      WAZUH SIEM/XDR DISTRIBUTED CLUSTER β”‚
                        β”‚ - Multi-Worker Ingestion (Port 5140)    β”‚
                        β”‚ - Trie Rule Matching & MITRE ATT&CK     β”‚
                        β”‚ - Active Response Orchestration         β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Parameter TeknisFalco (Modern eBPF Engine)Cilium Tetragon (Sensor & Enforcer)
Fokus OperasionalDeteksi perilaku (behavioral detection), audit kepatuhan (compliance), analisis log rich-context.Pencegahan seketika (in-kernel synchronous prevention), penegakan kontrol akses, low-overhead telemetry.
Titik Pasang (Hooks)Raw Tracepoints (sys_enter, sys_exit).LSM (bpf_lsm_*), Kprobes, Kretprobes, Fentry/Fexit, Tracepoints, Up-probes.
Tindakan PenegakanAsinkron via modul luar (userspace skrip, webhook, integrasi Wazuh).Sinkron di dalam kernel via bpf_send_signal(SIGKILL) dan override return code -EPERM.
Korelasi Konteks K8sDiperkaya di userspace dengan query cache metadata API Server.Diperkaya langsung di kernel via Cgroups v2 inode tracking & integrasi Cilium datapath.
Overhead CPU/I/OModerat (seluruh event syscall yang relevan disalin ke ring buffer).Sangat rendah (pemfilteran awal terjadi di kernel BPF map; hanya metadata krusial yang naik ke userspace).
Format KebijakanFalco DSL Rule syntax (macro, condition, output).Native Kubernetes Custom Resource Definitions (TracingPolicy, TracingPolicyNamespaced).
Jangkauan JaringanTracing level syscall socket (connect, bind, accept).Deep packet parsing, pelacakan socket sk_buff, inspeksi DNS, korelasi L4-L7.

1.2 Mekanika In-Kernel Enforcement Tetragon

Tetragon bekerja sebagai sensor sekaligus penegak keamanan di dalam kernel Linux tanpa memerlukan re-kompilasi kernel:

  1. Integrasi Linux Security Module (LSM) Framework (CONFIG_BPF_LSM=y):
    LSM menyediakan antarmuka terstandar di mana kernel meminta verifikasi otorisasi sebelum mengeksekusi operasi penting. Tetragon menempelkan program eBPF bertipe BPF_PROG_TYPE_LSM pada fungsi pengait:

    • security_bprm_check: Mencegat eksekusi biner baru sebelum memory space proses dialokasikan.
    • security_file_open: Memeriksa otorisasi pembacaan/penulisan file sebelum file descriptor diserahkan ke userspace.
    • security_socket_connect: Memvalidasi IP dan port socket tujuan sebelum paket SYN dikirim ke jaringan.
  2. Pengiriman Sinyal Sinkron (bpf_send_signal):
    Ketika sebuah TracingPolicy mendefinisikan aksi Sigkill, program eBPF memanggil fungsi pembantu (helper function) bpf_send_signal(9) langsung dalam konteks thread penyerang. Kernel menandai bit TIF_SIGPENDING pada struktur struct task_struct. Ketika CPU hendak beralih dari mode kernel-space kembali ke user-space, thread penyerang langsung dimatikan secara deterministik tanpa sempat mengeksekusi instruksi userspace pertama.

  3. In-Kernel Filter Maps:
    Tetragon mendefinisikan tabel BPF hash map (BPF_MAP_TYPE_HASH dan BPF_MAP_TYPE_LRU_HASH) untuk melacak:

    • Process Credentials: PID, TGID, UID, GID, dan Capabilities (CAP_SYS_ADMIN, CAP_NET_ADMIN).
    • Container Context: Nomor inode Cgroup v2 yang dipetakan langsung ke Container ID dan Pod Name di kernel tanpa round-trip RPC ke kube-apiserver.

1.3 Taksonomi Hooking Kernel Linux: Tracepoints, Kprobes, Kretprobes, Fentry/Fexit, hingga LSM Hooks

Pemilihan titik hook menentukan stabilitas, keamanan, dan overhead performa sistem:

  1. Tracepoints (tracepoint/syscalls/sys_enter_*):
    • Karakteristik: Menyediakan stable ABI resmi yang dijamin oleh maintainer kernel Linux.
    • Kelebihan: Sangat stabil antar versi minor kernel Linux; minim resiko regresi.
    • Limitasi: Bersifat read-only. Program BPF tidak diizinkan memodifikasi register atau membatalkan syscall secara aman.
  2. Kprobes (kprobe/*):
    • Karakteristik: Menyisipkan instruksi breakpoint (int3 pada arsitektur x86_64) pada alamat fungsi kernel mana pun yang tidak berstatus inlined.
    • Kelebihan: Sangat fleksibel untuk menjangkau fungsi internal kernel.
    • Limitasi: Unstable ABI (nama fungsi dan argumen dapat berubah antar rilis kernel), serta overhead siklus CPU akibat penanganan interupsi trap.
  3. Kretprobes (kretprobe/*):
    • Karakteristik: Menangkap nilai kembalian (return value) saat fungsi kernel selesai dieksekusi.
    • Limitasi: Memiliki overhead retpoline dan berisiko mengalami memory exhaustion apabila thread mengalami crash sebelum fungsi kembali.
  4. Fentry / Fexit (Compiler-Assisted Direct Trampoline):
    • Karakteristik: Memanfaatkan instruksi NOP compiler (-pg/mcount) yang di-patch saat boot menjadi direct jump.
    • Kelebihan: Performa setara fungsi lokal, akses langsung ke parameter dan return value dengan zero stack-unwinding overhead.
  5. LSM Hooks (bpf_lsm_*):
    • Karakteristik: Titik intersepsi resmi subsistem keamanan kernel.
    • Kelebihan: Satu-satunya titik hook eBPF yang diizinkan mengembalikan kode kesalahan negatif (seperti -EPERM atau -EACCES) untuk membatalkan operasi kernel secara bersih dan deterministik.

1.4 Arsitektur Wazuh SIEM/XDR Distributed Multi-Cluster: Analysisd Engine, Memory Ring Buffer, dan Pemetaan MITRE ATT&CK

Wazuh bertindak sebagai pusat korelasi dan respon aktif yang menyatukan telemetri host, container, dan in-kernel events:

TEXT
[ Tetragon Agent ] ── gRPC JSON Stream ──► [ Fluent-Bit Forwarder ] ──┐
                                                                      β”‚ (Port 5140 TCP/TLS)
[ Falco Engine ]   ── Falcosidekick JSON ─────────────────────────────┴─► [ Wazuh Worker Nodes ]
                                                                                   β”‚
                                                                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                                                         β”‚  wazuh-remoted    β”‚
                                                                         β”‚  Input Queue Bufferβ”‚
                                                                         β”‚  (262,144 slots)  β”‚
                                                                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                                                   β–Ό
                                                                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                                                         β”‚  wazuh-analysisd  β”‚
                                                                         β”‚  - JSON Decoding  β”‚
                                                                         β”‚  - Trie Matching  β”‚
                                                                         β”‚  - MITRE Tagging  β”‚
                                                                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                                                   β”‚
                                                     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                                     β–Ό                                                           β–Ό
                                      [ OpenSearch / Wazuh Indexer ]                                [ Active Response Execd ]
                                      Index: wazuh-alerts-4.x-*                                     - Pod Network Quarantine
                                      Grafana / Security Dashboard                                  - iptables RFC 5737 Sinkhole

Komponen Kritis Wazuh Analysisd:

  • Input Buffer (wazuh-remoted queue): Antrean berbasis ring-buffer memori terkelola. Untuk beban kerja high-concurrency, ukuran antrean disetel ke minimal 262.144 slot pesan guna mencegah drop paket telemetri saat terjadi lonjakan insiden (incident burst).
  • Rule Engine Matching Tree: Ruleset dievaluasi menggunakan hierarchical prefix tree (Trie). Aturan induk (misal: id="100600" grup runtime security) dievaluasi terlebih dahulu, kemudian diteruskan ke sub-rules yang memetakan teknik MITRE ATT&CK (T1059: Command and Scripting Interpreter, T1068: Exploitation for Privilege Escalation, T1003: OS Credential Dumping).
  • Distributed Master/Worker Synchronization:
    • Master Node: Mengelola distribusi terpusat untuk konfigurasi grup agent, aturan decoder kustom, dan manifest active response melalui koneksi aman port 1516.
    • Worker Nodes: Memproses dekodifikasi log secara paralel dan mengindeks hasil analisa langsung ke kluster OpenSearch tanpa menciptakan bottleneck pada Master Node.

1.5 Pipeline Telemetri Terintegrasi: Falcosidekick, Fluent-Bit gRPC Socket, hingga OpenSearch Indexer

Integrasi telemetri terpadu berjalan dengan alur kerja berikut:

  1. Cilium Tetragon mengekspor aliran data terstruktur gRPC melalui Unix Domain Socket lokal (/var/run/cilium/tetragon/tetragon.sock).
  2. Fluent-Bit DaemonSet membaca socket tersebut, memfilter atribut yang tidak relevan untuk menghemat bandwidth, dan membungkusnya dalam format JSON standar RFC 5424 menuju Wazuh Worker.
  3. Falco menganalisis syscall via driver modern eBPF, lalu meneruskannya ke Falcosidekick untuk dispatching serentak ke Wazuh dan dashboard visualisasi.
  4. Wazuh Analysis Engine menjalankan korelasi silang:
    • Apabila Tetragon berhasil mengeksekusi in-kernel kill (Action: KILLED_SIGKILL), Wazuh mencatat insiden keparahan tinggi (Level 14 - Attack Prevented) dan menotifikasi kanal SecOps.
    • Apabila terdeteksi upaya probing berulang yang belum memicu hard kill, Wazuh memicu Active Containment Orchestrator untuk mengisolasi pod target melalui Cilium NetworkPolicy.

2. KONFIGURASI NYATA & PRODUCTION-READY HARDENING

2.1 Konfigurasi Produksi Cilium Tetragon Helm Values (tetragon-values.yaml)

Konfigurasi berikut diterapkan pada kluster Kubernetes enterprise untuk mengaktifkan fitur penegakan in-kernel LSM, sizing memory map 512 MB, dan isolasi buffer 16 MB per CPU core.

YAML
# /etc/tetragon/tetragon-values.yaml
# Production Hardened Configuration for Cilium Tetragon DaemonSet
tetragon:
  enabled: true
  image:
    repository: quay.io/cilium/tetragon
    tag: v1.2.0
    pullPolicy: IfNotPresent

  # Mengaktifkan In-Kernel Enforcement via LSM dan BPF Signals
  enforcement:
    enabled: true

  # eBPF Engine & Kernel Subsystem Parameters
  bpf:
    btf: "/sys/kernel/btf/vmlinux"
    mapMemoryLimit: 536870912 # Alokasi 512 MB per simpul
    ringBufferSize: 16777216  # 16 MB per CPU core buffer (Zero drops)

  # Process Filtering & Monitoring
  processCacheSize: 65536
  enableProcessNsFilter: true
  enableProcessCred: true

  # Export Telemetry via gRPC Unix Domain Socket
  export:
    mode: "stdout"
    stdout:
      enabled: false
    grpc:
      enabled: true
      address: "unix:///var/run/cilium/tetragon/tetragon.sock"
    file:
      enabled: true
      path: "/var/log/tetragon/tetragon.log"
      maxSizeMB: 100
      maxBackups: 5
      compress: true

  # Alokasi Resource & Jaminan QoS
  resources:
    limits:
      cpu: "2000m"
      memory: "1024Mi"
    requests:
      cpu: "500m"
      memory: "512Mi"

  # Security Context - Tetragon memerlukan kapabilitas kernel spesifik
  securityContext:
    privileged: false
    capabilities:
      add:
        - SYS_ADMIN
        - SYS_RESOURCE
        - SYS_PTRACE
        - BPF
        - PERFMON
        - NET_ADMIN
        - DAC_OVERRIDE

  # Host Path Mounts untuk Probing Kernel
  extraHostPathMounts:
    - name: bpf-fs
      mountPath: /sys/fs/bpf
      hostPath: /sys/fs/bpf
      mountPropagation: Bidirectional
    - name: btf-fs
      mountPath: /sys/kernel/btf
      hostPath: /sys/kernel/btf
      readOnly: true
    - name: debugfs
      mountPath: /sys/kernel/debug
      hostPath: /sys/kernel/debug

2.2 Tetragon TracingPolicy Enterprise CRDs

A. In-Kernel Binary Execution Enforcement (tracingpolicy-binary-execution-prevention.yaml)

Kebijakan ini langsung menembak mati (SIGKILL) setiap upaya eksekusi binary utilitas jaringan ofensif atau biner tak dikenal dari direktori temporer pada namespace produksi.

YAML
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
  name: block-unauthorized-exec-production
  namespace: kube-system
spec:
  kprobes:
    - call: "sys_execve"
      syscall: true
      args:
        - index: 0
          type: "string" # Path biner yang dieksekusi
      selectors:
        - matchNamespaces:
            - "production"
            - "payment-gateway"
          matchArgs:
            - index: 0
              operator: "Prefix"
              values:
                - "/tmp/"
                - "/dev/shm/"
                - "/var/tmp/"
          matchActions:
            - action: Sigkill
            - action: Post
        - matchNamespaces:
            - "production"
          matchArgs:
            - index: 0
              operator: "InMap"
              values:
                - "/usr/bin/nc"
                - "/usr/bin/ncat"
                - "/usr/bin/netcat"
                - "/usr/bin/socat"
                - "/usr/bin/nmap"
                - "/usr/bin/tcpdump"
          matchActions:
            - action: Sigkill
            - action: Post

B. Privilege Escalation & Namespace Escape Prevention (tracingpolicy-privilege-escalation.yaml)

Mencegah eksploitasi eskalasi privilege di kernel (seperti Dirty COW, Dirty Pipe) dengan memonitor fungsi kernel internal commit_creds.

YAML
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
  name: block-privilege-escalation
  namespace: kube-system
spec:
  kprobes:
    - call: "commit_creds"
      syscall: false
      args:
        - index: 0
          type: "cred" # struct cred*
      selectors:
        - matchArgs:
            - index: 0
              operator: "Equal"
              values:
                - "0" # Percobaan mengubah target UID menjadi 0 (Root)
          matchNamespaces:
            - "production"
          matchActions:
            - action: Sigkill
            - action: Post

C. Sensitive File Integrity In-Kernel Blocking via LSM (tracingpolicy-sensitive-file-integrity.yaml)

Memblokir upaya perusakan atau pembacaan tidak sah terhadap berkas sensitif sistem dan sertifikat identitas Kubernetes.

YAML
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
  name: block-sensitive-file-tampering
  namespace: kube-system
spec:
  lsm:
    - hook: "file_open"
      args:
        - index: 0
          type: "file"
      selectors:
        - matchArgs:
            - index: 0
              operator: "Prefix"
              values:
                - "/etc/shadow"
                - "/etc/passwd"
                - "/etc/pam.d/"
                - "/etc/sudoers"
                - "/etc/kubernetes/pki/"
          matchFlags:
            - "O_WRONLY"
            - "O_RDWR"
            - "O_CREAT"
            - "O_TRUNC"
          matchActions:
            - action: Override
              argError: -13 # -EACCES (Permission Denied)
            - action: Sigkill
            - action: Post

D. Deep Socket Egress C2 Interception (tracingpolicy-tcp-egress-out-of-cluster.yaml)

Mendeteksi inisiasi koneksi socket keluar menuju subnet non-resmi atau Command & Control (C2) sintetis RFC 5737 (198.51.100.55).

YAML
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
  name: block-tcp-egress-c2
  namespace: kube-system
spec:
  kprobes:
    - call: "tcp_v4_connect"
      syscall: false
      args:
        - index: 0
          type: "sock"
      selectors:
        - matchNamespaces:
            - "production"
          matchArgs:
            - index: 0
              operator: "Equal"
              values:
                - "198.51.100.55" # Alamat IP C2 Sintetis RFC 5737
          matchActions:
            - action: Sigkill
            - action: Post

2.3 Konfigurasi High-Throughput Falco Modern eBPF (/etc/falco/falco.yaml)

YAML
# /etc/falco/falco.yaml - High-Concurrency Production Tuning
engine:
  kind: modern_ebpf
  modern_ebpf:
    cpus_for_each_syscall_buffer: 1
    buffer_dim_pages: 8192 # Alokasi 32 MB per CPU core buffer

rules_files:
  - /etc/falco/falco_rules.yaml
  - /etc/falco/falco_rules.local.yaml
  - /etc/falco/rules.d/*.yaml

json_output: true
json_include_output_property: true
json_include_tags_property: true
log_stderr: false
log_syslog: false
log_level: warning
priority: notice

# Output Channels & Rate Limiting
output_timeout: 1000
buffered_outputs: true

outputs:
  rate: 2000
  max_burst: 5000

# Forwarding via gRPC ke Falcosidekick
grpc:
  enabled: true
  bind_address: "unix:///var/run/falco/falco.sock"
  threadiness: 4

grpc_output:
  enabled: true

2.4 Konfigurasi Multi-Node Wazuh Manager/Worker (/var/ossec/etc/ossec.conf)

Konfigurasi Wazuh Worker Node penerima aliran data telemetri dari kluster Kubernetes:

XML
<!-- /var/ossec/etc/ossec.conf - Wazuh Worker Node -->
<ossec_config>
  <cluster>
    <name>wazuh-enterprise-cluster</name>
    <node_name>wazuh-worker-01</node_name>
    <node_type>worker</node_type>
    <key>4a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d</key>
    <port>1516</port>
    <bind_addr>0.0.0.0</bind_addr>
    <nodes>
      <node>198.51.100.10</node> <!-- Master Node IP Sintetis RFC 5737 -->
    </nodes>
    <hidden>no</hidden>
    <disabled>no</disabled>
  </cluster>

  <!-- Tuning Antrean Jaringan Skala Tinggi -->
  <remote>
    <connection>syslog</connection>
    <port>5140</port>
    <protocol>tcp</protocol>
    <allowed-ips>198.51.100.0/24</allowed-ips> <!-- Subnet Kluster K8s RFC 5737 -->
    <queue_size>262144</queue_size>
  </remote>

  <analysis>
    <memory_size>1048576</memory_size>
    <maximum_decoder_depth>10</maximum_decoder_depth>
  </analysis>

  <!-- Orkestrasi Respon Aktif Terintegrasi -->
  <command>
    <name>k8s-pod-quarantine</name>
    <executable>active-containment-orchestrator.sh</executable>
    <timeout_allowed>yes</timeout_allowed>
  </command>

  <active-response>
    <command>k8s-pod-quarantine</command>
    <location>local</location>
    <rules_id>100601,100602,100603</rules_id>
    <timeout>3600</timeout> <!-- Isolasi Jaringan 1 Jam -->
  </active-response>
</ossec_config>

2.5 Wazuh Custom Decoders & Ruleset MITRE ATT&CK (/var/ossec/etc/rules/tetragon_falco_rules.xml)

XML
<!-- /var/ossec/etc/rules/tetragon_falco_rules.xml -->
<group name="tetragon,falco,runtime_security,">
  <!-- Parent Rule: Tetragon In-Kernel Enforcement Event -->
  <rule id="100600" level="3">
    <decoded_as>json</decoded_as>
    <field name="process_kprobe.process.binary">\.+</field>
    <description>Tetragon runtime event captured.</description>
  </rule>

  <!-- Critical: In-Kernel SIGKILL Dijalankan oleh Tetragon -->
  <rule id="100601" level="14">
    <if_sid>100600</if_sid>
    <field name="action">KILLED_SIGKILL</field>
    <mitre>
      <id>T1059</id>
      <id>T1204</id>
    </mitre>
    <description>CRITICAL: Tetragon In-Kernel Enforcement mengeksekusi SIGKILL pada proses $(process_kprobe.process.binary) di Pod $(process_kprobe.process.pod.name) [Namespace: $(process_kprobe.process.pod.namespace)].</description>
  </rule>

  <!-- Critical: Upaya Privilege Escalation Digagalkan -->
  <rule id="100602" level="15">
    <if_sid>100600</if_sid>
    <field name="process_kprobe.function_name">commit_creds</field>
    <mitre>
      <id>T1068</id>
      <id>T1611</id>
    </mitre>
    <description>EMERGENCY: Upaya Kernel Privilege Escalation dicegat di Pod $(process_kprobe.process.pod.name)! Pengubahan UID ke 0 (root) digagalkan.</description>
  </rule>

  <!-- High: Penulisan Berkas Sensitif Diblokir via LSM -->
  <rule id="100603" level="13">
    <if_sid>100600</if_sid>
    <field name="process_lsm.function_name">security_file_open</field>
    <mitre>
      <id>T1003.008</id>
      <id>T1565</id>
    </mitre>
    <description>ALERT: In-Kernel LSM memblokir akses modifikasi berkas sensitif oleh proses $(process_lsm.process.binary).</description>
  </rule>
</group>

3. SCRIPT OTOMATISASI, VALIDASI, DAN BENCHMARKING

3.1 Script 1: audit-kernel-security-runtime.sh

Skrip audit menyeluruh untuk memvalidasi kesiapan kernel Linux host terhadap modul eBPF LSM, ketersediaan format tipe BTF, parameter JIT compiler, dan hirarki Cgroups v2 sebelum deployment.

BASH
#!/usr/bin/env bash
# ==============================================================================
# SCRIPT: audit-kernel-security-runtime.sh
# AUTHOR: La Nina 🌊
# DESCRIPTION: Linux Kernel, eBPF LSM & Runtime Security Readiness Auditor
# DATA REF: 100% Synthetic RFC 5737 Compliant
# ==============================================================================
set -euo pipefail

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'

echo -e "${BLUE}=================================================================${NC}"
echo -e "${BLUE}     LINUX KERNEL eBPF LSM & RUNTIME SECURITY READINESS AUDIT     ${NC}"
echo -e "${BLUE}=================================================================${NC}"

FAILURES=0
WARNINGS=0

# 1. Audit Versi Kernel Linux
KERNEL_VER=$(uname -r)
KERNEL_MAJOR=$(echo "$KERNEL_VER" | cut -d'.' -f1)
KERNEL_MINOR=$(echo "$KERNEL_VER" | cut -d'.' -f2)

echo -n "[*] Memeriksa Versi Kernel ($KERNEL_VER) >= 5.15 LTS... "
if [ "$KERNEL_MAJOR" -gt 5 ] || { [ "$KERNEL_MAJOR" -eq 5 ] && [ "$KERNEL_MINOR" -ge 15 ]; }; then
    echo -e "${GREEN}PASSED${NC}"
else
    echo -e "${RED}FAILED (eBPF LSM modern membutuhkan Linux Kernel >= 5.15)${NC}"
    FAILURES=$((FAILURES + 1))
fi

# 2. Audit Ketersediaan Kernel BTF
echo -n "[*] Memvalidasi Kernel BTF (/sys/kernel/btf/vmlinux)... "
if [ -f "/sys/kernel/btf/vmlinux" ]; then
    BTF_SIZE=$(stat -c%s "/sys/kernel/btf/vmlinux")
    echo -e "${GREEN}PASSED (${BTF_SIZE} bytes)${NC}"
else
    echo -e "${RED}FAILED (BTF tidak ditemukan! Kernel harus dikompilasi dengan CONFIG_DEBUG_INFO_BTF=y)${NC}"
    FAILURES=$((FAILURES + 1))
fi

# 3. Audit BPF LSM pada Boot Parameters
echo -n "[*] Memverifikasi Modul Aktif BPF LSM (/sys/kernel/security/lsm)... "
if [ -f "/sys/kernel/security/lsm" ]; then
    ACTIVE_LSM=$(cat /sys/kernel/security/lsm)
    echo -n "Ditemukan: [$ACTIVE_LSM] -> "
    if echo "$ACTIVE_LSM" | grep -q "bpf"; then
        echo -e "${GREEN}PASSED (bpf aktif)${NC}"
    else
        echo -e "${RED}FAILED ('bpf' belum terdaftar! Tambahkan lsm=...,bpf pada konfigurasi GRUB)${NC}"
        FAILURES=$((FAILURES + 1))
    fi
else
    echo -e "${YELLOW}WARNING (Securityfs belum di-mount)${NC}"
    WARNINGS=$((WARNINGS + 1))
fi

# 4. Audit Kompiler eBPF JIT & Hardening
echo -n "[*] Memeriksa eBPF JIT Compiler (net.core.bpf_jit_enable)... "
JIT_EN=$(sysctl -n net.core.bpf_jit_enable 2>/dev/null || echo "0")
if [ "$JIT_EN" -eq 1 ]; then
    echo -e "${GREEN}PASSED (Enabled)${NC}"
else
    echo -e "${RED}FAILED (JIT tidak aktif, performa kernel terdegradasi)${NC}"
    FAILURES=$((FAILURES + 1))
fi

echo -n "[*] Memeriksa JIT Blinding Hardening (net.core.bpf_jit_harden)... "
JIT_HARD=$(sysctl -n net.core.bpf_jit_harden 2>/dev/null || echo "0")
if [ "$JIT_HARD" -ge 1 ]; then
    echo -e "${GREEN}PASSED (Hardened: $JIT_HARD)${NC}"
else
    echo -e "${YELLOW}WARNING (JIT blinding belum diaktifkan terhadap JIT-spraying attacks)${NC}"
    WARNINGS=$((WARNINGS + 1))
fi

# 5. Audit Restriksi Unprivileged eBPF
echo -n "[*] Memeriksa kernel.unprivileged_bpf_disabled... "
UNPRIV_BPF=$(sysctl -n kernel.unprivileged_bpf_disabled 2>/dev/null || echo "0")
if [ "$UNPRIV_BPF" -ge 1 ]; then
    echo -e "${GREEN}PASSED (Dibatasi hanya untuk privileged users)${NC}"
else
    echo -e "${RED}FAILED (Unprivileged eBPF aktif! Berisiko terhadap local privilege escalation)${NC}"
    FAILURES=$((FAILURES + 1))
fi

# 6. Audit Titik Mount Cgroups v2 Unified
echo -n "[*] Memvalidasi Cgroups v2 Unified Hierarchy... "
if mount | grep -q "cgroup2 on /sys/fs/cgroup"; then
    echo -e "${GREEN}PASSED (Cgroups v2 Unified Aktif)${NC}"
else
    echo -e "${YELLOW}WARNING (Terdeteksi legacy Cgroups v1)${NC}"
    WARNINGS=$((WARNINGS + 1))
fi

# 7. Audit BPF Filesystem Mount
echo -n "[*] Memeriksa bpffs mount pada /sys/fs/bpf... "
if mount | grep -q "type bpf"; then
    echo -e "${GREEN}PASSED${NC}"
else
    echo -e "${RED}FAILED (/sys/fs/bpf belum di-mount! Persistensi peta Tetragon akan gagal)${NC}"
    FAILURES=$((FAILURES + 1))
fi

echo -e "\n${BLUE}=================================================================${NC}"
echo -e "Hasil Audit: ${GREEN}$((7 - FAILURES - WARNINGS)) Berhasil${NC} | ${YELLOW}${WARNINGS} Peringatan${NC} | ${RED}${FAILURES} Kegagalan Kritis${NC}"
if [ "$FAILURES" -gt 0 ]; then
    echo -e "${RED}[!] SISTEM BELUM MEMENUHI SYARAT IN-KERNEL ENFORCEMENT.${NC}"
    exit 1
else
    echo -e "${GREEN}[+] SISTEM SIAP UNTUK DEPLOYMENT CILIUM TETRAGON & FALCO PRODUKSI.${NC}"
    exit 0
fi

3.2 Script 2: benchmark-ebpf-runtime-overhead.sh

Skrip benchmarking untuk mengukur dampak latensi terhadap eksekusi system call berfrekuensi tinggi dan context-switching overhead saat Tetragon dan Falco aktif.

BASH
#!/usr/bin/env bash
# ==============================================================================
# SCRIPT: benchmark-ebpf-runtime-overhead.sh
# AUTHOR: La Nina 🌊
# DESCRIPTION: Benchmark CPU/Memory & Syscall Latency Overhead of In-Kernel Security
# DATA REF: 100% Synthetic Benchmark (RFC 5737 Compliant)
# ==============================================================================
set -euo pipefail

DURATION=10
TMP_DIR=$(mktemp -d /tmp/benchmark-ebpf.XXXXXX)
trap 'rm -rf "$TMP_DIR"' EXIT

echo -e "\033[0;34m[*] Memulai Benchmark Beban dan Latensi eBPF Runtime Security...\033[0m"

# 1. Uji Latensi Syscall Berfrekuensi Tinggi (100.000 iterasi stat/open)
echo -e "\n[+] Tahap 1: Benchmark Syscall Stat & Open/Close (100.000 iterasi)..."
python3 - <<EOF
import time
import os

iterations = 100000
start = time.perf_counter()
for _ in range(iterations):
    try:
        os.stat("/etc/hosts")
    except:
        pass
elapsed = time.perf_counter() - start
avg_lat_us = (elapsed / iterations) * 1_000_000
print(f"    Total Iterasi    : {iterations}")
print(f"    Waktu Eksekusi   : {elapsed:.4f} detik")
print(f"    Rata-rata Latensi: {avg_lat_us:.3f} mikrodetik / call")
print(f"    Throughput       : {iterations / elapsed:.0f} syscalls/detik")
EOF

# 2. Uji Pembuatan Proses & Eksekusi Execve (5.000 proses)
echo -e "\n[+] Tahap 2: Benchmark Fork & Execve Spawn (5.000 proses)..."
python3 - <<EOF
import time
import subprocess

iterations = 5000
start = time.perf_counter()
for _ in range(iterations):
    subprocess.run(["true"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
elapsed = time.perf_counter() - start
print(f"    Total Proses     : {iterations}")
print(f"    Waktu Eksekusi   : {elapsed:.4f} detik")
print(f"    Latensi Fork+Exec: {(elapsed / iterations) * 1000:.3f} ms / proses")
print(f"    Throughput       : {iterations / elapsed:.0f} proses/detik")
EOF

# 3. Inspeksi Program dan Peta BPF Aktif
echo -e "\n[+] Tahap 3: Memeriksa Jumlah Program BPF dan Hook LSM yang Aktif..."
if command -v bpftool >/dev/null 2>&1; then
    echo "    Total Program BPF Dimuat : $(bpftool prog show | grep -c 'type ')"
    echo "    Total Peta BPF Terdaftar : $(bpftool map show | grep -c 'type ')"
    echo "    Hook LSM Aktif           : $(bpftool prog show | grep -c 'type lsm' || echo 0)"
else
    echo "    [i] bpftool tidak terpasang, melewati inspeksi langsung kernel map."
fi

echo -e "\n\033[0;32m[+] Pengujian Benchmark Selesai dengan Sukses.\033[0m"

3.3 Script 3: active-containment-orchestrator.sh

Handler respon aktif terdistribusi yang dipanggil oleh Wazuh untuk melakukan karantina jaringan pod via Cilium NetworkPolicy dan memblokir lalu lintas C2 berbahaya pada layer firewall host.

BASH
#!/usr/bin/env bash
# ==============================================================================
# SCRIPT: active-containment-orchestrator.sh
# AUTHOR: La Nina 🌊
# DESCRIPTION: Multi-Layer Automated Threat Containment (Wazuh Active Response Handler)
# DATA REF: 100% Synthetic RFC 5737 Compliant (Subnet 198.51.100.0/24)
# ==============================================================================
set -euo pipefail

LOG_FILE="/var/ossec/logs/active-responses.log"
INPUT_JSON=$(cat)

ACTION=$(echo "$INPUT_JSON" | jq -r '.command // "add"')
ALERT_ID=$(echo "$INPUT_JSON" | jq -r '.parameters.alert.id // "unknown"')
RULE_ID=$(echo "$INPUT_JSON" | jq -r '.parameters.alert.rule.id // "0"')
POD_NAME=$(echo "$INPUT_JSON" | jq -r '.parameters.alert.data.process_kprobe.process.pod.name // .parameters.alert.data.k8s.pod.name // empty')
NAMESPACE=$(echo "$INPUT_JSON" | jq -r '.parameters.alert.data.process_kprobe.process.pod.namespace // .parameters.alert.data.k8s.ns.name // "default"')
SRC_IP=$(echo "$INPUT_JSON" | jq -r '.parameters.alert.data.src_ip // empty')

log_msg() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') [CONTAINMENT] [Rule: $RULE_ID] $*" >> "$LOG_FILE"
}

log_msg "Invoked with Action: $ACTION for Pod: $POD_NAME (Namespace: $NAMESPACE)"

if [ "$ACTION" == "add" ]; then
    # 1. Karantina Jaringan Pod via Cilium NetworkPolicy
    if [ -n "$POD_NAME" ] && command -v kubectl >/dev/null 2>&1; then
        log_msg "Menegakkan Zero-Trust Network Isolation pada Pod $POD_NAME di $NAMESPACE..."
        
        cat <<EOF | kubectl apply -f - || log_msg "Gagal menerapkan quarantine CiliumNetworkPolicy"
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: quarantine-${POD_NAME}
  namespace: ${NAMESPACE}
spec:
  endpointSelector:
    matchLabels:
      io.kubernetes.pod.name: ${POD_NAME}
  ingress: []
  egress: [] # Blokir total (Sinkhole traffic)
EOF
        log_msg "Pod $POD_NAME berhasil diisolasi dari komunikasi jaringan kluster."
    fi

    # 2. Blokir Firewall Host untuk Alamat IP Penyerang Luar (RFC 5737 Synthetic C2)
    if [ -n "$SRC_IP" ] && [[ "$SRC_IP" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        # Perlindungan whitelist loopback & private range
        if [[ "$SRC_IP" == "127.0.0.1" ]] || [[ "$SRC_IP" =~ ^10\. ]] || [[ "$SRC_IP" =~ ^192\.168\. ]]; then
            log_msg "Alamat IP $SRC_IP adalah segmen internal/privat. Melewati blokir host."
        else
            log_msg "Memblokir IP C2 berbahaya $SRC_IP via iptables host..."
            iptables -I FORWARD 1 -s "$SRC_IP" -j DROP || true
            iptables -I INPUT 1 -s "$SRC_IP" -j DROP || true
        fi
    fi

elif [ "$ACTION" == "delete" ]; then
    # Pemulihan Karantina
    if [ -n "$POD_NAME" ] && command -v kubectl >/dev/null 2>&1; then
        log_msg "Membatalkan kebijakan isolasi untuk Pod $POD_NAME..."
        kubectl delete ciliumnetworkpolicy "quarantine-${POD_NAME}" -n "$NAMESPACE" --ignore-not-found=true || true
    fi
fi

exit 0

4. SKENARIO TROUBLESHOOTING KASUS NYATA (ROOT CAUSE ANALYSIS & MITIGATION)

4.1 Kasus 1: Tetragon Soft Lockup / Kernel Panic Akibat Recursive Kprobe Hooking pada High-Frequency File IO

Gejala (Incident Symptoms)

Simpul Kubernetes tiba-tiba berhenti merespons (freeze), kubelet gagal mengirimkan heartbeat sehingga node ditandai NotReady. Pada serial console kernel, muncul laporan fatal watchdog:

TEXT
[ 1420.312014] watchdog: BUG: soft lockup - CPU#4 stuck for 26s! [tetragon:4120]
[ 1420.312080] Call Trace:
[ 1420.312100]  <IRQ>
[ 1420.312120]  kprobe_dispatcher+0x42/0x80
[ 1420.312150]  kprobe_ftrace_handler+0x8a/0x110
[ 1420.312180]  __vfs_write+0x5/0x1c0
[ 1420.312210]  vfs_write+0xb8/0x1a0
[ 1420.312240]  ksys_write+0x5f/0xe0
[ 1420.312260]  do_syscall_64+0x5b/0x180

Root Cause Analysis (RCA)

  1. Analisis Call Trace: Titik hook kprobe dipasang pada fungsi internal __vfs_write tanpa filter eksklusi proses.
  2. Ketika Tetragon mendeteksi penulisan berkas, userspace daemon Tetragon mencatat log telemetri ke berkas /var/log/tetragon/tetragon.log menggunakan syscall write().
  3. Syscall write() dari Tetragon memanggil kembali __vfs_write di kernel, yang secara langsung memicu kprobe Tetragon untuk kedua kalinya.
  4. Mekanisme Kegagalan: Terjadi Recursive Hooking Loop tak berujung (Kprobe -> Event Generated -> Write Log -> Trigger Kprobe). Core CPU terkunci dalam infinite loop hingga watchdog kernel mendeteksi soft lockup dan membekukan sistem operasi.

Mitigasi & Langkah Remediasi Permanen

  1. Hindari Hooking Fungsi Internal Tulis Tanpa Eksklusi PID: Tambahkan filter matchArgs atau abaikan logging dari UID/PID milik daemon Tetragon itu sendiri.
  2. Gunakan LSM Hook Resmi: Gantikan kprobe __vfs_write dengan pengait LSM file_open atau file_permission yang secara arsitektur kebal terhadap pemanggilan rekursif.
  3. Konfigurasi Namespace Isolation: Tambahkan directive matchNamespaces dan kecualikan namespace sistem (kube-system).

4.2 Kasus 2: Falco Ring Buffer Starvation & Syscall Drops pada Peak Ingress Bursts

Gejala (Incident Symptoms)

Saat kluster menerima lonjakan trafik HTTP/gRPC tinggi, metrik Falco mencatat lonjakan kehilangan event:

TEXT
falco_drops: 184,210 events
falco_drops_ratio: 0.142 (14.2% syscall events dropped!)

Log internal Falco menampilkan peringatan: BPF ring buffer is full! Discarding system call events.

Root Cause Analysis (RCA)

  1. Falco mengaitkan seluruh tracepoint sys_enter pada seluruh core CPU tanpa pemfilteran awal.
  2. Ukuran memori BPF Ring Buffer disetel pada konfigurasi default yang terlalu kecil (buffer_dim_pages: 512, setara 2 MB).
  3. Pada saat beban kerja mencapai 50.000 req/detik, kernel Linux membanjiri ring buffer jauh lebih cepat daripada kemampuan daemon userspace falco-engine yang tercekik oleh batas CFS quota cgroups (cpu.cfs_quota_us).
  4. Event yang melebihi kapasitas buffer dibuang secara senyap (dropped), menciptakan celah buta di mana aktivitas eksploitasi penyerang tidak tercatat.

Mitigasi & Langkah Remediasi Permanen

  1. Perbesar Dimensi Ring Buffer: Perbarui file /etc/falco/falco.yaml menjadi 8.192 pages (32 MB per CPU core buffer):
    YAML
    engine:
      kind: modern_ebpf
      modern_ebpf:
        cpus_for_each_syscall_buffer: 1
        buffer_dim_pages: 8192
  2. Aktifkan Early In-Kernel Syscall Filtering: Batasi pengumpulan hanya pada base syscalls berisiko tinggi (execve, ptrace, connect, setuid) langsung di tingkat eBPF map sebelum event dialirkan ke buffer.
  3. Jaminan Reservasi CPU: Tetapkan jaminan alokasi CPU (requests.cpu: "1000m") pada DaemonSet Falco untuk mencegah penundaan penjadwalan (scheduling delay).

4.3 Kasus 3: BPF LSM Verification Failure bpf_send_signal() permission denied pada Restricted Kernel

Gejala (Incident Symptoms)

Saat menerapkan TracingPolicy dengan aksi Sigkill, Tetragon menolak memuat program eBPF dan melaporkan kesalahan verifikasi pada CRD:

TEXT
Status:
  Conditions:
    - Message: "loading bpf program failed: permission denied: 84: (85) call bpf_send_signal#109: helper call is not allowed in probe type 28"
      Reason: BpfProgramLoadFailed
      Status: "False"
      Type: Ready

Root Cause Analysis (RCA)

  1. Batasan Konteks Helper Kernel: Fungsi helper bpf_send_signal() memiliki batasan keamanan ketat di kernel Linux. Helper ini hanya diizinkan dipanggil dari konteks program BPF yang berjalan pada process context (seperti BPF_PROG_TYPE_KPROBE pada pintu masuk syscall atau BPF_PROG_TYPE_LSM dengan CONFIG_BPF_LSM=y).
  2. Apabila administrator mengonfigurasi aksi Sigkill pada generic raw_tracepoint atau fungsi kernel yang dieksekusi di dalam konteks NMI atau hard interrupt handler (IRQ context), verifier eBPF akan menolak program tersebut untuk mencegah terjadinya deadlock pada subsistem penjadwal (scheduler) kernel.

Mitigasi & Langkah Remediasi Permanen

  1. Pindahkan Titik Enforcement ke Konteks Proses yang Aman: Pastikan aksi Sigkill hanya ditempelkan pada syscall entry kprobes (misalnya sys_execve) atau LSM hooks (security_bprm_check):
    YAML
    spec:
      kprobes:
        - call: "sys_execve"
          syscall: true # Konteks proses aman untuk bpf_send_signal
          matchActions:
            - action: Sigkill
  2. Pastikan kernel dikompilasi dengan opsi CONFIG_BPF_EVENTS=y dan CONFIG_BPF_KPROBE_OVERRIDE=y.

4.4 Kasus 4: Wazuh Cluster Remoted Queue Saturation & Split-Brain Analysis Engine Disconnect

Gejala (Incident Symptoms)

Wazuh Agent dan log forwarder melaporkan penolakan koneksi port 5140 (Connection refused). Pada Wazuh Manager, log /var/ossec/logs/ossec.log mencatat:

TEXT
2026/09/14 14:10:02 wazuh-remoted: ERROR: Input queue is full (262144 items). Dropping incoming events.
2026/09/14 14:10:05 wazuh-analysisd: WARNING: Processing latency spike: 4200ms per event batch.

Root Cause Analysis (RCA)

  1. Mesin wazuh-analysisd kehabisan siklus CPU akibat evaluasi aturan XML bersarang (nested regex decoding) yang tidak efisien terhadap log JSON bervolume tinggi.
  2. Ukuran antrean wazuh-remoted (262.144 slot) meluap karena ingestion rate mencapai 45.000 event/detik saat jam sibuk produksi.
  3. Penundaan pemrosesan mengakibatkan socket timeout dan buffer drop di sisi pengirim.

Mitigasi & Langkah Remediasi Permanen

  1. Tingkatkan Ukuran Buffer Memori di /var/ossec/etc/ossec.conf:
    XML
    <remote>
      <connection>syslog</connection>
      <port>5140</port>
      <protocol>tcp</protocol>
      <queue_size>524288</queue_size>
      <rdate>10</rdate>
    </remote>
    <analysis>
      <memory_size>2097152</memory_size>
    </analysis>
  2. Gunakan Direct JSON Parsing: Hindari regex multiline dan gunakan tag <decoded_as>json</decoded_as> untuk mempercepat ekstraksi field.
  3. Penerapan Multi-Worker Load Balancing: Tempatkan layer HAProxy L4 di depan minimal 3 Wazuh Worker nodes untuk mendistribusikan aliran koneksi TCP port 5140 secara merata.

5. TABEL KOMPARASI & STANDAR KEAMANAN INDUSTRI 2026

Dimensi KemampuanAudit Tradisional (Auditd / Iptables)Falco Modern eBPF EngineCilium Tetragon eBPF LSMDistributed Wazuh SIEM/XDR
Layer EksekusiUserspace Daemon & NetfilterKernel TracepointsKernel LSM / Kprobes / FentryCentralized Multi-Node Cluster
Jeda IntervensiLambat (> 1.000 ms)Menengah (50 ms - 200 ms)Nol / Real-Time (0 ms in-kernel)Asinkron (> 500 ms)
Model PencegahanReaktif (Hanya mencatat log)Reaktif via skrip userspaceProaktif Sinkron (SIGKILL/EPERM)Terkoordinasi via Active Response
Overhead CPU HostTinggi (Serialisasi syscall berat)Sangat Rendah (< 2% CPU)Ultra Rendah (< 1% CPU)Terisolasi pada Dedicated Node
Konteks Pod & K8sButa konteks containerDiperkaya via API Server pollingIn-Kernel Cgroups Inode TrackingTerpetakan via JSON terstruktur
MITRE ATT&CK MappingParsing log manualDidukung melalui tag aturanTerintegrasi pada metadata eventOtomatis via Ruleset Engine

Dokumen ini disusun dan dikurasi secara mandiri oleh La Nina 🌊 sebagai standar referensi arsitektur keamanan kernel runtime tingkat Tier-1 Enterprise.

Kembali ke Atas ↑