Como posso desativar temporariamente o ASLR (randomização de layout de espaço de endereço)?

48

Estou usando o Ubuntu 12.04 de 32 bits agora para alguma experiência Eu preciso desativar o ASLR como posso fazer isso? e depois disso, o que devo fazer para ativar o ASLR novamente?

    
por Am1rr3zA 10.07.2013 / 02:15

4 respostas

61

De acordo com um artigo Quão eficaz é o ASLR em sistemas Linux? , você pode configurar o ASLR no Linux usando a interface /proc/sys/kernel/randomize_va_space .

  

Os seguintes valores são suportados:

     
  • 0 - Nenhuma aleatoriedade. Tudo é estático.
  •   
  • 1 - conservador   Randomization. Bibliotecas compartilhadas, pilha, mmap() , VDSO e heap são   randomizado.
  •   
  • 2 - randomização completa. Além dos elementos listados em   no ponto anterior, a memória gerenciada por brk() também é aleatória.
  •   

Então, para desativá-lo, execute

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

e para ativá-lo novamente, execute

echo 2 | sudo tee /proc/sys/kernel/randomize_va_space

Isso não sobreviverá a uma reinicialização, então você terá que configurar isso em sysctl . Adicione um arquivo /etc/sysctl.d/01-disable-aslr.conf contendo:

kernel.randomize_va_space = 0

deve desativar permanentemente isso.

    
por gertvdijk 10.07.2013 / 13:17
20

A interface /proc/sys/kernel/randomize_va_space controla o ASLR em todo o sistema.

Se você não quiser uma alteração em todo o sistema, use a ADDR_NO_RANDOMIZE personalidade para desativar temporariamente o ASLR. Controlar esse sinalizador de personalidade pode ser feito com setarch e sua opção -R ( manpage ), prefixando um comando.

Acho muito conveniente abrir um shell completamente novo usando:

setarch 'uname -m' -R /bin/bash

Isto irá abrir um novo shell Bash para você com o ASLR desabilitado, incluindo todos os processos filhos (programas executados a partir deste shell).

Apenas exit da concha quando terminar.

A propósito, em i386, ulimit -s unlimited pode "desabilitar" ASLR.

EDIT (abr. 2016): O ulimit -s unlimited foi corrigido e atribuído CVE-2016-3672 .

    
por zhangyoufu 07.08.2014 / 07:53
2

As formas mais permanentes de desabilitar o ASLR devem ser mantidas em uma VM por razões óbvias.

para testar a capacidade de sobrescrever endereços de retorno de quadros de pilha, etc, você precisará compilar sem pilha canários -fno-stack-protector , enquanto permite executar código na pilha que você precisa compilar com -z execstack , tornando

$ gcc -fno-stack-protector -z execstack -o <my_program> my_code.c
    
por NewPerson 10.07.2013 / 03:33
1

Você pode usar apenas sudo sysctl kernel.randomize_va_space=0 para desativar temporariamente o ASLR.

    
por lzutao 19.03.2017 / 20:19

Tags