Microsoft preparou unha implementación eBPF para Windows

Microsoft publicou unha implementación do subsistema eBPF para Windows, que permite lanzar controladores arbitrarios que se executan a nivel do núcleo do sistema operativo. eBPF proporciona un intérprete de bytecode integrado no núcleo, que permite crear controladores de operacións de rede cargados desde o espazo do usuario, controlar o acceso e supervisar o funcionamento dos sistemas. eBPF incluíuse no núcleo de Linux desde a versión 3.18 e permítelle xestionar paquetes de rede entrantes/saíntes, reenvío de paquetes, xestión de ancho de banda, interceptación de chamadas do sistema, control de acceso e rastrexo. Grazas ao uso da compilación JIT, o bytecode tradúcese sobre a marcha en instrucións da máquina e execútase co rendemento do código compilado. eBPF para Windows é de código aberto baixo a licenza MIT.

eBPF para Windows pódese usar coas ferramentas eBPF existentes e ofrece unha API xenérica usada para aplicacións eBPF en Linux. Entre outras cousas, o proxecto permítelle compilar código escrito en C en bytecode eBPF usando o compilador estándar eBPF baseado en Clang e executar controladores eBPF xa creados para Linux enriba do núcleo de Windows, proporcionando unha capa de compatibilidade especial e soportando o estándar Libbpf. API para compatibilidade con aplicacións que interactúan con programas eBPF. Isto inclúe capas que proporcionan ganchos tipo Linux para XDP (eXpress Data Path) e enlace de socket, abstraendo o acceso á pila de rede e aos controladores de rede de Windows. Os plans inclúen proporcionar compatibilidade completa a nivel de código fonte cos procesadores Linux eBPF estándar.

Microsoft preparou unha implementación eBPF para Windows

A diferenza fundamental entre a implementación de eBPF para Windows é o uso dun verificador de bytecode alternativo, proposto orixinalmente por empregados de VMware e investigadores de universidades canadenses e israelís. O verificador execútase nun proceso separado e illado no espazo do usuario e úsase antes de executar programas BPF para identificar erros e bloquear posibles actividades maliciosas.

Para a verificación, eBPF para Windows usa un método de análise estática baseado na Interpretación abstracta, que, en comparación co verificador eBPF para Linux, demostra unha taxa de falsos positivos máis baixa, admite análise de bucles e proporciona unha boa escalabilidade. O método ten en conta moitos patróns de execución típicos obtidos da análise dos programas eBPF existentes.

Despois da verificación, o bytecode transfírese a un intérprete que se executa no nivel do núcleo, ou pásase a través dun compilador JIT, seguido da execución do código máquina resultante con dereitos do núcleo. Para illar os controladores eBPF a nivel do núcleo, utilízase o mecanismo HVCI (HyperVisor-enforced Code Integrity), que utiliza ferramentas de virtualización para protexer os procesos no núcleo e proporciona a confirmación da integridade do código que se executa mediante unha sinatura dixital. A limitación de HVCI é que só pode verificar os programas eBPF interpretados e non se pode usar xunto con JIT (pode escoller entre rendemento ou seguridade adicional).

Fonte: opennet.ru

Engadir un comentario