eBPF-Linux-Tutorial

eBPF steht für Extended Berkeley Packet Filter. Wenn Sie mit Linux arbeiten und mit dem Kernel interagieren möchten, benötigen Sie ein Framework wie eBPF, das Ihnen dabei hilft. Das eBPF ist ein Framework, das den Entwicklern helfen soll, die Low-Level-Kernel-Programme ungehindert auszuführen.

Mit eBPF können Sie die Software mit minimalem Konfigurationsaufwand schnell laden und ausführen. Wenn Sie neu bei eBPF sind und mit Kernel-Programmen arbeiten, hilft Ihnen dieses Handbuch dabei, eBPF und seine Verwendung zu verstehen. Wir werden einige Beispiele für das Einfügen des Codes in den Kernel mithilfe von eBPF vorstellen.
Lass uns anfangen!

Was ist eBPF?

eBPF ist eine Abkürzung für Extended Berkeley Packer Filter. Es fungiert als Schnittstelle im Linux-Kernel, die es den Entwicklern ermöglicht, den Code einzuschleusen, um mit dem Kernel zu interagieren, z. B. sein Verhalten zu ändern oder ihn zu beobachten.

eBPF wurde zunächst als Paket-Tracer veröffentlicht, später jedoch im Jahr 2014 erweitert und in den Linux-Kernel integriert. Obwohl es hauptsächlich bei der Verfolgung von Aufgaben hilft, verfügt es über zahlreiche Funktionen, darunter die Möglichkeit, dass Benutzerraumanwendungen die Programme im Kernelraum ausführen.

Der Speicher eines Computers verfügt über den User-Space und den Kernel-Space. Die Benutzerprogramme werden im Benutzerbereich ausgeführt, während der Kernelbereich für die Ausführung der Treiber und des Kernels reserviert ist. Die Benutzerprogramme können nicht im Kernelraum ausgeführt werden. Damit soll sichergestellt werden, dass unsichere Programme oder andere Schwachstellen nicht in den Kernel eindringen und ihn zum Absturz bringen können.

eBPF bietet Ihnen jedoch eine Möglichkeit, die Benutzerprogramme im Kernel-Bereich als Bytecode auszuführen. Da Bytecodes schwer zu schreiben sind, benötigen Sie Entwicklungsframeworks wie BCC oder Bpftrace, um die eBPF-Programme zu schreiben. Diese Frameworks sind Open Source und können von jedem genutzt werden. Sie können die BCC- oder Bpftrace-Frameworks installieren und eBPF-Programme erstellen.

BCC installieren

Der BCC ist eine Sammlung von BPF-Compiler-Sammlungstools, die beim Schreiben und Ausführen der eBPF-Programme helfen.

Beginnen Sie mit der Aktualisierung Ihres apt-Repositorys:

sudo apt-get update;

Installieren Sie die BPF-Compiler-Sammlungstools mit dem folgenden Befehl:

sudo apt-get install bpfcc-tools linux-headers-$(uname -r);

Die passenden BCC-Tools für Ihre Kernel-Architektur werden abgerufen und installiert. Drücken Sie „y“, um die Installation zu bestätigen.

Sie können überprüfen, ob BCC installiert ist und funktioniert, indem Sie eines seiner Tools ausführen, um die PID jedes Befehls abzurufen, den Sie auf dem Terminal ausführen.

Öffnen Sie zwei Terminalfenster. Führen Sie den folgenden bpfcc-Befehl auf dem ersten Terminal aus:

sudo /usr/sbin/bashreadline-bpfcc;

Führen Sie auf dem zweiten Terminal einige Befehle wie im folgenden Bild aus:

Wenn BCC und eBPF auf dem ersten Terminal arbeiten, sehen Sie im zweiten Fenster die PIDs der Befehle, die Sie eingegeben haben, und die Zeitstempel.

Ihr BCC ist installiert. Sie können nun die verschiedenen eBPF-Programme ausführen, um den Code für verschiedene Zwecke in den Kernel einzuschleusen.

Bpftrace installieren

Neben der Verwendung des BCC-Frameworks können Sie auch das Bpftrace-Framework verwenden. Es ist ideal für verschiedene Aufgaben und bietet ein Befehlszeilenprogramm, mit dem Benutzer die eBPF-Befehle direkt ausführen können.

Installieren Sie es mit dem folgenden Befehl:

sudo apt install bpftrace;

Wenn Bpftrace installiert ist, können Sie Ihre eBPF-Programme bereitstellen. Sehen wir uns einige Beispiele für die Bereitstellung verschiedener Programme mithilfe des Befehlszeilendienstprogramms an.

Über das Bpftrace GitHub-Repo können Sie die verschiedenen „Einzeiler“-Programme bereitstellen. Sie können beispielsweise den Festplattenverbrauch durch verschiedene Prozesse auflisten, indem Sie das folgende Programm ausführen:

bpftrace -e ‚tracepoint:block:block_rq_issue { printf(„%s %d\n“, comm, args->bytes); }‘

Anhand der Ausgabe werden Sie feststellen, dass in den Spalten der Prozessname, die Festplattengröße und die Festplattengröße angezeigt werden.

Die Ausgabe zeigt alle Prozesse in Ihrem Kernel an.

Wenn Sie auch die Anzahl der Systemaufrufe nach Prozess überprüfen möchten, können Sie das Einzeilerprogramm Bpftrace mit dem folgenden Befehl verwenden:

sudo bpftrace -e ‚tracepoint:raw_syscalls:sys_enter {@[comm] = count(); }‘

Die Systemaufrufe werden nach Drücken von angezeigt Strg + C den Befehl töten. Die Ausgabe zeigt den Prozessnamen an und ein Bericht, der die Karte enthält, wird wie ein assoziatives Array angezeigt.

count() gibt die Häufigkeit an, mit der das System die einzelnen Prozesse aufruft. Wenn Sie alle Sonden auflisten möchten, können Sie sie mit dem Befehl bpftrace -l auflisten, wie im Folgenden dargestellt:

sudo bpftrace -l ‚tracepoint:syscalls:sys_enter_*‘

So arbeiten Sie mit dem eBPF-Programm unter Linux.

Abschluss

eBPF ist eine Möglichkeit, den Code in den Linux-Kernel einzufügen. Sie können Frameworks wie BCC und Bpftrace verwenden, um die eBPF-Programme zu erstellen und auszuführen. In diesem Beitrag werden eBPF und das Framework zum Schreiben und Ausführen der eBPF-Programme vorgestellt. Darüber hinaus haben wir einige Beispiele für die eBPF-Programme vorgestellt, die Sie ausführen können. Das ist es!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen