janeiro 05, 2018

[Segurança] Meltdown e Spectre

O ano começou com uma bomba na área de segurança: uma vulnerabilidade grave no kernel dos processadores Intel, AMD e ARM, que tornaram praticamente todo mundo vulneráveis a ataques!

  


O conjunto de 3 falhas, batizadas de Meltdown (CVE-2017-5754) e Spectre (CVE-2017-5753 e CVE-2017-5715), permitem o acesso a áreas protegidas da memória, de forma que um programa malicioso possa acessar áreas de memória do kernel ou de outros processos. Ambos ataques aproveitam uma técnica para otimização de desempenho chamada de "execução especulativa", presente nos processadores modernos. O Meltdown consegue quebrar o isolamento entre as áreas de memória do Sistema Operacional e de outros programas, enquanto o Spectre ataca o isolamento entre diferentes programas.


Como dizem os sites oficiais:
"Meltdown breaks the most fundamental isolation between user applications and the operating system. This attack allows a program to access the memory, and thus also the secrets, of other programs and the operating system."
Fonte: https://meltdownattack.com

"Spectre breaks the isolation between different applications. It allows an attacker to trick error-free programs, which follow best practices, into leaking their secrets. In fact, the safety checks of said best practices actually increase the attack surface and may make applications more susceptible to Spectre."
Fonte: https://spectreattack.com
Resumindo, tanto o Meltdown quanto o Spectre permitem aos usuários comuns (de baixo privilégio) ler informações da memória do mesmo sistema explorando o recurso de Execução Especulativa. A diferença é que o Meltdown explora um problema específico de escalada de privilégios nos processadores da Intel, enquanto o Spectre usa a combinação de Execução Especulativa e Branch Prediction.

Com isso, programas maliciosos conseguiriam acessar áreas de memória de outros programas rodando no mesmo computador, e assim, ler e manipular esses dados. É possível, por exemplo, capturar uma senha que o usuário digita em outra aplicação.


Como a imprensa tem destacado, essa vulnerabilidade afeta todos os chips produzidos pela Intel nos últimos 10 anos, e espera-se que as correções existentes podem causar prejuízo na performance dos chips de até 30%.

Agora imagine o desespero de um gestor de TI que tem que aumentar o tamanho do seu datacenter em 1/3 do dia para a noite!!!

A falha foi descoberta pelo pessoal do Google Project Zero além de outros 3 grupos de pesquisadores (que trabalharam separadamente e, por coincidência, descobriram essas vulnerabilidades em um intervalo de tempo de poucos meses entre um e outro), e foi notificada aos fabricantes pela primeira vez no dia 01 de junho de 2017. Logo após a divulgação do bug, no dia 03/01, vários pesquisadores de segurança correram para criar exploits e formas de testar essas vulnerabilidades. No exemplo abaixo, criaram um programa em JavaScript com 5 linhas de código:


Embora seja, um problema na arquitetura dos processadores modernos (isto é, no hardware), o Meltdown e o Specter podem ser evitados com patches de software. Os fabricantes de sistemas operacionais (Windows, iOS, Linux, etc) trabalharam para preparar patches que pudessem mitigar essa vulnerabilidade, mas tiveram que antecipar o lançamento desses patches devido ao que parece ter sido uma divulgação imprevista do problema. Entretanto, como as vulnerabilidades estão no hardware, as únicas correções reais envolveriam trocar a CPU por uma nova, com uma arquitetura sem essas falhas. Mas como isso ainda não é possível, estamos dependendo de ajustes feitos nos SOs para evitar que essas falhas sejam exploradas.


A correção consiste em separar completamente a memória do kernel dos processos dos usuários, como no caso do recurso batizado de "Kernel Page Table Isolation" (KPTI) incorporado no Linux. O time de desenvolvedores, ao criar essa funcionalidade, pensaram em batizá-la de forma bem criativa como "Forcefully Unmap Complete Kernel With Interrupt Trampolines", ou seja, "FUCKWIT".

Praticamente todos os garndes fabricantes de sistemas operacionais e grandes provedores de serviços em nuvem correram para atualizar seus sistemas contra essas vulnerabilidades. O site The Hacker News fez um excelente apanhado das correções disponibilizadas pelos principais fabricantes, veja aqui: "[Guide] How to Protect Your Devices Against Meltdown and Spectre Attacks".

Algumas explicações sobre o bug e "execução expeculativa"

O Meltdown trouxe a tona uma feature das CPUs modernas que, apatentemente, ninguém estava familiarizado: a "execução especulativa". Em poucas palavras de leigo, para ganhar um pouco mais de performance e conseguir executar mais insctuções, os processadores modernos aproveitam os ciclos de processamento que a CPU deveria estar livre para adiantar a execução das próximas instruções, quando o processamento está parado esperando algum dado ou resposta. Assim, se ele "adivinhar" qual foi a resposta certa, ele ficou na vantagem porque processou algumas instruções durante um tempo que ceveria estra parado. Se errou, então basta descartar o que foi processado, e a vida segue.

Veja esses artigos:
O pessoal do XKCD explicou isso:


Bônus: Humor




Para saber mais

OBS: Post atualizado em 05/01 as 10:20 (para incluir a informação sobre o OpenBSD). Atualizado novamente nos dias 07/01, 08/01 e 09/01. Atualizado em 10/01 e 11/01. Nova atualização em 17/01 e 19/01.

Nenhum comentário:

Creative Commons License
Disclaimer: The views expressed on this blog are my own and do not necessarily reflect the views of my employee.