ForkBomb: Corrigindo essa falha de segurança no Linux

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

[ Hits: 14.775 ]

 


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

Proteger servidor de execução maliciosa

Mac Spoofing em sistemas UNIX, *BSD e Linux

Vendo quem está logado no servidor de FTP

Como retornar 404 (Não encontrado) ao invés de 403 (Proibido) usando o mod_rewrite no Apache

Centralizando logs de dispositivos Cisco com o Syslog-ng

  

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