Het project bpftime ontwikkelt een implementatie van eBPF die draait in de gebruikersruimte

Het bpftime-project is gepresenteerd, dat een runtime en virtuele machine ontwikkelt voor het uitvoeren van eBPF-handlers in de gebruikersruimte. Bpftime maakt het mogelijk om eBPF-programma's voor tracing en proces-injectie volledig in de gebruikersruimte uit te voeren, waarbij gebruik wordt gemaakt van mogelijkheden zoals uprobe en programmatische interceptie van systeemaanroepen. Het wordt opgemerkt dat bpftime, door het uitsluiten van overbodige contextwisselingen, een tienvoudige verlaging van de overhead mogelijk maakt in vergelijking met het gebruik van de functionaliteit uprobe en uretprobe die door de Linux-kernel wordt aangeboden. Bovendien vereenvoudigt bpftime het debuggen aanzienlijk, is het potentieel toepasbaar op systemen zonder Linux-kernel en vereist het geen uitgebreide privileges die nodig zijn voor het laden van eBPF-applicaties in de kernel. De code van het project is geschreven in C/C++ en wordt verspreid onder de MIT-licentie.

De interceptie van systeemaanroepen en de integratie van uprobe-controles is gerealiseerd met behulp van de techniek van binaire herschrijving (binary rewriting), waarbij aanroepen naar systeemaanroepen, instappunten en lokale functies worden vervangen door sprongen naar debug-handlers via modificatie van de machinecode van de uitvoeringstoepassing, wat aanzienlijk efficiƫnter is dan het organiseren van intercepties met behulp van uprobe op het niveau van de Linux-kernel.

Operaties voor het vervangen of wijzigen van functies, het hechten van handlers (hook-overs) en filters, het omleiden, blokkeren of vervangen van parameters van systeemaanroepen, het intercepten van instap- en uitgangspunten van functies, evenals het substitueren van een handler op een willekeurige offset in de code worden ondersteund. Bpftime kan worden gehecht aan elk draaiend proces in het systeem zonder dat deze opnieuw moeten worden opgestart of opnieuw moeten worden opgebouwd. De substitutie van bpftime in processen kan worden uitgevoerd voor draaiende processen via ptrace en voor geladen processen via LD_PRELOAD.

Binnen bpftime wordt een runtime ontwikkeld die het mogelijk maakt om eBPF-programma's te hechten aan de traceerpunten van systeemaanroepen en uprobe; virtuele machine eBPF met JIT voor gescheiden uitvoering van eBPF-programma's op gebruikersniveau (voegt ondersteuning voor AOT-compilatie toe); een achtergrondproces voor interactie met de kern en het organiseren van compatibiliteit met de uprobe-subsystemen van de kern (bpftime ondersteunt de modus voor het laden van eBPF in gebruikersruimte vanuit de kern voor samenwerking met eBPF-programma's in de kern, gebruikt bijvoorbeeld voor het verwerken van kprobe of voor het instellen van netwerkfilters).

De virtuele machine eBPF is ontworpen als een plug-in bibliotheek en biedt een API die lijkt op ubpf, waardoor het mogelijk is om de functionaliteit van eBPF in andere projecten te integreren. Voor het samenvatten van gegevens uit meerdere processen ondersteunt het de creatie van gedeelde eBPF Maps, geplaatst in gedeeld geheugen. Samen met bpftime kunnen standaard eBPF-handlers worden gebruikt die zijn geschreven voor gebruik in de kern, en voor de bouw kunnen standaardtools op basis van clang en libbpf worden gebruikt.

Met bpftime in gebruikersruimte kunnen traceersystemen zoals BCC, bpftrace en Deepflow draaien. Bijvoorbeeld, het gebruik van het script sslsniff uit het BCC-framework voor het analyseren en opslaan van versleuteld verkeer in nginx is gedemonstreerd. In de uitgevoerde tests daalt de prestaties van nginx met 58% bij het uitvoeren van sslsniff aan de kernzijde en met 12,3% bij het verplaatsen van de handler naar gebruikersruimte.

Architectuur voor proces tracing met origineel eBPF in de kern:

Het project bpftime ontwikkelt een implementatie van eBPF die draait in de gebruikersruimte

Architectuur voor tracing in gebruikersruimte met gebruik van bpftime:

Het project bpftime ontwikkelt een implementatie van eBPF die draait in de gebruikersruimte

Hybride modus, waarin bpftime samenwerkt met eBPF in de kern, bijvoorbeeld voor het instellen van netwerkfilters of het verplaatsen van individuele handlers naar gebruikersruimte:

Het project bpftime ontwikkelt een implementatie van eBPF die draait in de gebruikersruimte

Toekomstige plannen omvatten: de mogelijkheid om uitzonderingen te injecteren (Fault Injection); hot patching voor het aanpassen van de logica of het verhelpen van fouten in binaire builds; het creƫren van een module voor Nginx die het mogelijk maakt om extensies te creƫren met eBPF-programma's (bijvoorbeeld voor dynamische routekeuze, caching, beveiligingsbeleid en load balancing); uitbreiding van de mogelijkheden van het FUSE-subsystem (bijvoorbeeld door eBPF-programma's te maken die extensies voor FS creƫren voor caching of toegangsbeheer).

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster