Procedimentos técnicos do PoP-BA

PR-001 - Medidas de Segurança em Sistemas Debian GNU/Linux
Data Criação: 30 Oct 2006
Data Revisão:

1. Objetivo

Este procedimento descreve as medidas que deverão ser aplicadas em um novo sistema GNU/Linux a ser implantado na rede do PoP-BA. O sistema em destaque é o Debian GNU/Linux.

2. Descrição das etapas

Configuração de atualizações de segurança

Realize as atualizações de segurança do sistema. Para isso, verifique se o sistema já está configurado no arquivo /etc/apt/sources.list, se existe uma linha como:

deb http://security.debian.org/ stable/updates main contrib

  • Dica: Troque stable por testing caso você esteja usando a versão testing do Debian GNU/Linux

Após execute os comandos:

# aptitude update
# aptitude safe-upgrade 

Configuração do postfix como relaying-host

Essa etapa configura o servidor para enviar as mensagens destinadas ao root para uma conta de e-mail remota. A documentação abaixo foi retirada do Graco.

Para instalar o postfix no Debian GNU/Linux:
aptitude install postfix

Durante a configuração do pacote algumas perguntas serão feitas. As respostas:

  • Tipo geral de configuração de email: Sistema satélite
  • Nome de mail do sistema: o FQDN da máquina, em nosso exemplo seria novo-servidor.pop-ba.rnp.br
  • Host de relay SMTP: Deixe em branco

Agora adicione um alias para a conta do root:

echo -e "root: \n: @" >> /etc/aliases && newaliases

OBS: Pode ser que já hajam referências ao usuário no arquivo de aliases do postfix. Nesse caso, a execução do comando newaliases retornará alguns warnings e será preciso uma correção manual. Nessa correção, atente-se a deixar apenas uma referência do usuário root encaminhando as mensagens para o usuário e do usuário para @.

Verificação automática de atualizações com o apticron

Desativação de serviços desnecessários

1) Verifique os serviços em execução no sistema com o comando:

# netstat -anp -net

2) O Debian vem por padrão com alguns serviços gerenciados pelo inetd. Comente as linhas descomentadas no arquivo de configuração do inetd (/etc/inetd.conf).

Pare o serviço inetd:

# /etc/init.d/inetd stop

Retire o daemon da inicialização:

# update-rc.d -f inetd remove .

3) Um outro serviço que vem por padrão e normalmente não é necessário é o portmap. Como é utilizado pelo serviço NFS, pode ser descartado caso este serviço não seja requerido, com o comando:

# aptitude purge portmap

Será retirado também o pacote nfs-common, o que não representa um problema, a menos que se deseje que a máquina seja cliente ou servidor NFS.

4) Retire os demais serviços desnecessários.

Outro programa que pode ser utilizado para desabilitar serviços da inicialização é o rcconf. Basta instalar com:

aptitude install rcconf

E rodar o programa digitando rcconf no terminal. O usuário pode, então, selecionar que serviços serão inicializados de uma lista.

Retirada dos pacotes desnecessários

A instalação padrão do Debian apesar de ser enxuta contém alguns pacotes que normalmente são desnecessários em um servidor e que devem ser retirados. Analise a lista de pacotes instalados e verifique os que podem ser retirados. O comando para verificar os pacotes instalados é:

# dpkg -l

Algum deles:

dhcp3-client lpr ppp g++ gcc ipchains gdb dpkg-dev libc6-dev manpages-dev flex linux-kernel-headers bin86 bison make

Remova pacotes que foram "removidos" mas não expurgados:
 # aptitude purge `dpkg --get-selections | grep deinstall | awk '{ print $1 }'` 

Retirada do shell dos usuários do sistema

Edite o arquivo /etc/passwd e retire o shell dos usuários do sistema, modificando a string /bin/sh por /bin/false.

Usando o vim, isto pode ser feito entrando com a seguinte linha, após entrar em modo de comando:

%s@/bin/sh@/bin/false@

Editar opções de login

Edite o arquivo /etc/login.defs e modifique as linhas para os valores:

FAILLOG_ENAB            yes                              #Registra falhas em tentativas de login em /var/log/faillog
LOG_UNKFAIL_ENAB        yes                         #Registra também contas de usuário falsas quando há tentativas de login com falhas
LOG_OK_LOGINS           yes                            #Registra também logins realizados com sucesso
SULOG_FILE      /var/log/sulog                         #Define /var/log/sulog como arquivo que detêm os registros do uso de su
SYSLOG_SU_ENAB          yes                          #Registra tentativas de mudança de usuário

Desabilitando o login da conta root em um terminal

É extramente recomendado que um usuário administrativo acesse um terminal utilizando uma conta para este fim ao invés da conta root diretamente. Desta maneira, será registrado seu primeiro login com um usuário não privilegiado e sua mudança para o usuário privilegiado root com o comando su. Para forçar um usuário administrativo a fazer login no sistema desta maneira, basta fazer:

# echo > /etc/securetty

Este comando simplesmente limpa o arquivo /etc/securetty, que inicialmente contém os terminais que aceitam login do root direto.

Instalar e configurar SSH

Ao instalar o serviço SSH, observar as recomendações do Relatório de Segurança do serviço SSH

Compilar um kernel personalizado

É recomendável ter um kernel customizado para o servidor, contendo apenas os módulos para o hardware específico. É igualmente apreciado que todos os módulos sejam incluídos, para que o kernel seja monolítico, não permitindo carregamento dinâmico de módulos em tempo de execução.

Esta medida evita que eventuais atacantes carreguem módulos contendo código malicioso. Rodar o sistema com o kernel mais atualizado na época da instalação do sistema também habilita o sistema a ter mais funcionalidades e possíveis falhas, inclusive de segurança, corrigidas.

Para tanto, bastar fazer o download da versão do kernel desejada na página do mirror brasileiro do kernel 2.6 ou acessando a página oficial do kernel, no caso de um eventual problema com um mirror brasileiro.

Contas de usuários

Em um cenário ideal, o acesso de um usuário a um servidor deve ser efetuado nas seguintes etapas:

1) O usuário se autentica em uma base centralizada

2) O servidor de autenticação autoriza a utilização do serviço, neste caso o logon no servidor desejado

3) Já no sistema, o usuário se torna root se necessário

FIXME:

Escrever documento Configuração de servidor de autenticação OpenLDAP contendo: - Configuração do servidor - Configuração dos clientes - Criação/desativação de contas - Política de senhas - Envelhecimento - Tamanho - Relevância

Conta do superusuário root

A senha da conta root deve seguir o padrão abaixo:

  • Tamanho
Deve ser de no mínimo 10 caracteres.

  • Relevância
Deve conter letras maiúsculas e minúsculas, números e símbolos.

  • Envelhecimento
A senha de root de cada servidor deve ser trocada a cada 120 dias. O procedimento é feito manualmente, utilizando o comando passwd em um terminal.

Não se recomenda utilizar um mecanismo automático para envelhecimento para a conta root - como o programa chage - pois no caso de a senha expirar antes de um usuário definir uma nova, o acesso ao sistema será negado. Por uma questão de consciência da importância desta política, entretanto, fica reforçada a necessidade de sua aplicação pelo administrador.

Esta medida visa impedir o acesso a recursos com uma senha previamente descoberta. Com uma nova senha, um possuidor da antiga não terá mais permissões de entrada.

Alteração em eventual mudança de pessoal

A senha deve ser alterada caso alguém se desligue do PoP-BA. O mesmo deve acontecer com um possível dicionário ou algoritmo para a formação de senhas.

Alteração na suspeita de ter sido descoberta

Em qualquer caso que se suspeite que a senha tenha sido descoberta, deve ser alterada imediatamente.

Configuração do módulo cracklib do PAM

Para checar a força da senha a cada mudança, é utilizado o módulo pam_cracklib da seguinte forma:

# aptitude install libpam-cracklib

Editar o arquivo /etc/pam.d/common-password, adicionando a linha:

password required       pam_cracklib.so retry=3 minlen=10 dcredit=0 ocredit=0 lcredit=0 ucredit=0 dictpath use_authtok=

É interessante instalar dicionários de acordo com sua necessidade. Talvez os dicionários de inglês, português e espanhol sejam suficientes. Estes são a base de palavras que serão usadas para checar a força da senha.

# aptitude install wbrazilian wamerican-huge wbritish-huge wspanish

Mesmo assim, para saber de mais dicionários que podem ser utilizados, entre com:

# apt-cache search dictionary less

E verificar os pacotes com este padrão:

wfrench - French dictionary words for /usr/share/dict

Configuração do SSH

Integração com OpenLDAP

Desabilitar CTRL+ALT+DELETE

Para evitar a reinicialização - voluntária ou não - de um servidor, podemos editar a ação tomada pelo sistema quando o conjunto CRTL+ALT+DELETE é pressionado. Para tanto, basta editar a seguinte linha do arquivo /etc/inittab:

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

O último campo corresponde à ação do sistema. Podemos alterá-lo para, por exemplo:

ca:12345:ctrlaltdel:/bin/echo "O servidor não será reiniciado. Tente shutdown -r now."

Desta maneira o servidor exibirá a mensagem O servidor não será reiniciado. Tente shutdown -r now. toda vez que for pressionado o conjunto CRTL+ALT+DELETE.

Configuração do BIOS

Desativação de discos removíveis da seqüência de inicialização

Após ter o sistema instalado, não é mais necessário ter mídia removível na seqüência de boot. Isto inclui CD-ROM/DVD-ROM, disquetes, dispositivos USB, etc. Recomenda-se, então, alterar a seqüência de boot, habilitando apenas o disco com setor de inicialização como válido na busca por sistema.

Esta medida previne um atacante com acesso físico ao servidor de ter à sua disposição os sistema de arquivos locais com o simples uso de um Live CD, por exemplo.

Definição de uma senha de acesso ao Setup

Com a seqüência de boot definida, é recomendando proteger o controle da configuração do BIOS com uma senha. Esta medida visa a proteção da máquina contra má configuração do hardware (intencional ou não) e alteração da seqüência de boot.

É importante ter em mente que a senha pode ser apagada via software ou hardware com razoável facilidade, como descrito em [1]. O objetivo, entretanto, de ainda assim definir uma senha para o Setup do BIOS é tornar o processo um pouco mais difícil para um elemento mal intencionado: as coisas ficam mais complicadas para um atacante se tiver, por exemplo, como único recurso causar um curto-circuito no chip ou trocar jumpers na placa-mãe. Neste caso, pode abortar a operação, se não tiver como abrir o equipamento.

Checklist

Todo o processo deve ser seguido com um checklist, onde são registradas as tarefas e depois assinado pelo executor.

3. Documentos Relacionados

4. Referências Externas

-- HumbertoGaliza - 25 Aug 2008