Não façam isto em casa!!! [explicação]
January 20th, 2007 — cypherEita 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
January 21st, 2007 at 11:40 am
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.
January 21st, 2007 at 6:32 pm
Porque não é $ulimit -u 100 mas sim só $ulimit 100 . Faça ulimit para ver:
(ex.)
xxxx@debianpc1:~$ ulimit
1000
January 21st, 2007 at 7:00 pm
[…] 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! […]
January 21st, 2007 at 10:55 pm
Rapaz…
Virei seu fã!!
:)
January 22nd, 2007 at 12:54 am
Eu não faria isso com meu Core 2 Duo! UHauhauhauah
January 26th, 2007 at 11:23 am
http://launchpad.net/bugs/14505