Blog

Meltdown e Spectre: Vulnerabilidades afetam processadores Intel, AMD e ARM

Written by Carlos Borges | 4/jan/2018 23:24:01

Reportes iniciais divulgados entre os dias 02 e 03 de Janeiro indicavam a existência de uma falha de arquitetura em processadores Intel que consequentemente permitiria que aplicações comuns fossem utilizadas como trampolim para exploração do Kernel dos SOs. Isto possibilitaria que um ciberataque fosse executado. Se já não fosse ruim o bastante, indicadores apontavam que mesmo com a aplicação de uma correção, haveria efeitos colaterais como a perda de performance dos processadores, que em alguns casos poderia ser até 30% de perda da eficiência.

Inicialmente não havia muitos detalhes sobre a falha e a notícia foi divulgada a partir do canal de mídia em TI “The Register”. Entre os dias 03 e 04 o Google Project Zero, um grupo altamente respeitado pelas pesquisas e descobertas de vulnerabilidades em variados softwares publicou detalhes sobre as descobertas. Além deles os seguintes pesquisadores também estão envolvidos na pesquisa: Daniel Gruss, Moritz Lipp, Yuval Yarom, Paul Kocher, Daniel Genkin, Michael Schwarz, Mike Hamburg, Stefan Mangard, Thomas Prescher and Werner Haas.

As vulnerabilidades foram reportadas para a Intel, AMD e ARM 01/06/2017 e até o momento não há indícios de que ciberataques tenham sido executados utilizando tais falhas.

De acordo com a Intel, a divulgação da vulnerabilidade seria feita na próxima semana, mas como as notícias estavam “incompletas” e pesquisadores independentes começaram a reproduzir PoC’s com base nas poucas informações divulgadas, o release foi então feito esta semana.

 

Comunicado da Intel

 

Neste caso, foi criado um programa em C que tentará adivinhar (speculate) o próximo valor da sys_call_table. Ele consegue 4 valores como retorno, em especial o 0x3a50. Posteriormente ele tenta de outra forma ler o valor correto, conseguindo o mesmo valor acima. Nesta PoC ele consegue provar que processos de usuário podem ler áreas protegidas do Kernel. Mais detalhes nas próximas sessões.

 

 

Background – Modo Kernel e Modo Usuário

Os Sistemas Operacionais são um meio de troca de informação entre os programas que utilizamos usualmente e os processadores. Dessa forma, eles operam em dois modos conhecidos como modo Usuário e modo Kernel.

Enquanto o modo Kernel permite o controle do hardware e acesso às tarefas mais restritas, o modo Usuário limita as permissões que uma aplicação pode executar. Por exemplo: sempre que um programa precisa fazer uma atividade, como escrever algo no disco, ele precisa mudar seu modo de operação temporariamente (do modo Usuário para o modo Kernel). Nestes casos dizemos que o programa está fazendo uma chamada de sistema.

 

Meltdown e Spectre

Foram divulgadas duas vulnerabilidades que afetam o Kernel dos S.O.s, denominadas Meltdown (CVE-2017-5754) e Spectre (CVE-2017-5753 e CVE-2017-5715). As vulnerabilidades afetam não somente os processadores Intel, mas também AMD e ARM desde 1995, e são baseadas em uma feature dos processadores conhecida como “Speculative execution”, que tem como objetivo otimizar a performance das CPU’s. De certa forma, a feature faz com que a CPU especule qual a próxima instrução a ser executada com base em algumas condições. Caso as condições sejam válidas, a execução continua. Caso contrário a CPU libera a execução/instrução e o caminho correto é iniciado com base em novas condições.

 

Google Project Zero

 

O problema é que durante a liberação da instrução, algumas informações não são restauradas, podendo levar à divulgação de informações.

A vulnerabilidade Meltdown permite que atacantes leiam a área de memória do Kernel e também toda a memória física de uma máquina alvo. Ela se aproveita da feature para quebrar a proteção de memória entre aplicações comuns e o Sistema Operacional, explorando uma escalação de privilégios específica para processadores Intel.

Praticamente todas as máquinas com processador Intel são afetadas pela vulnerabilidade Meltdown. Já a vulnerabilidade Spectre exigirá que mudanças significativas sejam feitas na arquitetura dos processadores.

Ela quebra a proteção que isola a área de memória entre as aplicações, permitindo um programa controlado por um atacante a gerar erros em outros programas, fazendo com que estes vazem informações em áreas de memória controladas pelo atacante. Isto pode também fazer com que informações do Kernel sejam vazadas.

A vulnerabilidade Spectre também pode ser utilizada para quebrar a proteção de sandbox dos browsers, via JavaScript.

Ela afeta praticamente todo sistema que utiliza processadores Intel, AMD e ARM.

 

A correção e suas implicações

“Contrary to some reports, any performance impacts are workload-dependent, and, for the average computer user, should not be significant and will be mitigated over time.”

- Intel

A correção das vulnerabilidade pode ter efeitos colaterais como a perda de performance dos chips. Testes ainda estão sendo executados, mas estima-se que a perda pode ser entre 5% e 30%.

 

Postgre indica que a perda em suas aplicações de banco de dados pode variar entre 17% e 23%.

 

Uma das correções para as falhas é separar completamente a memória do Kernel dos processos do usuário, utilizando uma feature chamada KPTI (Kernel Page Table Isolation). O KPTI move o Kernel para um endereço completamente separado, ficando totalmente invisível para um aplicativo. É dito que esta é uma medida brusca, mas provavelmente justificável já que não temos mais detalhes da falha.

As implicações da correção -  ficar alterando entre dois endereços para cada chamada de sistema - é algo custoso. A mudança não acontecerá instantaneamente e forçarão o processador a criar um cache dos dados e recarregá-los posteriormente na memória. Isto sobrecarrega o Kernel, deixando o computador mais lento. Esta medida foi executada, por exemplo, no Kernel Linux.

É esperado que os mais impactados pela correção sejam serviços de nuvem, por conta do nível de performance exigido e contabilizado minuciosamente em sistemas compartilhados.

 

IMPACTO

  • Vazamento de informações do Kernel
  • Vazamento de informações de programas em geral
  • Vazamento de informações entre sistemas de virtualização
  • Vazamento de informações entre sistemas de containers
  • Impacto de performance em sistemas virtualizados e cloud computing
  • Impacto junto ao usuário comum que faz uso de grandes recursos do computador, como edição de vídeo e jogos

  

Como se proteger?

  • Sistemas Windows: A Microsoft liberou um patch emergencial para o Windows 10. Outras versões do S.O. terão o patch disponível com o pacote de Janeiro a ser divulgado em 09/01/2018. Acompanhe estes guides para ações em clientes e servidores. No entanto, há um problema de compatibilidade do Windows com alguns softwares de Antivírus que podem impedir a aplicação das correções. Basicamente, se a seguinte chave de registro não for criada.

Key="HKEY_LOCAL_MACHINE" Subkey="SOFTWARE\Microsoft\Windows\CurrentVersion\QualityCompat" Value="cadca5fe-87d3-4b96-b7fb-a231484277cc" Type="REG_DWORD”

Consulte esta lista, criada pelo pesquisador Kevin Beaumont, para saber quais antivírus possuem compatibilidade para a aplicação da correção.

Após a aplicação de patches, é possível verificar a efetividade com a execução de um scrip powershell. Caso os valores dos CVE’s abaixo retornem como verdadeiro, a vulnerabilidade está mitigada.

 

 

  • Sistemas MacOS: A maioria dos problemas foram corrigidos com a versão macOS High Sierra 10.13.2. Novas melhorias virão com a versão 10.13.3.

    Além disso, a vulnerabilidade pode ser explorada a partir do browser Safari. Uma correção está sendo preparada e será divulgada nos próximos dias: https://support.apple.com/en-us/HT208394

  • Sistemas Linux: Os desenvolvedores do Kernel Linux liberaram patches que implementam o KPTI, separando o endereçamento do Kernel totalmente.
  • Android: Para celulares desenvolvidos pela própria Google, como o Nexus, uma atualização já foi disponibilizada. Para qualquer outra empresa de hardware que usa o Android como S.O., será necessário acompanhar a atualização diretamente com eles. Este será o caso de dispositivos da LG, ASUS e outros:
    https://source.android.com/security/bulletin/2018-01-01
  • Chrome: Para evitar que um exploit seja utilizado a partir de um website, recomenda-se ativar a feature de “Site Isolation” em qualquer sistema que tenha o navegador. Para isso acesse esta URL:
    chrome://flags/#enable-site-perprocess, habilite a opção “Strict Site Isolation” e reinicie o browser.
  • Mozilla: Aplicar os fix mais recentes que desativarão algumas opções do browser

 

Resumo

O pesquisador Daniel Miessler fez um resumo simples que pode servir como referência. Confira abaixo:

 

Referências:

Link PostgreSQL sobre perda de performance: https://www.postgresql.org/message-id/20180102222354.qikjmf7dvnjgbkxe@alap3.anarazel.de

Kernel Linux Update: https://lkml.org/lkml/2017/12/4/709

Intel Update: https://newsroom.intel.com/news/intel-responds-to-security-research-findings/

The Hacker News: https://thehackernews.com/2018/01/intel-kernel-vulnerability.html

Google Project Zero Findings: https://googleprojectzero.blogspot.com.br/2018/01/reading-privileged-memory-with-side.html

Meltdown Website: https://meltdownattack.com/

Vulnerabilidade Meltdown em ação: https://www.youtube.com/watch?v=bReA1dvGJ6Y

Comunicado da AMD: http://www.amd.com/en/corporate/speculative-execution

Comunicado Intel: https://newsroom.intel.com/news/intel-responds-to-security-research-findings/

Problemas de compatibilidade com AntiVirus: https://support.microsoft.com/en-us/help/4072699/important-information-regarding-the-windows-security-updates-released

Guide Microsoft Server: https://support.microsoft.com/en-us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution-s

Guide Microsoft Client: https://support.microsoft.com/en-us/help/4073119/windows-client-guidance-for-it-pros-to-protect-against-speculative-exe

Explicações simples: https://danielmiessler.com/blog/simple-explanation-difference-meltdown-spectre/

CERT Advisory: https://www.kb.cert.org/vuls/id/584653

Mozilla: https://blog.mozilla.org/security/2018/01/03/mitigations-landing-new-class-timing-attack/

Possível código de exemplo do Spectre: https://gist.github.com/ErikAugust/724d4a969fb2c6ae1bbd7b2a9e3d4bb6

Validação da vulnerabilidade Meltdown em sistemas Linux: https://github.com/raphaelsc/Am-I-affected-by-Meltdown

Comunicado Apple: https://support.apple.com/en-us/HT208394

Relação de comunicados dos vendors: https://www.bleepingcomputer.com/news/security/list-of-meltdown-and-spectre-vulnerability-advisories-patches-and-updates/