Segurança em seu Linux (parte 2)

Continuação do primeiro artigo sobre segurança em seu Linux, porém nessa parte será estudado fork bomb, prevenção contra fork bomb e algumas outras técnicas.

[ Hits: 36.407 ]

Por: Leonardo Damasceno em 16/03/2010 | Blog: https://techcraic.wordpress.com


Utilizando Fork Bomb



Hoje, com vários mecanismos de defesa, os mecanismos de ataque crescem absurdamente. Técnicas de invasão, códigos maliciosos e muito mais. Bem, o fork bomb nada mais é do que um código feito em bash onde são gerados vários processos filhos, fazendo com que sua máquina trave muito rápido.

Antes de ver o código, que é muito pequeno e com um grande poder, quero deixar bem claro que iremos estudar o código do mesmo, portanto não é aconselhável que vocês usem como uma "pegadinha" para travar computadores de amigos ou servidores do trabalho. Vamos estudar como utilizar essa ferramenta e também como criar uma prevenção contra a mesma.

O código que será digitado em um terminal, é:

:(){ :|:& };:

Então, vamos entender, partindo o código em pedaços pequenos. Como está explicado em uma das referências deste artigo, irei mostrar aqui:

O código dentro da função recursivamente chama a função e envia o retorno desta para outra instância da mesma função - representada no comando por ":|:". O símbolo "&" pega a chamada e a coloca para ser executada em segundo plano. Desta forma, os processos filhos não caem caso o processo pai seja finalizado. Note que por invocar a função duas vezes, o crescimento do número de processos se dá de forma exponencial.

O símbolo ";" fecha a definição da função e o ":" no final é a primeira execução da função que inicia o funcionamento do fork bomb.

Agora vamos aprender como criar uma proteção contra o Fork Bomb. Caso você tenha curiosidade de pesquisar no Google, irá achar algumas maneiras de fazer isso, mas a que eu recomendo é a seguinte:

Abra o arquivo limits.conf (irei utilizar o editor de texto VIM):

# vim /etc/security/limits.conf

É provável que tudo esteja comentado, caso não esteja comente! Agora, adicione a seguinte linha:

usuário soft nproc 160

Ou adicione por grupo:

@grupo soft nproc 160

Vamos entender o que acabamos de adicionar:

A linha para ser adicionada no arquivo limits.conf precisa seguir o padrão <domínio> <valor>, temos as seguintes opções retiradas de mais uma das referências deste artigo:

    * <domain> can be:
          o an user name
          o a group name, with @group syntax
          o the wildcard *, for default entry
          o the wildcard %, can be also used with %group syntax, for maxlogin limit
    *  can have the two values:
          o "soft" for enforcing the soft limits
          o "hard" for enforcing hard limits
    *  can be one of the following:
          o core - limits the core file size (KB)
    * <value> can be one of the following:
          o core - limits the core file size (KB)
          o data - max data size (KB)
          o fsize - maximum filesize (KB)
          o memlock - max locked-in-memory address space (KB)
          o nofile - max number of open files
          o rss - max resident set size (KB)
          o stack - max stack size (KB)
          o cpu - max CPU time (MIN)
          o nproc - max number of processes
          o as - address space limit
          o maxlogins - max number of logins for this user
          o maxsyslogins - max number of logins on the system
          o priority - the priority to run user process with
          o locks - max number of file locks the user can hold
          o sigpending - max number of pending signals
          o msgqueue - max memory used by POSIX message queues (bytes)
          o nice - max nice priority allowed to raise to
          o rtprio - max realtime priority
          o chroot - change root to directory (Debian-specific)

Vamos entender agora o número que é colocado ao final da linha.

Precisamos ter noção de quantos processos o grupo ou o usuário precisa rodar, então vamos utilizar o comando "ps aux" para isso:

ps aux | wc -l
164

Então, vou colocar 164 para fazer o teste.

Agora entendemos o que estamos utilizando, então fica mais fácil de alterar regras.

Agora, para teste, coloque o seu usuário no limits.conf, no meu caso ficando assim:

damasceno soft nproc 164

E tente utilizar o Fork Bomb com o seu usuário e veja a mensagem de erro ao tentar utilizar o código:

bash: fork: retry: Recurso temporariamente indisponível
bash: fork: retry: Recurso temporariamente indisponível
bash: fork: retry: Recurso temporariamente indisponível
bash: fork: retry: Recurso temporariamente indisponível

Bem, existem outras formas, como por exemplo utilizar:

# ulimit -u 100

Sendo o limite de processos para usuário de 100, basta ajustar para a sua necessidade.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução aos softwares
   2. Utilizando Fork Bomb
   3. Utilizando HPING3
Outros artigos deste autor

I-Educar no Gnu/Linux

Adicionando usuário no OpenLDAP

PFSense com Snort

Criando cluster com o PFSense

Desmistificando o GNU/Linux

Leitura recomendada

Attik Firewall

Monitorando redes utilizando Ntop

ACCT - O contabilizador de processos do Linux

Segurança no Linux: Antivírus, Firewall, Wine - Mitos e Verdades

Montando um completo servidor de backup usando Bacula

  
Comentários
[1] Comentário enviado por removido em 26/03/2010 - 15:24h

A montagem do artigo foi ótima. A melhor maneira de nos defendermos de um atual ataque é sabendo como eles funcionam de antemão. Alguns usuários tradicionais talvez achem um absurdo ensinar técnicas de invasão, mas a verdade é que somente aprendendo-as é possível defender-se de forma mais eficiente.

Isso sem contar que a melhor maneira de conscientizar o usuário de que, sim, o Linux, apesar de mais seguro, pode ser invadido se usado inadvertidamente, é demonstrando como isso pode ocorrer. Parabéns pelo artigo, que tem conhecimento e dicas valiosas.

[2] Comentário enviado por removido em 15/01/2012 - 00:15h

Uma coisa eu não entendi, se o ping é direto no servidor porque a regra é usada foi forward é não input?! o.õ

[3] Comentário enviado por removido em 04/07/2015 - 03:28h

Quais valores no limits.conf são bons prá se colocar sendo no caso um simples desktop?
--
http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts