Extended Berkeley Packet Filter (eBPF) is een krachtige technologie waarmee ontwikkelaars sandbox-programma's in de Linux-kernel kunnen uitvoeren zonder de kernelbroncode te wijzigen. In deze handleiding worden de toepassingen van eBPF op het gebied van netwerken, beveiliging en prestatiebewaking besproken.
Lees meer over de voordelen van eBPF en hoe het de observeerbaarheid en controle in moderne systemen verbetert. Inzicht in eBPF is essentieel om de mogelijkheden ervan op het gebied van netwerkbeveiliging te benutten.

Een korte geschiedenis van BPF's
Berkeley Packet Filters (BPF's) werden in 1992 ontwikkeld om netwerkverkeer te analyseren en te filteren. In die tijd stond het internet nog in de kinderschoenen en waren ingenieurs op zoek naar manieren om meer inzicht te krijgen in het verkeer dat door hun netwerken stroomde. BPF werd ontworpen om dit te kunnen doen zonder de code van alle servers in een organisatie te hoeven wijzigen of de kernelcode te hoeven forken en bij te werken met instrumentatie-instructies.
Toegepast op netwerkanalyse werden BPF's gebruikt om alle inkomende en uitgaande TCP-communicatie op een server te loggen. Hoewel deze aanpak minder werk vereiste dan het wijzigen van de code van alle servers, kostte het nog steeds veel moeite om de code te bouwen en op alle servers in de organisatie te implementeren.
BPF werd ook gebruikt voor het filteren van netwerkverkeer. Het kon echter alleen pakketten accepteren met een ondertekende hash in de header. Wanneer een inkomend pakket arriveerde, werd het BPF-programma gestart en controleerde het de header om te zien of de verwachte waarde aanwezig was. Afhankelijk van de resultaten werd het pakket geaccepteerd of geweigerd.
Tegenwoordig wordt BPF voor verschillende doeleinden gebruikt, niet alleen voor het analyseren en filteren van netwerkverkeer. Het is uitgebreid met meer functies en ondersteuning voor 64 bytes, waardoor meer informatie kan worden verzameld en opgeslagen.
Later, met de release van kernel 3.18, werden Extended Berkeley Packet Filters (eBPF's) gemaakt om bijna alle kernelgebeurtenissen te registreren. Als uitbreiding van de oorspronkelijke BPF's kunnen eBPF's meer gegevens opslaan en uitwisselen en voor verschillende doeleinden worden gebruikt, waaronder het monitoren, traceren en optimaliseren van kernel-functies.
De introductie van eBPF's
Historisch gezien hebben ontwikkelaars altijd binnen besturingssystemen gewerkt om netwerkfunctionaliteit te implementeren en te observeren, waarbij ze gebruik maakten van de bevoorrechte mogelijkheid van de kernel om het hele systeem te monitoren en te controleren. De beperking van besturingssysteemkernels ligt in hun gebrek aan evolutie – innovatie op besturingssysteemniveau is minder dan buiten het besturingssysteem. Bovendien moesten ontwikkelaars die modules toevoegden of de broncode van de kernel aanpasten, zich door geabstraheerde lagen en complexe infrastructuur worstelen die moeilijk te debuggen zijn. Toen eBFP in 2014 voor het eerst werd geïntroduceerd, pakte het al deze problemen aan.
Omdat eBPF's werken door sandboxed programma's binnen het besturingssysteem te laten draaien, konden ontwikkelaars plotseling nieuwe mogelijkheden aan het besturingssysteem toevoegen tijdens runtime. Het is een soort virtuele machine die binnen de kernel draait en een sandbox-omgeving biedt voor het uitvoeren van bytecode-programma's. De eBPF-virtuele machine is ontworpen om eenvoudig, efficiënt en veilig te zijn, met een beperkte set instructies die alleen toegang hebben tot een beperkte set bronnen.
Sinds de introductie is eBPF geëvolueerd en wordt het gebruikt voor een breed scala aan use cases. eBPF heeft innovaties mogelijk gemaakt op het gebied van hoogwaardige netwerken en load balancing in cloud native omgevingen, heeft beveiligingsleiders voorzien van gedetailleerde beveiligingsgegevens tegen lage overheadkosten en heeft organisaties ondersteund bij hun preventieve beveiligingsinspanningen.
Hoe eBFP werkt
Op hoog niveau werkt eBPF door ontwikkelaars in staat te stellen kleine programma's te schrijven, zogenaamde eBPF-programma's, die aan verschillende punten in de kernel kunnen worden gekoppeld om gegevens te onderscheppen en te verwerken. De programma's worden meestal geschreven in een subset van de programmeertaal C en vervolgens gecompileerd tot eBPF-bytecode, die vervolgens in de kernel wordt geladen en uitgevoerd. In tegenstelling tot traditionele kernelmodules zijn eBPF-programma's eenvoudig te implementeren en te beheren, omdat ze geen wijzigingen in de kernelbroncode of hercompilatie vereisen.
Een eBPF-programma volgt een specifieke reeks stappen wanneer het wordt uitgevoerd binnen de Linux-kernel:
- Zodra het eBPF-programma is geschreven, wordt het gecompileerd naar eBPF-bytecode. De resulterende bytecode is een laag niveau, platformonafhankelijke weergave van het eBPF-programma dat binnen de kernel kan worden uitgevoerd.
- Vervolgens wordt de eBPF-bytecode in de kernel geladen. Het laadproces omvat het controleren van de bytecode op veiligheid en compatibiliteit met de actieve kernel, en het toewijzen van de benodigde middelen om het eBPF-programma uit te voeren.
- Zodra het eBPF-programma is geladen, kan het worden gekoppeld aan een specifieke kernelgebeurtenis, zoals een netwerkpakket of een systeemaanroep (syscall).
- Wanneer de gekoppelde kernelgebeurtenis plaatsvindt, wordt het eBPF-programma automatisch door de kernel uitgevoerd. Het eBPF-programma kan gegevens die aan de gebeurtenis zijn gekoppeld, openen en wijzigen met behulp van standaard C-programmeerconstructies, zoals lussen en voorwaardelijke instructies.
- Nadat het eBPF-programma de gegevens heeft verwerkt, kan het optioneel een resultaat terugsturen naar de kernel. Een eBPF-programma dat is gekoppeld aan een netwerkinterface kan bijvoorbeeld een pakket verwijderen als het aan bepaalde criteria voldoet, of een eBPF-programma dat is gekoppeld aan een systeemaanroep kan de argumenten die aan de aanroep worden doorgegeven wijzigen voordat deze wordt uitgevoerd.
- Wanneer het eBPF-programma niet langer nodig is, kan het uit de kernel worden verwijderd, waardoor de aan het eBPF-programma toegewezen bronnen worden vrijgemaakt en ervoor wordt gezorgd dat het niet langer wordt uitgevoerd wanneer de gekoppelde kernelgebeurtenis plaatsvindt.
Een van de belangrijkste kenmerken van eBPF is de veiligheidsgarantie. eBPF-programma's worden uitgevoerd in een beperkte virtuele machine binnen de kernel en hebben geen directe toegang tot kernelgegevensstructuren, kunnen deze niet wijzigen en kunnen geen crashes of beveiligingslekken veroorzaken. eBPF-programma's worden bovendien onderworpen aan verschillende runtime-controles, zoals grenscontroles en typecontroles, om ervoor te zorgen dat ze de geheugenveiligheid of andere beveiligingseigenschappen niet schenden.
De voordelen van eBPF verkennen
Tegenwoordig gebruiken ontwikkelaars eBPF om de beveiliging, prestaties en stabiliteit van hun systeem te verbeteren. eBPF is een zeer populaire technologie geworden in het Linux-ecosysteem vanwege de vele voordelen.
Ten eerste gebruiken organisaties eBPF om snelheid en prestaties te garanderen. Aangezien eBPF-programma's binnen de Linux-kernel worden uitgevoerd, werken ze met minimale overhead in vergelijking met traditionele gebruikersruimteprogramma's. In gevallen waarin lage latentie en hoge prestaties van cruciaal belang zijn, is eBPF de ideale keuze om de taak uit te voeren.
eBPF-programma's stellen technische teams ook in staat om flexibel te blijven. Omdat de programma's kunnen worden gekoppeld aan een breed scala aan kernelgebeurtenissen, waaronder netwerkpakketten, syscalls en kernel-functies, kunnen ze worden gebruikt voor een breed scala aan use cases, waaronder netwerkmonitoring, beveiligingsanalyse en prestatieprofilering. eBPF-programma's kunnen dynamisch worden geladen en verwijderd uit de kernel, wat betekent dat ze kunnen worden gebruikt voor kortstondige taken zoals debugging of troubleshooting.
Ontwikkelaars die eBPF gebruiken, kunnen nieuwe functionaliteit schrijven die voorheen niet mogelijk was vanwege technische beperkingen of beveiligingsproblemen. Met eBPF kunnen ze applicaties schrijven die gebruikmaken van hardwareversnelling op embedded apparaten zoals Raspberry Pi of andere ARM-gebaseerde systemen.
Omdat eBPF just-in-time (JIT) wordt gecompileerd in plaats van vooraf te worden gecompileerd zoals traditionele softwarepakketten, kunnen ontwikkelaars eBPF gebruiken om hun applicaties of services te maken zonder in te boeten aan prestaties of schaalbaarheid. De technologie vereist minimale installatietijd in vergelijking met andere oplossingen, zodat ontwikkelaars hun applicaties snel en met minder moeite in productieomgevingen kunnen implementeren.
eBPF-gebruiksscenario's
eBPF wordt het meest gebruikt voor vier belangrijke gebruiksscenario's: beveiliging, netwerken, tracering en observeerbaarheid.
- Beveiliging – Bij beveiliging behandelen systemen doorgaans onafhankelijk aspecten van syscall-filtering. Met syscall-filters kunnen applicaties precies definiëren welke syscalls ze mogen uitvoeren. eBPF ondersteunt een betere systeembeveiliging door alle aspecten inzichtelijk te maken. Door alle syscalls te interpreteren en een overzicht op pakket- en socketniveau te bieden van alle netwerkactiviteiten, beschikken beveiligingsmanagers over de context die ze nodig hebben om hun controle over systemen te verbeteren.
- Netwerken – eBPF ondersteunt pakketverwerkingsvereisten dankzij zijn efficiëntie en programmeerbaarheid. Dit doet het door extra protocolparsers en programma's voor doorstuurlogica toe te voegen om aan nieuwe vereisten te voldoen zonder de pakketverwerkingscontext van de Linux-kernel te hoeven verlaten.
- Traceren – Ontwikkelaars koppelen eBPF-programma's aan traceerpunten en aan probe-punten van de kernel en gebruikersapplicaties om inzicht te krijgen in het runtime-gedrag van alle systeemapplicaties. eBPF biedt context voor zowel systemen als applicaties; de combinatie hiervan geeft technische teams krachtige inzichten die ze kunnen gebruiken om prestatieproblemen op te lossen.
- Observeerbaarheid – eBPF wordt gebruikt om in-kernel aggregatie van systeemmetrics te verzamelen die technische teams kunnen aanpassen op basis van een breed scala aan bronnen. In plaats van te moeten vertrouwen op tijdrovende en omvangrijke exports van steekproefgegevens, vergroot eBPF de diepgang van de zichtbaarheid door alleen de absoluut noodzakelijke gegevens te verzamelen, waardoor organisaties bespaard blijven op systeemoverheadkosten.
Hoe eBPF moderne cloudbeveiligingsmaatregelen versterkt
Een Cloud Workload Protection Platform (CWPP)-agent is een essentieel onderdeel bij het opzetten van een robuuste cloudbeveiligingsstrategie. Het biedt realtime bescherming tegen runtime-bedreigingen zoals ransomware en zero-day aanvallen, waardoor het zich onderscheidt van andere beveiligingsmaatregelen. eBPF verbetert de prestaties en schaalbaarheid aanzienlijk voor cloudsystemen die steeds vaker worden toegepast door organisaties over de hele wereld.
CWPP agents registreren workload telemetrie en leveren waardevolle informatie voor forensische analyse. Side-scanningoplossingen, die de opslagvolumes van cloudcomputinginstanties inspecteren, kunnen daarentegen slechts één keer per dag worden uitgevoerd en bieden geen zichtbaarheid op procesniveau, wat leidt tot beperkingen op het gebied van realtime bescherming en nauwkeurigheid. Het gebruik van het eBPF-framework binnen een CWPP-programma biedt verschillende voordelen, waaronder de volgende:
- Operationele stabiliteit – Het uitvoeren van code in de kernel is een groot risico, omdat dit de kans vergroot dat er kwetsbaarheden in de kernel worden geïntroduceerd en het hele systeem wordt gedestabiliseerd. Het eBPF-framework bevat veiligheidscontroles, zoals de JIT-compiler, om te voorkomen dat de kernel crasht.
- Systeemprestaties – Gegevensoverdracht tussen de kernel en de gebruikersruimte verloopt doorgaans traag en veroorzaakt prestatieoverhead. Met het eBPF-framework kunnen teams het gedrag van de kernel observeren en analyses uitvoeren binnen de kernel voordat een subset van de resultaten wordt teruggestuurd naar de gebruikersruimte, waardoor de benodigde overhead wordt verlaagd.
- Bedrijfsmobiliteit – Door vanuit de gebruikersruimte te werken, biedt eBPF meer flexibiliteit en wendbaarheid voor DevOps-teams en de leverancier. DevOps kan zich richten op innovatie zonder zich zorgen te maken over kernelafhankelijkheidsproblemen, en de leverancier kan zich concentreren op innovatie in plaats van onderhoud. Dit leidt tot een continue cyclus van innovatie en een verbeterde klantervaring.
Singularity™-platform
Verhoog uw beveiliging met realtime detectie, reactiesnelheid en volledig overzicht van uw gehele digitale omgeving.
Vraag een demo aanSamenvatting
eBPF is in korte tijd uitgegroeid tot een belangrijke technologie voor een breed scala aan toepassingen, van netwerken en beveiliging tot observatie en prestatieanalyse. De flexibiliteit en veiligheidsgaranties maken het een krachtig hulpmiddel voor het aanpassen en uitbreiden van de Linux-kernel, en de populariteit en acceptatie blijven groeien naarmate er meer gebruiksscenario's worden ontdekt en ontwikkeld.
Toonaangevende organisaties blijven investeren in oplossingen zoals SentinelOne's CWPP, Singularity Cloud Workload Security, die de voordelen van het eBPF-framework hebben geïntegreerd. Naarmate digitale omgevingen steeds dynamischer en complexer worden en grote aantallen workloads op gedeelde infrastructuur worden uitgevoerd, kan eBPF helpen de zichtbaarheid en controle te verbeteren, waardoor beveiligingsteams workloads effectiever kunnen monitoren en beschermen.
Neem contact met ons op om te ontdekken hoe de beveiligingsoplossingen van SentinelOne de voordelen van eBPF benutten om de prestaties en efficiëntie in diverse omgevingen te verbeteren. Boek vandaag nog een demo met onze beveiligingsexperts.
"Uitgebreide veelgestelde vragen over Berkeley Packet Filter
eBPF is een veilige, in-kernel virtuele machine waarmee u aangepaste bytecode in de Linux-kernel kunt laden zonder de broncode te wijzigen of modules toe te voegen. Voorafgaand aan de uitvoering controleert de kernelverificator eBPF-programma's op veiligheid (geen onbeperkte lussen, geen geheugentoegang buiten de grenzen) en compileert ze vervolgens met JIT voor een bijna native snelheid. Het is geëvolueerd van klassieke BPF om niet alleen pakketfiltering te ondersteunen, maar ook tracering, observeerbaarheid en meer.
eBPF ondersteunt toepassingen zoals netwerken, tracering en het definiëren van gebruikerstracepunten. Het ondersteunt:
- Hoogwaardige pakketverwerking (bijv. XDP)
- Diepgaande observatie en profilering van systeemaanroepen en applicatiegedrag
- Realtime beveiligingsmonitoring en beleidsafdwinging
- Zichtbaarheid op containerniveau en netwerkbeleid in Kubernetes
- Aangepaste in-kernel logica voor load balancing, aggregatie van statistieken en filtering.
Door in kernelcontext te draaien, biedt eBPF realtime inzicht in systeemaanroepen, netwerkstromen en procesgebeurtenissen met minimale overhead en zonder kernelherstarts. De sandbox voorkomt onstabiele code, terwijl maps gebruikersruimte-tools in staat stellen telemetrie op te halen.
Deze combinatie detecteert bedreigingen zoals laterale bewegingen of ongeoorloofde bestandstoegang in een vroeg stadium en kan onmiddellijk blokkeer- of verwijderingsbeleid afdwingen binnen het gebeurtenissenpad van de kernel.
eBPF is niet uitsluitend voor beveiligingsdoeleinden ontwikkeld en kent daarom enkele nadelen: geheugen- en instructiebeperkingen kunnen leiden tot verloren gegane gebeurtenissen; er is geen ingebouwde anti-sabotage voor geladen programma's; en sommige "helper"-functies (bijv. bpf_probe_write_user) kunnen worden misbruikt voor privilege-escalatie.
Oudere kernels beschikken mogelijk niet over verificatiecorrecties, waardoor verkeerd geconfigureerde of kwaadaardige eBPF een rootkitvector kan worden als de machtigingen niet streng worden gecontroleerd.
Veelvoorkomende eBPF-implementaties zijn onder meer:
- Netwerkpakketfiltering en load balancing
- Tracering van applicaties en kernels voor prestatieprofilering
- Inbraakdetectie en -preventie
- Containerbeveiliging en microsegmentatie in Kubernetes
- Aangepaste metrische gegevensverzameling en aggregatie in de kernel voor observatieplatforms.
Controleer voordat u eBPF-oplossingen implementeert of uw kernelversie de vereiste hooks ondersteunt en of de verificatieprogramma's over beveiligingspatches beschikken. Wijs voldoende CPU- en geheugenruimte toe om te voorkomen dat gebeurtenissen verloren gaan. Definieer strikte capaciteitslimieten (bijvoorbeeld door niet-bevoorrechte BPF uit te schakelen), controleer eBPF-modules van derden om risico's in de toeleveringsketen te voorkomen en voer nieuwe beleidsregels uit in de auditmodus om de impact te meten voordat u blokkades of beëindigingen afdwingt.
SentinelOne gebruikt de eBFP-architectuur om de bescherming van uw cloudworkload stabieler en betrouwbaarder te maken. Het biedt realtime detectie van en reactie op bedreigingen, diepgaand inzicht in activiteiten op kernelniveau en kan runtime-bedreigingen zoals zero-days, ransomware en andere kwaadaardige processen bestrijden. U kunt naadloze updates voor host-OS-images krijgen zonder dat u zich zorgen hoeft te maken over compatibiliteit.
SentinelOne Singularity XDR kan geavanceerde analyses uitvoeren en forensisch onderzoek doen. Het is geschikt voor verschillende cloudomgevingen, zoals AWS, Azure, Google Cloud en private clouds. Bovendien ondersteunt het een breed scala aan Linux-distributies, container-runtimes, Windows-servers en Kubernetes.