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://www2.unijui.edu.br/~heini