Diretrizes para mitigar vulnerabilidades de canal lateral de execução especulativa e microarquitetônica baseada em silício
Aplica-se a: ✔️ VMs do Linux ✔️ VMs do Windows ✔️ Conjuntos de dimensionamento flexíveis ✔️ Conjuntos de dimensionamento uniformes
Este artigo fornece diretrizes sobre uma nova classe de vulnerabilidades de canal lateral de execução especulativa e microarquitetônica baseada em silício que afetam muitos processadores e sistemas operacionais modernos. Isso inclui Intel, AMD e ARM. Detalhes específicos sobre essas vulnerabilidades baseadas em silício podem ser encontrados nos seguintes avisos de segurança e CVEs:
- ADV180002 – Diretrizes para atenuar as vulnerabilidades de canal lateral de execução especulativa
- ADV180012 – Diretrizes da Microsoft para bypass de repositório especulativo
- ADV180013 – Diretrizes da Microsoft leitura de registro de sistema fraudulento
- ADV180016 – Diretrizes da Microsoft para restauração lenta do estado de FP
- ADV180018 – Diretrizes da Microsoft para atenuar a variante L1TF
- ADV190013 – Diretrizes da Microsoft para atenuar vulnerabilidades de amostragem de dados microarquitetônicos
- ADV220002 – Diretrizes da Microsoft sobre vulnerabilidades de dados obsoletos do Processador Intel MMIO
- CVE-2022-23816 – Confusão de tipo de branch da CPU AMD
- CVE-2022-21123 – Confusão de tipo de branch da CPU AMD
A divulgação dessas vulnerabilidades de CPU levou a perguntas de clientes em busca de mais clareza.
A Microsoft implantou atenuações em todos os nossos serviços de nuvem. A infraestrutura que executa o Azure e isola as cargas de trabalho do cliente entre elas está protegida. Isso significa que um invasor potencial que usa a mesma infraestrutura não pode atacar seu aplicativo usando essas vulnerabilidades.
O Azure usa a manutenção da preservação da memória sempre que possível, para minimizar o impacto para o cliente e eliminar a necessidade de reinicializações. O Azure continuará utilizando esses métodos ao fazer atualizações em todo o sistema do host e proteger nossos clientes.
Mais informações sobre como a segurança é integrada em todos os aspectos do Azure estão disponíveis no site Documentação de segurança do Azure.
Observação
Desde a primeira publicação deste documento, foram divulgadas várias variantes dessa classe de vulnerabilidade. A Microsoft continua investindo intensamente na proteção de nossos clientes e no fornecimento de diretrizes. Esta página será atualizada conforme continuamos liberando correções adicionais.
Os clientes que estão executando códigos não confiáveis em sua VM precisam tomar medidas para se proteger contra essas vulnerabilidades, lendo abaixo para obter orientações adicionais sobre todas as vulnerabilidades.
Outros clientes devem avaliar essas vulnerabilidades de uma perspectiva de Defesa em profundidade e considerar as implicações de segurança e desempenho da configuração escolhida.
Manter seus sistemas operacionais atualizados
Embora uma atualização do sistema operacional não seja necessária para isolar seus aplicativos em execução no Azure de outros clientes do Azure, é sempre uma prática recomendada manter seu software atualizado. As atualizações de segurança do Windows mais recentes contêm atenuações referentes a essas vulnerabilidades. Da mesma forma, as distribuições Linux liberaram várias atualizações para resolver essas vulnerabilidades. Aqui estão nossas ações recomendadas para atualizar seu sistema operacional:
Oferta | Ação recomendada |
---|---|
Serviços de nuvem do Azure | Habilite a atualização automática ou verifique se você está executando o Sistema Operacional Convidado mais recente. |
Máquinas Virtuais do Linux do Azure | Instale atualizações do provedor do sistema operacional. Para obter mais informações, confira Linux mais adiante neste documento. |
Máquinas Virtuais do Windows do Azure | Instale o pacote cumulativo de atualizações de segurança mais recente. |
Outros Serviços de PaaS do Azure | Não há nenhuma ação necessária para os clientes que usam esses serviços. O Azure mantém automaticamente suas versões de Sistema Operacional atualizadas. |
Orientações adicionais caso você esteja executando código não confiável
Os clientes que permitem que usuários não confiáveis executem código arbitrário podem desejar implementar alguns recursos de segurança extra nas Máquinas Virtuais do Azure ou nos Serviços de Nuvem. Esses recursos protegem contra vetores de divulgação dentro do processo descritos por várias vulnerabilidades de execução especulativa.
Cenários de exemplo em que mais recursos de segurança são recomendados:
- Você permite que o código em que não confia seja executado dentro da VM.
- Por exemplo, você permite que um de seus clientes carregue um binário ou um script que você, em seguida, executa no aplicativo.
- Você permite que os usuários que você não confia façam logon em sua VM usando contas com baixos privilégios.
- Por exemplo, você permite que um usuário com poucos privilégios faça logon em uma de suas VMs usando a área de trabalho remota ou o SSH.
- Você permite que usuários não confiáveis acessem máquinas virtuais implementadas por meio da virtualização aninhada.
- Por exemplo, você controla o host Hyper-V, mas aloca as VMs a usuários não confiáveis.
Os clientes que não implementam um cenário que envolva código não confiável não precisam habilitar esses recursos extras de segurança.
Habilitando a segurança adicional
Se estiver executando código não confiável, você poderá habilitar mais recursos de segurança dentro da sua VM ou do Serviço de Nuvem. Paralelamente, certifique-se de que seu sistema operacional esteja atualizado para habilitar recursos de segurança dentro de sua VM ou serviço em nuvem
Windows
O sistema operacional de destino precisa estar atualizado para habilitar esses recursos de segurança extra. Embora várias mitigações estejam habilitadas por padrão, os recursos extra descritos aqui precisam ser habilitados manualmente e podem causar impacto sobre o desempenho.
Opção 1
Etapa 1: siga as instruções descritas em KB4072698 para verificar se as proteções estão habilitadas usando o módulo SpeculationControl do PowerShell.
Observação
Se você já baixou este módulo, precisará instalar a versão mais recente.
Para validar as proteções habilitadas contra essas vulnerabilidades, consulte Entender a saída do script do PowerShell Get-SpeculationControlSettings.
Se as proteções não estiverem habilitadas, entre em contato com o Suporte do Azure para habilitar controles adicionais em sua VM do Azure.
Etapa 2: para habilitar o suporte do sistema operacional para KVAS (Kernel Virtual Address Shadowing) e BTI (Branch Target Injection), siga as instruções em KB4072698 para habilitar as proteções usando as chaves Session Manager
do registro. Uma reinicialização é necessária.
Etapa 3: para implantações que usam virtualização aninhada (apenas D3 e E3): estas instruções se aplicam dentro da VM que você está usando como um host Hyper-V.
- Siga as instruções descritas em KB4072698 para habilitar proteções por meio das chaves do registro do
MinVmVersionForCpuBasedMitigations
. - Defina o tipo de planejador de hipervisor como
Core
seguindo as instruções aqui.
Opção 2
Desabilitar o hyper-threading na VM – os clientes que executam código não confiável em uma VM com hyper-threading poderão optar por desabilitar o hyper-threading ou mudar para um tamanho de VM não hiper-threaded. Consulte este documento para obter uma lista de tamanhos de VM hyper-threaded (onde a proporção de vCPU para Core é 2:1). Para verificar se sua VM tem o hyper-threading habilitado, consulte o script abaixo usando a linha de comando do Windows de dentro da VM.
Digite wmic
para entrar na interface interativa. Em seguida, digite o comando a seguir para ver a quantidade de processadores físicos e lógicos na VM.
CPU Get NumberOfCores,NumberOfLogicalProcessors /Format:List
Se o número de processadores lógicos for maior do que os processadores físicos (núcleos), o hyper-threading será habilitado. Se você estiver executando uma VM hyper-threaded, entre em contato com o Suporte do Azure para desabilitar o hyper-threading. Depois que o hyper-threading for desabilitado, o suporte exigirá uma reinicialização completa da VM. Consulte a Conta principal para entender por que sua contagem de núcleos de VM diminuiu.
Opção 3
Para o CVE-2022-23816 e o CVE-2022-21123 (Confusão de tipo de branch da CPU AMD), siga a Opção 1 e a Opção 2 acima.
Linux
A habilitação do conjunto de recursos de segurança extra internamente exige que o sistema operacional de destino esteja totalmente atualizado. Algumas mitigações serão habilitadas por padrão. A seção a seguir descreve os recursos que estão desativados por padrão e/ou que são dependentes de suporte de hardware (microcódigo). A habilitação desses recursos pode causar um impacto no desempenho. Faça referência à documentação do provedor do sistema operacional para obter mais instruções
Etapa 1: desabilitar hyper-threading na VM - os clientes que executam código não confiável em uma VM hyper-threading precisarão desabilitar o hyper-threading ou mudar para uma VM não hyper-threaded. Consulte este documento para obter uma lista de tamanhos de VM hyper-threaded (onde a proporção de vCPU para Core é 2:1). Para verificar se você está executando uma VM hyper-threaded, execute o comando lscpu
na VM do Linux.
Se Thread(s) per core = 2
, então o hyper-threading foi habilitado.
Se Thread(s) per core = 1
, então o hyper-threading foi desabilitado.
Saída de amostra para uma VM com hyper-threading habilitado:
CPU Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Se você estiver executando uma VM hyper-threaded, entre em contato com o Suporte do Azure para desabilitar o hyper-threading. Depois que o hyper-threading for desabilitado, o suporte exigirá uma reinicialização completa da VM. Consulte a Conta principal para entender por que sua contagem de núcleos de VM diminuiu.
Etapa 2: para atenuar qualquer uma das vulnerabilidades de memória baseada em CPU abaixo, consulte a documentação do provedor do seu sistema operacional:
Conta principal
Quando uma VM hyper-threaded é criada, o Azure aloca 2 threads por núcleo - são chamados de vCPUs. Quando o hyper-threading está desabilitado, o Azure remove um thread e mostra núcleos de thread único (núcleos físicos). A taxa de vCPU para CPU é de 2:1, portanto, uma vez que o hyper-threading é desativado, a contagem de CPU na VM parecerá ter diminuído pela metade. Por exemplo, uma VM D8_v3 é uma VM hyper-threading em execução em 8 vCPUs (2 threads por núcleo x 4 núcleos). Quando o hyper-threading está desabilitado, as CPUs cairão para 4 núcleos físicos com 1 thread por núcleo.
Próximas etapas
Para obter mais informações sobre como a segurança é integrada a todos os aspectos do Azure, consulte a Documentação de segurança do Azure.