Neste post, vou mostrar como funcionam as fork bombs, como fazer uma e como se prevenir deste tipo de código malicioso.
Além das diversas definições, sempre há uma história por ser contada e é por onde vou começar.
Ao final do texto, há alguns links para outros sites onde o assunto também é abordado, caso você queira se aprofundar mais no assunto.
Se o seu interesse é prevenção, leia Como prevenir a execução de uma fork bomb no seu sistema.
Qual a definição de fork bomb?
Uma definição simples para fork bomb é a de que se trata de um código que tenha a função e a capacidade de se replicar indefinidamente.
Vírus e vermes não valem para esta definição.
À medida em que o código vai auto replicando, consome cada vez mais recursos de memória, de processamento etc.
Como os recursos do sistema não são inesgotáveis, o resultado é que ele entra em colapso.
Há relatos de que códigos deste tipo foram executados por estudantes, na Universidade de Washington, em um Burroughs 5500, em 1969 — o programa fazia 2 cópias de si mesmo, a cada vez em que era executado até que o sistema fosse derrubado.
A esta rápida reprodução do código deve-se o apelido de “trabalho de coelho” (rabbit job) ou wabbit, em alusão ao personagem da Looney Tunes, Elmer Fudd, que trocava o R pelo L (veja link ao final do texto) — a piada só tem graça em inglês.
Como criar uma fork bomb no Ubuntu
Você não precisa ser super usuário para criar e rodar uma fork bomb na maioria das vezes. Normalmente, cabe ao administrador do sistema regular como cada usuário irá usar os recursos.
O código abaixo é um dos mais conhecidos e torna o seu sistema cada vez mais lento, a ponto de parar de responder completamente.
Este código e todos os outros, neste artigo, podem quebrar o seu sistema. Seja responsável!
:(){ :|: & };:
O seu funcionamento é o seguinte:
:()
— cria/define uma função chamada:
{:|: &}
— roda a função:
e direciona sua saída para a função:
e a executa nos bastidores;
— este caractere funciona como separador, na linha de comandos. Equivale a&&
e permite iniciar uma outra instrução:
— executa a função definida no início
É possível desarmar esta bomba com o comando kill, no Linux — mas você provavelmente vai precisar ser muito rápido para fazer isto antes que seu sistema morra por inanição de recursos.
Uma outra forma, mais compreensível, de obter o mesmo resultado nefasto é assim:
bomba() { bomba | bomba & }; bomba
No código, acima, fica mais claro ver a função executar-se a si mesma.
Se você gostaria de ver um exemplo não malicioso de execução de uma fork bomb, o código abaixo é seguro para você experimentar:
fork_bomb(){ echo "FORK BOMB"; }; fork_bomb
No terminal, ele pode ser interrompido com Ctrl+C.
Como criar uma fork bomb no Windows
Você pode criar um arquivo .bat
, com o seguinte conteúdo:
:bomba start %0 goto bomba
Ou rodar este código:
%0|%0
As fork bombs funcionam como esquemas de negação de serviço (denial of service) — elas devoram os recursos do sistema.
Como criar uma fork bomb em Perl, Python e em C
Exemplo em Perl:
perl -e "fork while fork" &
Em Python:
import os while(1): os.fork()
E, por último, uma fork bomb em linguagem C:
#include int main() { while(1) fork(); }
Referências
Como se prevenir de uma fork bomb.
Comandos fatais para Linux.
Cyberciti — Understanding fork bomb.
Linuxconfig — How to crash your system with a fork bomb.
Hortelino Troca-Letras (Elmer Fudd) — http://pt.wikipedia.org/wiki/Elmer_Fudd.
The hackers jargon — http://catb.org/~esr/jargon/html/W/wabbit.html.
7 replies on “O que é uma fork bomb?”
e como eu me previno em WINs 7 ou 8
Se você está preocupado com a segurança do seu sistema, não deveria usar Windows.
A melhor reposta! xD
AO VIVO
Pura verdade
opa ola gostei sobre o assunto sobre forks…vc teria mais artigos onde posso me basear
Concordo que o assunto é interessante. 😉
Pretendo escrever mais sobre o tema.
Até o momento, há o artigo Como se prevenir de fork bombs no Linux, usando nproc e ulimit, com vídeo.