Microsoft ha preparado una implementación de eBPF para Windows
Microsoft dio a conocer recientemente mediante una publicación la implementación del subsistema eBPF para Windows que le permite ejecutar controladores arbitrarios que se ejecutan en el nivel del kernel del sistema operativo.
eBPF proporciona un intérprete de código de bytes integrado en el kernel para crear controladores de red cargados de espacio de usuario, control de acceso y monitoreo del sistema. eBPF se ha incluido en el kernel de Linux desde la versión 3.18 y le permite procesar paquetes de red entrantes/salientes, reenviar paquetes, controlar el ancho de banda, interceptar llamadas al sistema, controlar el acceso y realizar el seguimiento.
A través de la compilación JIT, el código de bytes se traduce en instrucciones de máquina sobre la marcha y se ejecuta con el rendimiento del código compilado. EBPF para Windows es de código abierto bajo la licencia MIT.
Hoy nos complace anunciar un nuevo proyecto de código abierto de Microsoft para que eBPF funcione en Windows 10 y Windows Server 2016 y versiones posteriores. El proyecto ebpf-for-windows tiene como objetivo permitir a los desarrolladores utilizar cadenas de herramientas eBPF familiares e interfaces de programación de aplicaciones (API) sobre las versiones existentes de Windows. Basado en el trabajo de otros, este proyecto toma varios proyectos de código abierto eBPF existentes y agrega el «pegamento» para que se ejecuten en Windows.
eBPF para Windows se puede utilizar con herramientas eBPF existentes y proporciona una API genérica que se utiliza para aplicaciones eBPF en Linux.
En particular, el proyecto le permite compilar código escrito en C en código de bytes eBPF utilizando el compilador eBPF estándar basado en Clang y ejecutar controladores eBPF ya creados para Linux en la parte superior del kernel de Windows, lo que proporciona una capa de compatibilidad especial y admite la API Libbpf estándar para compatibilidad con aplicaciones que interactúan con programas eBPF.
Esto incluye capas intermedias que proporcionan enlaces similares a Linux para XDP (eXpress Data Path) y enlaces de socket que resumen el acceso a la pila de red de Windows y a los controladores de red. Los planes apuntan a proporcionar compatibilidad completa a nivel de fuente con controladores eBPF genéricos de Linux.
La diferencia clave en la implementación de eBPF para Windows es el uso de un verificador de código de bytes alternativo, propuesto originalmente por empleados e investigadores de VMware de universidades canadienses e israelíes.
El verificador se inicia en un proceso aislado separado en el espacio del usuario y se utiliza antes de la ejecución de los programas BPF para detectar errores y bloquear posibles actividades maliciosas.
Para la validación, eBPF para Windows utiliza el método de análisis estático de interpretación abstracta, que, en comparación con el verificador eBPF para Linux, demuestra una tasa de falsos positivos más baja, admite análisis de bucle y proporciona una buena escalabilidad. El método tiene en cuenta muchos patrones de ejecución típicos obtenidos del análisis de programas eBPF existentes.
eBPF es una tecnología conocida pero revolucionaria que proporciona capacidad de programación, extensibilidad y agilidad. eBPF se ha aplicado a casos de uso como la protección contra la denegación de servicio y la observabilidad.
Con el tiempo, se ha construido un ecosistema significativo de herramientas, productos y experiencia en torno a eBPF. Aunque el soporte para eBPF se implementó por primera vez en el kernel de Linux, ha habido un interés creciente en permitir que eBPF se use en otros sistemas operativos y también para extender los servicios en modo de usuario y demonios además del kernel.
Después de la verificación, el código de bytes se pasa al intérprete de nivel de kernel, o se pasa a través del compilador JIT, seguido de la ejecución del código de máquina resultante con derechos de kernel. Para aislar los controladores de eBPF a nivel de kernel, se utiliza el mecanismo HVCI (integridad de código reforzada por HyperVisor), que utiliza herramientas de virtualización para proteger los procesos en el kernel y garantiza que la integridad del código ejecutado esté firmado digitalmente.
Una limitación de HVCI es la capacidad de verificar solo los programas eBPF interpretados y la imposibilidad de usarlos junto con JIT (tiene una opción: rendimiento o protección adicional).
Finalmente si estás interesado en conocer más al respecto, puedes consultar el siguiente enlace.