O fork bomb é uma forma de ataque denial of service que implementa a operação fork, ou uma funcionalidade semelhante, rodando um processo que cria outro processo, que por sua vez cria outro processo e assim até travar o sistema.
O fork bomb funciona criando um grande número de processos muito rapidamente e recursivamente, provocando o lotamento da tabela de processos e assim novos programas não podem ser abertos.
Note que os fork bombs não apenas ocupam espaço na tabela de processos, como cada um deles também ocupa tempo de processo e memória. Como resultado disso, o sistema e os programas abertos ficam lentos e cada vez mais lentos, e então, fica impossível de usar.
Segue abaixo alguns exemplos de fork bombs:
- Shell script:
){
:& };:
- Perl: perl -e'fork while fork' &
- C:
#include <unistd.h>
int main (void) {
while(1) fork();
}
- Microsoft (R)Windows (batch):
:s
start %0
goto s
Prevenção
Uma maneira de se prevenir de um fork bomb é limitar o número de processos que um único usuário pode criar. Quando um processo tenta criar outro processo e o criador desse processo já criou mais que o máximo, a criação falha. O máximo deveria ser suficientemente baixo para que se todos os usuários que podem simultâneamente bombar um sistema, há ainda recursos suficientes para evitar um disastre. Note que um fork bomb acidental é altamente improvável de involver mais que um usuário.
Sistemas Unix-like tipicamente tem tal limite, controlado por um shell ilimitado. Com um kernel Linux, esse limite é RLIMIT_NPROC rlimit de um processo. Se um processo tentar executar um fork e o dono do processo já criou mais que RLIMIT_NPROC, ele falha.
Note que simplesmente limitando o número de processos, um processo pode procriar sem prevenir do fork bomb, por que cada processo que o fork bomb cria também cria processos. um sistema de alocação de recursos distribuídos pelo qual cada recurso de processamento é um compartilhamento de seu recursos pais que funcionaria, mas sistema de alocação distribuídos não são comumente usados.
Outra solução envolve a detecção de fork bombs pelo sistema operacional, o qual não é muito praticado, porém está implementado na forma de módulo kernel no Linux.
link original: http://en.wikipedia.org/wiki/Fork_bomb