Desempenho e segurança colidem mais uma vez no ataque “Collide+Power”
Mais uma semana, mais um BWAIN!
Como você saberá se ouviu o podcast da semana passada (dica, dica!), BWAIN é a abreviação de Bug With An Impressive Name:
S3 Ep145: Bugs com nomes impressionantes!
É um apelido que aplicamos quando os descobridores de um novo ataque à segurança cibernética ficam tão entusiasmados com sua descoberta que atribuem a ele um apelido amigável para relações públicas, registram um nome de domínio personalizado, criam um site personalizado e projetam um logotipo especial.
Desta vez, o nome Collide+Power inclui um caractere de pontuação incômodo, que é uma vantagem na nomenclatura de bugs, mas uma desvantagem ao registrar um domínio da Internet. (Ironicamente, os nomes de domínio podem usar -, mas não +).
Portanto, o nome de domínio teve que ser ligeiramente abreviado para https://collidepower.com, mas o site lhe dará uma visão geral do problema de qualquer maneira, mesmo com o sinal de adição subtraído.
Os pesquisadores por trás deste novo artigo são Andreas Kogler, Jonas Juffinger, Lukas Giner, Martin Schwarzl, Daniel Gruss e Stefan Mangard da Universidade de Graz na Áustria, e Lukas Gerlach e Michael Schwarz do Centro Helmholtz para Segurança da Informação da CISPA na Alemanha.
Não vamos tentar explicar detalhadamente as várias formas deste ataque, porque os detalhes técnicos de como fazer as medições e a modelagem matemática usada para fazer inferências a partir dessas medições são complexos.
Mas o cerne do problema, com o perdão do trocadilho parcial, é que a memória cache que está enterrada dentro dos chips dos processadores modernos, destinada a fornecer um aumento de desempenho invisível e automático…
…nem sempre é tão invisível quanto você imagina e às vezes pode vazar parte ou todo o seu conteúdo, até mesmo para processos que não deveriam ser capazes de vê-lo.
Como o nome sugere, a memória cache (pronuncia-se dinheiro, como em dólares e centavos, e não cachet, como respeito e prestígio, se você já se perguntou), mantém cópias especiais de valores de dados da RAM convencional em locais ocultos dentro da CPU. chip em si.
Se a CPU mantiver um registro dos endereços de RAM (locais de memória) que você usou recentemente e puder adivinhar quais você provavelmente usará novamente em breve, ela poderá mantê-los temporariamente em sua memória cache e, assim, acelerar bastante. seu segundo acesso a esses valores, e o terceiro acesso, o quarto e assim por diante.
Por exemplo, se você estiver procurando uma série de valores de dados em uma tabela para converter pixels de imagem de um formato de cor para outro, poderá descobrir que na maioria das vezes a tabela de pesquisa solicita que você visite o endereço RAM 0x06ABCC00 (que pode ser onde o código especial para “pixel preto” está armazenado) ou endereço 0x3E00A040 (que pode ser a localização do código “pixel transparente”).
Ao manter automaticamente os valores desses dois endereços de memória comumente necessários em seu cache, a CPU pode causar curto-circuito (figurativamente, não literalmente!) em futuras tentativas de acessar esses endereços, de modo que não haja necessidade de enviar sinais elétricos para fora do processador, na placa-mãe e nos chips de RAM reais para ler a cópia mestre dos dados armazenados lá.
Portanto, os dados armazenados em cache geralmente são muito mais rápidos de acessar do que os dados na RAM da placa-mãe.
De modo geral, entretanto, você não pode escolher quais registradores de cache serão usados para armazenar quais endereços de RAM, e você não pode escolher quando a CPU decide parar de armazenar em cache seu valor de “código de pixel transparente” e começar a armazenar em cache outro programa. “chave criptográfica supersecreta”.
Na verdade, o cache pode conter uma mistura liberal de valores, desde uma mistura liberal de endereços de RAM, pertencentes a uma mistura liberal de diferentes contas de usuário e níveis de privilégio, tudo ao mesmo tempo.
Por esta razão, juntamente com razões de eficiência e desempenho, mesmo os programas de nível administrativo não podem espiar diretamente a lista de endereços atualmente armazenados em cache, ou obter seus valores, para proteger os dados armazenados em cache contra espionagem externa.
Como programador, você ainda usa a instrução do código de máquina “ler o código do pixel transparente do endereço 0x3E00A040”, e o sistema operacional ainda decide se você deve ter acesso a esses dados com base no endereço numérico 0x3E00A040, mesmo que o em última análise, os dados vêm diretamente do cache, em vez do verdadeiro endereço de RAM 0x3E00A040.