Product SiteDocumentation Site

Apêndice B. Appendix

B.1. Passo-a-passo do processo de fortalecimento

Abaixo está uma pós-instalação, um procedimento passo-a-passo para tornar no sistema Debian 2.2 GNU/Linux mais seguro. Esse procedimento é uma alternativa para tornar os serviços de redes mais seguros. Será mostrado o processo completo do que deve ser feito durante a configuração. Também, veja Seção B.2, “Checklist de configuração”.
  • Instale o sistema, levando em conta as informações sobre o particionamento que foi citada anteriormente neste documento. Depois da instalação básica, vá à instalação personalizada. Não selecione os pacotes de tarefa. Selecione senhas no formato shadow.
  • Usando dselect, exclua todos os pacotes desnecessários, exceto os selecionados, antes de proceder com o [I]nstall. Mantenha um número reduzido de pacotes para o sistema.
  • Atualize todos os softwares para a última versão disponível dos pacotes em security.debian.org como explicado anteriormente em Seção 4.2, “Executar uma atualização de segurança”.
  • Implementar as sugestões apresentadas neste manual com relação às cotas de usuários, definições de login e lilo
  • Fazer uma lista de serviços que estão rodando no seu sistema. Tente:
      $ ps -aux
      $ netstat -pn -l -A inet 
      # /usr/sbin/lsof -i | grep LISTEN
    Você precisará instalar o lsof-2.2 para o terceiro comando acima funcionar (execute como super-usuário). Você deve estar ciente de que o lsof pode traduzir a palavra LISTEN para suas configurações de localização.
  • Para excluir serviços desnecessários, primeiro determine qual pacote fornece o serviço e como ele é inicializado. Isto pode ser feito verificando os programas que escutam no soquete. O shell script abaixo, que utiliza os programas lsof e dpkg, faz isso:
      #!/bin/sh
      # FIXME: this is quick and dirty; replace with a more robust script snippet
      for i in `sudo lsof -i | grep LISTEN | cut -d " " -f 1 |sort -u` ; do
    \t  pack=`dpkg -S $i |grep bin |cut -f 1 -d : | uniq`
    \t  echo "Service $i is installed by $pack";
    \t  init=`dpkg -L $pack |grep init.d/ `
    \t  if [ ! -z "$init" ]; then
    \t\t   echo "and is run by $init"
    \t  fi
      done
  • Se você encontrar algum serviço desnecessário, exclua o pacote associado (com dpkg --purge), ou desabilite a inicialização automática durante a fase de boot usando o comando update-rc.d (veja Seção 3.5.1, “Desabilitando daemons de serviço”).
  • Para os serviços inetd (iniciados pelo superdaemon), verifique quais serviços estão ativados em /etc/inetd.conf através de:
      $ grep -v "^#" /etc/inetd.conf | sort -u
    Então desative estes serviços desnecessários comentando a linha referente em /etc/inetd.conf, excluindo o pacote ou utilizando o comando update-inetd.
  • Se você utiliza serviços wrapped (aqueles que utilizam /usr/sbin/tcpd), verifique se os arquivos /etc/hosts.allow e /etc/hosts.deny são configurados de acordo com sua política de serviço.
  • Se o servidor usa mais que uma interface externa, dependendo do seu serviço, você pode limitar o serviço para escutar em uma interface específica. Por exemplo, se você quiser somente acesso interno para o FTP, você deve configurar o daemon FTP para escutar somente na sua interface de gerência, não em todas interfaces (i.e, 0.0.0.0:21).
  • Reinicie o computador, ou troque o modo de single user para multiuser usando os comandos:
      $ init 1
      (....)
      $ init 2
  • Então verifique agora os serviços que estão disponíveis, e se necessário, repita os passos acima.
  • Agora instale os serviços necessários, se não tiver feito isso ainda, e os configure corretamente.
  • Use o comando shell abaixo para determinar com que usuário cada serviço disponível está sendo executado:
      $ for i in `/usr/sbin/lsof -i |grep LISTEN |cut -d " " -f 1 |sort -u`; \
      > do user=`ps -ef |grep $i |grep -v grep |cut -f 1 -d " "` ; \
      > echo "Service $i is running as user $user"; done
    Considere alterar esses serviços para um usuário/grupo específico e talvez até enjaulá-los (chroot'ing) para aumentar nível de segurança. Você pode fazer isto alterando os scripts de inicialização em /etc/init.d. A maioria dos serviços no Debian usa o start-stop-daemon com as opções (--change-uid e --chroot) para fazer isso. Uma observação com relação ao enjaulamento (chroot'ing) dos serviços: você precisa colocar todos os arquivos instalados pelo pacote (use dpkg -L) que fornece o serviço, assim como qualquer pacote dependente, na jaula chroot. Informações sobre a configuração de um ambiente chroot para o programa ssh podem ser encontrada em Seção B.7, “Chroot environment for SSH.
  • Repita os passos acima para certificar que somente os serviços desejados estejam rodando e esteja sendo usada a combinação de usuário/grupo correta.
  • Teste os serviços instalados para ver se estão funcionando corretamente.
  • Verifique o sistema usando um vulnerability assessment scanner (tipo o nessus), para determinar as vulnerabilidades no sistema (i.e., mal-configuração, serviços antigos e desnecessários).
  • Instale ferramentas de detecção de intrusão de rede e host como snort e logsentry.
  • Repita o passo de varredura da rede e verifique se os sistemas de detecção de intrusão estão funcionando corretamente.
Para paranóia real, também considere o seguinte:
  • Adicione as capacidades de firewall do sistema, conexões de entrada só devem ser feitas para os serviços oferecidos e limite as conexões de saída somente para aqueles que são autorizados.
  • Verifique novamente a instalação com uma nova vulnerability assessment usando um varredor de rede.
  • Usando um varredor de rede, verifique as conexões de saídas do sistema para um host remoto e certifique-se que as conexões indesejadas sejam estabelecida.
FIXME: este procedimento engloba o fortalecimento de serviços, mas não o fortalecimento a nível de usuário, incluindo informações sobre verificação de permissões de usuários, arquivos SETUID e congelamento de alterações no sistema utilizando o sistema de arquivo ext2.