BPF? Was ist Berkeley Packet Filter?
Der Berkeley Packet Filter (BPF) oder Berkeley Filter kann für alle Unix-ähnlichen Betriebssysteme wie Linux nützlich sein. Die Hauptaufgabe dieser? Virtuellen Maschine für spezielle Zwecke? 1992 entwickelt, um Datenpakete aus Netzwerken zu filtern und sie in den Kernel des Betriebssystems zu integrieren. Die BPF bildet eine Sicherheitsschichtschnittstelle der Dateneinheit oder der Programme. Diese Sicherheitsschichten haben die Funktion, die zuverlässige Übertragung von Datenpaketen zu gewährleisten und den Zugriff auf diese Pakete zu regeln.
Wenn eines dieser Datenpakete den Empfänger erreicht, liest der BPF die Daten aus den Sicherheitsschichten des Pakets und sucht nach Fehlern. Auf diese Weise kann der Empfänger sie auflösen. Außerdem können Sie die Daten mit den Filterdefinitionen vergleichen und so ein Paket akzeptieren oder ablehnen , das nicht als relevant angesehen wird. Dies kann viel Rechenleistung sparen.
- Wie funktioniert der Berkeley Packet Filter?
- Berkeley Filter Vorteile
- Programmieren Sie Filter mit BPF
- Der eBPF-Sicherheitsprüfer
Wie funktioniert der Berkeley Packet Filter?
Zur Ausführung seiner Funktionen wurde der Berkeley Packet Filter als Maschinencode-Interpreter in eine virtuelle Maschine integriert. Infolgedessen führt die BPF Anweisungen in einem vordefinierten Format aus . Als Interpreter liest Berkeley Filter die Quelldateien, analysiert sie und führt ihre Anweisungen nacheinander aus. Übersetzt Anweisungen in Maschinencode, um eine direkte Ausführung zu ermöglichen.
Berkeley Filter verwendet Systemaufrufe ( SysCalls) , bei denen es sich um Aufrufe bestimmter Systemfunktionen handelt, die zur Verwendung bereit sind, um Anforderungen an den Betriebssystemkern zu stellen, der auch als Kernel bezeichnet wird. Dies ist dafür verantwortlich, die Zugriffsrechte zu überprüfen, bevor die Anforderung bestätigt oder abgelehnt wird. Unter den rund 330 Linux SysCalls befinden sich folgende:
- read – Leseberechtigung , mit der eine Datei gelesen werden kann
- Schreiben – Schreibberechtigung zum Schreiben in eine Datei
- open – Berechtigung zum Öffnen von Dateien oder Geräten
- close – Berechtigung für Dateien oder Geräte
- stat – Ruft den Status einer Datei ab
Da sich das BPF ständig weiterentwickelt, arbeitet es heute als universelle und virtuelle Maschine direkt im Kern des Betriebssystems, wo die gesamte Verarbeitung und Organisation von Daten stattfindet. Mit vielen neuen Funktionen wird der Filter als Extended BPF oder als Abkürzung eBPF bezeichnet. Damit können Sie jeden Zwischencode (Bytecode) sicher und zur Laufzeit ( Just-in-Time- Kompilierung ) direkt im operativen Kernel ausführen. Extended BPF funktioniert im operativen Kernel innerhalb einer Sandbox und ist daher geschützt. Diese Sandbox, auch als Sandbox bezeichnet , minimiert das Risiko, dass das System die Logik des Betriebssystemkerns negativ beeinflusst.
Der Berkeley-Filter kann sowohl im Kernelmodus (maximaler Zugriff auf Maschinenressourcen) als auch im Benutzermodus (eingeschränkter Zugriff auf Maschinenressourcen) betrieben werden.
Berkeley Filter Vorteile
Mit EBPF können Sie Datenpakete filtern , um zu verhindern, dass irrelevante Daten die Leistung Ihres PCs beeinträchtigen . Somit können unbrauchbare oder fehlerhafte Datensätze von Anfang an zurückgewiesen oder repariert werden. Darüber hinaus bietet Extended BPF eine erhöhte Sicherheit bei Systemaufrufen, indem Sie die Leistung einfach messen oder Systemaufrufe verfolgen können.
2007 wurde die Implementierung von BPF um die Zero Copy-Puffererweiterungen erweitert . Mit diesen Erweiterungen können Gerätetreiber empfangene Datenpakete direkt im Programm speichern, ohne die Daten zuerst kopieren zu müssen.
Programmieren Sie Filter mit BPF
Im Benutzermodus können jederzeit einzelne Filter für die Berkeley Filter-Oberfläche definiert werden. Zuvor wurden die entsprechenden Codes von Hand geschrieben und in einen BPF-Bytecode übersetzt. Dank des Clang LLVM Compilers können Bytecodes heutzutage direkt kompiliert werden.
Die operativen Kernelbibliotheken enthalten auch Beispielprogramme, die die Definition von eBPF-Programmen vereinfachen. Es gibt auch mehrere Hilfsfunktionen , die Ihre Aufgabe erleichtern.
Der eBPF-Sicherheitsprüfer
Die Implementierung der Systemaufrufe im Kernel birgt immer einige Risiken im Zusammenhang mit Sicherheit und Stabilität. Bevor ein eBPF-Systemaufruf geladen wird, muss er eine Reihe von Prüfungen bestehen:
- Zunächst prüft das System, ob der Systemaufruf beendet wurde und keine Schleifen enthält . Dies kann zu einem Kernelfehler führen. Das Programmsteuerungs-Flussdiagramm überprüft, ob keine nicht erreichbaren Anweisungen vorhanden sind, die später nicht geladen werden.
- Vor und nach der Ausführung einer Anweisung wird der Status des eBPF-Systemaufrufs überprüft . Dadurch wird sichergestellt, dass der erweiterte BPF nur in den zulässigen Bereichen arbeitet und nicht auf Daten außerhalb der Sandbox zugreift. Hierzu ist es nicht erforderlich, jede Route einzeln zu überprüfen. Normalerweise reicht es aus, einige davon zu überprüfen.
- Schließlich wird auch der Typ von SysCall konfiguriert . Dieser Schritt ist wichtig, um einzuschränken, welche Kernelfunktionen aufgerufen werden können und auf welche Datenstrukturen von SysCall aus zugegriffen werden kann. Auf diese Weise können Sie Systemaufrufe verwenden, die direkt auf Netzwerkpakete zugreifen.
Die SYSCALL-Typen haben folgende vier Funktionen: Wo können Sie das Programm anhängen, auf welche Funktionen kann der Kernel zugreifen, ob direkt auf das Paketdatennetzwerk zugegriffen wird oder nicht, und auf welchen Objekttyp Übergibt mit Priorität einen Systemaufruf.
Derzeit werden die folgenden eBPF-SysCall-Typen vom Kernel unterstützt:
- BPF_PROG_TYPE_SOCKET_FILTER
- BPF_PROG_TYPE_KPROBE
- BPF_PROG_TYPE_SCHED_CLS
- BPF_PROG_TYPE_SCHED_ACT
- BPF_PROG_TYPE_TRACEPOINT
- BPF_PROG_TYPE_XDP
- BPF_PROG_TYPE_PERF_EVENT
- BPF_PROG_TYPE_CGROUP_SKB
- BPF_PROG_TYPE_CGROUP_SOCK
- BPF_PROG_TYPE_LWT_ *
- BPF_PROG_TYPE_SOCK_OPS
- BPF_PROG_TYPE_SK_SKB
- BPF_PROG_CGROUP_DEVICE