El filtro de paquetes Berkeley extendido (eBPF) es una potente tecnología que permite a los desarrolladores ejecutar programas en entornos aislados en el kernel de Linux sin cambiar el código fuente del kernel. Esta guía explora las aplicaciones del eBPF en redes, seguridad y supervisión del rendimiento.
Descubra las ventajas de eBPF y cómo mejora la observabilidad y el control en los sistemas modernos. Comprender eBPF es esencial para aprovechar sus capacidades en la seguridad de las redes.
Breve historia de los BPF
Los filtros de paquetes de Berkeley (BPF) se crearon en 1992 con el fin de analizar y filtrar el tráfico de red. En aquel momento, Internet aún se encontraba en sus primeras etapas y los ingenieros estaban interesados en encontrar formas de comprender mejor el tráfico que fluía a través de sus redes. Los BPF se diseñaron para proporcionar una forma de hacerlo sin tener que modificar el código de todos los servidores de una organización ni bifurcar el código del núcleo y actualizarlo con instrucciones de instrumentación.
Aplicados al análisis de redes, los BPF se utilizaban para registrar todas las comunicaciones TCP entrantes y salientes en un servidor. Aunque este enfoque requería menos trabajo que modificar el código de todos los servidores, seguía siendo necesario un esfuerzo considerable para crear el código e implementarlo en todos los servidores de la organización.
El BPF también se utilizaba para filtrar el tráfico de red. Sin embargo, solo podía aceptar paquetes con un hash firmado en el encabezado. Cuando llegaba un paquete entrante, se iniciaba el programa BPF y comprobaba el encabezado para ver si el valor esperado estaba presente. En función de los resultados, el paquete se aceptaba o se descartaba.
Hoy en día, BPF se utiliza para diversos fines, más allá del simple análisis y filtrado del tráfico de red. Se ha ampliado para ofrecer más funciones y compatibilidad con 64 bytes, lo que permite recopilar y almacenar más información.
Más tarde, con el lanzamiento del kernel 3.18, se crearon los filtros de paquetes Berkeley ampliados (eBPF) para registrar casi todos los eventos del kernel. Los eBPF, una extensión de los BPF originales, pueden almacenar e intercambiar más datos y utilizarse para diversos fines, como la supervisión, el rastreo y la optimización de las funciones del kernel.
Introducción a los eBPF
Desde una perspectiva histórica, los desarrolladores siempre han trabajado dentro de los sistemas operativos para implementar y observar la funcionalidad de la red, utilizando la capacidad privilegiada del núcleo para supervisar y controlar todo el sistema. La limitación de los núcleos de los sistemas operativos radica en su falta de evolución: la innovación a nivel del sistema operativo es menor en comparación con las capacidades que se observan fuera de ellos. Además, los desarrolladores que añadían módulos o modificaban el código fuente del núcleo tenían que lidiar con capas abstractas y una infraestructura compleja que resultaba difícil de depurar. Cuando se introdujo eBFP por primera vez en 2014, se abordaron todas estas cuestiones.
Dado que los eBPF funcionan permitiendo que los programas en entornos aislados se ejecuten dentro del sistema operativo, los desarrolladores pudieron de repente añadir nuevas capacidades al sistema operativo en tiempo de ejecución. Se trata de un tipo de máquina virtual que se ejecuta dentro del núcleo y proporciona un entorno aislado para ejecutar programas de código byte. La máquina virtual eBPF está diseñada para ser sencilla, eficiente y segura, con un conjunto limitado de instrucciones que solo pueden acceder a un conjunto restringido de recursos.
Desde su creación, eBPF ha evolucionado y se puede encontrar impulsando una amplia gama de casos de uso. eBPF ha permitido innovaciones en redes de alto rendimiento y equilibrio de carga en entornos nativos de la nube, ha proporcionado a los responsables de seguridad datos de seguridad granulares con un bajo coste adicional y ha apoyado a las organizaciones en sus esfuerzos de seguridad preventiva.
Comprender cómo funciona eBFP
A alto nivel, eBPF funciona permitiendo a los desarrolladores escribir pequeños programas, conocidos como programas eBPF, que pueden adjuntarse a varios puntos del núcleo para interceptar y procesar datos. Estos programas, que suelen estar escritos en un subconjunto del lenguaje de programación C, se compilan en código byte eBPF, que luego se carga en el núcleo y se ejecuta. A diferencia de los módulos tradicionales del núcleo, los programas eBPF son fáciles de implementar y gestionar, ya que no requieren modificaciones del código fuente del núcleo ni recompilación.
Un programa eBPF sigue una serie de pasos específicos cuando se ejecuta dentro del kernel de Linux:
- Una vez escrito el programa eBPF, se compila en código byte eBPF. El código byte resultante es una representación de bajo nivel e independiente de la plataforma del programa eBPF que se puede ejecutar dentro del kernel.
- A continuación, el código byte eBPF se carga en el kernel. El proceso de carga implica verificar el código byte en cuanto a seguridad y compatibilidad con el kernel en ejecución, y asignar los recursos necesarios para ejecutar el programa eBPF.
- Una vez cargado el programa eBPF, se puede adjuntar a un evento específico del kernel, como un paquete de red o una llamada al sistema (syscall).
- Cuando se produce el evento del kernel asociado, el programa eBPF se ejecuta automáticamente por el kernel. El programa eBPF puede acceder y modificar los datos asociados al evento, utilizando construcciones de programación C estándar, como bucles y sentencias condicionales.
- Una vez que el programa eBPF ha procesado los datos, puede devolver opcionalmente un resultado al kernel. Por ejemplo, un programa eBPF asociado a una interfaz de red podría descartar un paquete si cumple determinados criterios, o un programa eBPF asociado a una llamada al sistema podría modificar los argumentos pasados a la llamada antes de permitir que continúe.
- Cuando el programa eBPF ya no es necesario, se puede descargar del kernel, liberando los recursos asignados al programa eBPF y asegurando que ya no se ejecutará cuando se produzca el evento del kernel asociado.
Una de las características clave de eBPF son sus garantías de seguridad. Los programas eBPF se ejecutan en una máquina virtual restringida dentro del kernel y no pueden acceder ni modificar directamente las estructuras de datos del kernel, ni provocar fallos o vulnerabilidades de seguridad. Los programas eBPF también están sujetos a diversas comprobaciones en tiempo de ejecución, como la comprobación de límites y la comprobación de tipos, para garantizar que no violen la seguridad de la memoria u otras propiedades de seguridad.
Explorando las ventajas de eBPF
En el mundo actual, los desarrolladores utilizan eBPF para mejorar la seguridad, el rendimiento y la estabilidad de sus sistemas. eBPF se ha convertido en una tecnología muy popular en el ecosistema Linux debido a sus numerosas ventajas.
En primer lugar, las organizaciones utilizan eBPF para garantizar la velocidad y el rendimiento. Dado que los programas eBPF se ejecutan dentro del kernel de Linux, funcionan con una sobrecarga mínima en comparación con los programas tradicionales del espacio de usuario. En los casos en los que la baja latencia y el alto rendimiento son fundamentales, eBPF es la opción ideal para realizar la tarea.lt;/p>
Los programas eBPF también permiten a los equipos técnicos mantener su flexibilidad. Dado que los programas pueden adjuntarse a una amplia gama de eventos del núcleo, incluidos paquetes de red, llamadas al sistema y funciones del núcleo, esto permite utilizarlos para una amplia gama de casos de uso, como la supervisión de la red, el análisis de seguridad y la creación de perfiles de rendimiento. Los programas eBPF se pueden cargar y descargar dinámicamente desde el kernel, lo que significa que se pueden utilizar para tareas de corta duración, como la depuración o la resolución de problemas.
Los desarrolladores que utilizan eBPF pueden escribir nuevas funcionalidades que antes no se podían realizar debido a limitaciones técnicas o problemas de seguridad. Con eBPF, pueden escribir aplicaciones que aprovechan la aceleración por hardware en dispositivos integrados como Raspberry Pi u otros sistemas basados en ARM.
Compilado justo a tiempo (JIT) en lugar de precompilado como los paquetes de software tradicionales, los desarrolladores pueden utilizar eBPF para crear sus aplicaciones o servicios sin sacrificar el rendimiento ni la escalabilidad. La tecnología requiere un tiempo de configuración mínimo en comparación con otras soluciones, por lo que los desarrolladores pueden implementar rápidamente sus aplicaciones en entornos de producción con menos esfuerzo.
Casos de uso de eBPF
eBPF se utiliza más comúnmente para cuatro casos de uso principales: seguridad, redes, rastreo y observabilidad.
- Seguridad – Normalmente, en materia de seguridad, los sistemas gestionan de forma independiente los aspectos del filtrado de llamadas al sistema. Los filtros de llamadas al sistema permiten a las aplicaciones definir exactamente qué llamadas al sistema pueden ejecutar. eBPF mejora la seguridad del sistema al facilitar la visibilidad de todos los aspectos. Al interpretar todas las llamadas al sistema y proporcionar vistas a nivel de paquetes y sockets de todas las operaciones de red, los responsables de seguridad disponen del contexto que necesitan para mejorar el nivel de control que tienen sobre los sistemas.
- Redes – eBPF admite los requisitos de procesamiento de paquetes gracias a su eficiencia y programabilidad. Lo hace añadiendo analizadores de protocolos adicionales y programas de lógica de reenvío para cumplir con los nuevos requisitos sin tener que salir del contexto de procesamiento de paquetes del kernel de Linux.
- Seguimiento – Los desarrolladores adjuntan programas eBPF a puntos de rastreo, así como a puntos de sondeo del kernel y de aplicaciones de usuario, para garantizar la visibilidad del comportamiento en tiempo de ejecución de todas las aplicaciones del sistema. eBPF proporciona contexto tanto a los sistemas como a las aplicaciones; la combinación de ambos proporciona a los equipos técnicos información valiosa que pueden utilizar para resolver problemas de rendimiento.
- Observabilidad – eBPF se utiliza para recopilar la agregación en el núcleo de métricas del sistema que los equipos técnicos pueden personalizar en función de una amplia gama de fuentes. En lugar de tener que depender de exportaciones de datos de muestreo que requieren mucho tiempo y son de gran tamaño, eBPF aumenta la profundidad de la visibilidad recopilando solo los datos absolutamente necesarios, lo que ahorra a las organizaciones los costes generales del sistema.
Cómo eBPF mejora las medidas de seguridad modernas en la nube
Un agente de la plataforma de protección de cargas de trabajo en la nube (CWPP) es un elemento esencial a la hora de crear una estrategia sólida de seguridad en la nube . Ofrece protección en tiempo real contra amenazas en tiempo de ejecución, como ransomware y los ataques de día cero, lo que lo diferencia de otros controles de seguridad. eBPF mejora considerablemente el rendimiento y la escalabilidad de los sistemas en la nube, cuya adopción sigue extendiéndose entre las organizaciones de todo el mundo.
CWPP Los agentes registran la telemetría de la carga de trabajo, lo que proporciona información valiosa para el análisis forense. Por el contrario, las soluciones de escaneo lateral, que inspeccionan los volúmenes de almacenamiento de las instancias de computación en la nube, solo se pueden ejecutar una vez al día y carecen de visibilidad a nivel de proceso, lo que limita la protección en tiempo real y la precisión. El uso del marco eBPF dentro de un programa CWPP ofrece varias ventajas, entre las que se incluyen las siguientes:
- Estabilidad operativa – Ejecutar código en el kernel supone un riesgo importante, ya que aumenta las posibilidades de introducir vulnerabilidades en el kernel y desestabilizar todo el sistema. El marco eBPF incluye controles de seguridad, como el compilador JIT, para evitar que el núcleo se bloquee.
- Rendimiento del sistema – Las transferencias de datos entre el núcleo y el espacio de usuario suelen ser lentas y generan una sobrecarga de rendimiento. El marco eBPF permite a los equipos observar el comportamiento del núcleo y realizar análisis dentro del mismo antes de transferir un subconjunto de resultados al espacio de usuario, lo que reduce la sobrecarga necesaria.
- Agilidad empresarial – Al operar desde el espacio de usuario, eBPF ofrece una mayor flexibilidad y agilidad para los equipos de DevOps y el proveedor. DevOps puede centrarse en la innovación sin preocuparse por los problemas de dependencia del núcleo, y el proveedor puede concentrarse en la innovación en lugar del mantenimiento. Esto conduce a un ciclo continuo de innovación y mejora de la experiencia del cliente.
Plataforma Singularity
Mejore su postura de seguridad con detección en tiempo real, respuesta a velocidad de máquina y visibilidad total de todo su entorno digital.
DemostraciónResumen
eBPF se ha convertido rápidamente en una tecnología importante para una amplia gama de aplicaciones, desde redes y seguridad hasta observabilidad y análisis de rendimiento. Su flexibilidad y garantías de seguridad la convierten en una potente herramienta para personalizar y ampliar el kernel de Linux, y su popularidad y adopción siguen creciendo a medida que se descubren y desarrollan más casos de uso.
Las organizaciones líderes siguen invirtiendo en soluciones como CWPP de SentinelOne, Singularity Cloud Workload Security, que han incorporado las ventajas del marco eBPF. A medida que los entornos digitales siguen creciendo y se vuelven más dinámicos y complejos, y que un gran número de cargas de trabajo se ejecutan en infraestructuras compartidas, eBPF puede ayudar a mejorar la visibilidad y el control, lo que permite a los equipos de seguridad supervisar y proteger las cargas de trabajo de forma más eficaz.
Póngase en contacto con nosotros para descubrir cómo las soluciones de seguridad de SentinelOne aprovechan las ventajas de eBPF para mejorar el rendimiento y la eficiencia en diversos entornos. Reserve hoy mismo una demostración con nuestros expertos en seguridad.
"Preguntas frecuentes sobre el filtro de paquetes Berkeley ampliado
eBPF es una máquina virtual segura integrada en el núcleo que permite cargar código byte personalizado en el núcleo Linux sin cambiar su código fuente ni añadir módulos. Antes de la ejecución, el verificador del kernel comprueba la seguridad de los programas eBPF (sin bucles ilimitados ni accesos a memoria fuera de límites) y, a continuación, los compila JIT para obtener una velocidad casi nativa. Ha evolucionado desde el BPF clásico para admitir no solo el filtrado de paquetes, sino también el rastreo, la observabilidad y mucho más.
eBPF puede admitir aplicaciones como redes, rastreo y definición de puntos de rastreo de usuarios. Permite:
- Procesamiento de paquetes de alto rendimiento (por ejemplo, XDP)
- Observabilidad profunda y perfilado de llamadas al sistema y comportamiento de aplicaciones
- Supervisión de la seguridad en tiempo real y aplicación de políticas
- Visibilidad a nivel de contenedor y política de red en Kubernetes
- Lógica personalizada en el núcleo para el equilibrio de carga, la agregación de métricas y el filtrado.
Al ejecutarse en el contexto del kernel, eBPF ofrece visibilidad en tiempo real de las llamadas al sistema, los flujos de red y los eventos de proceso con una sobrecarga mínima y sin reinicios del kernel. Su entorno aislado evita el código inestable, mientras que los mapas permiten a las herramientas del espacio de usuario recuperar la telemetría.
Esta combinación detecta tempranamente amenazas como el movimiento lateral o el acceso no autorizado a archivos y puede aplicar políticas de bloqueo o eliminación de inmediato dentro de la ruta de eventos del kernel.
eBPF no se creó únicamente con fines de seguridad, por lo que tiene algunas desventajas: los límites de memoria e instrucciones pueden provocar la pérdida de eventos; no hay protección contra manipulaciones integrada para los programas cargados; y algunas funciones "auxiliares" (por ejemplo, bpf_probe_write_user) pueden utilizarse indebidamente para escalar privilegios.
Los kernels más antiguos pueden carecer de correcciones de verificación, por lo que un eBPF mal configurado o malicioso puede convertirse en un vector de rootkit si los permisos no se controlan estrictamente.
Las implementaciones comunes de eBPF incluyen:
- Filtrado de paquetes de red y equilibrio de carga
- Seguimiento de aplicaciones y del núcleo para la creación de perfiles de rendimiento
- Detección y prevención de intrusiones
- Seguridad de contenedores y microsegmentación en Kubernetes
- Recopilación de métricas personalizadas y agregación en el núcleo para plataformas de observabilidad.
Antes de implementar soluciones eBPF, compruebe que la versión de su kernel es compatible con los hooks necesarios y que el verificador cuenta con los parches de seguridad. Asigne suficiente capacidad de CPU y memoria para evitar la pérdida de eventos. Defina límites de capacidad estrictos (por ejemplo, desactive BPF sin privilegios), examine los módulos eBPF de terceros para evitar riesgos en la cadena de suministro y ejecute las nuevas políticas en modo de auditoría para medir el impacto antes de aplicar bloqueos o terminaciones.
SentinelOne utiliza la arquitectura eBFP para que la protección de su carga de trabajo en la nube sea más estable y fiable. Proporciona detección y respuesta a amenazas en tiempo real, visibilidad profunda de las actividades a nivel del núcleo y puede combatir amenazas en tiempo de ejecución como zero-days, ransomware y otros procesos maliciosos. Puede obtener actualizaciones continuas de las imágenes del sistema operativo del host sin preocuparse por la compatibilidad.
SentinelOne Singularity XDR puede realizar análisis avanzados e investigaciones forenses. Es adecuado para diversos entornos en la nube, como AWS, Azure, Google Cloud y nubes privadas. Además, es compatible con una amplia gama de distribuciones de Linux, entornos de ejecución de contenedores, servidores Windows y Kubernetes.

