ForkBomb: Corrigindo essa falha de segurança no Linux

Publicado por David Mendonça em 22/10/2008

[ Hits: 15.031 ]

 


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

Análise de malware com Pyew

Snort atualizado, versão 2.9.1, confira!

Mantenha sua distribuição Linux sempre segura

Colocando senha criptografada no GRUB 2

Como desabilitar o protocolo SSL3 no Nginx

  

Comentários
[1] Comentário enviado por SamL 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 SamL 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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts