Prof.: Andr Henry I. e Silva andre@ati.pi.gov.br andre.his@gmail.com
andre.his@gmail.com Unidade IV Hardening Linux Definio de Hardening e importncia Instalao segura do sistema Controle de acesso em sistemas de arquivos Procedimentos ps-instalao Controle de acesso de usurios Ajustando o kernel Registro (Logs) no Sistema
andre.his@gmail.com Hardening: Definies Segundo a Wikipedia Hardening um processo de mapeamento das ameaas, mitigao dos riscos e execuo das atividades corretivas - com foco na infra-estrutura e objetivo principal de torn- la preparada para enfrentar tentativas de ataque. andre.his@gmail.com Hardening: Definies (2) Segundo a ITSecurity.com Hardening o processo de otimizar as configuraes de segurana de um sistema, um termo comumente aplicado a sistemas operacionais. andre.his@gmail.com Hardening: Definies (3) Processo de fortificao do sistema operacional aplicando tcnicas especficas de controles. Efeito de blindagem do sistema Exemplos: Patch do kernel ou configurao de parmetros (sysctl); Remoo de pacotes e desabilitao de servios desnecessrios. andre.his@gmail.com Hardening: Importncia Adequao as Normas ISO 17799 e ISO 27001 Guia de referncia para boas prticas dos processos e gesto da Segurana da Informao Corporativa; Controle de Acesso Lgico e Fsico Polticas Processos (gesto da continuidade de negcio) um processo da fase do Gerenciamento de Riscos Avaliao de todos os ativos andre.his@gmail.com 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 andre.his@gmail.com Hardening: BIOS Desabilitar a inicializao 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 mudanas nas caractersticas da BIOS Reinicializar a mquina e mudar a sequncia de boot para Hard Drive ONLY Incluir uma senha para a BIOS. andre.his@gmail.com Hardening: BIOS Desabilitar a inicializao 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 mudanas nas caractersticas da BIOS Reinicializar a mquina e mudar a sequncia de boot para Hard Drive ONLY Incluir uma senha para a BIOS. andre.his@gmail.com INSTALAO SEGURA DO SISTEMA andre.his@gmail.com Instalao Segura do Sistema D preferncias para Sistemas Operacionais que: J utilizados no ambiente ou empresa; Equipe tcnica j possui conhecimento e prtica; Existe verso atual e estvel (nem sempre a verso mais nova a melhor escolha) Tenham sido avaliados, principalmente nas funcionalidades desejadas e nos quesitos estabilidade e segurana; Suporte a atualizaes. andre.his@gmail.com Instalao Segura do Sistema (2) Procure baixar os arquivos de instalao do repositrio oficial da distribuio; Aps baixas as imagens (ISO), verificar a integridade das mesmas (calculo do hash) Ainda na instalao selecione uma senha forte, de preferncia que contenha letras maisculas, minsculas, nmeros e caracteres especiais para o usurio root. Planeje conexes e endereos de rede do servidor; Finalmente, documente todo o processo de instalao.
andre.his@gmail.com Personalize sua Instalao Instalaes Padro so inseguras por padro Escolha cuidadosamente os pacotes que devero ser instalados No instale Servidores Web, Banco de Dados, News Server a menos que seja realmente necessrio Estabelea senhas difceis para o root e para os usurios No opere o sistema como root o tempo inteiro Menos mais!!
andre.his@gmail.com Personalize sua Instalao As boas prticas de instalaes nos aconselham a particionar o disco e colocar os principais diretrios em parties separadas. Isso nos proporciona maior proteo, pois cada partio 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
andre.his@gmail.com CONTROLE DE ACESSO EM SISTEMAS DE ARQUIVOS andre.his@gmail.com Hardening Sistemas de Arquivos Conforme a norma ABNT NBR ISO/IEC 27001:2006, deve-se proteger a integridade do software e a informao Dessa maneira, recomenda-se a utilizao de opes de restrio do comando mount para a segurana do sistema de arquivos
andre.his@gmail.com Hardening Sistemas de Arquivos (2) Nosuid faz com que binrios com permisso Suid bit no surtam efeito na partio na qual est definido.Um exemplo, adicione um usuario: # adduser teste Faa uma cpia das shells do seu sistema para o diretrio home desse usurio 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 usurio que voc criou e tente executar uma dessas shells. $ cd /home/teste; ./sh; $ id
andre.his@gmail.com Hardening Sistemas de Arquivos (3) Para resolvermos isso, vamos remontar a partio onde est montado o /home, mas agora com a opo nosuid que tinha comentado no slide anterior. # mount -o remount,rw,nosuid /home # mount Com a opo nosuid, faamos o teste novamente e veja que as shells continuam com o Suid bit ativado, porem, quando forem executadas no poderam ter mais o acesso no nvel de root.
andre.his@gmail.com Hardening Sistemas de Arquivos (4) Outra opo seria utilizar o noexec que no deixa e execuo de binrios ou arquivos executveis dentro da partio na qual essa opo est ativada. Ela pode ser aplicada em todos diretrios mas muito comum ser aplicado nos diretrios /home e /tmp. Crackers se aproveitatam desses diretrios que por padro qualquer usurio pode pr backdoors ou qualquer outro programa malicioso para ter acesso completo ao sistema. Para isso s precisamos remontar a partio com a opo noexec ativada. # mount -o remount,rw,noexec /home # mount
andre.his@gmail.com Hardening Sistemas de Arquivos (5) H tambm a opo noatime que no uma opo de segurana mas sim de performance porque faz com que o kernel execute uma tarefa a menos quando noatime est definido e destinado atualizaes 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.
andre.his@gmail.com Hardening Sistemas de Arquivos (6) A saida desse comando nos retorna informaes importantes, mas as principais aqui que sero vistas so as opes Acess (atime), Modify (mtime) e Change (ctime) Exemplo: Criaremos dois arquivos em parties diferentes # touch /root/teste1 # touch /tmp/teste2 Depois veremos seus status # stat /root/teste1 # stat /tmp/teste2 Guardemos as informaes obtidas e prestem ateno nas 3 opes citadas acima Access, Modify e Change.
andre.his@gmail.com Hardening Sistemas de Arquivos (7) Depois disso iremos visualizar o contedo 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 esto diferentes. Quando visualizamos seu contedo, modificamos o tempo de acesso deles.
andre.his@gmail.com Hardening Sistemas de Arquivos (8) Faremos a mesma coisa com alterando agora as permisses 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 no foi alterado mas o Change foi. Sempre que mudamos as permisses de um arquivo, o Change ser mudado, registrando a ultima data e hora da mudana.
andre.his@gmail.com Hardening Sistemas de Arquivos (9) Agora iremos inserir um contedo 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 no ocorreu s um acesso mas tambm uma alterao no contedo do arquivo.
andre.his@gmail.com Hardening Sistemas de Arquivos (10) Com isso podemos agora remontar nossa partio que est montada no diretrio /tmp com a opo noatime (para que haja uma melhora na performance) # mount -o remount,rw,noatime /tmp Com a partio remontada com a opo 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 no foi modificado por causa da opo noatime que definimos anteriormente .
andre.his@gmail.com Hardening Sistemas de Arquivos (11) Eis as principais opes do comando mount defaults: permite tudo noquota: no ajustar quotas para usurios nosuid: no permitir SUID/SGID nodev: no permitir acesso a dispositivos especiais ou de caractere noexec: no permitir a execuo de nenhum binrio quota: permitir uso de quotas por usurio ro: permitir para somente-leitura rw: permitir para leitura-escrita suid: permitir acessos SUID/SGID
andre.his@gmail.com Resumo do Controle do Sistema de Arquivos andre.his@gmail.com 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
andre.his@gmail.com Resumo do Controle do Sistema de Arquivos (3) Ajuste as permisses do arquivo /etc/fstab para somente leitura # chmod 400 /etc/fstab Ajuste o bit de imutabilidade tambm # chattr +i /etc/fstab
andre.his@gmail.com Hardening do Sistema de Arquivos: Consideraes H um inconveniente ao ter essas opes ativadas. Quando formos instalar um novo pacote com apt-get, dpkg ou rpm. Esses utilitrios executam e gravam informaes nos diretrios /var e /tmp que por sua vez setamos a opo noexec nas parties onde esto montada esses diretrios. Precisaremos criar um script simples com os comandos para remontar essas parties e poder instalar os pacotes.
andre.his@gmail.com Hardening do Sistema de Arquivos: Consideraes (2) # vim /root/noexec #!/bin/bash case $1 in start) mount -o remount,rw,noexec /var mount -o remount,rw,noexec /tmp mount echo Parties SEM permisso de execuo ;;
.... cont.
stop) mount -o remount,rw,exec /var mount -o remount,rw,exec /tmp mount echo Parties COM permisses de execuo ;; *) echo erro use $0 {start|stop} exit 0 ;; esac exit 1 andre.his@gmail.com Hardening do Sistema de Arquivos: Consideraes(3) Depois toda vez que executar: # ./noexec start o script vai deixar as parties sem permisso de execuo # ./noexec stop Vai permitir novamente que possa ser executado alo dentro das parties definidas no script, podendo agora instalar pacotes apt e dpkg. Para maior comodidade podemos copiar esse script para um diretrio PATH do root, por exemplo o /sbin, assim podemos executar o script de qualquer diretrio do sistema. andre.his@gmail.com Hardening do Sistema de Arquivos: Consideraes(3) Depois toda vez que executar: # ./noexec start o script vai deixar as parties sem permisso de execuo # ./noexec stop Vai permitir novamente que possa ser executado alo dentro das parties definidas no script, podendo agora instalar pacotes apt e dpkg. Para maior comodidade podemos copiar esse script para um diretrio PATH do root, por exemplo o /sbin, assim podemos executar o script de qualquer diretrio do sistema. andre.his@gmail.com Quota do usurio Para controlar a utilizao do sistema de arquivos, pode- se fazer uso de quotas, que devem ser especificadas para parties e no para diretrios. O primeiro passo incluir as opes usrquota e grpquota no arquivo /etc/fstab, na partio em que se deseja utilizar # vi /etc/fstab /dev/hda9 /home ext3 defaults,usrquota,grpquota 0 2 H dois padres para o uso de quotas, quota1 e quota2, sendo que para cada um deve-se carregar o mdulo especfico no kernel, quota_v1 e quota_v2 andre.his@gmail.com Quota do usurio (2) Trabalharemos com o padro de quota2. Deve-se criar dois arquivos de controle de quota aquota.user gerencia quotas de usurios aquota.group gerencia quotas de grupos # cd /home # touch aquota.user aquota.group Somente o root deve ter permisso 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 aplicaes e reiniciar o sistema. andre.his@gmail.com Quota do usurio (3) Aps a inicializao, consultar o status de quota para a partio # repquota -v -a Agora, pode-se definir quanto cara usurio poder utilizar #edquota -u teste Teremos: O sistema de arquivos onde a quota est habilitada Limites soft e hard para o nmero mximo de blocos Limites soft e hard para o nmero mximo de inodes andre.his@gmail.com Quota do usurio (4) Para consultar a quota de um usurio # quota -u usuario Para verificar mais detalhes sobre o uso das quotas nas parties #quotastats Desativar a quota da partio #quotaoff -v /home Para fazer uma checagem na partio e verificar se est tudo OK #quotacheck -vcug /home Ativar a quota da partio #quotaon -v /home andre.his@gmail.com Ajuste finos sobre arquivos Permisses de Arquivos umask # umask 022 Arquivos com permisso 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 diretrio pblicos # chmod 1777 <diretorio_publico> andre.his@gmail.com Ajuste finos sobre arquivos (2) Sugere-se fazer uma checagem detalhada desse arquivos, deixando com bit Suid apenas alguns poucos programas necessrios como su, ping, passwd: # find / -type f \( -perm -04000 -o - perm -02000 \) > /root/lista.suid andre.his@gmail.com Ajuste finos sobre arquivos (3) Vamos retirar todas as permisses de Suid bit dos binrios # chmod -s -Rv / Onde: s retira a permisso de Suid bit R recursivo, do / (raiz) para baixo V o modo verbose (mostra o que est sendo feito pelo comando) Depois, coloque a permisso de Suid bit apenas para o que julgar necessrio # chmod +s /usr/bin/passwd andre.his@gmail.com Sudo Com o sudo, pode-se definir que comandos cada usurio comum pode executar como se fosse root # apt-get install sudo O arquivo de configurao do sudo /etc/sudoers Exemplo de configurao: teste ALL=/sbin/ifconfig, /sbin/iptables Define que o usurio teste pode executar os comandos ifconfig e iptables, sendo solicitada a senha de root andre.his@gmail.com Sudo (2) Exemplo de configurao: teste ALL=NOPASSWD: /bin/reboot, /bin/halt Define que o usurio teste pode executar os comandos reboot e halt, sem que seja solicitada a senha de root Exemplo de configurao: teste ALL=/sbin/passwd [A-Z]*,!/usr/bin/passwd root Define que o usurio teste pode alterar a senha de qualquer usurio cujo login estiver no intervalo de A-Z, exceto a senha de root andre.his@gmail.com PROCEDIMENTOS PS-INSTALAO andre.his@gmail.com Gerenciados de inicializao - GRUB Arquivo de edio do GRUB : /etc/default/grub Incluir/alterar a varivel timeout=0, para no mostrar menu Arquivo de configurao gerado atravs 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
andre.his@gmail.com Desabilitar Ctrl+Alt+Delete Sabemos que pressionando Ctrl-Alt-Delete reiniciamos o sistema Prevenir que a mquina seja reinicializada Editar o arquivo /etc/inittab e comentar a seguinte linha: #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
andre.his@gmail.com Removendo programas desnecessrios Aps instalao do sistema linux devemos nos preocupar se todos os programas so realmente necessrios. Lembre-se um servidor no deve conter programas clientes. Verificar pacotes instalados: No Debian dpkg -l Red Hat: Rpm -qa andre.his@gmail.com Removendo programas desnecessrios (2) Exemplos: No Debian apt-get --purge remove wget apt-get --purge remove portmap apt-get --purge remove exim* andre.his@gmail.com Check-list nos servios dos sistema Deve-se verificar os status dos servios, ou seja, se esta funcionando corretamente e endereos e portas no qual aceitam conexes. Primeiramente devemos saber a qual porta determinado servio esta associado: # cat /etc/services ssh 22/tcp ssh 22/udp Somente ao root deve ser permitido realizar alteraes nesse arquivo Portanto, deve-se torn-lo imutvel: # chattr +i /etc/services
andre.his@gmail.com Check-list nos servios dos sistema (2) Informaes sobre servios ativos no sistema: # netstat -ntl Proto Recv-Q Send-Q Endereo Local Endereo Remoto Estado tcp 0 0 0.0.0.0:22 0.0.0.0:* OUA tcp 0 0 127.0.0.1:631 0.0.0.0:* OUA
andre.his@gmail.com Check-list nos servios dos sistema (3) Para verificar se as portas corretas esto abertas, pode usar o nmap Usado tambm para verificar o que est aberto em um servidor # nmap -sS -P0 -O maquina-destino sS - realiza um stealth scan , a verificaao ocorre pelo modo half-open connection. P0 - realiza o portscan sem pingar. O - Tenta advinhar o sistema operacional remoto
andre.his@gmail.com Check-list nos servios 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
andre.his@gmail.com Servios de Rede Stand alone versus Inetd O modelo Inetd Network Super Daemon /etc/services : Mapeia o nome do servio a nmero 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 flexvel com avanado mecanismo de controle de acesso /etc/xinetd.conf : Arquivo de Configurao principal do xinetd /etc/xinetd.d/ : Contm arquivos para servios gerenciados pelo xinetd
andre.his@gmail.com Servios de Rede (2) Gerenciamento de Servios de Redes em Inetd e Xinetd Para Inetd : descomentar o correspondente servio no arquivo inetd.conf Reiniciar o daemon Inetd # pkill HUP inetd Para Xinetd : Fazer mudanas em xinetd.conf e xinetd.d Mecanismos de controle de acesso para servios pode ser especificados # /etc/init.d/xinetd restart Tpicos Servios que devem ser bloqueados Finger, rwho, rsh , rlogin, rexec, echo, ntalk FTP, Telnet Recomenda-se ssh, scp, sftp
andre.his@gmail.com Hardening - Xinetd Super servidor que carregar servios de rede baseado em requisies a partir da rede /etc/xinetd.conf Portas a escutar Que servidor iniciar para cada porta Verifica que servio oferecer Negar outros Arquivos /etc/xinetd.d/* Alterar de disable = no para disable = yes # chmod 600 /etc/xinetd.conf
andre.his@gmail.com Hardening - Xinetd stat /etc/xinetd.conf garantir que o proprietrio o root chattr +i /etc/xinetd.conf tornar o arquivo imutvel, no pode ser modificado, deletado ou renomeado and nenhum link criado reiniciar o servidor xinetd aps as mudanas /etc/init.d/xinetd reload # chattr +i /etc/xinetd.conf # chattr +i /etc/xinet.d/*
andre.his@gmail.com Gerenciando a inicializao dos servios O diretrio /etc/init.d/ guarda todos os scripts de inicializao de servios dos sistema O diretrio /etc/rc.d/ guarda os links simblicos para cada runlevel (nvel de execuo) em diferentes diretrios, por exemplo /etc/rc1.d : Servios que iniciam e param no nvel /etc/rc2.d/S10network : iniciar o servio de rede no runlevel 2 /etc/rc2.d/K09smb : para o servio smb (samba) Estes scripts devem estar disponvel para leitura apenas para o root # chmod -R 700 /etc/rc.d/init.d/*
andre.his@gmail.com Gerenciando a inicializao dos servios (2) Debian: Habilita ou desabilita um servio na inicializao do sistema. O insserv l o cabealho do script referente ao servio especificado e automaticamente configura outros servios necessrios, na ordem de execuo correta. Sintaxe: Para adicionar um servio: #insserv nome-do-servio Para remover um servio: #insserv -r nome-do-servio
andre.his@gmail.com Gerenciando a inicializao dos servios (3) - Runlevels 0: desligar o sistema 1: usurio nico (super usurio) 2: multiusurio sem servio de rede 3: multiusurio com servio de rede 4: livre (no definido, depende da distribuio) 5: multiusurio com servio de rede e login grfico 6: reiniciar o sistema.
andre.his@gmail.com Gerenciando a inicializao dos servios (4) RedHat: # chkconfig servico on Coloca servio para iniciar sempre com o sistema. # chkconfig servico off Retira servio da inicializao junto com o sistema.
H outras opes para o chkconfig.
andre.his@gmail.com Gerenciando a inicializao dos servios (5) Debian: Para inicializar/para/reiniciar servios 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 servios manualmente #/etc/init.d/nome_servico start|stop|restart|reload #service nome_servico start|stop|restart|reload
andre.his@gmail.com Arquivo: /etc/host.conf Linux usa um arquivo para determinar de onde sero obtidos os endereos IP corrrespondentes os nomes de mquinas Editar /etc/host.conf
order hosts, bind Indica ao ordem de utilizao dos servios de consulta de nomes nospoof on No forja o IP da mquina IP spoofing uma forma de explorao da segurana
andre.his@gmail.com Hardening: TCPWRAPPERS Segundo a norma NBR ISO/IEC 27001, em especfico o item 9.4.1, que diz respeito Poltica de utilizao dos servios de Rede, conveniente que os usurios possuam controles e gerenciamento. E ainda, no item 9.4.7, que diz a respeito ao Controle de conexes de Rede recomendvel que existam controles que limitem a capacidade de conexo dos usurios. Pensando nas recomendaes da norma, pode-se, inicialmente, utilizar dois recursos para limitar o uso dos servios de rede, que seriam o TCPWRAPPERS (/etc/hosts.deny e /etc/hosts.allow) combinado com limitaes de conexo que podemos fazer pelo PAM (/etc/pam.d e /etc/security) aliado uma poltica bem definida e com um estrutura de registro de eventos Syslog, que iremos configurar posteriormente. andre.his@gmail.com Hardening: TCPWRAPPERS (2) Nega qualquer acesso remoto dos servios vinculados aos Supers Deamon (xinet ou inetd). Sua configurao deve ser efetuada atravs dos arquivos /etc/hosts.allow e /etc/hosts.deny Em /etc/hosts.deny so configuradas as regras para negar servios a determinados clientes, j em /etc/hosts.allow configuram-se regras para permitir o acesso a determinados clientes andre.his@gmail.com Hardening: TCPWRAPPERS (3) As regras de controle de acesso, existentes nestes dois arquivos, tm 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 endereos ou nomes de mquinas, padres ou curingas utilizados para especificar quais clientes podem e quais no podem acessar o servio. comando (opcional): possvel executar um comando sempre que uma regra casa com um padro e utilizada. andre.his@gmail.com Hardening: TCPWRAPPERS (4) Curingas podem ser utilizados tanto na lista de daemons quanto na lista de clientes. ALL Significa todos os servios ou todos os clientes, dependendo apenas do campo em que se encontra. LOCAL Este curinga casa com qualquer nome de mquina que no contenha um caractere ponto ., isto , uma mquina local. PARANOID Casa com qualquer nome de mquina que no case com seu endereo. Isto geralmente ocorre quando algum servidor DNS est mal configurado ou quando alguma mquina est tentando se passar por outra. andre.his@gmail.com PAM Mdulo de Autenticao Plugvel O PAM possui mtodos que podem auxiliar os mtodos de autenticaes tradicionais, possibilitando que executem novas funes. Ex: controle de horrio em que o usurio possa logar-se. Crie uma poltica que no possibilite o uso de su, exceto pelos usurios do grupo root. # vi /etc/pam.d/su auth required pam_wheel.so
andre.his@gmail.com PAM Mdulo de Autenticao Plugvel (2) Possibilite ssh no horrio das 7:30 s 19:00. # vi /etc/security/time.conf sshd;*;*;Al0730-1900 # vi /etc/pam.d/sshd account required pam_time.so andre.his@gmail.com PAM Mdulo de Autenticao Plugvel (3) Desative a possibilidade de login do root atravs 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
andre.his@gmail.com PAM Mdulo de Autenticao Plugvel (4) Onde: login indica o servio tty* indica os terminas onde a poltica ser aplicada root determina que a poltica ser aplicada ao usurio root !Al0000-2359 indica o horrio permitido, sendo que ! estabelece que horrio no permitido Sintaxe: servicos;ttys;usuarios;tempos
andre.his@gmail.com 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 memria 5M hard nproc 20 # nmero de processos Editar /etc/pam.d/login e acrescentar session required /lib/security/pam_limits.so Evitar :(){ :|: &}; : andre.his@gmail.com Segurana no Terminal: Limitar o uso de terminal de texto No 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 andre.his@gmail.com Bloquear login de root nos terminais de texto # vi /etc/securetty #tty1 #tty2 #tty3 #tty4 #tty5 #tty6 #tty7 #tty8 #tty9 #tty10 #tty11 #tty12 andre.his@gmail.com Bloquear o terminal com a varivel TMOUT A varivel TMOUT que controla em quanto tempo o terminal ser deslogado em caso de desuso. No vem setada por padro 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 andre.his@gmail.com Remover shells vlidas de certos usurios Deve-se remover as shells vlidas de todos os usurios que no vo executar oficialmente login no sistema, atravs de terminal local (tty) ou via ssh. Executando o script /root/invalidos.sh. Combinado a isso, crie um usurio estratgico pertencente ao grupo root que ter validade para que voc possa utiliz-lo para realizao de login e posteriormente usar o su para tornar-se root. # useradd -g root nome_usuario # passwd nome_usuario # vi /root/invalidos.sh andre.his@gmail.com Remover shells vlidas de certos usurios (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 andre.his@gmail.com Remover shells vlidas de certos usurios (3) Para adotar essa poltica sempre que se criar um novo usurio, necessrio editar os seguintes arquivos. No Debian: # vi /etc/adduser.conf Nesse arquivo, pode-se mudar a varivel DSHELL para um shell invlida DSHELL=/bin/false No Red Hat: # vi /etc/default/useradd andre.his@gmail.com Log do Shell O shell bash armazenas os ltimos comandos no arquivo ~/.bash_history Todo usurio tem seu prprio arquivo .bash_history Reduzindo o nmero de comandos armazenados no arquivo .bash_history pode manter protegidas as senhas casualmente digitadas em linha de comando Assim, deve-se ajustar as variveis HISTFILESIZE e HISTSIZE que esto no arquivo /etc/profile para: HISTFILESIZE = 20 HISTSIZE = 20 andre.his@gmail.com CONTROLE DE ACESSO DE USURIOS andre.his@gmail.com Removendo usurios desnecessrios O arquivo /etc/passwd armazena os usurios ativos no sistema, portanto, devemos deixar ativos os usurios que realmente devam ter acesso, principalmente usurios que no 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
andre.his@gmail.com Data de expirao para conta de usurio Para tanto, utiliza-se o comando chage, que modifica parmetros do arquivo /etc/shadow # chage -l teste Fazendo algumas modificaes para o usurio # chage -M 30 -W 5 -I 2 teste # chage -l teste Onde: -M o tempo mximo de validade da conta -W o tempo de aviso -I o tempo antes de a conta ser desativada andre.his@gmail.com Contas especiais Desabilitar todas as contas especiais padro do sistema, por exemplo, news, games, ... Para apagar um usurio - userdel usuario Para apagar um grupo - groupdel usuario Tornar imutveis os arquivos de contas # chattr +i /etc/shadow # chattr +i /etc/passwd # chattr +i /etc/group # chattr +i /etc/gshadow andre.his@gmail.com Polticas de senhas Alterar as configuraes de login padro: - No arquivo /etc/login.defs PASS_MAX_DAYS 100 PASS_MIN_LENGTH 8 PASS_WARN_AG 10 Limpar todas as informaes de sistema /etc/motd /etc/issue & /etc/issue.net andre.his@gmail.com Polticas 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/ andre.his@gmail.com Polticas 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/ andre.his@gmail.com Procurar por senhas fracas Pode-se usar o John The Ripper, que uma ferramenta de bruteforce, para descobrir senhas fracas e desabilitar usurio. # apt-get install john # scp root@IP_servidor:/etc/shadow /root # john /root/shadow Caso se queira fazer uma nova verificao, deve-se apagar o arquivo john.spot andre.his@gmail.com Hardening - SSH O servio SSH , atualmente, um dos mais teis para administradores de sistemas Permite acesso remoto a mquinas Confidencialidade Autenticidade (para os que souberem usar) Automatizao de atividades andre.his@gmail.com Hardening SSH (2) Configurao: Os arquivos de configurao 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 andre.his@gmail.com Hardening SSH (3) Arquivo: /etc/ssh/sshd_config Configuraes: Desabilitar login como root PermitRootLogin no Usar a separao de privilgios (neste caso apenas algumas atividades so feitas com o usurio root e as demais com outro usurio do sistema) UsePrivilegeSeparation yes andre.his@gmail.com Hardening SSH (4) Checar as permisses dos arquivos e o donos do mesmo StrictModes yes
Desabilitar o sftp, comentando-o #Subsystem sftp /usr/lib/misc/sftp-server andre.his@gmail.com Hardening SSH (5) Desabilitar as autenticaes baseadas em confiana entre os hosts IgnoreRhosts yes HostbasedAuthentication no RhostsRSAAuthentication no
andre.his@gmail.com Hardening SSH (6) Possibilite ssh no horrio das 7:30 s 19:00. # vi /etc/security/time.conf ssh;*;*;Al0730-1900
# vi /etc/pam.d/ssh account required pam_time.so andre.his@gmail.com AJUSTANDO O KERNEL andre.his@gmail.com Parmetros de Tunning do Kernel Parmetros 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 requisies de broadcast net.ipv4.icmp.echo.ignore.broadcasts =1 Reiniciar a rede digitando: /etc/init.d/networking restart
andre.his@gmail.com Parmetros 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 proteo TCP SYN Cookie (o recurso syncookies utilizado pelo sistema toda vez que fila de syn excede o valor mximo) net.ipv4.tcp_syncookies =1 Reiniciar a rede digitando: /etc/init.d/networking restart
andre.his@gmail.com Parmetros 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 proteo contra fragmentao/desfragmentao net.ipv4.ip_always_defrag=1 Reiniciar a rede digitando: /etc/init.d/networking restart
andre.his@gmail.com Parmetros de Tunning do Kernel (4) Ativar proteo contra mensagens invlidas bad-error (roteadores que enviam broadcast frames com respostas invlidas) editar /etc/sysctl.conf e acrescentar net.ipv4.icmp_ignore_bogus_error_responses =1 Reiniciar a rede digitando: /etc/init.d/networking restart Ativar proteo contra IP spoofing, ajuda a certificar que os pacotes usam endereos de origem legtimos net.ipv4.conf.all.rp_filter =1 Reiniciar a rede digitando: /etc/init.d/networking restart
andre.his@gmail.com Parmetros 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 andre.his@gmail.com REGISTROS DE LOGS NO SISTEMA andre.his@gmail.com Servidor de Logs A necessidade de registro das atividades dos usurios e servios dos sistemas , notoriamente, muito importante para os administradores. A importncia tanta, que na norma NBR ISO/IEC 17799,recomenda-se no item 9.7.1, que diz respeito ao Registro (log) de eventos, ser tambm prioridade uma poltica de segurana onde os registros de logs devam atender s seguintes caractersticas: Identificao dos usurios; Datas e horrios de entrada (login, logout); Identidade do terminal, nome da mquina ou IP; Registro das tentativas de acesso aos aceitos e rejeitados; Registro das tentativas de acesso a outros recursos e dados aceitos e rejeitados. andre.his@gmail.com Syslog-ng O syslog-ng um novo sistema de logs de extrema facilidade de configurao e possui grandes recursos. Para instalar basta executar: # apt-get install syslog-ng Iremos configurar o Servidor e os Clientes para enviarem seus logs para o Log Server andre.his@gmail.com Syslog-ng (2) Estes so os passos mais importantes, configurar a origem (source), destino (destination) e o filtro (filter). No filtro pode-se utilizar de algumas funes como: facility() - Ex. facility(mail); level() - Ex. level(notice); program() - Ex. program(^mysqld); andre.his@gmail.com Syslog-ng: Servidor Configurao do Servidor # vi /etc/syslog-ng/syslog-ng.conf Opes de Origem, Mquinas Remotas source servremotos { udp();}; Opes 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);};
andre.his@gmail.com Syslog-ng: Servidor (2) Configurao do Servidor Opes 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));};
andre.his@gmail.com Syslog-ng: Servidor (3) Configurao do Servidor Opes 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/syslog-ng restart
andre.his@gmail.com Syslog-ng: Cliente Configurao do Cliente (Servidor Remoto) # vi /etc/syslog-ng/syslog-ng.conf Opes de Destino destination servlog{ udp(192.168.0.8 port(514));}; Opes 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/syslog-ng restart
andre.his@gmail.com Rotacionamento de Logs Como os logs crescem muito rapidamente, deve-se definir um poltica de logs e utiliza o recurso de rotacionamento de logs nativo do sistema, o LogRotate. O arquivo de configurao do rotacionamento no Debian /etc/logrotate.conf e no Red Hat o /etc/rotate.conf
andre.his@gmail.com Rotacionamento de Logs (2) Algumas opes do LogRotate weekly Essa opo faz com os logs sejam rotacionados semanalmente, mas tambm pode ser diariamente (daily) rotate 4 Define que sero mantidos os 4 ltimos rotacionamentos para no perder o controle mail root Define, em que casos de erros de no tem existncias de logos,eles sejam enviados para o root
andre.his@gmail.com Rotacionamento de Logs (3) Algumas opes do LogRotate create Essa opo determina que sejam criados novos arquivos de log(vazios), aps os antigos rodarem compress Essa opo determina que as cpias 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 andre.his@gmail.com Rotacionamento de Logs (4) Mesmo o rotacionamento sendo determinado pelo arquivo de configurao logrotate.conf, pode-se forar a rod-lo a qualquer momento, manualmente, por meio do comando: # logrotate /etc/logrotate.conf O controle das aes de rotacionamente feito por meio do contrab, o que pode ser observado em: # cat /etc/crontab