Nota:

Installa Tetragon e configura TracingPolicies su Oracle Container Engine for Kubernetes

Introduzione

Poiché gli strumenti basati su eBPF diventano più popolari per le applicazioni cloud native, questa esercitazione descrive come eseguire Tetragon, uno strumento basato su eBPF per l'osservabilità della sicurezza e l'applicazione su Oracle Cloud Infrastructure (OCI).

Un kernel del sistema operativo è solitamente il posto migliore per osservare e influenzare un sistema in quanto ci sono pochissimi ostacoli tra lo strumento che esegue una funzione e le attività che sta cercando di osservare e influenzare. L'esecuzione all'interno dello spazio kernel spesso consente a un programma di avere costi generali molto bassi, ma a costo di sicurezza e manutenzione.

eBPF offre un metodo per introdurre nuove funzionalità che possono essere eseguite in un contesto sabbiato e privilegiato senza modificare il codice sorgente del kernel o caricare un modulo kernel. Funziona essenzialmente creando un paradigma simile a un linguaggio di programmazione basato su virtual machine. In modo simile al modo in cui i programmi Java moderni vengono compilati in byte-code compilato da JVM (Java Virtual Machine) nel codice nativo utilizzando un compilatore JIT per ottenere prestazioni native, i programmi eBPF dispongono di una rappresentazione byte-code. BPF è profondamente legato al kernel Linux e il compilatore JIT in-kernel compila il byte-code eBPF nel codice nativo che può essere eseguito nello spazio kernel.

eBPF utilizza un modello basato su eventi per caricare programmi e i programmi eBPF vengono scritti su "hook" in eventi di rete, chiamate di sistema e altro ancora. Quando un evento in cui un programma eBPF si collega è stato richiamato, il programma eBPF viene caricato nel kernel dopo la verifica e la compilazione JIT. Il passo di verifica garantisce che il programma sia sicuro da eseguire, disponga dei privilegi giusti e possa essere eseguito fino al completamento, mentre la compilazione JIT garantisce prestazioni native. In molti casi, i programmi eBPF sono scritti in lingue di livello superiore e compilati nella rappresentazione byte-code. Questi vengono quindi caricati in un kernel in esecuzione dopo la compilazione JIT in base agli eventi in cui i programmi sono collegati.

Tetragon - Osservabilità e applicazione della sicurezza basata su eBPF

Tetragon è uno strumento basato su eBPF cloud nativo che esegue l'osservabilità e l'applicazione della sicurezza. È una componente del progetto cilium. Utilizzando eBPF, Tetragon è in grado di filtrare e osservare gli eventi e applicare i criteri in tempo reale senza inviare eventi a un agente in esecuzione al di fuori del kernel. Tetragon può risolvere numerosi casi d'uso legati alla sicurezza e all'osservabilità filtrando eventi come un carico di lavoro che apre una connessione di rete, accede a un file o addirittura avvia un processo all'interno di un contenitore. Ad esempio, un processo shell avviato all'interno di un container di applicazioni potrebbe essere considerato un evento di sicurezza. Potrebbe trattarsi di un tentativo da parte di qualcuno di risolvere un problema o di un'attività dannosa, in entrambi i casi, che deve attivare un controllo di sicurezza per escludere un attacco al sistema. Lo stesso dicasi per le connessioni di rete aperte o per i file in lettura. Tetragon può tracciare e filtrare queste attività introducendo allo stesso tempo un sovraccarico minimo e, di solito, al primo stadio, che questi eventi possono essere rilevati nel software.

Tetragon è particolarmente adatto per i carichi di lavoro Kubernetes ed viene eseguito come daemonset in ogni nodo del cluster. Tetragon può quindi estrarre i metadati dal server API Kubernetes e correlare tali metadati agli eventi osservati nel kernel di ogni nodo. Tetragon semplifica l'impostazione di filtri in tempo reale per queste attività e altro ancora utilizzando TracingPolicies. TracingPolicy è una risorsa personalizzata creata da Tetragon che consente agli amministratori e a DevSecOps di creare e distribuire filtri per eventi kernel come risorse Kubernetes. Un TracingPolicy può corrispondere alle chiamate di sistema, agli attributi del processo e agli argomenti, nonché attivare un'azione sulle corrispondenze.

Obiettivo

Prerequisiti

Prerequisiti per Oracle Linux

OKE utilizza Oracle Linux e Tetragon si basa sul supporto BTF (BPF Type Format) nel kernel. I kernel Oracle Linux recenti includono questa funzionalità integrata, pertanto gli utenti devono utilizzare un kernel 5.4.17-2136.305.3.el7uek o più recente. Tetragon inoltre non fornisce supporto per l'architettura Arm (linux/arm64) e al momento della scrittura fornisce solo il supporto x86 (linux/amd64). Se nel cluster OKE sono presenti nodi braccio, il set di daemon rimarrà in stato Init:CrashLoopBackOff.

Nota: le versioni recenti delle immagini dei nodi OKE si basano su kernel che includono il supporto BTF. Questo avvertimento per il supporto BTF è applicabile solo ai cluster in cui il sistema operativo del nodo non è stato aggiornato in un determinato momento e non ai nuovi cluster creati. In caso di dubbi, il modo migliore per verificare se si dispone del supporto BTF è SSH al nodo ed eseguire ls /sys/kernel/btf, dovrebbe essere visualizzato il kernel (vmlinux) e i moduli elencati qui. Come nota generale, per questa distribuzione sono preferiti i nodi basati su Oracle Linux 8.

Per controllare la versione del kernel in esecuzione, eseguire uname -a sul nodo. Se si esegue una versione precedente del kernel, è possibile aggiornare la versione nella configurazione del pool di nodi. Ciò influisce solo sui nodi appena creati e i nodi esistenti non vengono aggiornati automaticamente per garantire la continuità dei carichi di lavoro che potrebbero essere in esecuzione. È possibile seguire il processo di aggiornamento del pool di nodi per portare i nodi esistenti alle versioni del kernel più recenti.

Il flusso di eventi come output JSON è dettagliato e difficile da comprendere, ma è denso di informazioni. Esistono diversi modi per includere questi dati JSON e ricavare informazioni analitiche da essi. L'ovvio consiste nell'utilizzare lo strumento CLI tetragon. Isovalent, l'azienda dietro Cilium e Tetragon offre anche un prodotto commerciale completo che può analizzare e visualizzare questi dati per renderli più fruibili e più facili da assimilare.

Task 1: installare l'interfaccia CLI tetra

Task 2: Configurare TracingPolicies per FileAccess e l'osservabilità della rete

TracingPolicies sono risorse personalizzate che semplificano l'impostazione di filtri in tempo reale per gli eventi kernel. Un TracingPolicy corrisponde e filtra le chiamate di sistema per l'osservabilità, nonché attiva un'azione su queste corrispondenze. Tetragon offre alcuni esempi che mostrano questa capacità e possono essere utilizzati come punto di partenza per configurare il tuo TracingPolicies.

Poiché questi eventi sono monitorati direttamente dall'interno del kernel, aggiunge pochissimo sovraccarico all'atto di rintracciare queste chiamate e molto poco può essere offuscato o mascherato da un attore maligno.

Il primo inconveniente di questo approccio è che le azioni che puoi intraprendere come dire, uccidere un processo che legge un file è reazionario, in quanto sappiamo dell'evento come sta accadendo, e non prima. Tuttavia, è estremamente potente poter disporre di una soluzione di sovraccarico ridotto per filtrare e abbinare eventi a livello kernel e riuscire a creare criteri che possano aiutarci a osservare e agire su di essi.

Risoluzione dei problemi

Errore: se vedi che i pod Tetragon sono in stato CrashLoopBackOff, questo potrebbe essere causato da due motivi.

Possibile motivo: il motivo più probabile è che questo si verifica sui nodi basati su Arm, se li hai nel tuo cluster. Tetragon non funziona ancora su Arm.

Risoluzione problemi:

Il secondo motivo potrebbe essere che si dispone di un vecchio kernel nel nodo e il supporto BTF non è incluso. Per verificare se questo è in realtà il problema, richiedi i log del container per il container in cui si è verificato l'errore nel pod come descritto in precedenza. Se il problema è causato dalla mancanza di supporto BTF nel kernel, è possibile visualizzare un messaggio di errore simile al

aborting. kernel autodiscovery failed: Kernel version BTF search failed kernel is not included in supported list.
Use --btf option to specify BTF path and/or '--kernel' to specify kernel version

Ciò è previsto nei nodi in cui il sistema operativo non è stato aggiornato di recente o in versioni precedenti del sistema operativo. Per risolvere questo problema, puoi passare alle immagini OKE o della piattaforma più recenti basate su Oracle Linux 8 per i nodi di lavoro. È necessario aggiornare la configurazione del pool di nodi con questa scelta e i nodi aggiornati in base al processo di aggiornamento del pool di nodi standard.

Approvazioni

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Explorer di Oracle Learning.

Per la documentazione sul prodotto, visitare il sito Oracle Help Center.