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
Como se proteger?
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.
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
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/