quinta-feira, agosto 17, 2006

Dicas básicas de segurança no FreeBSD

Este artigo, foi desenvolvido por um amigo (Roberto Rodrigues) e outros amigos, são configurações básicas no FreeBSD para evitar problemas básicos, como login do toor e coisas do gênero.

Vamos lá:

--
Remover usuario toor:
pw userdel toor

--

Bloquear o boot -s:
no arquivo /etc/ttys altere a linha:
console none unknown off secure
para
console none unknown off insecure

--

Bloquear alguns sistemas de arquivos para que nao tenham arquivos SUID:
ex: altere o /etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1e /tmp ufs rw 2 2
/dev/ad0s1f /usr ufs rw 2 2
/dev/ad0s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0

para

# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1e /tmp ufs rw,nosuid 2 2
/dev/ad0s1f /usr ufs rw 2 2
/dev/ad0s1d /var ufs rw,nosuid 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0

--

Sempre limpar o /tmp:
adicione a linha abaixo em /etc/rc.conf
clear_tmp_enable="YES"

--

Desativar o Sendmail
adicione a linha abaixo em /etc/rc.conf
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

--

Colocar o syslogd para trabalhar apenas localmente:
adicione a linha abaixo em /etc/rc.conf
syslogd_flags="-ss"

--

Desabilitando o portmap:
adicione a linha abaixo em /etc/rc.conf
portmap_enable="NO"

--

Desabilitando o inetd caso não seja necessário:
adicione a linha abaixo em /etc/rc.conf
inetd_enable="NO"

--

Dar permissao 640 para /etc/crontab
# chmod 640 /etc/crontab

--

Dar permissao 700 para /root
# chmod 700 /root

--

Evitar que usuarios vejam os processos dos outros:
adicione a linha abaixo em /etc/sysctl.conf
security.bsd.see_other_uids=0

--

Fazer log de conexoes em portas fechadas:
adicione as linhas abaixo em /etc/sysctl.conf
net.inet.tcp.log_in_vain=1
net.inet.udp.log_in_vain=1
as tentativas de conexao serao gravadas em /var/log/messages

--

Alterar o secure level para 1:
adicione as linhas abaixo em /etc/rc.conf
kern_securelevel_enable="YES"
kern_securelevel=1

--

Desabilitar ctrl+alt+del:
recompile o kernel com a seguinte opcao:
options SC_DISABLE_REBOOT

--

Opcoes ICMP:
evita ataques do tipo smurf
icmp_bmcastecho="NO"
icmp_bandlim="YES"

--

'Dropa' pacotes destinados a portas nao abertas:
padrao eh RST
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1

--

Opcao TCP:
evita estouro de buffer por pacotes SYN
net.inet.tcp.syncookies=1

--

Aumentando a seguranca do arquivo de senhas:
edite o arquivo /etc/login.conf e adicione as seguintes linhas
:passwd_format=blf: (essa linha deve substituir a primeira, que eh MD5)
:idletime=60:
:passwordtime=30d:
:mixpasswordcase=true:
:minpasswordlen=8:
depois execute o comando
# cap_mkdb /etc/login.conf
agora defina novamente as senhas dos usuarios
# passwd root
para finalizar, no arquivo /etc/auth.conf, devera constar a linha
crypt_default=blf

--

Mudando permissoes de diretorios
# cd /var && mv ./tmp/* /tmp/ && rm –rf tmp && ln –s /tmp tmp
# cd /var/log
# chmod 600 *
# chmod 640 wtmp
# chmod 600 /etc/crontab
# chmod 700 /root
# chmod 700 /home/*
# chmod 650 /etc/rc.*
# chmod 600 /etc/master.passwd
# touch /etc/pf.conf
# chmod 600 /etc/pf.conf

--

Desativando CORE DUMPs:
adicione dentro de /etc/sysctls.conf
kern.coredump=0

--

Não permitir que o super-usuario root efetue login:
( Será necessário entrar com outro )

# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none unknown off secure
#
ttyv0 "/usr/libexec/getty Pc" cons25 on insecure
# Virtual terminals
ttyv1 "/usr/libexec/getty Pc" cons25 on insecure
ttyv2 "/usr/libexec/getty Pc" cons25 on insecure
ttyv3 "/usr/libexec/getty Pc" cons25 on insecure
ttyv4 "/usr/libexec/getty Pc" cons25 on insecure
ttyv5 "/usr/libexec/getty Pc" cons25 on insecure
ttyv6 "/usr/libexec/getty Pc" cons25 on insecure
ttyv7 "/usr/libexec/getty Pc" cons25 on insecure
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure

--


Lembrando que nem tudo que tem aqui é necessário depende do que você guarda no seu servidor, acho interessante aplicar algumas coisas deste artigo.
Isso não é nem de longe uma solução de segurança mas ajuda.

Até mais.


2 Comments:

At 11:15 AM, Anonymous Anônimo said...

Belo post, só umas dicas de sys adm pra sys adm :)

chflags(8) é uma boa dica para estas dicas, só cuidado para não se trancar d+.

Soutra coisa fundamental para segurança ao os binários, uma boa política de atualização: portupgrade(8)+make.conf(5) fazem um ótimo trabalho quanto a atualização automática de pacotes, o que é a maior fonte de bugs.

Bloqueas o boot -s pode te trazer maior dor de cabeça que segurança :)

no fstab(5), veja a opção noexec;

O inetd(8), uma dica é utilizar o sshd(8) com o inetd, fazer um script que leia os login suspeitos e adicionar os ips no hosts.allow(5) é uma boa saída para os ataques de brute force, ele também previne spoofing.

os coredumps são muito úteis em um eventual teste "postmortem"

Sobre o acesso ao root no console, utilize opiekey(8) para senhas de uso único, é muito mais seguro que bloquear os consoles.

mas sobre o post, é isso ai, segurança sempre, disculpe se fui chato mas estamos juntos ai para cumprir a nossa meta, servidores seguros. Um abraço!

 
At 10:14 PM, Blogger Thiago Ruiz said...

Que nada Daniel to aberto a correções, so aprendiz meu caro!! hehe toda as dicas são muito bem vindas.

Muito obrigado e valeu!!!

 

Postar um comentário

<< Home