Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Gnome + Xgl + MacOS style
Por fabio
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

ForkBomb: Corrigindo essa falha de segurança no Linux
Linux user
Publicado por David Mendonça em 22/10/2008

Login: slackmen, 34034 pontos
[ Hits: 5523 ]

ForkBomb: Corrigindo essa falha de segurança no Linux

Passeando por alguns fóruns e até mesmo aqui no VOL descobri um código malicioso que pode ser executado no shell Bash do Linux. Esse código travou a maioria das distros das pessoas que testaram. Quem quiser ver se a sua distro também sofre dessa falha de segurança (que na verdade não passa de falta de configuração, ou simplesmente os mantenedores das distros deixaram isso a cargo dos usuários), o código é esse abaixo, que deve ser digitado num console com shell bash, com espaços somente depois da chave { (abertura) e antes da chave } (fechamento).

:(){ :|:& };:

Simples assim, esse código (que é um tipo de fork bomb) trava a maioria das distros existentes atualmente. Quem testar pode postar aqui se travou ou não.

Bem, agora vem a correção. Vi muitas maneiras de corrigir esse problema, uma delas era instalar o PAM e editar o /etc/security/limits.conf apropriadamente. Mas a maneira mais fácil que eu consegui não precisa nem instalar nada no sistema, basta editar o /etc/profile (que é lido pelo bash em nível system-wide) e acrescentar no fim desse arquivo o seguinte código:

if [[ "$USER" == "root" ]]; then
    ulimit -S -u 512
else
    ulimit -S -u 256
fi

Isso vai limitar o número total de processos que o root pode ter para 512 e qualquer usuário, para 256. Depois de acrescentar o código basta dar o comando:

$ source /etc/profile (como usuário comum)

Depois pode executar o fork bomb de novo pra garantir que deu certo.

Explicando o fork bomb: quem tem experiência com programação entende esse fork bomb facilmente. Comparando com linguagem C fica assim:

bomb(void) {
    while (1) {
        fork();
    }
}

Ou seja, ele fica criando processos no sistema até que não haja mais recursos sobrando e, fatalmente, travando por completo, restando mesmo só resetar pelo botão do gabinete.

Essa é uma dica (espero que seja) bem útil no caso de estar programando ou fazendo scripts e sem querer cair numa dessas armadilhas. Também útil para servidores que são alvo mais fácil.

Postem seus resultados e até mais.


Outras dicas deste autor
Nenhuma dica encontrada.

Leitura recomendada
   Dica Linux recomendada Bloqueando virus com Mikrotik
   Dica Linux recomendada Gravando sessão de terminal com o ttyrec
   Dica Linux recomendada Fechando a porta 6000 do X
   Dica Linux recomendada Desabilitar login do root via SSH no ESXi
   Dica Linux recomendada Evintando envios de ping para o servidor

Comentários
[1] Comentário enviado por Sam L. em 22/10/2008 - 14:23h:

O meu kurumin 7 travou. :(

[2] Comentário enviado por slackmen em 22/10/2008 - 14:39h:

Sam L. voce conseguiu corririr a falha?

[3] Comentário enviado por Sam L. em 22/10/2008 - 15:03h:

Sim! Agora aparece até uma mensagem depois de executar:
bash: fork: Recurso temporariamente indisponível

[4] Comentário enviado por robsonpc em 22/10/2008 - 18:17h:

Zenwalk imune!

bash: fork: Cannot allocate memory
bash: fork: Cannot allocate memory
bash: fork: Cannot allocate memory
bash: fork: Cannot allocate memory
[1] 1876



[5] Comentário enviado por killerbean em 22/10/2008 - 20:02h:

Pois é, já havia visto este fork bomb, aqui no vol mesmo. e sim, travou meu ubuntu e do meu primo, e tb o fedora de um amigo meu.
Havia corrigido isso limitando os processos, mas acho que era de um outro jeito, e limitava a poucos processos, que logo eu acabava não consequindo abrir mais programas. mas foi só editar o nº de processos limite e td ficou certo. 256 fica de boa. Para servidores, isso é essencial ; )
..
Boa dica.

[6] Comentário enviado por talesrj em 24/10/2008 - 00:47h:

Acabei de travar um Suse Enterprise 10 SP 1 assim

[7] Comentário enviado por Casanova em 06/11/2008 - 08:08h:

Aqui no Debian nao funcionou não entrei no console e escrevi isso ai e deu bash: comando não encontrado.

[8] Comentário enviado por tinti em 15/03/2009 - 21:37h:

Para quem quer entender o que o código faz:

bomb() { bomb|bomb& }; bomb

http://en.wikipedia.org/wiki/Fork_bomb

[9] Comentário enviado por SMarcell em 16/10/2009 - 09:38h:

Outra maneira de brincar:

# dd if=/dev/urandom of=/dev/mem

É claro, só o root pode executá-lo!

[10] Comentário enviado por Rafael Oliveira em 11/11/2009 - 11:51h:

Ubuntu 9.04 também travou.

[11] Comentário enviado por brian_ch em 24/09/2010 - 21:41h:

Acho que hoje em dia as distros já devem limitar o número máximo de processos.

Pelo menos o meu Fedora 12 passou no teste ;-)

----------------------------------------
captcha yum : arghhh!!!!


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.