Compreendendo o funcionamento da Bash fork() bomba
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 08 de outubro de 2013
Este texto é uma tradução livre do original em inglês "Understanding Bash fork() Bomb ~ :(){ :|:& };:", do portal NixCraft.
Você consegue explicar o significado da bomba fork()?
:(){ :|:& };:
A bomba fork() é um tipo de ataque de negação de serviço (DoS) contra um sistema GNU/Linux. Ele faz uso da operação fork.
:(){ :|:& };:
não é nada mais do que uma função bash. Este função
é executada recursivamente. É frequentemente usada por administradores
de sistemas para testar os limites dos processos de usuários. Os limites
de processos de usuários em sistemas Linux podem ser configurados através
do arquivo /etc/security/limits.conf
e PAM.
Uma vez que uma bomba fork() tenha sido ativada em um sistema, pode não ser possível retomar a operação normal sem o reboot do sistema, visto que a única solução para uma bomba fork() é destruir todas as suas instâncias.
ALERTA - ALERTA
Estes exemplos podem deixar o seu computador inoperante se forem executados.
Compreendendo seu funcionamento
:() - Definição da função chamada ":
". Esta função não aceita nenhum argumento. Em bash, a sintaxe para a definição de uma função é:
foo(){ arg1=$1 arg2=$2 echo 'Bar..' #do_something on $arg argument }
A bomba fork() é definida da seguinte maneira:
:(){ :|:& };:
:|: | Ela vai chamar a si mesma usando uma técnica de programação chamada recursão e e direciona (pipe) o resultado de sua execução para outra instância dela mesma. |
& | Coloca a chamada da função em background de forma que os processos filhos não se encerrem e comecem a consumir os recursos do sistema. |
; | Encerra a definição da função |
: | Executa a função ou ativa a bomba fork() |
Aqui está o mesmo código de uma forma mais legível:
bomb() { bomb | bomb & }; bomb
Um sistema GNU/Linux adequadamente configurado não cai quando a bomba fork() é ativada.