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_space
interface
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.conf
contendo:
kernel.randomize_va_space = 0
deve desativar permanentemente isso.
brk()
?
A /proc/sys/kernel/randomize_va_space
interface 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 setarch
e sua -R
opçã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 exit
a concha quando terminar.
A propósito, no i386, ulimit -s unlimited
pode "desativar" o ASLR.
EDIT (abril de 2016): ulimit -s unlimited
foi corrigido e atribuído o CVE-2016-3672 .
uname -m
um também poderia ser usado arch
, um binário que essencialmente faz o mesmo.
arch
nã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