domingo, 27 de maio de 2007

Fork Bombs, "Magia das Trevas"

Hoje vamos falar de um assunto bem interessante, os Forks. Mais uma vez devo a idéia ao sr. Emphasis in Metal, e dessa vez também ao sr. [S|G]. Fork pode ter dois significados, um deles seria um novo projeto com base em um existente, podemos dizer que o IceWeasel é uma espécie de Fork do Mozilla Firefox, mas sem funcionalidades extras, apenas a troca de nome e a retirada de logotipos comerciais. O outro significado para Fork seriam as Fork Bombs, Bombas Fork, que, para quem programa, ou já tentou programar um dia, são as funções recursivas sem um controlador que as faça parar, são funções que ficam chamando elas mesmas até entupir a memória e acabar com o poder de processamento do computador. Acho que se o Lord Voldemort fosse um hacker ele as adoraria =)

Bem existem muitos artigos e tutoriais pela net falando disso então não vou dar explicações muito longas e repetitivas, mas vale colocar uns exemplos aqui, se você usa o bash no Linux você poderia usar a seguinte linha:

$ funcao(){ funcao|funcao& };funcao

Simples e fatal. Notaram o '$' no começo da linha? Isso mesmo não precisa ser root para fazer essas coisinhas do mal. Agora para aqueles que usam Perl ou C:

Perl:
perl -e "fork while fork" &

C:
#include

int main()
{
while(1)
fork();
}

Olhem o código C, ele usa um while(1), ou seja enquanto 1 for 1, chame a fork(), mas não há controladores para esse 1, ele será 1 eternamente, ou até a máquina resetar =)
E para quem acha que o Windows(r) está fora dessa se enganou, faça isso em uma batch dele:

:s
start %0
goto s

Salve como .bat e execute.

No Windows(r) eu não sei corrigir o problema, mas no Linux há uma solução, você precisa limitar o número de processos que uma funcão pode chamar, mas se você colocar um limite muito baixo alguns programas podem não funcionar e um limite muito grande pode fazer com que essas funções causem lentidão ao sistema. Um bom limite seria 100, é bem comum vocês encontrarem esse número nos artigos sobre Fork Bombs por aí.
Para colocar esse limite no Linux faça o seguinte:

Edite o arquivo

/etc/pam.d/login

Adicionando ou habilidando a linha:

session "tab" required "tab" pam_limits.so

Preciso dizer que o "tab" significa usar o botão TAB? E edite também o arquivo

/etc/security/limits.conf

Adicionando a linha:

hard "tab" nproc "tab" 100

Pronto você acabou de colocar um limite de 100 processos para os usuários, se você colocar, por exemplo, 3 processos, logar no bash, e chamar três vezes um programa qualquer, na quarta vez ele não irá funcionar. Entenderam então o porque de colocar um limite razoável de processos? Se não for assim o bash fica inutilizável =)
Grande parte desse post foi baseado em informações da Wikipedia
Bem crianças, é isso, até a próxima aqui no Tux Masters.

2 comentários:

Emphasis in METAL disse...

Putz, ficou mto bom o post, bastante interessante, parabéns :-)

rafaelgimenes disse...

opa
entao mano
aprendi isso num curso semana passada na 4linux
o pam é animal.
bloquea o login com root tbm
flw.