Hinweis:

Tetragon installieren und TracingPolicies auf Oracle Container Engine for Kubernetes konfigurieren

Einführung

Da eBPF-basierte Tools für cloud-native Anwendungen immer beliebter werden, wird in diesem Tutorial die Ausführung von Tetragon beschrieben, einem eBPF-basierten Tool zur Sicherheitsüberwachung und -durchsetzung auf Oracle Cloud Infrastructure (OCI).

Ein Betriebssystemkernel ist in der Regel der beste Ort, um ein System zu beobachten und zu beeinflussen, da es sehr wenige Barrieren zwischen dem Tool, das eine Funktion ausführt, und den Aktivitäten gibt, die es zu beobachten und zu beeinflussen versucht. Durch die Ausführung im Kernel-Speicherplatz kann ein Programm häufig einen sehr geringen Overhead, aber zu den Kosten für Sicherheit und Wartung haben.

eBPF bietet eine Methode zur Einführung neuer Funktionen, die in einem sandbox- und privilegierten Kontext ausgeführt werden können, ohne den Kernel-Quellcode zu ändern oder ein Kernel-Modul zu laden. Es funktioniert im Wesentlichen, indem ein Paradigma erstellt wird, das einer virtuellen maschinenbasierten Programmiersprache ähnlich ist. Auf ähnliche Weise wie moderne Java-Programme in Bytecode kompiliert werden, den die JVM (Java Virtual Machine) mit einem JIT-Compiler in nativen Code kompiliert, um native Performance zu erzielen, verfügen eBPF-Programme über eine Bytecode-Darstellung. BPF ist tief mit dem Linux-Kernel verbunden, und der In-Kernel-JIT-Compiler kompiliert den eBPF-Bytecode in nativen Code, der im Kernel-Bereich ausgeführt werden kann.

eBPF verwendet ein ereignisbasiertes Modell, um Programme zu laden, und eBPF-Programme werden in Netzwerkereignisse, Systemaufrufe und vieles mehr in "Hook" geschrieben. Wenn ein Ereignis aufgerufen wurde, in das ein eBPF-Programm eingehängt ist, wird das eBPF-Programm nach Überprüfung und JIT-Kompilierung in den Kernel geladen. Der Verifizierungsschritt stellt sicher, dass das Programm sicher ausgeführt werden kann, über die richtigen Berechtigungen verfügt und bis zum Abschluss ausgeführt werden kann, während die JIT-Kompilierung die native Performance gewährleistet. In vielen Fällen werden eBPF-Programme in übergeordneten Sprachen geschrieben und in die Bytecode-Darstellung kompiliert. Diese werden dann nach der JIT-Kompilierung in einen laufenden Kernel geladen, basierend auf den Ereignissen, mit denen die Programme verbunden sind.

Tetragon - eBPF-basierte Sicherheitsüberwachung und -durchsetzung

Tetragon ist ein cloud-natives eBPF-basiertes Tool, das Sicherheitsüberwachung und Durchsetzung ausführt. Es ist ein Bestandteil des Ciliumprojekts. Mit eBPF kann Tetragon Ereignisse filtern und beobachten und Policys in Echtzeit anwenden, ohne Ereignisse an einen Agent zu senden, der außerhalb des Kernels ausgeführt wird. Tetragon kann zahlreiche Sicherheits- und Beobachtbarkeitsanwendungsfälle lösen, indem es nach Ereignissen wie einer Workload filtert, die eine Netzwerkverbindung öffnet, auf eine Datei zugreift oder sogar einen Prozess innerhalb eines Containers startet. Beispiel: Ein Shell-Prozess, der in einem Anwendungscontainer gestartet wird, könnte als Sicherheitsereignis betrachtet werden. Es könnte jemand sein, der versucht, ein Problem zu beheben, oder es könnte eine böswillige Aktivität sein, die eine Sicherheitsprüfung auslösen sollte, um einen Angriff auf das System auszuschließen. Dasselbe gilt für das Öffnen von Netzwerkverbindungen oder das Lesen von Dateien. Tetragon kann diese Aktivitäten verfolgen und filtern und gleichzeitig wenig bis keinen Overhead einführen und in der Regel frühestens dann, wenn diese Ereignisse in Software erkannt werden können.

Tetragon ist ideal für Kubernetes-Workloads geeignet und wird in jedem Knoten im Cluster als daemonset ausgeführt. Tetragon kann dann Metadaten vom Kubernetes-API-Server abrufen und diese Metadaten mit den Ereignissen korrelieren, die im Kernel jedes Knotens beobachtet werden. Tetragon erleichtert das Einrichten von Echtzeitfiltern für diese Aktivitäten und mehr mit TracingPolicies. TracingPolicy ist eine von Tetragon erstellte benutzerdefinierte Ressource, mit der Administratoren und DevSecOps Filter für Kernelereignisse als Kubernetes-Ressourcen erstellen und bereitstellen können. Eine TracingPolicy kann Systemaufrufe, Prozessattribute und Argumente abgleichen und eine Aktion bei Übereinstimmungen auslösen.

Zielsetzung

Voraussetzungen

Voraussetzungen für Oracle Linux

OKE verwendet Oracle Linux, und Tetragon setzt auf die Unterstützung von BTF (BPF Type Format) im Kernel. Die letzten Oracle Linux-Kernel enthalten diese Out-of-the-box. Daher sollten Benutzer einen Kernel verwenden, der 5.4.17-2136.305.3.el7uek oder höher ist. Tetragon bietet auch keine Unterstützung für die Arm-Architektur (linux/arm64), und zum Zeitpunkt des Schreibens wird nur x86 (linux/amd64) unterstützt. Wenn sich Arm-Knoten in Ihrem OKE-Cluster befinden, bleibt das Daemon-Set im Status Init:CrashLoopBackOff.

Hinweis: Die neuesten Versionen der OKE-Knotenimages basieren auf Kerneln, die BTF-Unterstützung enthalten. Diese Caveat für die BTF-Unterstützung gilt nur für Cluster, bei denen das Knoten-BS nicht innerhalb einer bestimmten Zeit aktualisiert wurde und nicht für neu erstellte Cluster. Wenn Sie sich nicht sicher sind, können Sie am besten prüfen, ob Sie BTF-Unterstützung haben, indem Sie SSH auf dem Knoten ausführen und ls /sys/kernel/BTF ausführen, sollten Sie den Kernel (vmlinux) sowie die hier aufgeführten Module sehen. Im Allgemeinen werden Oracle Linux 8-basierte Knoten für dieses Deployment bevorzugt.

Um die Version des Kernels zu prüfen, auf dem Ihre Knoten ausgeführt werden, führen Sie uname -a auf dem Knoten aus. Wenn Sie eine ältere Version des Kernels ausführen, können Sie die Version in der Knotenpoolkonfiguration aktualisieren. Dies wirkt sich jedoch nur auf neu erstellte Knoten aus, und vorhandene Knoten werden nicht automatisch upgegradet, um die Kontinuität für die Workloads sicherzustellen, die auf ihnen ausgeführt werden können. Sie können den Upgradeprozess des Knotenpools befolgen, um die vorhandenen Knoten auf die neueren Kernel-Versionen zu aktualisieren.

Der Ereignis-Stream als JSON-Ausgabe ist verbose und schwer zu verstehen, aber es ist Information dicht. Es gibt verschiedene Möglichkeiten, diese JSON-Daten aufzunehmen und daraus analytische Informationen abzuleiten. Es ist offensichtlich, dass Sie das tetragon-CLI-Tool verwenden. Isovalent, das Unternehmen hinter Cilium und Tetragon, bietet auch ein vollwertiges kommerzielles Produkt, das diese Daten analysieren und visualisieren kann, um sie verwertbarer und einfacher zu assimilieren.

Aufgabe 1: tetra-CLI installieren

Aufgabe 2: TracingPolicies für FileAccess und Netzwerkbeobachtbarkeit konfigurieren

TracingPolicies sind benutzerdefinierte Ressourcen, mit denen Sie ganz einfach Echtzeitfilter für Kernel-Ereignisse einrichten können. Eine TracingPolicy gleicht das System ab und filtert es nach Beobachtbarkeit und löst auch eine Aktion für diese Übereinstimmungen aus. Tetragon bietet einige Beispiele, die diese Fähigkeit zeigen und als Ausgangspunkt zur Konfiguration von TracingPolicies verwendet werden können.

Da diese Ereignisse direkt aus dem Kernel überwacht werden, fügt sie dem Akt der Verfolgung dieser Anrufe sehr wenig Overhead hinzu und kann sehr wenig von einem böswilligen Schauspieler verschleiert oder maskiert werden.

Der Hauptnachteil dieses Ansatzes ist, dass Aktionen, die Sie ausführen können, wie z.B. einen Prozess, der eine Datei liest, reaktionär sind, da wir über das Ereignis wissen, während es geschieht, und nicht vorher. Dennoch ist es äußerst mächtig, eine Low-Overhead-Lösung zur Filterung und Anpassung von Ereignissen auf Kernel-Ebene haben zu können und Policys zu erstellen, die uns helfen können, sie zu beobachten und zu bearbeiten.

Fehlersuche

Fehler: Wenn Sie sehen, dass Tetragon-Pods den Status CrashLoopBackOff aufweisen, kann dies aus zwei Gründen verursacht werden.

Mögliche Ursache: Der wahrscheinlichste Grund ist, dass dies auf ARM-basierten Knoten geschieht, wenn diese in Ihrem Cluster vorhanden sind. Tetragon läuft noch nicht auf Arm.

Fehlerbehebung:

Der zweite Grund könnte sein, dass Sie einen alten Kernel auf Ihrem Knoten haben, und BTF-Unterstützung ist nicht enthalten. Um zu prüfen, ob dies tatsächlich der Fall ist, rufen Sie die Containerlogs für den fehlerhaften Container wie oben beschrieben im Pod ab. Wenn die fehlende BTF-Unterstützung im Kernel das Problem ist, sehen Sie eine Fehlermeldung ähnlich der

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

Dies wird auf Knoten erwartet, bei denen das Betriebssystem nicht vor kurzem oder in älteren Versionen des Betriebssystems aktualisiert wurde. Um dies zu beheben, können Sie zu den neuesten Oracle Linux 8-basierten OKE- oder Plattformimages für Ihre Worker-Knoten wechseln. Die Knotenpoolkonfiguration muss mit dieser Auswahl aktualisiert werden, und die Knoten müssen nach dem Upgradeprozess des Standardknotenpools upgegradet werden.

Danksagungen

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.