FreeBSD

Configurações Básicas de Segurança


Tendo em mente manter um certo nível de segurança em nosso sistema, mas sem prejudicar a funcionalidade, podemos fazer alguns pequenos ajustes que auxiliam em muito a evitar problemas.

 

Usuário toor

O usuário toor vem por padrão na instalação do FreeBSD como uma conta alternativa ao root mas com os mesmos poderes, pois possui UID 0. Seu principal objetivo é ser usado com um interpretador de comandos fora do padrão, que seja instalado em um filesystem diferente do raiz - caso do bash, que fica em /usr/local/bin/bash. Então pode-se usar o toor com este shell e manter o root com um shell padrão, como por exemplo /bin/sh. No caso de algum problema, em que não puder ser montado o filesystem /usr, ficaríamos sem shell, e conseqüentemente sem acesso ao sistema. Contudo, ao entrar em modo single, o sistema nos pede o caminho completo de algum shell.
Se houver interesse em manter essa conta toor como um "backup" ao root, deve-se alterar a sua senha através do comando passwd. Caso não houver interesse, ou houver alguma chance de essa conta cair no esquecimento, é recomendado que seja removida, visto o perigo que representa caso for utilizada indevidamente.

 

Senha no console

Quanto estamos incializando o FreeBSD, podemos pressionar qualquer tecla (diferente de enter) durante a contagem regressiva para que esta seja parada. Se entrarmos o parâmetro "boot -s" e dermos enter, o sistema será inicializado em modo single (monousuário), da mesma forma que quando digitamos no shell o comando "shutdown now", mas com a diferença que no primeiro modo não será montado automaticamente nenhum filesystem além do raiz.
Por padrão, quando entramos no modo single o sistema não nos pede uma senha, e fornece acesso a nível de root, ou seja, a tudo. Isto pode representar um grande risco caso alguém mal intencionado consiga acesso físico ao servidor, então poderá entrar no modo single e até mesmo alterar a senha do root. Para evitar isto, podemos instruir o sistema para que peça senha (do root) mesmo no modo single. No arquivo /etc/ttys, altere a linha

console none unknown off secure

para

console none unknown off insecure

 

Filesystems

É importante atribuir flags que proibem determinados filesystems de possuir arquivos SUID, quando não forem necessários. Os arquivos SUID (setuid e setgid) são determinados por um bit que indica que devem ser executados como se estivessem sendo executados pelo dono.
Para uma boa configuração, sem exageros, pode ser utilizado o exemplo abaixo, editando o arquivo /etc/fstab e alterando as linhas

/dev/ad0s1b           none     swap     sw              0     0
/dev/ad0s1a           /        ufs      rw              1     1
/dev/ad0s1f           /home    ufs      rw              2     2
/dev/ad0s1e           /squid   ufs      rw              2     2
/dev/ad0s1h           /tmp     ufs      rw              2     2
/dev/ad0s1d           /usr     ufs      rw              2     2
/dev/ad0s1g           /var     ufs      rw              2     2
/dev/acd0c            /cdrom   cd9660   ro,noauto       0     0
proc                  /proc    procfs   rw              0     0

para

/dev/ad0s1b           none     swap     sw              0     0
/dev/ad0s1a           /        ufs      rw              1     1
/dev/ad0s1f           /home    ufs      rw,nosuid       2     2
/dev/ad0s1e           /squid   ufs      rw,nosuid       2     2
/dev/ad0s1h           /tmp     ufs      rw,nosuid       2     2
/dev/ad0s1d           /usr     ufs      rw              2     2
/dev/ad0s1g           /var     ufs      rw,nosuid       2     2
/dev/acd0c            /cdrom   cd9660   ro,noauto       0     0
proc                  /proc    procfs   rw              0     0

Note que os devices (/dev/ad0s1a, etc) podem ser outros no seu sistema, assim como os filesystems, caso em que deve-se adaptar o exemplo a cada situação. Não deve ser usada a flag nosuid nos filesystem raiz e /usr. As alterações terão efeito após a reinicialização do sistema.

 

Diretório Temporário

Para que o diretório /tmp seja limpado a cada vez que a máquina for reiniciada, insira a seguinte linha no arquivo /etc/rc.conf:

clear_tmp_enable="YES"

 

Syslogd

O syslogd é o daemon responsável pela maioria dos logs do sistema, e pode também enviar ou receber logs de outras máquinas via rede. Para isso, ele ouve a porta UDP 514. Como não vamos utilizar tal função, podemos instruí-lo para trabalhar apenas localmente, sem abrir a porta mencionada. Para isso, edite o arquivo /etc/rc.conf e insira a seguinte linha:

syslogd_flags="-ss"

Após isso, reinicie a máquina.

 

Portmap

O portmap é utilizado para RPC - Remote Procedure Call. Se não for necessário usar RPC devemos desabilitá-lo, inserindo a seguinte linha no arquivo /etc/rc.conf:

portmap_enable="NO"

Caso for usar NFS (Network File System) ou algo que utilize RPC devemos habilitar o portmap novamente, alterando o NO para YES.

 

Inetd

O inetd é o chamado "Internet super-server". Funciona ouvindo determinados sockets e quando recebe uma conexão analisa qual programa corresponde àquele socket, invocando então tal programa para servir o pedido. Isto permite que rodando apenas um daemon (o inetd) pode-se invocar vários outros, sob demanda, reduzindo em certos casos a carga do sistema.
Devemos prestar muita atenção ao arquivo de configuração do Inetd, que fica em /etc/inetd.conf, e ver se está habilitado apenas o que realmente iremos usar. Verifique se as linhas descomentadas (não iniciadas por #) indicam serviços que estão sendo realmente utilizados, e caso contrário, comente-as. Isto irá garantir que não sejam abertas portas desnecessárias e por vezes perigosas, como telnet e rlogin.
Caso o Inetd não seja usado para nada, deve ser desativado, inserindo a seguinte linha no arquivo /etc/rc.conf:

inetd_enable="NO"

 

Crontab

O Cron é o daemon responsável por executar comandos agendados, e os arquivos que contém as tabelas que instruem o Cron são os crontabs. Os crontabs em geral ficam no diretório /var/cron/tabs, mas há um arquivo que agenda os comandos do root, e fica em /etc/crontab. Deve-se evitar que usuários leiam este arquivo, desta forma aplicamos a permissão 640 ao mesmo:

# chmod 640 /etc/crontab

 

Diretório /root

O diretório home do root vem por padrão com a permissão 755, o que permite que outros usuários vejam e executem o seu conteúdo. É interessante alterar essa permissão para 700:

# chmod 700 /root

 

Processos

Por padrão, o FreeBSD permite que qualquer usuário veja todos os processos em execução, inclusive os de outros usuários. Para que isto não ocorra, insira a seguinte linha no arquivo /etc/sysctl.conf:

kern.ps_showallprocs=0

Para efeito imediato, execute a linha de comando abaixo:

# sysctl kern.ps_showallprocs=0

 

Conexões em portas fechadas

Caso seja de interesse identificar tentativas de conexões a portas que não estão habilitadas, podemos fazer com que o sistema gere um log disso. Serão identificados dessa forma scanners de portas e softwares ou usuários mal intencionados. Basta adicionar as seguintes linhas ao arquivo /etc/sysctl.conf:

net.inet.tcp.log_in_vain=1
net.inet.udp.log_in_vain=1

As tentativas de conexões serão logadas no arquivo /var/log/messages. Note que isto pode abrir precedente para um ataque DoS, se alguém tentar abrir um número muito grande de conexões a muitas portas simultaneamente, o sistema poderá ficar sobrecarregado fazendo esse log.

 

Securelevel

O Securelevel é o nível de segurança do kernel, e varia de -1 (menos seguro) a 3 (mais seguro). É recomendável manter o nível em no mínimo 1. Quanto menor o nível mais inseguro, mas devemos manter um equilíbrio entre segurança e funcionalidade. Uma explicação detalhada de todos nos níveis é encontrada no manual do Init, através do comando "man init". Verifique qual é o nível atual através do seguinte comando:

# sysctl -a | grep securelevel

Para alterar o nível padrão para 1, insira as seguintes linhas no arquivo /etc/rc.conf:

kern_securelevel_enable="YES"
kern_securelevel=1

 

Opções do kernel

Há opções simples que podemos colocar na configuração do kernel para reforçar em alguns aspectos a segurança da nossa máquina. Adicione a seguinte linha na configuração do kernel:

options SC_DISABLE_REBOOT

Isto fará com que a máquina não reinicie ao ser pressionado Ctrl+Alt+Del. Após modificada a configuração do kernel, o mesmo deve ser compilado e reinstalado.

 

Atualização do sistema

Provavelmente uma das partes mais importantes para garantir a segurança do sistema seja mantê-lo atualizado. Deve-se manter tanto o sistema operacional quanto os programas que forem instalados.

 

Manutenção de Data/Hora

É importante manter a hora certa, para que no evento de uma auditoria ou inspeção dos logs e do sistema, em caso de problemas ou ataques, possamos confiar nos horários ou timestamps dos logs.

 

Atualizado em 08/03/04.

Heini Thomas Geib.
http://infsr.unijui.tche.br/~heini

Voltar