Paravisor Open Source

OpenHCL: o novo paravisor open source

OpenHCL é um paravisor open source desenvolvido pela Microsoft para oferecer segurança e suporte a VMs confidenciais na nuvem. Com ele, workloads de VMs podem ser executadas com mais flexibilidade, sem a necessidade de constantes atualizações do sistema operacional.

Ilustração de bonecas russas representando Microsoft, npm e GitHub, simbolizando a integração de tecnologias e projetos open source.

Desde o surgimento da era da computação em nuvem, a tecnologia de virtualização permitiu que workloads fossem executadas como máquinas virtuais (VMs) em ambientes de servidores. Com a evolução do hardware e a disponibilidade de novas funcionalidades, o software também avançou, mantendo as VMs funcionando de forma transparente, graças a desenvolvimentos sofisticados no hypervisor e em tecnologias de virtualização.

A computação confidencial surgiu como uma tecnologia poderosa para melhorar significativamente a segurança de VMs na nuvem. No entanto, o limite de confiança dessas VMs impõe barreiras que dificultam ao hypervisor oferecer serviços de virtualização completos. Isso fez com que muitos usuários tivessem que atualizar constantemente os sistemas operacionais das VMs para se manterem em dia com a evolução rápida da tecnologia confidencial.

Para solucionar isso, a Microsoft adotou uma abordagem diferente, oferecendo aos clientes mais flexibilidade com o uso de um “paravisor”. Esse paravisor executa-se dentro do limite de confiança da VM confidencial, proporcionando os serviços de virtualização e dispositivos necessários para que o sistema operacional funcione com segurança, sem exigir frequentes atualizações do sistema. Dessa forma, workloads de VMs existentes podem ser executadas com mais segurança, mesmo sem a necessidade de serviços constantes do OS para acompanhar avanços na computação confidencial.

A Microsoft foi pioneira no desenvolvimento do paravisor, que agora é disponibilizado como open source, com o nome de OpenHCL. Esse esforço levou cinco anos para ser concretizado e agora continuará sendo desenvolvido de forma colaborativa e aberta. Mais detalhes sobre o projeto podem ser encontrados no repositório GitHub da Microsoft: OpenVMM e OpenHCL.

Capacidades do OpenHCL

Diagrama da arquitetura do OpenHCL mostrando a integração entre Guest OS, OpenVMM, kernel Linux do OpenHCL, hypervisor e hardware, destacando os modos de execução e serviços fornecidos para VMs confidenciais e não confidenciais.

Um paravisor é um ambiente de execução que opera dentro da VM convidada, em um nível de privilégio maior que o do sistema operacional convidado, e fornece serviços diversos. Ele pode ser executado em ambientes confidenciais ou não confidenciais, dependendo da configuração do hardware. Atualmente, o OpenHCL pode ser utilizado tanto em plataformas x86-64 quanto ARM64, além de suportar plataformas de computação confidencial Intel TDX e AMD SEV-SNP. O plano para o ARM64 é oferecer suporte ao Arm CCA (Confidential Compute Architecture).

O OpenHCL oferece uma variedade de serviços às VMs, incluindo:

  • Emulação de dispositivos: utilizando interfaces padrão para dispositivos, como vTPM e interfaces seriais.
  • Tradução de dispositivos: suporta a tradução de NVMe para SCSI para-virtualizado, permitindo a atribuição direta de dispositivos de hardware às VMs, sem necessidade de modificações no sistema operacional.
  • Suporte a diagnóstico: facilita o debugging de VMs confidenciais, onde métodos tradicionais de depuração são mais difíceis de utilizar.
  • Compatibilidade para guests não totalmente adaptados: como Windows e versões mais antigas do Linux, proporcionando suporte para executar essas VMs em plataformas de computação confidencial.

Mesmo que o OpenHCL já ofereça grandes benefícios para guests que não são totalmente adaptados, no futuro ele também pode agregar valor aos guests totalmente adaptados, proporcionando todos os serviços conforme o cenário necessitar.

Arquitetura do OpenHCL

A arquitetura do OpenHCL inclui componentes open source como o OpenVMM, um monitor de máquina virtual (VMM) multiplataforma escrito em Rust, além de um bootloader e um kernel Linux customizado, ajustado para oferecer suporte ao VMM. Utilizar Rust para o desenvolvimento do VMM traz vantagens significativas em termos de segurança de memória, aproveitando o ecossistema estável de crates do Rust. O VMM executa diversos processos em modo usuário para alimentar o OpenHCL, suportando guests com dispositivos atribuídos e fornecendo suporte à tradução de dispositivos. Isso permite compartilhar a arquitetura confidencial e não confidencial, evitando soluções fragmentadas e reduzindo as lacunas de recursos entre VMs confidenciais e não confidenciais.

Duas abordagens para VMs confidenciais

Existem duas abordagens para executar um sistema operacional dentro de uma VM confidencial: modificar o guest para entender e gerenciar as particularidades do ambiente confidencial, ou utilizar um paravisor para implementar essas funcionalidades por ele. A segunda abordagem, empregando um paravisor, evita a necessidade de modificações profundas, especialmente em sistemas legados.

Na Azure, as VMs confidenciais são suportadas por meio de um paravisor, oferecendo suporte a diversos guests, incluindo Windows mais antigos e versões anteriores do Linux. Isso proporciona uma transição mais suave para os clientes que desejam adotar a computação confidencial sem a necessidade de grandes atualizações.

Por que o Windows não é totalmente adaptado para a computação confidencial?

Quando a Microsoft desenvolveu as primeiras VMs confidenciais na Azure, não foi possível adaptar completamente o Windows devido a dependências como a emulação do controlador APIC, essencial para o gerenciamento de interrupções. Como o hypervisor não está dentro do limite de confiança, a emulação APIC deve ser feita pelo paravisor ou pela plataforma de hardware. O Windows depende diretamente do APIC para o gerenciamento de interrupções, enquanto o Linux utiliza rotinas de serviço do kernel para lidar com o estado das interrupções, tornando-o menos dependente do APIC.

OpenHCL e COCONUT-SVSM

O OpenHCL tem um papel distinto em relação ao COCONUT-SVSM, outra solução para ambientes confidenciais. Enquanto o COCONUT-SVSM se concentra em oferecer serviços a guests totalmente adaptados usando novas interfaces, o OpenHCL fornece esses serviços através de interfaces arquiteturais padrão. Em futuros desenvolvimentos, o OpenHCL pode integrar o suporte ao COCONUT-SVSM, melhorando ainda mais a segurança e a flexibilidade.

COCONUT-SVSM pode ser utilizado pelo OpenHCL no futuro. O componente VMM do OpenHCL é baseado em Rust, que possui fortes propriedades de segurança de memória. Durante o desenvolvimento, escolhemos o kernel Linux por ser uma plataforma familiar e fornecer as capacidades necessárias. No futuro, estamos interessados em migrar para uma solução baseada em Rust como o COCONUT-SVSM, caso ele adquira as funcionalidades necessárias.

Aberto para colaboração

O OpenHCL está aberto para colaboração com a comunidade. Convidamos todos os interessados a aprender mais e contribuir com o projeto, seja reportando problemas, sugerindo funcionalidades ou ativamente colaborando no desenvolvimento. Acesse mais informações em: OpenVMM.dev.

Marcos futuros do OpenHCL

  • Suporte ao Intel TDX: a Microsoft e a Intel colaboraram para desenvolver a arquitetura de particionamento TDX. A Azure foi a primeira a oferecer suporte ao TDX em VMs confidenciais.
  • Suporte ao Arm CCA: colaboração com a Arm para trazer a Arquitetura de Computação Confidencial (CCA) ao OpenHCL.
  • Suporte ao AMD SEV-SNP: a Microsoft está trabalhando junto à AMD para garantir o suporte às futuras gerações de VMs confidenciais Azure SNP.
  • Suporte ao KVM como host: estamos desenvolvendo suporte ao KVM em colaboração com a comunidade Linux e outros provedores de nuvem para expandir o uso do OpenHCL.