Não façam isto em casa!!! [explicação]

Eita como brasileiro é curioooso….

Atendendo a alguns emails e comentários de pessoas que ficaram curiosas em relação ao “comando” postado.

:(){ :|:& };:

O que é isto?

É uma função em bash. Sua forma de ação é denominada fork bomb.

O que isto faz?

Ele basicamente cria um número exponencial de processos muito rapidamente, mais rápido do que o processador é capaz de aguentar. Uma vez disparado, o processador é entupido com vários processos em thread impossibilitando o carregamento de novos programas e deixando os programas existentes em baixa prioridade (-n19). Não se preocupe, isto levará apenas alguns milésimos de segundos, quanto mais rápido o processador, mais rápido ele vai agir, ou seja, é uma forma incomumente insustentável de retroatividade.

Que sistemas estão vulneráveis?

Praticamente todo sistema que suportar a função ‘fork’, ou seja, todos os sistemas operacionais de computadores.

O Windows, não escapa desta também (que dúvida…), mas há uma diferença… até onde sei, não é possível limitar o número de processos no Windows (
Se você quiser fazer um teste com seu amigo que usa Windows basta criar um batch com o seguinte conteúdo:

:s
start %0
goto s

Seria, no mínimo, interessante botar isto no autoexec.bat :D

Como parar?

Uma vez disparado, o processo não pode ser interrompido, pois ele se auto-executa recursivamente em looping infinito. Sua máquina, irrevogavelmente, travará e será necessário reinicia-la.

Como se previnir?

Um fork bomb é uma forma de ataque DoS (Denial of Service). A maneira de se proteger dele é limitando o número de processos ou o número de processos equivalentes. Para limitar o número máximo de processos por usuário, basta dar o comando:

ulimit -u 1000

Onde 1000 é o número de máximo de processos por usuário.

Para maiores detalhes e sintaxe do ulimit, digite ‘help ulimit’.

Explicando a função:

Vou tentar explicar resumidamente a função:

Começa-se criando uma função chamada “:” que não aceita argumentos “()” e se reinicia recursivamente em loop, jogando a saída para ela própria “:|:”, e ainda chamando a função-mãe ao final “:” para que crie um loop dentro do loop.

Considerações finais:

Reza a lenda que esta função é um dos fork bombs mais fatais, que sua execução pode até mesmo vir a causar um buffer overflow, queimando o processador.

Fonte:
http://www.euglug.org/pipermail/euglug/2005-August/004338.html
http://en.wikipedia.org/wiki/Fork_bomb

6 Responses to “Não façam isto em casa!!! [explicação]”

  1. Amigo Says:

    Eu fiz um teste em uma máquina virtual rodando 6.10 64 bits e mesmo com ulimit -u 100 o sistema não retornou e travou.

    Acho dificil queimar o processador, mas é fatal mesmo com o ulimit setado.

  2. CR_ Says:

    Porque não é $ulimit -u 100 mas sim só $ulimit 100 . Faça ulimit para ver:
    (ex.)
    xxxx@debianpc1:~$ ulimit
    1000

  3. rm -fr / « [ *gnu/linux… ] Says:

    […] Ah, já ia me esqueçendo, ele também postou explicando o que tal comando faz, além da explicação dos outros que também estavam presentes em seu post. Vale a pena dar uma conferida! […]

  4. Andre Noel Says:

    Rapaz…
    Virei seu fã!!

    :)

  5. Renato Says:

    Eu não faria isso com meu Core 2 Duo! UHauhauhauah

  6. Jonh Wendell Says:

    http://launchpad.net/bugs/14505

Leave a Reply