Você sabia que o sistema operacional “embaralha” sua própria memória para dificultar ataques?
Essa técnica de defesa se chama KASLR — sigla para Kernel Address Space Layout Randomization — e é uma das barreiras de segurança mais importantes contra ataques que miram diretamente o núcleo do sistema: o Kernel.
O Que é KASLR?
Técnica usada por sistemas operacionais modernos como Linux, Windows e macOS para aumentar a segurança do sistema.
A ideia é simples: mudar os endereços onde o Kernel e suas funções são carregados na memória a cada inicialização. Isso dificulta muito a vida de quem tenta explorar falhas com técnicas como o Kernel ROP, que dependem de conhecer posições exatas na memória.
Analogia rápida:
Imagine que você está tentando invadir um cofre escondido numa cidade. Se o cofre muda de lugar toda vez que a cidade é ligada, você nunca sabe onde atacar.
O KASLR faz exatamente isso com os componentes internos do sistema: embaralha os endereços na memória a cada boot.
Sua Importância
Muitas técnicas de exploração, como o Return-Oriented Programming (ROP), exigem que o atacante saiba exatamente onde determinadas funções ou instruções estão localizadas na memória.
Sem KASLR, uma função crítica como prepare_kernel_cred()
estaria sempre no mesmo endereço, por exemplo:
Sem KASLR: 0xffffffff810a1420
Com KASLR: Pode ser 0xffffffff814b1020 (ou qualquer outro lugar aleatório)
Com KASLR ativado, esses endereços mudam, tornando ataques baseados em posições fixas muito mais difíceis.
KASLR Bypass
Apesar de eficaz, o KASLR não é uma proteção inviolável. Existem formas de ultrapassá-lo, ou seja, descobrir onde o Kernel está na memória mesmo com a randomização ativa. As três abordagens mais comuns são:
1. Infoleak
O infoleak ocorre quando algum programa ou o próprio sistema vaza — direta ou indiretamente — endereços de memória do Kernel para o espaço do usuário. Basta um único endereço para o atacante deduzir o deslocamento usado pelo KASLR e, a partir daí, reconstruir todo o layout do Kernel.
Exemplo real:
O CVE-2013-6282 permitia que funções do Kernel fossem chamadas via syscall e retornassem ponteiros diretamente para o espaço do usuário, facilitando o cálculo do deslocamento da randomização.
2. Side-Channel Attacks
Diferente dos infoleaks, os side-channels não exploram falhas de programação, mas sim comportamentos observáveis do sistema — como tempo de execução, uso de cache ou consumo de energia.
Esses ataques conseguem inferir informações sensíveis indiretamente, como se uma região da memória está mapeada ou acessível.
Técnicas conhecidas:
- Timing-based attacks (análise do tempo de execução);
- Cache side-channels (como Flush+Reload);
- TLB probing (análise da memória virtual através do Translation Lookaside Buffer).
Os ataques Spectre e Meltdown, apesar de não serem focados exclusivamente em KASLR, são exemplos clássicos de side-channel attacks avançados que podem ser adaptados para esse tipo de bypass.
3. Falhas no Kernel
Por fim, existem as boas e velhas vulnerabilidades no próprio Kernel. Certos bugs fazem com que estruturas internas exponham dados sensíveis — como ponteiros válidos — ao usuário.
Exemplos:
- Buffer Overreads, onde o sistema lê mais dados do que deveria;
- Syscalls que não limpam a memória antes de retornar;
- Estruturas de dados que vazam endereços válidos por má implementação.
Essas falhas comprometem a abstração entre o espaço do usuário e o espaço do Kernel, rompendo uma das barreiras fundamentais do sistema operacional.
Pós-Exploração
Uma vez que o atacante consegue descobrir o deslocamento do KASLR, ele passa a conhecer o layout real da memória do Kernel.
A partir daí, várias técnicas de exploração ganham viabilidade:
- Construção de cadeias ROP para execução de código privilegiado;
- Escalonamento de privilégios;
- Leitura/escrita de memória protegida;
- Desativação de mecanismos de segurança adicionais como SMEP/SMAP.
Como melhorar a Segurança?
Embora o KASLR não seja perfeito, existem formas de torná-lo mais resistente a Bypass:
- SMEP/SMAP: impedem que o Kernel execute ou leia dados da memória do espaço do usuário.
- KPTI (Kernel Page Table Isolation): usado para mitigar o Meltdown, mas também dificulta infoleaks.
- Randomização mais profunda: aumentar o número de bits utilizados para randomização e aplicar isso em mais componentes (módulos, pilha, heap, etc.).
- Sanitização rigorosa de ponteiros e estruturas: evitar que qualquer informação sensível seja retornada ao espaço do usuário.
Caso você queira ver mais sobre o assunto, fizemos um vídeo em nosso canal do YouTube: