Unidade IV -Hardening Linux
-
Upload
maxuel-wylen -
Category
Documents
-
view
73 -
download
1
description
Transcript of Unidade IV -Hardening Linux
Faculdade de Tecnologia de Teresina – CET
Auditoria e Segurança de Redes
Prof.º: André Henry I. e Silva
Unidade IV – Hardening Linux
• Definição de Hardening e importância
• Instalação segura do sistema
• Controle de acesso em sistemas de arquivos
• Procedimentos pós-instalação
• Controle de acesso de usuários
• Ajustando o kernel
• Registro (Logs) no Sistema
Hardening: Definições
Segundo a Wikipedia
– “Hardening é um processo de mapeamento
das ameaças, mitigação dos riscos e
execução das atividades corretivas - com foco
na infra-estrutura e objetivo principal de torná-
la preparada para enfrentar tentativas de
ataque.”
Hardening: Definições (2)
Segundo a ITSecurity.com
– “Hardening é o processo de otimizar as
configurações de segurança de um sistema,
um termo comumente aplicado a sistemas
operacionais.”
Hardening: Definições (3)
•Processo de fortificação do sistema operacional
aplicando técnicas específicas de controles.
•Efeito de blindagem do sistema
•Exemplos:
– Patch do kernel ou configuração de
parâmetros (sysctl);
– Remoção de pacotes e desabilitação de
serviços desnecessários.
Hardening: Importância
•Adequação as Normas
– ISO 17799 e ISO 27001
• Guia de referência para boas práticas dos
processos e gestão da Segurança da Informação
Corporativa;
• Controle de Acesso
– Lógico e Físico
• Políticas
• Processos (gestão da continuidade de negócio)
•É um processo da fase do Gerenciamento de Riscos
– Avaliação de todos os ativos
Projetos de Hardening em Linux
•Hardening Linux Kernel:
– Security-Enhanced Linux (SELinux),
• http://selinux.sourceforge.net
– Uso do Linux Security Modules (LSM) no kernel
– Grsecurity, http://www.grsecurity.net
– PaX Project, http://pax.grsecurity.net/
•Hardening Linux:
– Bastille Linux
• http://bastille-linux.sourceforge.net
– Debian Harden
Hardening: BIOS
•Desabilitar a inicialização a partir de dispostivos como
disquete, cdrom, drive usb e rede
– Impedir que pessoas indesejadas tentem iniciar o
sistema a partir de um disco especial de boot
– Proteger contra mudanças nas características da
BIOS
• Reinicializar a máquina e mudar a sequência de
boot para Hard Drive ONLY
• Incluir uma senha para a BIOS.
Hardening: BIOS
•Desabilitar a inicialização a partir de dispostivos como
disquete, cdrom, drive usb e rede
– Impedir que pessoas indesejadas tentem iniciar o
sistema a partir de um disco especial de boot
– Proteger contra mudanças nas características da
BIOS
• Reinicializar a máquina e mudar a sequência de
boot para Hard Drive ONLY
• Incluir uma senha para a BIOS.
INSTALAÇÃO SEGURA DO SISTEMA
Instalação Segura do Sistema
•Dê preferências para Sistemas Operacionais que:
– Já utilizados no ambiente ou empresa;
– Equipe técnica já possui conhecimento e prática;
– Existe versão atual e estável (nem sempre a versão mais nova é
a melhor escolha)
– Tenham sido avaliados, principalmente nas funcionalidades
desejadas e nos quesitos estabilidade e segurança;
– Suporte a atualizações.
Instalação Segura do Sistema (2)
•Procure baixar os arquivos de instalação do repositório
oficial da distribuição;
•Após baixas as imagens (ISO), verificar a integridade das
mesmas (calculo do hash)
•Ainda na instalação selecione uma senha forte, de
preferência que contenha letras maiúsculas, minúsculas,
números e caracteres especiais para o usuário “root”.
•Planeje conexões e endereços de rede do servidor;
•Finalmente, documente todo o processo de instalação.
Personalize sua Instalação
• Instalações Padrão são inseguras por padrão
• Escolha cuidadosamente os pacotes que deverão ser instalados
• Não instale Servidores Web, Banco de Dados, News Server a
menos que seja realmente necessário
•Estabeleça senhas difíceis para o root e para os usuários
– Não opere o sistema como root o tempo inteiro
– Menos é mais!!
Personalize sua Instalação
•As boas práticas de instalações nos aconselham a particionar o disco
e colocar os principais diretórios em partições separadas. Isso nos
proporciona maior proteção, pois cada partição tem sua tabela
separada.
Sist. Arq. Tam Usad Disp Uso% Montado em
/dev/sda3 1,2G 492M 579M 46% /
/dev/sda5 19G 428M 17G 3% /var
/dev/sda6 19G 3,0G 15G 17% /usr
/dev/sda8 8,3G 169M 7,7G 3% /tmp
/dev/sda9 74G 6,5G 64G 10% /home
Hardening Sistemas de Arquivos
•Conforme a norma ABNT NBR ISO/IEC 27001:2006, deve-se
proteger a integridade do software e a informação
•Dessa maneira, recomenda-se a utilização de opções de
restrição do comando mount para a segurança do sistema de
arquivos
Hardening Sistemas de Arquivos (2)
•Nosuid – faz com que binários com permissão Suid bit não surtam efeito na
partição na qual está definido.Um exemplo, adicione um usuario:
# adduser teste
•Faça uma cópia das shells do seu sistema para o diretório home desse
usuário e atribua às shells a permissao de Suid bit.
# cp /bin/*sh* /home/teste
# chmod 4755 /home/teste/*sh*
•Logue-se em outro terminal com o usuário que você criou e tente executar
uma dessas shells.
$ cd /home/teste; ./sh; $ id
Hardening Sistemas de Arquivos (3)
•Para resolvermos isso, vamos remontar a partição onde está
montado o /home, mas agora com a opção nosuid que tinha
comentado no slide anterior.
# mount -o remount,rw,nosuid /home
# mount
•Com a opção nosuid, façamos o teste novamente e veja que as
shells continuam com o Suid bit ativado, porem, quando forem
executadas não poderam ter mais o acesso no nível de root.
Hardening Sistemas de Arquivos (4)
•Outra opção seria utilizar o noexec que não deixa e execução de binários ou
arquivos executáveis dentro da partição na qual essa opção está ativada.
•Ela pode ser aplicada em todos diretórios mas é muito comum ser aplicado
nos diretórios /home e /tmp.
•Crackers se aproveitatam desses diretórios que por padrão qualquer usuário
pode pôr backdoors ou qualquer outro programa malicioso para ter acesso
completo ao sistema.
•Para isso só precisamos remontar a partição com a opção noexec ativada.
# mount -o remount,rw,noexec /home
# mount
Hardening Sistemas de Arquivos (5)
•Há também a opção noatime que não é uma opção de
segurança mas sim de performance porque faz com que o kernel
execute uma tarefa a menos quando noatime está definido e
destinado à atualizações do tempo de acesso de arquivo.
•Para vermos um exemplo disso, primeiro iremos ver o comando stat que é usado para verificar o status de um arquivo ou de um
sistema de arquivos.
Hardening Sistemas de Arquivos (6)
•A saida desse comando nos retorna informações importantes, mas as
principais aqui que serão vistas são as opções Acess (atime), Modify (mtime) e
Change (ctime)
•Exemplo: Criaremos dois arquivos em partições diferentes
# touch /root/teste1
# touch /tmp/teste2
• Depois veremos seus status
# stat /root/teste1
# stat /tmp/teste2
•Guardemos as informações obtidas e prestem atenção nas 3 opções citadas
acima Access, Modify e Change.
Hardening Sistemas de Arquivos (7)
•Depois disso iremos visualizar o conteúdo deles
# cat /root/teste1
# cat /tmp/teste2
• e de novo verificaremos o status deles
# stat /root/teste1
# stat /tmp/teste2
•Percebam que os Access dos arquivos estão diferentes. Quando
visualizamos seu conteúdo, modificamos o tempo de acesso
deles.
Hardening Sistemas de Arquivos (8)
•Faremos a mesma coisa com alterando agora as permissões
deles.
# chmod 777 /root/teste1
# chmod 777 /tmp/teste2
• e de novo verificaremos o status deles
# stat /root/teste1
# stat /tmp/teste2
•Vejam que o Access agora não foi alterado mas o Change foi.
Sempre que mudamos as permissões de um arquivo, o Change
será mudado, registrando a ultima data e hora da mudança.
Hardening Sistemas de Arquivos (9)
•Agora iremos inserir um conteúdo nesses arquivos
# echo cet > /root/teste1
# echo cet > /tmp/teste2
• verificaremos o status deles
# stat /root/teste1
# stat /tmp/teste2
•E podemos ver que o Change foi alterado novamente, mas junto a ele
o Modify. Porque agora não ocorreu só um acesso mas também uma
alteração no conteúdo do arquivo.
Hardening Sistemas de Arquivos (10)
•Com isso podemos agora remontar nossa partição que está montada
no diretório /tmp com a opção noatime (para que haja uma melhora na
performance)
# mount -o remount,rw,noatime /tmp
•Com a partição remontada com a opção noatime iremos repetir os
testes que fizemos antes.
# cat /root/teste1
# cat /root/teste2
# stat /root/teste1
# stat /tmp/teste2
•Vejam que agora o Access (atime) dos arquivos dentro do /tmp não foi
modificado por causa da opção noatime que definimos anteriormente .
Hardening Sistemas de Arquivos (11)
•Eis as principais opções do comando mount
– defaults: permite tudo
– noquota: não ajustar quotas para usuários
– nosuid: não permitir SUID/SGID
– nodev: não permitir acesso a dispositivos especiais ou de caractere
– noexec: não permitir a execução de nenhum binário
– quota: permitir uso de quotas por usuário
– ro: permitir para somente-leitura
– rw: permitir para leitura-escrita
– suid: permitir acessos SUID/SGID
Resumo do Controle do Sistema de Arquivos
Resumo do Controle do Sistema de Arquivos (2)
# vi /etc/fstab
/dev/hda1
/boot ext3 defaults,nosuid 0 2
/dev/hda3 / ext3 defaults 0 1
/dev/hda4 /home ext3 defaults,nosuid,noexec 0 2
/dev/hda5 /usr ext3 defaults,nosuid 0 2
/dev/hda6 /tmp ext3 defaults,nosuid,noexec 0 2
/dev/hda7 /var ext3 defaults,nosuid,noexec 0 2
/dev/hda8 /var/log ext3
defaults,nosuid,noexec,noatime 0 2
/dev/hda2 none swap sw 0 0
/dev/hdb /media/cdrom0 iso9660
ro,user,noauto 0 0
Resumo do Controle do Sistema de Arquivos (3)
•Ajuste as permissões do arquivo /etc/fstab para somente leitura
# chmod 400 /etc/fstab
•Ajuste o bit de imutabilidade também
# chattr +i /etc/fstab
Hardening do Sistema de Arquivos: Considerações
•Há um inconveniente ao ter essas opções ativadas. Quando formos instalar um novo pacote com apt-get, dpkg ou
rpm. Esses utilitários executam e gravam informações nos
diretórios /var e /tmp que por sua vez setamos a opção
noexec nas partições onde estão montada esses diretórios.
Precisaremos criar um script simples com os comandos para
remontar essas partições e poder instalar os pacotes.
Hardening do Sistema de Arquivos: Considerações
(2)
# vim /root/noexec
#!/bin/bash
case $1 in
start)
mount -o remount,rw,noexec /var
mount -o remount,rw,noexec /tmp
mount
echo “Partições SEM permissão de execução”
;;
....
cont.
stop)
mount -o remount,rw,exec /var
mount -o remount,rw,exec /tmp
mount
echo “Partições COM permissões de execução”
;;
*) echo “erro use $0 {start|stop}”
exit 0
;;
esac
exit 1
Hardening do Sistema de Arquivos: Considerações(3)
•Depois toda vez que executar:
# ./noexec start
•o script vai deixar as partições sem permissão de execução
# ./noexec stop
•Vai permitir novamente que possa ser executado alo dentro das partições
definidas no script, podendo agora instalar pacotes apt e dpkg.
•Para maior comodidade podemos copiar esse script para um diretório PATH
do root, por exemplo o /sbin, assim podemos executar o script de qualquer
diretório do sistema.
Hardening do Sistema de Arquivos: Considerações(3)
•Depois toda vez que executar:
# ./noexec start
•o script vai deixar as partições sem permissão de execução
# ./noexec stop
•Vai permitir novamente que possa ser executado alo dentro das partições
definidas no script, podendo agora instalar pacotes apt e dpkg.
•Para maior comodidade podemos copiar esse script para um diretório PATH
do root, por exemplo o /sbin, assim podemos executar o script de qualquer
diretório do sistema.
Quota do usuário
•Para controlar a utilização do sistema de arquivos, pode-
se fazer uso de quotas, que devem ser especificadas para
partições e não para diretórios.
•O primeiro passo é incluir as opções usrquota e grpquota
no arquivo /etc/fstab, na partição em que se deseja utilizar
# vi /etc/fstab
/dev/hda9 /home ext3 defaults,usrquota,grpquota 0 2
•Há dois padrões para o uso de quotas, quota1 e quota2,
sendo que para cada um deve-se carregar o módulo
específico no kernel, quota_v1 e quota_v2
Quota do usuário (2)
•Trabalharemos com o padrão de quota2. Deve-se criar
dois arquivos de controle de quota
– aquota.user – gerencia quotas de usuários
– aquota.group – gerencia quotas de grupos
# cd /home
# touch aquota.user aquota.group
Somente o root deve ter permissão para leitura e escrita sobre eles
# chmod 600 aquota.user
# chmod 600 aquota.group
•Deve-se remontar o sistemas de arquivos, mas, como
geralmente este está sempre ocupado, recomenda-se
salvar aplicações e reiniciar o sistema.
Quota do usuário (3)
•Após a inicialização, consultar o status de quota para a
partição
# repquota -v -a
•Agora, pode-se definir quanto cara usuário poderá utilizar
#edquota -u teste
•Teremos:
– O sistema de arquivos onde a quota está habilitada
– Limites soft e hard para o número máximo de blocos
– Limites soft e hard para o número máximo de inodes
Quota do usuário (4)
•Para consultar a quota de um usuário
# quota -u usuario
•Para verificar mais detalhes sobre o uso das quotas nas
partições
#quotastats
•Desativar a quota da partição
#quotaoff -v /home
•Para fazer uma checagem na partição e verificar se está
tudo OK
#quotacheck -vcug /home
•Ativar a quota da partição
#quotaon -v /home
Ajuste finos sobre arquivos
•Permissões de Arquivos umask
# umask 022
•Arquivos com permissão de escrita por todos
# find / -perm -2 -type f –ls
•Arquivos sem “dono”
# find / -nouser –o -nogroup –ls
•Arquivos com bit SUID ativado
# find / -type f \( -perm -04000 -o -perm -02000 \) -ls
•Ajustando o Sticky Bit para diretório públicos
# chmod 1777 <diretorio_publico>
Ajuste finos sobre arquivos (2)
•Sugere-se fazer uma checagem detalhada desse
arquivos, deixando com bit Suid apenas alguns poucos
programas necessários como su, ping, passwd:
# find / -type f \( -perm -04000 -o -
perm -02000 \) > /root/lista.suid
Ajuste finos sobre arquivos (3)
•Vamos retirar todas as permissões de Suid bit dos
binários
# chmod -s -Rv /
•Onde:
• s – retira a permissão de Suid bit
• R – é recursivo, do / (raiz) para baixo
• V – é o modo verbose (mostra o que está sendo feito pelo comando)
•Depois, coloque a permissão de Suid bit apenas para o que julgar necessário
# chmod +s /usr/bin/passwd
Sudo
•Com o sudo, pode-se definir que comandos cada
usuário comum pode executar como se fosse root
# apt-get install sudo
•O arquivo de configuração do sudo é /etc/sudoers
•Exemplo de configuração:
teste ALL=/sbin/ifconfig, /sbin/iptables
•Define que o usuário teste pode executar os
comandos ifconfig e iptables, sendo solicitada a senha
de root
Sudo (2)
•Exemplo de configuração:
teste ALL=NOPASSWD: /bin/reboot, /bin/halt
•Define que o usuário teste pode executar os
comandos reboot e halt, sem que seja solicitada a
senha de root
•Exemplo de configuração:
teste ALL=/sbin/passwd [A-Z]*,!/usr/bin/passwd root
•Define que o usuário teste pode alterar a senha de
qualquer usuário cujo login estiver no intervalo de A-Z,
exceto a senha de root
PROCEDIMENTOS PÓS-INSTALAÇÃO
Gerenciados de inicialização - GRUB
•Arquivo de edição do GRUB é: /etc/default/grub
•Incluir/alterar a variável timeout=0, para não mostrar
menu
•Arquivo de configuração gerado através do comando “update-grub”: /boot/grub/grub.cfg
•Proteger o arquivo /boot/grub/menu.lst
– chmod 600 /boot/grub/grub.cfg
– chattr +i /boot/grub/grub.cfg
Desabilitar Ctrl+Alt+Delete
•Sabemos que pressionando Ctrl-Alt-Delete
reiniciamos o sistema
•Prevenir que a máquina seja reinicializada
•Editar o arquivo /etc/inittab e comentar a seguinte
linha:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r
now
Removendo programas desnecessários
•Após instalação do sistema linux devemos nos preocupar se
todos os programas são realmente necessários. Lembre-se
um servidor não deve conter programas clientes.
•Verificar pacotes instalados:
– No Debian
dpkg -l
– Red Hat:
Rpm -qa
Removendo programas desnecessários (2)
•Exemplos:
– No Debian
apt-get --purge remove wget
apt-get --purge remove portmap
apt-get --purge remove exim*
Check-list nos serviços dos sistema
•Deve-se verificar os status dos serviços, ou seja, se esta funcionando
corretamente e endereços e portas no qual aceitam conexões.
•Primeiramente devemos saber a qual porta determinado serviço esta
associado:
# cat /etc/services
ssh 22/tcp
ssh 22/udp
• Somente ao root deve ser permitido realizar alterações nesse arquivo
• Portanto, deve-se torná-lo imutável:
# chattr +i /etc/services
Check-list nos serviços dos sistema (2)
•Informações sobre serviços ativos no sistema:
# netstat -ntl
Proto Recv-Q Send-Q Endereço Local Endereço Remoto
Estado
tcp 0 0 0.0.0.0:22 0.0.0.0:* OUÇA
tcp 0 0 127.0.0.1:631 0.0.0.0:* OUÇA
Check-list nos serviços dos sistema (3)
•Para verificar se as portas corretas estão abertas, pode usar
o nmap
•Usado também para verificar o que está aberto em
um servidor
• # nmap -sS -P0 -O maquina-destino
– sS - realiza um stealth scan , a verificaçao ocorre
pelo modo half-open connection.
– P0 - realiza o portscan sem pingar.
– O - Tenta advinhar o sistema operacional remoto
Check-list nos serviços dos sistema (4)
•Outros exemplos
# nmap -sS 192.168.1.150
• exibe as portas abertas ou em uso ou # nmap -sF <ip> -p 1-65535
# nmap -sF 192.168.1.2 -p 1-65535
• pega todas as portas em uso. # nmap -p 1-65000 localhost
Serviços de Rede
•Stand alone versus Inetd
•O modelo Inetd
– Network Super Daemon
– /etc/services : Mapeia o nome do serviço a número de porta
– /etc/inetd.conf : Main Configuration file for inetd. ftp stream tcp nowait root /usr/sbin/tcpd proftpd
•O modelo Xinetd
– Grande substituto para inetd
– Mais seguro e flexível com avançado mecanismo de controle de acesso
– /etc/xinetd.conf : Arquivo de Configuração principal do xinetd
– /etc/xinetd.d/ : Contém arquivos para serviços gerenciados pelo
xinetd
Serviços de Rede (2)
Gerenciamento de Serviços de Redes em Inetd e Xinetd
•Para Inetd : descomentar o correspondente serviço no arquivo inetd.conf
– Reiniciar o daemon Inetd
# pkill –HUP inetd
•Para Xinetd : Fazer mudanças em xinetd.conf e xinetd.d
– Mecanismos de controle de acesso para serviços pode ser especificados
# /etc/init.d/xinetd restart
•Típicos Serviços que devem ser bloqueados
– Finger, rwho, rsh , rlogin, rexec, echo, ntalk
– FTP, Telnet
– Recomenda-se ssh, scp, sftp
Hardening - Xinetd
•Super servidor que carregar serviços de rede baseado em
requisições a partir da rede
•/etc/xinetd.conf
– Portas a escutar
– Que servidor iniciar para cada porta
•Verifica que serviço oferecer – Negar outros
– Arquivos /etc/xinetd.d/*
– Alterar de disable = no para disable = yes
# chmod 600 /etc/xinetd.conf
Hardening - Xinetd
•stat /etc/xinetd.conf – garantir que o proprietário é o root
•chattr +i /etc/xinetd.conf – tornar o arquivo
“imutável”, não pode ser modificado, deletado ou renomeado and
nenhum link criado
•reiniciar o servidor xinetd após as mudanças
– /etc/init.d/xinetd reload # chattr +i /etc/xinetd.conf # chattr +i /etc/xinet.d/*
Gerenciando a inicialização dos serviços
•O diretório /etc/init.d/ guarda todos os scripts de inicialização de serviços dos
sistema
•O diretório /etc/rc.d/ guarda os links simbólicos para cada runlevel (nível de
execução) em diferentes diretórios, por exemplo
– /etc/rc1.d : Serviços que iniciam e param
no nível
– /etc/rc2.d/S10network : iniciar o serviço
de rede no runlevel 2
– /etc/rc2.d/K09smb : para o serviço smb
(samba)
•Estes scripts devem estar disponível para leitura apenas para o root
• # chmod -R 700 /etc/rc.d/init.d/*
Gerenciando a inicialização dos serviços (2)
•Debian:
• Habilita ou desabilita um serviço na inicialização do sistema. O
insserv lê o cabeçalho do script referente ao serviço especificado e
automaticamente configura outros serviços necessários, na ordem
de execução correta.
• Sintaxe:
Para adicionar um serviço:
#insserv nome-do-serviço
Para remover um serviço:
#insserv -r nome-do-serviço
Gerenciando a inicialização dos serviços (3) -
Runlevels
•0: desligar o sistema
•1: usuário único (super usuário)
•2: multiusuário sem serviço de rede
•3: multiusuário com serviço de rede
•4: livre (não definido, depende da distribuição)
•5: multiusuário com serviço de rede e login
gráfico
•6: reiniciar o sistema.
Gerenciando a inicialização dos serviços (4)
•RedHat:
# chkconfig servico on
Coloca serviço para iniciar sempre com o sistema.
# chkconfig servico off
Retira serviço da inicialização junto com o sistema.
Há outras opções para o chkconfig.
Gerenciando a inicialização dos serviços (5)
•Debian:
– Para inicializar/para/reiniciar serviços manualmente
#/etc/init.d/nome_servico start|stop|restart|reload
#invoke-rc.d nome_servico start|stop|restart|reload
•Red Hat:
– Para inicializar/para/reiniciar serviços manualmente
#/etc/init.d/nome_servico start|stop|restart|reload
#service nome_servico start|stop|restart|reload
Arquivo: /etc/host.conf
•Linux usa um arquivo para determinar de onde serão obtidos os
endereços IP corrrespondentes os nomes de máquinas
•Editar /etc/host.conf
order hosts, bind
– Indica ao ordem de utilização dos serviços de consulta de nomes nospoof on
– Não forja o IP da máquina – IP spoofing é uma forma de
exploração da segurança
Hardening: TCPWRAPPERS
•Segundo a norma NBR ISO/IEC 27001, em específico o item
9.4.1, que diz respeito à “Política de utilização dos serviços de
Rede”, é conveniente que os usuários possuam controles e
gerenciamento. E ainda, no item 9.4.7, que diz a respeito ao
“Controle de conexões de Rede” é recomendável que existam
controles que limitem a capacidade de conexão dos usuários.
•Pensando nas recomendações da norma, pode-se,
inicialmente, utilizar dois recursos para limitar o uso dos
serviços de rede, que seriam o TCPWRAPPERS (/etc/hosts.deny
e /etc/hosts.allow) combinado com limitações de conexão que
podemos fazer pelo PAM (/etc/pam.d e /etc/security) aliado à
uma política bem definida e com um estrutura de registro de
eventos Syslog, que iremos configurar posteriormente.
Hardening: TCPWRAPPERS (2)
•Nega qualquer acesso remoto dos serviços
vinculados aos Supers Deamon (xinet ou inetd).
–Sua configuração deve ser efetuada através dos arquivos
/etc/hosts.allow e /etc/hosts.deny
–Em /etc/hosts.deny são configuradas as regras para
negar serviços a determinados clientes, já em
/etc/hosts.allow configuram-se regras para permitir o
acesso a determinados clientes
Hardening: TCPWRAPPERS (3)
•As regras de controle de acesso, existentes nestes dois arquivos, têm o seguinte
formato:
lista_de_daemons : lista_de_clientes [: comando]
–lista_de_daemons: Lista de um ou mais nomes de daemons (como
especificados no /etc/inetd.conf), ou curingas.
–lista_de_clientes: Lista de um ou mais endereços ou nomes de máquinas,
padrões ou curingas utilizados para especificar quais clientes podem e quais não
podem acessar o serviço.
–comando (opcional): É possível executar um comando sempre que uma regra
casa com um padrão e é utilizada.
Hardening: TCPWRAPPERS (4)
•Curingas podem ser utilizados tanto na lista de
daemons quanto na lista de clientes.
–ALL
•Significa todos os serviços ou todos os clientes, dependendo apenas
do campo em que se encontra.
–LOCAL
•Este curinga casa com qualquer nome de máquina que não contenha
um caractere ponto “.”, isto é, uma máquina local.
–PARANOID
•Casa com qualquer nome de máquina que não case com seu
endereço. Isto geralmente ocorre quando algum servidor DNS está mal
configurado ou quando alguma máquina está tentando se passar por
outra.
PAM – Módulo de Autenticação Plugável
● O PAM possui métodos que podem auxiliar os métodos de
autenticações tradicionais, possibilitando que executem novas
funções. Ex: controle de horário em que o usuário possa logar-se.
● Crie uma política que não possibilite o uso de “su”, exceto pelos
usuários do grupo root.
# vi /etc/pam.d/su
auth required pam_wheel.so
PAM – Módulo de Autenticação Plugável (2)
● Possibilite ssh no horário das 7:30 às 19:00.
# vi /etc/security/time.conf
sshd;*;*;Al0730-1900
# vi /etc/pam.d/sshd
account required pam_time.so
PAM – Módulo de Autenticação Plugável (3)
•Desative a possibilidade de login do root através do PAM e o
arquivo time.conf:
# vi /etc/pam.d/login
account requisite pam_time.so
# vi /etc/security/time.conf
login;*;root;!Al0000-2359
PAM – Módulo de Autenticação Plugável (4)
•Onde:
login – indica o serviço
tty* – indica os terminas onde a política será
aplicada
root – determina que a política será aplicada ao
usuário root
!Al0000-2359 – indica o horário permitido, sendo que
“!” estabelece que horário não é permitido
Sintaxe: servicos;ttys;usuarios;tempos
Impor Limites e Recursos
•/etc/security/limits.conf – importante ajustar os
limites,para prevenir ataques DoS
•Acrescentar ou modificar as seguintes linhas em limits.conf para:
hard core 0 # proibir arquivos core
hard rrs 5000 # uso da memória 5M
hard nproc 20 # número de processos
•Editar /etc/pam.d/login e acrescentar session required /lib/security/pam_limits.so
•Evitar :(){ :|: &}; :
Segurança no Terminal: Limitar o uso de terminal de
texto
•Não é interessante deixar o login habilitado em
todos os terminais de texto. Para bloquear o
terminais 4,5 e 6, por exemplo, deve-se editar o
arquivo /etc/inittab e comentar as seguintes
linhas:
# vi /etc/inittab #4:23:respawn:/sbin/getty 38400 tty4 #5:23:respawn:/sbin/getty 38400 tty5 #6:23:respawn:/sbin/getty 38400 tty6
Bloquear login de root nos terminais de texto
# vi /etc/securetty
#tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8
#tty9
#tty10
#tty11
#tty12
Bloquear o terminal com a variável TMOUT
•A variável TMOUT é que controla em quanto tempo
o terminal será deslogado em caso de desuso. Não
vem setada por padrão em sistemas Linux.Podemos
setá-la provisoria e manualmente:
# TMOUT=15
•Ou, definitivamente, inserido-a ao final do arquivo
/etc/profile
# vi /etc/profile
fi
fi
TMOUT=180
Remover shells válidas de certos usuários
•Deve-se remover as shells válidas de todos os usuários
que não vão executar oficialmente login no sistema, através
de terminal local (tty) ou via ssh. Executando o script
/root/invalidos.sh. Combinado a isso, crie um usuário
estratégico pertencente ao grupo root que terá validade
para que você possa utilizá-lo para realização de login e
posteriormente usar o “su” para tornar-se root.
# useradd -g root nome_usuario
# passwd nome_usuario
# vi /root/invalidos.sh
Remover shells válidas de certos usuários (2)
•Script /root/invalidos.sh
#!/bin/bash
for USER in $(cat /etc/passwd| cut -f 1 -d “:” | \
grep -v root | grep -v nome_usuario)
do chsh -s /bin/false $USER
done
Remover shells válidas de certos usuários (3)
•Para adotar essa política sempre que se criar um
novo usuário, é necessário editar os seguintes
arquivos.
•No Debian:
# vi /etc/adduser.conf
•Nesse arquivo, pode-se mudar a variável DSHELL
para um shell inválida
DSHELL=/bin/false
•No Red Hat:
# vi /etc/default/useradd
Log do Shell
•O shell bash armazenas os últimos comandos no
arquivo ~/.bash_history
•Todo usuário tem seu próprio arquivo .bash_history
•Reduzindo o número de comandos armazenados no
arquivo .bash_history pode manter protegidas as
senhas casualmente digitadas em linha de comando
•Assim, deve-se ajustar as variáveis HISTFILESIZE e
HISTSIZE que estão no arquivo /etc/profile para:
HISTFILESIZE = 20 HISTSIZE = 20
CONTROLE DE ACESSO DE USUÁRIOS
Removendo usuários desnecessários
•O arquivo /etc/passwd armazena os usuários ativos no sistema,
portanto, devemos deixar ativos os usuários que realmente
devam ter acesso, principalmente usuários que não necessitem de shell, substituir o /bin/bash ou /bin/sh por
/bin/false:
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
Data de expiração para conta de usuário
•Para tanto, utiliza-se o comando chage, que
modifica parâmetros do arquivo /etc/shadow
# chage -l teste
•Fazendo algumas modificações para o usuário
# chage -M 30 -W 5 -I 2 teste
# chage -l teste
•Onde:
-M é o tempo máximo de validade da conta
-W é o tempo de aviso
-I é o tempo antes de a conta ser desativada
Contas especiais
•Desabilitar todas as contas especiais
padrão do sistema, por exemplo, news,
games, ...
–Para apagar um usuário - userdel usuario
–Para apagar um grupo - groupdel usuario
–Tornar imutáveis os arquivos de contas # chattr +i /etc/shadow
# chattr +i /etc/passwd
# chattr +i /etc/group
# chattr +i /etc/gshadow
Políticas de senhas
•Alterar as configurações de login padrão:
- No arquivo /etc/login.defs PASS_MAX_DAYS 100
PASS_MIN_LENGTH 8
PASS_WARN_AG 10
•Limpar todas as informações de sistema
–/etc/motd
–/etc/issue & /etc/issue.net
Políticas de senhas (2)
•Algo muito importante, frequentemente
negligenciado
•Ajustar os valores corretos em /etc/login.defs
–Alterar PASS_MIN_LEN 5
–para PASS_MIN_LEN 8
–Alterar PASS_MAX_DAY 99999
–Alterar PASS_MAX_DAY 63
•apg – Automatic password generator
–http://www.adel.nursat.kz/apg/
Políticas de senhas (2)
•Algo muito importante, frequentemente
negligenciado
•Ajustar os valores corretos em /etc/login.defs
–Alterar PASS_MIN_LEN 5
–para PASS_MIN_LEN 8
–Alterar PASS_MAX_DAY 99999
–Alterar PASS_MAX_DAY 63
•apg – Automatic password generator
–http://www.adel.nursat.kz/apg/
Procurar por senhas fracas
•Pode-se usar o John The Ripper, que é uma
ferramenta de bruteforce, para descobrir senhas
fracas e desabilitar usuário.
# apt-get install john
# scp root@IP_servidor:/etc/shadow /root
# john /root/shadow
•Caso se queira fazer uma nova verificação, deve-se apagar o arquivo
john.spot
Hardening - SSH
•O serviço SSH é, atualmente, um dos
mais úteis para administradores de
sistemas
–Permite acesso remoto a máquinas
–Confidencialidade
–Autenticidade (para os que souberem usar)
–Automatização de atividades
Hardening – SSH (2)
•Configuração:
–Os arquivos de configuração normalmente ficam em:
/etc/ssh
–Normalmente temos estes arquivos moduli
sshd_config
ssh_host_dsa_key.pub
ssh_host_key.pub
ssh_host_rsa_key.pub
ssh_config
ssh_host_dsa_key
ssh_host_key
ssh_host_rsa_key
Hardening – SSH (3)
•Arquivo: /etc/ssh/sshd_config
•Configurações:
–Desabilitar login como root PermitRootLogin no
– Usar a separação de privilégios (neste caso
apenas algumas atividades são feitas com o
usuário root e as demais com outro usuário
do sistema)
•UsePrivilegeSeparation yes
Hardening – SSH (4)
•Checar as permissões dos arquivos e o donos do
mesmo StrictModes yes
•Desabilitar o sftp, comentando-o #Subsystem sftp /usr/lib/misc/sftp-server
Hardening – SSH (5)
•Desabilitar as autenticações baseadas em
confiança entre os hosts IgnoreRhosts yes
HostbasedAuthentication no
RhostsRSAAuthentication no
Hardening – SSH (6)
•Possibilite ssh no horário das 7:30 às 19:00.
# vi /etc/security/time.conf
ssh;*;*;Al0730-1900
# vi /etc/pam.d/ssh
account required pam_time.so
AJUSTANDO O KERNEL
Parâmetros de Tunning do Kernel
•Parâmetros pode ser ajustados em /etc/sysctl.conf
– editar /etc/sysctl.conf e acrescentar
net.ipv4.icmp.echo.ignore.all =1
• Reiniciar a rede digitando:
/etc/init.d/networking restart
• Recusa a responder requisições de broadcast
net.ipv4.icmp.echo.ignore.broadcasts =1
• Reiniciar a rede digitando:
/etc/init.d/networking restart
Parâmetros de Tunning do Kernel (2)
•Desabilitar redirecionamentos de ICMP
– editar /etc/sysctl.conf e acrescentar
net.ipv4.conf.all.accept_source_route =0
Reiniciar a rede digitando:
/etc/init.d/networking restart
• Ativar proteção TCP SYN Cookie (o recurso syncookies é
utilizado pelo sistema toda vez que fila de syn excede o valor
máximo)
net.ipv4.tcp_syncookies =1
• Reiniciar a rede digitando:
/etc/init.d/networking restart
Parâmetros de Tunning do Kernel (3)
•Desabilitar redirecionamentos de ICMP
– editar /etc/sysctl.conf e acrescentar
net.ipv4.conf.all.accepts_redirects=0
• Reiniciar a rede digitando:
/etc/init.d/networking restart
• Ativar proteção contra fragmentação/desfragmentação
net.ipv4.ip_always_defrag=1
• Reiniciar a rede digitando:
/etc/init.d/networking restart
Parâmetros de Tunning do Kernel (4)
•Ativar proteção contra mensagens inválidas bad-error
(roteadores que enviam broadcast frames com respostas
inválidas)
•editar /etc/sysctl.conf e acrescentar
net.ipv4.icmp_ignore_bogus_error_responses =1
• Reiniciar a rede digitando:
/etc/init.d/networking restart
• Ativar proteção contra IP spoofing, ajuda a certificar que os
pacotes usam endereços de origem legítimos
net.ipv4.conf.all.rp_filter =1
• Reiniciar a rede digitando:
/etc/init.d/networking restart
Parâmetros de Tunning do Kernel (5)
•Logar quaisquer pacotes de origem suspeita, forjados
ou redirecionados
– editar /etc/sysctl.conf e acrescentar
net.ipv4.conf.all.log_martians =1
• Reiniciar a rede digitando:
/etc/init.d/networking restart
REGISTROS DE LOGS NO SISTEMA
Servidor de Logs
• A necessidade de registro das atividades dos usuários e
serviços dos sistemas é, notoriamente, muito importante
para os administradores. A importância é tanta, que na
norma NBR ISO/IEC 17799,recomenda-se no item 9.7.1,
que diz respeito ao “Registro (log) de eventos”, ser
também prioridade uma política de segurança onde os
registros de logs devam atender às seguintes
características:
– Identificação dos usuários;
– Datas e horários de entrada (login, logout);
– Identidade do terminal, nome da máquina ou IP;
– Registro das tentativas de acesso aos aceitos e rejeitados;
– Registro das tentativas de acesso a outros recursos e dados
aceitos e rejeitados.
Syslog-ng
• O syslog-ng é um novo sistema de logs de
extrema facilidade de configuração e possui
grandes recursos.
• Para instalar basta executar:
# aptget install syslogng
• Iremos configurar o Servidor e os Clientes para
enviarem seus logs para o Log Server
Syslog-ng (2)
• Estes são os passos mais importantes, configurar a
origem (source), destino (destination) e o filtro
(filter).
No filtro pode-se utilizar de algumas funções como:
facility() - Ex. facility(mail);
level() - Ex. level(notice);
program() - Ex. program(”^mysqld”);
Syslog-ng: Servidor
• Configuração do Servidor
# vi /etc/syslogng/syslogng.conf
Opções de Origem, Máquinas Remotas
source servremotos { udp();};
• Opções de Filtro
## Filtro para o Servidor Remote 1
filter f_servremoto1 {host(“192.168.0.1”);};
## Filtro para o Servidor Remote 2
filter f_servremoto2 {host(“192.168.0.2”);};
Syslog-ng: Servidor (2)
Configuração do Servidor
• Opções de Destino
# Destino do Logs do Servidor Remote 1
destination servremoto1{
file(“/var/logserver/servremoto1.log”
owner(“root”) group(“root”) perm(0640));};
# Destino do Logs do Servidor Remote 2
destination servremoto2{
file(“/var/logserver/servremoto2.log”
owner(“root”) group(“root”) perm(0640));};
Syslog-ng: Servidor (3)
Configuração do Servidor
• Opções de Log (Montagem do Log)
# Logs do Servidor Remote 1
log{source(servremotos);
filter(f_servremoto1);
destination(servremoto1);};
# Logs do Servidor Remote 2
log{source(servremotos);
filter(f_servremoto2);destination(servremoto2);};
• Reiniciar o Syslog-NG
# /etc/init.d/syslogng restart
Syslog-ng: Cliente
Configuração do Cliente (Servidor Remoto)
# vi /etc/syslogng/syslogng.conf
• Opções de Destino
destination servlog{ udp(“192.168.0.8” port(514));};
• Opções de Log (Montagem do Log)
# Registro dos Logs no Servidor
log{source(src); destination(servlog);};
source src { unix-dgram("/dev/log"); internal(); };
• Reiniciar o Syslog-NG
# /etc/init.d/syslogng restart
Rotacionamento de Logs
• Como os logs crescem muito rapidamente, deve-se
definir um política de logs e utiliza o recurso de
rotacionamento de logs nativo do sistema, o
LogRotate.
• O arquivo de configuração do rotacionamento no Debian é /etc/logrotate.conf e no Red Hat é
o /etc/rotate.conf
Rotacionamento de Logs (2)
Algumas opções do LogRotate
• weekly
Essa opção faz com os logs sejam rotacionados
semanalmente, mas também pode ser diariamente (daily)
• rotate 4
Define que serão mantidos os 4 últimos rotacionamentos
para não perder o controle
• mail root
Define, em que casos de erros de não tem existências de
logos,eles sejam enviados para o root
Rotacionamento de Logs (3)
Algumas opções do LogRotate
• create
Essa opção determina que sejam criados novos
arquivos de log(vazios), após os antigos rodarem
• compress
Essa opção determina que as cópias de logs
sejam compactadas, mantendo sempre o
último rodado descompactado
• Pode-se definir uma estrutura personalizada para
cada arquivo de log, como no exemplo mostrado ao final do arquivo
logrotate.conf
Rotacionamento de Logs (4)
• Mesmo o rotacionamento sendo determinado pelo arquivo de configuração logrotate.conf,
pode-se forçar a rodá-lo a qualquer momento,
manualmente, por meio do comando:
# logrotate /etc/logrotate.conf
• O controle das ações de rotacionamente é feito
por meio do contrab, o que pode ser observado
em:
# cat /etc/crontab
Perguntas? Dúvidas?