Como posso desabilitar temporariamente o ASLR (randomização do layout do espaço de endereço)?
57
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?
O que exatamente é "Randomização completa"? Isso inclui o próprio executável? E o que é brk()?
Shuzheng 15/02
26
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_RANDOMIZEpersonalidade 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 .
Pequenos detalhes no espírito do util-linux: em vez de uname -mum também poderia ser usado arch, um binário que essencialmente faz o mesmo.
drumfire
11
@drumfire archnão está disponível como um applet busybox
Youfu
+1 por voltar dois anos depois e adicionar as informações sobre o CVE.
Multisync
3
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
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
interfaceEntão, para desativá-lo, execute
e para habilitá-lo novamente, execute
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:deve desativar permanentemente isso.
fonte
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 comsetarch
e sua-R
opção (página de manual ), precedendo um comando.Acho realmente conveniente abrir um shell completamente novo usando:
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 .fonte
uname -m
um também poderia ser usadoarch
, um binário que essencialmente faz o mesmo.arch
não está disponível como um applet busyboxAs 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
, tornandofonte
Você pode usar apenas
sudo sysctl kernel.randomize_va_space=0
para desativar temporariamente o ASLR.fonte