BPF, o Berkeley Packet Filter, è un meccanismo del kernel Linux per eseguire piccoli programmi vincolati all'interno del kernel. Viene usato per il filtraggio dei pacchetti, il tracing, il monitoraggio e il sandboxing. Le versioni moderne di Linux spesso utilizzano eBPF, una versione più flessibile, e molte distribuzioni si affidano alla compilazione JIT, così che il bytecode BPF venga tradotto in istruzioni native della CPU per velocità.
In ambito di sicurezza, BPF è importante perché si colloca vicino a percorsi sensibili del kernel e può influenzare quali dati vengono ispezionati, consentiti o bloccati. Il suo livello JIT lo rende inoltre rilevante per gli attacchi microarchitetturali: se il codice compilato viene riutilizzato o sostituito, lo stato obsoleto della predizione dei rami può talvolta essere sfruttato per indirizzare l'esecuzione speculativa, motivo per cui l'hardening di BPF e le mitigazioni di Spectre-v2 sono importanti. I difensori usano BPF per la visibilità e l'applicazione delle policy, mentre gli aggressori possono prenderlo di mira come superficie di esecuzione o come parte di una catena di side-channel.


