NPTL, Exec-Shield e outros palavrões que fazem seus programas crasharem
O que são NPTL, Exec-Shield e porque meus programas de uma hora para outra crasham adoidamente? Se você usa RedHat 9, Fedora Core 1, kernel 2.6 e/ou kernel 2.4 patcheado, seus problemas podem se resolver após a leitura deste artigo.
Parte 2: Exec-Shield
Exec-Shield é uma nova feature de segurança, disponível para
kernels 2.4 e 2.6; os patches para o kernel 2.4 e 2.6 estão em:
O patch marca largos pedaços do código de um programa, incluindo aí
o stack, não executáveis. Com isso, ele cumpre dois papéis:
1) Você pode desabilitar o Exec-Shield apenas para o programa infrator, utilizando o programa 'setarch'. Utilizando a técnica do alias:
- Protege contra toda a maléfica família Overflow: stack, buffer e function pointer (ponteiro de função). De quebra, acaba com uma das críticas do pessoal de BSD contra o Linux, a facilidade de crashar um kernel com buffer overflows :D
- Torna aleatório o ponto na VM onde o binário é carregado, com isso torna mais difícil a vida dos exploits que tentam acessar código ou dados para fins de ataque.
1) Você pode desabilitar o Exec-Shield apenas para o programa infrator, utilizando o programa 'setarch'. Utilizando a técnica do alias:
alias programa_crashento="setarch i386 programa_crashento"
2) Desabilitando o Exec-Shield, temporariamente ou direto.
2.1) Desabilitando temporariamente:
O arquivo /proc/sys/kernel/exec-shield controla o comportamento do Exec-Shield. Quando está em 0, o Exec-Shield é desabilitando. Então, como root, digite:
# cat 0 > /proc/sys/kernel/exec-shield
para desabilitar a partir do momento da digitação.
2.2) Desabilitando em tempo de boot:
Você pode utilizar o parâmetro de kernel exec-shield (exec-shield=0) ou então colocar kernel.exec-shield=0 em /etc/sysctl.conf. Reboote após as alterações, e o Exec-Shield será desabilitado.
qualquer coisa vou te encomodar!