A Microsoft preparou uma implementação do eBPF para Windows

A Microsoft publicou uma implementação do subsistema eBPF para Windows, que permite iniciar manipuladores arbitrários em execução no nível do kernel do sistema operacional. O eBPF fornece um interpretador de bytecode embutido no kernel, que permite criar manipuladores de operações de rede carregados do espaço do usuário, controlar o acesso e monitorar o funcionamento dos sistemas. O eBPF foi incluído no kernel do Linux desde a versão 3.18 e permite lidar com pacotes de rede de entrada/saída, encaminhamento de pacotes, gerenciamento de largura de banda, interceptação de chamadas do sistema, controle de acesso e rastreamento. Graças ao uso da compilação JIT, o bytecode é traduzido dinamicamente em instruções de máquina e executado com o desempenho do código compilado. eBPF para Windows é de código aberto sob a licença do MIT.

O eBPF para Windows pode ser usado com ferramentas eBPF existentes e fornece uma API genérica usada para aplicativos eBPF no Linux. Entre outras coisas, o projeto permite compilar código escrito em C em bytecode eBPF usando o compilador eBPF padrão baseado em Clang e executar manipuladores eBPF já criados para Linux sobre o kernel do Windows, fornecendo uma camada de compatibilidade especial e suportando o padrão Libbpf API para compatibilidade com aplicações que interagem com programas eBPF. Isso inclui camadas que fornecem ganchos semelhantes ao Linux para XDP (eXpress Data Path) e ligação de soquete, abstraindo o acesso à pilha de rede e aos drivers de rede do Windows. Os planos incluem o fornecimento de compatibilidade total em nível de código-fonte com processadores Linux eBPF padrão.

A Microsoft preparou uma implementação do eBPF para Windows

A principal diferença entre a implementação do eBPF para Windows é o uso de um verificador de bytecode alternativo, originalmente proposto por funcionários da VMware e pesquisadores de universidades canadenses e israelenses. O verificador é executado em um processo separado e isolado no espaço do usuário e é usado antes da execução de programas BPF para identificar erros e bloquear possíveis atividades maliciosas.

Para verificação, o eBPF para Windows utiliza um método de análise estática baseado em Interpretação Abstrata, que, comparado ao verificador eBPF para Linux, demonstra uma menor taxa de falsos positivos, suporta análise de loop e fornece boa escalabilidade. O método leva em consideração muitos padrões de execução típicos obtidos a partir da análise de programas eBPF existentes.

Após a verificação, o bytecode é transferido para um interpretador executado no nível do kernel ou passado por um compilador JIT, seguido pela execução do código de máquina resultante com direitos de kernel. Para isolar os manipuladores eBPF no nível do kernel, é usado o mecanismo HVCI (HyperVisor-enforced Code Integrity), que usa ferramentas de virtualização para proteger processos no kernel e fornece confirmação da integridade do código em execução usando uma assinatura digital. A limitação do HVCI é que ele só pode verificar programas eBPF interpretados e não pode ser usado em conjunto com JIT (você pode escolher entre desempenho ou segurança adicional).

Fonte: opennet.ru

Adicionar um comentário