Desde 3 de janeiro de 2018, tem havido muitas informações conflitantes e possivelmente alarmantes publicadas sobre o lado da execução especulativa -channel vulnerabilidades também conhecidas como Meltdown e Spectre que afetam a maioria dos processadores modernos em graus variados. A exploração Meltdown (CVE-2017-5754), em particular, afeta apenas os processadores Intel. Proteger seus sistemas dessas vulnerabilidades envolve várias etapas para a maioria dos sistemas, dependendo do ambiente em que o SQL Server está sendo executado e de qual funcionalidade está sendo usada.
O princípio orientador é que as preocupações com a segurança devem substituir as preocupações com o desempenho. Ignorar essas vulnerabilidades de segurança e não fazer os patches necessários devido a possíveis problemas de desempenho seria um grande erro (e uma possível responsabilidade legal) para a maioria das organizações. Já foram publicadas pesquisas sobre novas variações de Meltdown e Spectre, então esse tipo de problema não vai desaparecer tão cedo. Além disso, os fornecedores de segurança têm relatado evidências de ataques Spectre/Meltdown na natureza.
Infelizmente, decidir o que você deve realmente fazer com seus sistemas para protegê-los contra essas vulnerabilidades tem sido cada vez mais complexo e confuso com o passar do tempo, com a mudança de informações sobre a vulnerabilidade lançada pela Intel e AMD, e com o microcódigo da CPU e o sistema operacional patches sendo lançados e logo depois retirados.
Impacto no desempenho da aplicação de patches
Dependendo do hardware do servidor, sistema operacional, carga de trabalho e quais patches você acaba instalando, é provável que você veja algum impacto negativo no desempenho dessas medidas de mitigação. Terry Myerson, da Microsoft, tem um post bastante detalhado sobre esse assunto, enquanto Brendan Gregg, da Netflix, tem alguns resultados detalhados no Linux. Brandon Lee fez alguns testes de benchmark sintéticos em um ambiente VMware aqui.
A boa notícia é que a maioria das regressões de desempenho resultantes desse esforço de aplicação de patches pode ser reduzida com a configuração adequada e o ajuste da carga de trabalho no SQL Server. O uso de produtos de monitoramento como o SQL Sentry da SentryOne pode ajudá-lo a identificar os gargalos de desempenho que existem em seu ambiente.
Para muitas organizações, ficar totalmente atualizado em sua compilação do SQL Server implantada (como um efeito colateral da aplicação de patches para Spectre/Meltdown) resolverá muitos outros problemas e potencialmente melhorará seu desempenho o suficiente para ajudar a compensar quaisquer regressões de desempenho observadas no conjunto completo de Patches Spectre/Meltdown. A leitura da lista de correções para cada CU do SQL Server geralmente revela várias correções relacionadas ao desempenho que podem ter um impacto substancial no desempenho do SQL Server.
Os processadores Intel modernos têm suporte a PCID e INVPCID, o que reduz significativamente o impacto no desempenho do patch do sistema operacional Meltdown. Isso significa que você obterá suporte do sistema operacional Windows para a otimização de desempenho PCID na família de produtos Intel Xeon E5-2600 v3 (Haswell-EP) e processadores posteriores, juntamente com a família de produtos Intel Xeon E7 v3 (Haswell-EX) e processadores posteriores.
Se seus processadores Intel forem mais antigos que a microarquitetura Haswell (que foi lançada no terceiro trimestre de 2014 para servidores de dois soquetes), isso lhe dará mais motivos para planejar uma atualização de hardware. Escrevi sobre como usar o Microsoft CoreInfo para verificar facilmente se o seu processador tem suporte a PCID e INVPCID. Também fiz alguns testes de benchmark sintéticos em um sistema Intel Kaby Lake mais recente.
A Microsoft tem um novo recurso do Windows Analytics que você pode usar para verificar o status do patch Spectre/Meltdown de todas as suas máquinas. A Microsoft também tem um módulo do PowerShell que você pode usar para verificar o status geral do patch (da perspectiva do Windows e do hardware) que discuti aqui. Se você quiser fazer uma verificação rápida e fácil de um sistema operacional cliente para um usuário final (ou sua mãe) sem ter que lidar com PoSH, você pode baixar e executar o utilitário InSpectre (com uma GUI fácil) para verificar o patch status do seu sistema operacional e do microcódigo do seu processador.
Verificando sua instância do SQL Server
Por fim, você precisa verificar o status do patch do SQL Server. Desenvolvi um script T-SQL que verificará sua instância do SQL Server para ver se você instalou os patches relevantes do SQL Server ou não. Esse script funcionará no SQL Server 2008 por meio do SQL Server 2017 para instâncias locais ou para instâncias de IaaS do Azure. Isso não foi projetado para funcionar no Banco de Dados SQL do Azure. Você pode baixá-lo aqui.
Um possível benefício desse problema é que ele pode fornecer mais justificativas para que sua organização atualize suas instâncias do SQL Server com o Service Pack e as atualizações cumulativas, que é o que a Microsoft recomenda explicitamente de qualquer maneira.
Etapas de mitigação de espectro/fusão
Aqui estão as etapas de mitigação que você deve considerar fortemente:
- Instale o patch relevante do sistema operacional da Microsoft (se disponível)
- Disponível para Windows Server, versão 1709, Windows Server 2016, Windows Server 2012 R2 e Windows Server 2008 R2
- Ainda não disponível para Windows Server 2012 ou Windows Server 2008 (desde 15 de fevereiro de 2018)
- Faça as alterações de configuração necessárias (configurações de registro) para habilitar a proteção do sistema operacional em sistemas operacionais de servidor
- Se você estiver executando em um Hypervisor, instale os patches relevantes do Hypervisor
- As atualizações do VMware vSphere, Workstation e Fusion adicionam correção de convidado assistida por hipervisor para problemas de execução especulativa
- Instale o patch relevante do SQL Server da Microsoft
- Disponível para SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012 SP4, SQL Server 2008 R2 SP3 e SQL Server 2008 SP4
- Não disponível para SQL Server 2005 ou anterior
- Instale uma atualização do BIOS (que tem uma atualização do microcódigo da CPU) do fornecedor do servidor (se disponível)
- Isso depende de qual processador você está usando, juntamente com seu ambiente e uso de recursos
- Essas atualizações do BIOS não estão disponíveis atualmente para a maioria dos servidores (elas foram lançadas inicialmente para alguns servidores mais recentes e depois retiradas)
- Avalie quais recursos de extensibilidade do SQL Server você pode estar usando e quais etapas de mitigação adicionais podem ser necessárias. Estes incluem:
- Montagens SQL CLR
- Pacotes R e Python executados por meio do mecanismo de scripts externos ou executados no estúdio R/Machine Learning autônomo na mesma máquina física do SQL Server
- Pontos de extensibilidade do SQL Agent executados na mesma máquina física que o SQL Server (scripts ActiveX)
- Provedores OLE DB não Microsoft usados em servidores vinculados
- Procedimentos armazenados estendidos que não são da Microsoft
- Objetos COM executados no servidor (acessados via sp_OACreate)
- Programas executados via xp_cmdshell