Estou usando o Ubuntu 12.04 de 32 bits agora para algumas experiências. Preciso desativar o ASLR. Como posso fazer isso? e depois disso, o que devo fazer para ativar o ASLR novamente?
Estou usando o Ubuntu 12.04 de 32 bits agora para algumas experiências. Preciso desativar o ASLR. Como posso fazer isso? e depois disso, o que devo fazer para ativar o ASLR novamente?
Respostas:
De acordo com um artigo Qual a eficácia do ASLR nos sistemas Linux? , você pode configurar o ASLR no Linux usando a /proc/sys/kernel/randomize_va_spaceinterface
Os seguintes valores são suportados:
- 0 - Sem randomização. Tudo estático.
- 1 - Randomização conservadora. Bibliotecas compartilhadas, pilha
mmap(), VDSO e heap são randomizados.- 2 - Randomização completa. Além dos elementos listados no ponto anterior, a memória gerenciada
brk()também é aleatória.
Então, para desativá-lo, execute
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
e para habilitá-lo novamente, execute
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
Isso não sobreviverá a uma reinicialização, então você precisará configurá-lo sysctl. Adicione um arquivo /etc/sysctl.d/01-disable-aslr.confcontendo:
kernel.randomize_va_space = 0
deve desativar permanentemente isso.
brk()?
A /proc/sys/kernel/randomize_va_spaceinterface controla o sistema ASLR.
Se você não deseja uma alteração em todo o sistema, use a ADDR_NO_RANDOMIZE personalidade para desativar temporariamente o ASLR. O controle desse sinalizador de personalidade pode ser feito com setarche sua -Ropção (página de manual ), precedendo um comando.
Acho realmente conveniente abrir um shell completamente novo usando:
setarch `uname -m` -R /bin/bash
Isso abrirá um novo shell Bash para você com o ASLR desativado, incluindo todos os processos filhos (os programas são executados nesse shell).
Apenas exita concha quando terminar.
A propósito, no i386, ulimit -s unlimitedpode "desativar" o ASLR.
EDIT (abril de 2016): ulimit -s unlimitedfoi corrigido e atribuído o CVE-2016-3672 .
uname -mum também poderia ser usado arch, um binário que essencialmente faz o mesmo.
archnão está disponível como um applet busybox
As formas mais permanentes de desativar o ASLR devem ser mantidas em uma VM por razões óbvias.
para testar a capacidade de sobrescrever os endereços de retorno do quadro da pilha, etc., você precisará compilar sem canários da pilha -fno-stack-protector, enquanto permitir executar código na pilha com a qual você precisa compilar -z execstack, tornando
$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c