O que é o ASLR e como ele mantém seu computador seguro?
A ASLR (Address Space Layout Randomization) é uma técnica de segurança usada em sistemas operacionais, implementada pela primeira vez em 2001. As versões atuais de todos os principais sistemas operacionais (iOS, Android, Windows, macOS e Linux) apresentam proteção ASLR. Mas na semana passada, um novo método de contornar o ASLR foi encontrado. Então, você deve estar preocupado?
Para aqueles sem um histórico de programação de baixo nível, o ASLR pode ser confuso. Para entender isso, você deve primeiro entender a memória virtual.
O que é memória virtual??
A memória virtual é uma técnica de gerenciamento de memória com muitos benefícios, mas foi criada principalmente para facilitar a programação. Imagine que você tenha o Google Chrome, o Microsoft Word e vários outros programas abertos em um computador com 4 GB de RAM. Como um todo, os programas neste computador usam muito mais do que 4 GB de RAM. No entanto, nem todos os programas estarão ativos em todos os momentos, ou precisam de acesso simultâneo a essa RAM.
O sistema operacional aloca pedaços de memória para programas chamados Páginas. Se não houver RAM suficiente para armazenar todas as páginas de uma vez, as páginas com menor probabilidade de serem necessárias serão armazenadas no disco rígido mais lento (mas mais espaçoso). Quando as páginas armazenadas são necessárias, elas trocarão espaços com menos páginas necessárias atualmente na RAM. Esse processo é chamado de paginação e empresta seu nome ao arquivo pagefile.sys no Windows.
A memória virtual torna mais fácil para os programas gerenciar sua própria memória, além de torná-los mais seguros. Os programas não precisam se preocupar com o local onde outros programas armazenam dados ou com quanta memória RAM resta. Eles podem apenas solicitar ao sistema operacional memória adicional (ou retornar memória não utilizada) conforme necessário. Tudo o que o programa vê é um único bloco contínuo de endereços de memória para uso exclusivo, chamado de endereços virtuais. O programa não tem permissão para ver a memória de outro programa.
Quando um programa precisa acessar a memória, ele fornece ao sistema operacional um endereço virtual. O sistema operacional entra em contato com a unidade de gerenciamento de memória da CPU (MMU). A MMU traduz entre endereços virtuais e físicos, retornando essas informações para o sistema operacional. Em nenhum momento o programa interage diretamente com a RAM.
O que é o ASLR??
A ASLR (Address Space Layout Randomization) é usada principalmente para proteger contra ataques de estouro de buffer. Em um estouro de buffer, os atacantes alimentam uma função com o máximo de dados indesejados que podem manipular, seguidos por uma carga maliciosa. A carga irá sobrescrever os dados que o programa pretende acessar. Instruções para pular para outro ponto no código são uma carga útil comum. O famoso método JailbreakMe de jailbreak do iOS 4, por exemplo, usou um ataque de estouro de buffer, levando a Apple a adicionar o ASLR ao iOS 4.3.
Os estouros de buffer exigem que um invasor saiba onde cada parte do programa está localizada na memória. Descobrir isso geralmente é um processo difícil de tentativa e erro. Depois de determinar isso, eles devem fabricar uma carga útil e encontrar um local adequado para injetá-la. Se o invasor não souber onde seu código de destino está localizado, pode ser difícil ou impossível explorá-lo.
O ASLR trabalha em conjunto com o gerenciamento de memória virtual para randomizar os locais de diferentes partes do programa na memória. Toda vez que o programa é executado, componentes (incluindo pilha, heap e bibliotecas) são movidos para um endereço diferente na memória virtual. Os invasores não podem mais saber onde o alvo está por tentativa e erro, porque o endereço será diferente a cada vez. Geralmente, os aplicativos precisam ser compilados com suporte ao ASLR, mas isso está se tornando o padrão, e é até necessário no Android 5.0 e posterior.
Então, o ASLR ainda protege você??
Na terça-feira passada, pesquisadores da SUNY Binghamton e da Universidade da Califórnia, em Riverside, apresentaram um artigo chamado Jump Over ASLR: Preditores de Filiais Atacantes para Evitar o ASLR. O documento detalha uma maneira de atacar o Branch Target Buffer (BTB). O BTB faz parte do processador que acelera as declarações, prevendo o resultado. Usando o método dos autores, é possível determinar os locais das instruções de ramificação conhecidas em um programa em execução. O ataque em questão foi realizado em uma máquina Linux com processador Intel Haswell (lançado em 2013), mas provavelmente poderia ser aplicado a qualquer sistema operacional e processador moderno..
Dito isso, você não deve necessariamente se desesperar. O artigo ofereceu algumas maneiras que os desenvolvedores de hardware e sistemas operacionais podem atenuar essa ameaça. Novas técnicas de ASLR de grão fino exigiriam mais esforço do atacante, e aumentar a quantidade de entropia (aleatoriedade) pode inviabilizar o ataque Jump Over. Muito provavelmente, novos sistemas operacionais e processadores estarão imunes a esse ataque.
Então, o que resta para você façam? O desvio do Jump Over é novo e ainda não foi visto na natureza. Quando os invasores exploram, a falha aumenta o dano em potencial que um atacante pode causar em seu dispositivo. Esse nível de acesso não é sem precedentes; A Microsoft e a Apple implementaram apenas o ASLR em seus sistemas operacionais lançados em 2007 e posteriormente. Mesmo se esse estilo de ataque se tornar comum, você não ficará pior do que estava nos dias de Windows XP..
Tenha em mente que os invasores ainda precisam obter o código deles no seu dispositivo para causar algum dano. Essa falha não fornece nenhuma maneira adicional de infectar você. Como sempre, você deve seguir as práticas recomendadas de segurança. Use antivírus, fique longe de sites e programas esboçados e mantenha seu software atualizado. Ao seguir estas etapas e manter os agentes maliciosos fora do seu computador, você estará tão seguro quanto nunca esteve.
Crédito de imagem: Steve / Flickr