O atual ano de 2018 é interessante porque quase todo mês há informações sobre novas vulnerabilidades de hardware: Spectre e Meltdown .
Mais recentemente - há algumas semanas! - Foram publicadas notícias de alto perfil sobre as vulnerabilidades Foreshadow e L1Terminal Fault , que são relatadas como ignorando até o mecanismo SGX (Sofware Guard Extensions) , que antes era considerado quase inquebrável.
Quão perigosas são essas vulnerabilidades? É possível se defender contra eles e, em caso afirmativo, como? Falaremos sobre tudo isso abaixo.
Referência rápida
Foreshadow, ou L1TF, é um grupo inteiro de vulnerabilidades que inclui:
- CVE-2018-3615 - para ignorar o SGX;
- CVE-2018-3620 - para atacar o kernel do sistema operacional, bem como o SMM (Modo de Gerenciamento do Sistema);
- CVE-2018-3646 - para atacar máquinas virtuais.
Os autores de muitas publicações estão particularmente preocupados com a possibilidade de burlar a proteção SGX: Spectre e Metldown não sabiam como fazer isso, e isso torna indefinidos os dados sensíveis. Para entender como esse alarme é justificado, vamos analisar os princípios de operação do mecanismo SGX.
O que é o SGX e como posso contorná-lo
A abreviação SGX significa Software Guard Extensions. Esse é o nome do conjunto de instruções para os processadores Intel usados para destacar áreas privadas de código e dados. Em 2015, um dos criadores da SGX, Matthew Hoykstra (Matthew Hoeskstra) publicou um artigo (veja também tradução para o russo ), no qual identificou os seguintes objetivos para criar essa tecnologia:
- dar aos desenvolvedores de aplicativos a capacidade de proteger dados críticos contra acesso não autorizado ou alterações por software malicioso executando com privilégios mais altos;
- permitir que os aplicativos garantam a integridade e a confidencialidade dos dados e códigos confidenciais sem interferir na operação do sistema de privilégios e sem interferir no planejamento e controle dos recursos da plataforma;
- faça a plataforma medir o código confiável e use o aplicativo para produzir um certificado assinado e outros certificados confirmando que o código foi inicializado corretamente em um ambiente confiável;
- dar aos usuários a capacidade de controlar aplicativos, sem limitar a liberdade de instalar e remover aplicativos e serviços;
- Permita que os desenvolvedores criem aplicativos confiáveis usando ferramentas e processos conhecidos por eles.
- Forneça maior produtividade para aplicativos confiáveis
- permita que os aplicativos determinem áreas confiáveis de código e dados, mesmo quando um invasor controla fisicamente a plataforma e pode realizar ataques diretos à memória (veja um exemplo aqui ).
O artigo citado tem muito mais marketing do que detalhes técnicos. Descreve em geral o que a tecnologia SGX permite, mas não há nenhuma palavra sobre como isso é feito. Vamos descrever isso em detalhes abaixo. Em nossa apresentação, contaremos principalmente com um artigo detalhado publicado pela Associação Internacional de Pesquisa em Criptologia (IACR, Associação Internacional de Pesquisa Criptológica).
O SGX cria na memória uma região protegida - PRM (Processor Reserved Memory) , que também é chamada de enclave. O processador protege o enclave de qualquer tentativa de acesso, incluindo aquelas do kernel, hypervisor e SMM (System Management Mode), bem como de tentativas de acesso de dispositivos periféricos.
O PRM possui um cache especial, o chamado EPC (Enclave Page Cache) , que consiste em quatro páginas de kilobyte que armazenam o código e os dados do enclave. Quando uma função confiável é chamada, o aplicativo "vê" apenas dados de enclave; qualquer acesso externo, inclusive a partir do sistema operacional, é proibido.
Com qualquer tentativa de acessar o enclave, ocorre o chamado procedimento de certificação. O enclave solicita um relatório assinado por hardware, incluindo informações sobre seu valor. Este relatório é enviado ao servidor de certificação. A parte pública da chave do aplicativo é enviada ao enclave; então, uma chave privada é gerada, dependendo do enclave e da plataforma. A chave é criptografada com uma chave de assinatura e armazenada para uso futuro.
Conforme observado nas publicações oficiais da Intel, a SGX pode proteger contra todos os tipos de ataques a dados e códigos: do sistema e do software do usuário e do gerenciador de inicialização. Mas a SGX não pode se proteger contra os chamados ataques de canal lateral. A SGX não pode contornar o notório Spectre e Meltdown.
No entanto, recentemente houve ataques (na verdade, mesmo antes do Foreshadow - veja, por exemplo, aqui ) que permitem ignorar a proteção SGX. Além disso, Foreshadow é apenas o mais alto e sensacional deles.
A documentação da SGX observou que "é impossível ler os enclaves e nada pode ser escrito neles, independentemente da existência de privilégios de qualquer nível". No entanto, na realidade, isso está longe de ser o caso.
Na primavera deste ano, surgiram informações sobre um ataque chamado SGX Spectre, com o qual você pode extrair dados de enclaves. Como os pesquisadores da Universidade Estadual de Ohio demonstraram (veja, por exemplo, aqui ), isso é possível graças aos “buracos” no SDK, com os quais os desenvolvedores podem integrar o suporte SGX em seus aplicativos. Entre os SDKs afetados estavam o Intel SGX SDK, Rust-SGX e Graphene-SGX. Uma análise detalhada desse ataque pode ser encontrada neste artigo ; Um vídeo também foi postado no Youtube com um bom exemplo.
O vídeo, é claro, é inconclusivo: o simples fato de entrar no enclave não significa que dados importantes possam ser roubados. No entanto, deve-se notar: a integridade e a confidencialidade do mecanismo SGX são violadas.
Foreshadow quebra o isolamento usando o chamado ataque de canal lateral.
Como no notório Spectre and Meltdown, a vulnerabilidade usa o mecanismo de execução especulativa de comandos. Ele se baseia no seguinte ponto: ao acessar a memória em um endereço virtual que leva a uma falha na página do terminal devido à falta do sinalizador Presente na tabela PTE (entradas da tabela na página), os processadores Intel especulativamente calculam o endereço físico e carregam os dados se eles Disponível no cache L1. Cálculos especulativos são realizados antes de verificar a disponibilidade de dados na memória física e antes de verificar a disponibilidade desses dados para leitura. Se não houver sinalizador Presente no PTE, a operação será descartada; mas os dados são "depositados" no cache e podem ser extraídos dele. Os dados podem ser extraídos para absolutamente qualquer endereço físico; isso abre vastas oportunidades para os invasores e permite, por exemplo, extrair dados do host da máquina convidada. Vídeos de demonstração já foram exibidos:
No entanto, o vídeo não parece, francamente, muito convincente e se assemelha às inúmeras demonstrações das vulnerabilidades Spectre e Meltdown que navegaram na Internet no início deste ano: parece que conseguimos superar a proteção - mas o que vem a seguir? Obviamente, o desvio SGX claramente não é um bom caso de uso.
Por que ter medo?
Ao contrário do aclamado Spectre and Meltdown, o Foreshadow apenas ameaça os processadores Intel. Nas descrições, note-se que, com a ajuda desse ataque, é possível extrair não apenas dados confidenciais do enclave, mas também uma chave de certificação privada, que prejudica a confiança em todo o ecossistema SGX.
Várias variações de Foreshadow ameaçam o chamado System Management Mode (SMM), o núcleo do sistema operacional do hipervisor. Alguns especialistas observam que, usando o Foreshadow, você pode roubar dados de máquinas virtuais em uma nuvem de terceiros. Existem publicações nas quais se observa que o novo ataque ainda permite ignorar os patches calculados anteriormente para proteger contra ataques Spectre e Meltdown.
No entanto - como em Spectre e Meltdown - todas as declarações de alto perfil devem ser tratadas com extrema cautela. Ainda não foram registrados casos de roubo de dados significativos e confidenciais usando ataques sensacionais. Os protótipos publicados de explorações (como seus próprios autores alertam) nada mais são do que amostras experimentais, retiradas da prática real, e nem sempre funcionam para todos, principalmente quando se trata de máquinas virtuais. Portanto, é muito cedo para entrar em pânico: para não apenas penetrar no enclave, mas também extrair informações realmente importantes, você precisa realmente tentar.
Até o momento, não houve ataques realmente sérios.
Patches e desempenho
O tópico de patches protegendo contra vulnerabilidades de hardware (e, se não estiver protegendo, nivelando suas consequências) também é muito relevante. Lembre-se da história recente com Spectre e Meltdown: muitas medidas foram tomadas em uma ordem de incêndio, o que levou a não as melhores consequências: reinicializações repentinas do sistema, uma queda acentuada no desempenho, etc. A Microsoft chegou a lançar atualizações que desabilitam os patches da Intel. Nos três primeiros meses deste ano, apenas 32 ações foram movidas contra a Intel.
Grandes empresas responderam prontamente à publicação de informações sobre a vulnerabilidade do Foreshadow: Intel , Red Hat , SUSE , VMware , Oracle fizeram declarações relevantes. Não menos rapidamente foram lançadas atualizações para produtos da Cisco e para o kernel Linux.
Não sem incidentes: a Intel lançou rapidamente atualizações de microcódigo, mas sem incidentes estranhos: uma proibição foi anunciada repentinamente na publicação dos resultados dos testes de desempenho antes e após a atualização (no entanto, a proibição foi suspensa ). O que foi difícil é dizer. E o tópico do efeito dos patches no desempenho, sem dúvida, merece um estudo separado e um artigo separado. E é possível que publicemos esse artigo em um futuro próximo.
Conclusão
Neste artigo, fornecemos uma breve visão geral das vulnerabilidades da classe Foreshadow. Naturalmente, é impossível falar sobre todos os aspectos das vulnerabilidades do grupo Foreshadow em um artigo. Portanto, fornecemos uma seleção de links úteis para aqueles que desejam aprender mais:
Se você tem experiência na análise de vulnerabilidades de hardware e suas conseqüências - bem-vindo ao comentar.