eBPF das neue Wunderkind der Cloud Network Security

Um das Akronym gleich vorweg zu nehmen: eBPF steht für Extended-Berkeley-Paketfilter. Der Name ist nicht sehr hilfreich, um die wahre Leistungsfähigkeit von eBPF zu vermitteln, da die „erweiterten“ Versionen so viel mehr ermöglichen als Paketfilterung, auch bekannt unter BPF. In diesem Blog zeige ich auf, welche Vorteile eBPF gerade im Bereich der Cloud Network Security hat, und Sie werden sehen, dass eBPF als Technologie viel mehr umfasst, als sein Akronym vermuten lässt.

Der Linux Kernel

Um die Möglichkeiten von eBPF zu verstehen, muss klar sein, welche Rolle der Kernel in einem Computer-Betriebssystem hat. In gewisser Weise können Sie sich den Kernel vorstellen wie einen unsichtbaren Chef, der dafür sorgt, dass alle Aufgaben im Computer reibungslos ablaufen, damit Sie im Internet surfen und all die anderen coolen Dinge machen können. Technischer ausgedrückt dient er als Schnittstelle der Software (User Space / Applikationen) und der Hardware (CPU, Memory, Devices) auf einem Computer-System. Weiter steuert er alle Prozesse, die auf einem Betriebssystem laufen.

Linux Kernel
Kernel Structure (self-creation by ChatGPT)

 

 

 

 

 

 

 

Changing the Kernel is hard!

Ein Kernel besteht aus ca. 30 Millionen Zeilen-Codes. Eine Code-Änderung eines Linux-Kernels muss von der Community bewilligt werden. Zudem ist nicht garantiert, ob der geänderte Kernel ins Betriebssystem aufgenommen wird. Das sehen wir auch daran, dass z.B. der Red Hat Linux Kernel 5.14 des neusten Releases 9.3 vom Jahr 2021 stammt.

Eine Änderung am Kernel dauert sehr lange und ist schwierig zu realisieren.
Und hier kommt eBPF ins Spiel.

Adding features to the kernel
Adding features to the kernel (cartoon by Vadim Shchekoldin)

Was ist eBPF?

eBPF ist ein Framework, dass es ermöglicht, benutzerdefinierte Programme innerhalb des Kernels des Betriebssystems zu laden und auszuführen. Somit kann die Art und Weise, wie sich der Kernel verhält, erweitert bzw. verändert werden. Die Fähigkeit, das Verhalten des Kernels dynamisch zu ändern, ist ausserordentlich nützlich. Denn bisher musste, wenn das Verhalten einer Anwendung überwacht werden sollte – da Änderungen am Kernel nicht möglich sind -, die Anwendung durch zusätzlichen Code dazu gebracht werden, ein entsprechendes Logfile zu schreiben.

eBPF erlaubt es uns, benutzerdefinierte Informationen der gewünschten Applikation zu bekommen ohne deren Code zu ändern. Da durch eBPF die Informationen direkt vom Kernel abgezogen werden können.

Manipulationen am Kernel – ist das sicher?

Diese Frage ist berechtigt, da wir wissen, dass ein «Kernel-Crash» meistens verheerende Auswirkungen auf ein Computer-System hat. Der Grund, dass die Frage im Titel mit ja beantwortet werden kann, ist der eBPF-Verifier. Er ist so konzipiert, dass er Programme nur laden lässt, wenn das eBPF-Codefragment nicht vulnerabel ist und immer sicher beendet werden kann. So prüft z.B. der Verifier eines eBPF-Programmes, welches auf Memory zugreifen möchte, ob das Memory überhaupt verfügbar ist, bevor das Programm startet.

eBPF-Programme

eBPF bietet die Flexibilität, ganze Programme zu schreiben und dynamisch in den Kernel zu laden bzw. zu entfernen. Natürlich ist das Programmieren von eBPF komplex, da es in Bytecode geschrieben wird. Die überwiegende Mehrheit des bisher veröffentlichten eBPF-Codes ist in C, sinnvollerweise der Sprache des Linux-Kernels, geschrieben. Ich nehme an, dass die meisten von uns nicht eBPF-Programme selber in C schreiben. Jedoch gibt es viele Projekte, Start-Ups, die sich dem annehmen und wertvolle Tools kreieren und zur Verfügung stellen.

Adding kernel features with eBPF
Adding kernel features with eBPF (cartoon by Vadim Shchekoldin)

Cloud Network Security mit eBPF

Cloud-Applikationen, die containerisiert auf Kubernetes Clustern laufen, sind mit herkömmlichen Netzwerk-Security-Komponenten wie z.B. einer Firewall nicht mehr zufriedenstellend zu überwachen. Das ist ein grosses Problem, denn ohne Visibilität im Kubernetes Cluster ist es nicht möglich für die Sicherheit einzelner Applikationen zu sorgen. Da diese Applikationen auf Container laufen, benutzen sie denselben Kernel, auf welchen wir eBPF-Programme ansetzen können, um folgende Vorteile zu gewinnen:

  • Netzwerküberwachung:
    eBPF ermöglicht die Echtzeitüberwachung des Netzwerkverkehrs in der Cloud. eBPF-Programme helfen mit den folgenden Use-Cases Transparenz zu schaffen
  • Netzwerk Performance:
    eBPF gibt uns die Möglichkeit, Netzwerkpakete innerhalb des Kernels zu behandeln und kostspielige Übergänge zum und vom Userspace zu vermeiden.
  • Firewall-Rules:
    Durch die Implementierung von Firewall-Regeln, sogenannten Network Policies, kann die Cloud Security verbessert werden.
  • Container- und Orchestrierungsplattformen:
    In Cloud-Umgebungen, die Container und Orchestrierung verwenden, kann eBPF für die Netzwerksicherheit in Containernetzen eingesetzt werden.

    Es ermöglicht die Kontrolle und Überwachung des Datenverkehrs zwischen Containern.
  • Microsegmentation:
    eBPF kann bei der Implementierung von Microsegmentation in Cloud-Infrastrukturen helfen, indem es den Datenverkehr zwischen verschiedenen Anwendungen und Diensten steuert und überwacht.
  • DDoS-Schutz / Anomalie-Erkennung
    eBPF kann verwendet werden, um den eingehenden Netzwerkverkehr auf Anomalien zu überprüfen und DDoS-Angriffe zu erkennen und um anomales Verhalten zu identifizieren.

 

Fazit:
Um Cloud Network Security bieten zu können, braucht es Observability. eBPF hilft uns, die nötige Transparenz in komplexen Cloud-Strukturen zu erlangen.

Weiterführende Links zum Thema:

 

Dieser Blog-Beitrag wurde mit Unterstützung des Sprachmodells ChatGPT erstellt.

Beitrag teilen

Ueli Wolfisberg

Ueli Wolfisberg arbeitet als Cloud Network Security Engineer bei der Zürcher Kantonalbank und bloggt aus dem Unterricht des CAS Digital Architect.

Alle Beiträge ansehen von Ueli Wolfisberg →

Schreibe einen Kommentar