Técnicas Avançadas de Segurança com Iptables (Marcus Augustus Pereira Burghardt)
Desvendaremos as artemanhas do Iptables que permitem construirmos regras de defesa avançadas e efetivas contra Port Scan, Força Bruta e DoS mais simples. Técnicas de Port Knock para garantir acessos seguros. Regras reflexivas para interagirem com comandos de rede executados pelo Administrador sem a necessidade de modificar a estrutura de regras do Firewall. A mesma palestra foi apresentada no Fórum Internacional do Software Livre - Edição 10 no ano passado.
Marcus Augustus Pereira Burghardt
Especialista em Linux, Network, Forense e demais ramos da Segurança da Informação. Atualmente trabalho como Analista de Segurança da Informação do Grupo Voges. E também como instrutor e consultor nas horas vagas. Instrutor de cursos especializados de Segurança da Informação e Servidores Linux. Palestrante ativo de eventos comunitários como FISL10, TcheLinux, etc. Tecnólogo em Redes de Computadores pela FTEC - Caxias do Sul. Certificações LPIC-1, CLA, MCLNA, MCLSA e MCTS Security.
Técnicas avancadas de seguranca com iptables - Marcus Augustus Pereira Burghardt
1. Boa dia!!
Marcus Augustus Pereira Burghardt
LPIC-1, MCLNA, MCLSA e MCTS Security
marcus.apb@gmail.com
http://mapburghardt.blogspot.com
2. Iptables
Técnicas Avançadas de Segurança com Iptables
Nível: - Avançado.
Assuntos: - Extensões do Iptables.
- Técnicas de Defesas.
- Exemplos práticos.
Pré-requisitos: - Noções de conexões TCP/IP e iptables.
3. Extensões do Iptables
São módulos que, quando carregados, permitem incrementar
as regras com diversas funcionalidades;
Extensões básicas: multiport, state, limit, etc.
Extensões interessantes: conntrack, connlimit, recent, etc.
Mais detalhes em $ man iptables
Exemplo de regra carregando a extensão multiport:
# iptables -A OUTPUT -p tcp -m multiport --dports 21,80 -j ACCEPT
4. Extensão ”recent”
Nos permite criar listas de hosts dinamicamente de acordo com
critérios que acharmos necessários e posteriormente criar
ações baseadas nessas listas.
Exemplos de listas:
Todos os hosts que tentaram acessar determinada porta do
meu servidor.
Todos os hosts que tentaram um fazer um port-scan na minha
rede.
Estações da minha rede interna que tentaram acessar
determinado site.
6. Port Knock
Consiste em bater na porta para que ela se abra, ou seja, eu
preciso pedir ao firewall para que determinada porta seja
liberada para mim.
Como usar essa regra?
Exemplos:
Preciso acesso ssh apenas para mim mas não tenho IP fixo.
Não quero que as pessoas vejam uma porta aberta.
7. Port Knock
Exemplo de regra:
# Libero ssh apenas por 120 segundos e somente para quem estiver na lista
SSHOK.
iptables -A INPUT -p tcp --dport 22 -m recent --rcheck --name SSHOK
--seconds 120 -j ACCEPT
# O host que me mandar um pacote tcp na porta 12345 será adicionado na lista
SSHOK.
iptables -A INPUT -p tcp --dport 12345 -m recent --set --name SSHOK
8. Multiport Port Knock
Uma extensão do Port Knock que nos permite fazer uma
liberação de porta somente após uma sequência definida de
pacotes.
Podemos fazer uma analogia com uma senha, ou seja,
somente quem souber a sequência correta de pacotes poderá
acessar determinada porta.
Permite níveis bem complexos e nesses casos uma dica seria
criar um script que envie a sequência correta de pacotes
automaticamente.
9. Multiport Port Knock
Exemplo de regra:
iptables -A INPUT -p tcp --dport 10001 -m recent --set --name SSH1
iptables -A INPUT -p tcp --dport 20002 -m recent --rcheck --name SSH1 -j ATUALIZA1
iptables -A INPUT -p tcp --dport 30003 -m recent --rcheck --name SSH2 -j ATUALIZA2
iptables -A INPUT -p tcp --dport 22 -m recent --rcheck --name SSH3 -j ACCEPT
# Estas chains removem o host da lista antiga e o adicionam em uma nova lista.
iptables -A ATUALIZA1 -m recent --remove --name SSH1
iptables -A ATUALIZA1 -m recent --set --name SSH2
iptables -A ATUALIZA2 -m recent --remove --name SSH2
iptables -A ATUALIZA2 -m recent --set --name SSH3
10. Port Scan
No momento que é feita uma tentativa de acesso à uma porta
que não está ativa, adicionamos o host em uma lista e abrimos
uma contagem de quantos pacotes semelhantes serão aceitos
até bloquear este host.
Implementada no final das regras de acesso de uma chain, ou
seja, sempre que algum pacote não casar com alguma porta
habilitada a contagem é incrementada.
Este tipo de tráfego normalmente classifica um port scan.
11. Port Scan
Exemplo de regra:
# Caso um host da lista SUSPEITO passe aqui 4 vezes será bloqueado por 1
hora.
iptables -A INPUT -m recent --update --hitcount 4 --name SUSPEITO
--seconds 3600 -j DROP
# Aceito conexões normalmente nas portas 22 e 80.
iptables -A INPUT -p tcp -m multiport --dports 20,80 -j ACCEPT
# Apenas se um host tentar acessar alguma porta não habilitada será
adicionado na lista suspeito.
iptables -A INPUT -m recent --set --name SUSPEITO
12. Brute Force
Um ataque de força bruta ou mesmo por dicionários consiste
em fazer inumeras tentativas de autenticação com usuários
e/ou senhas diferentes até conseguir sucesso.
Algumas aplicações já fazem o controle superficial através de
um time-out, por exemplo. Mas como garantir que determinada
aplicação fará um controle efetivo de ataques assim?
Podemos garantir essa defesa já no nosso firewall para
qualquer aplicação.
13. Brute Force
Exemplo de regra:
# Se um host da lista NOVOSSH tentar acesso na porta 22 duas vezes será
bloqueado por 60 segundos.
iptables -A INPUT -p tcp --dport 22 -m recent --update --hitcount 2
--seconds 60 --name NOVOSSH -j DROP
# Uma nova conexão na 22 será aceita mas o host ainda será adicionado na
lista NOVOSSH.
iptables -A INPUT -p tcp --dport 22 -m recent --set --name NOVOSSH -j
ACCEPT
14. Regra Reflexiva
Regra reflexiva, neste caso, é uma regra relacionada ao seu
sentido oposto.
Exemplo: Preciso enviar um pacote da minha LAN com destino
à um host da Internet para só então este host poder acessar a
minha LAN.
Essa regra reflexiva pode ser ativada com um e-mail, acesso à
site, pacote em uma porta específica, etc.
15. Regra Reflexiva
Exemplo de regra:
# Caso o host esteja na lista CONFIAVEL, libero a porta 22 por 60 segundos.
iptables -A INPUT -p tcp --dport 22 -m recent --rcheck --name
CONFIAVEL --seconds 60 -j ACCEPT
# O host que receber um pacote na posta 5100 será adicionado na lista
CONFIAVEL.
iptables -A OUTPUT -p tcp -m multiport --dports 5100 -m recent --set
--name CONFIAVEL --rdest
16. Referências
Para esta apresentação:
$ man iptables
Para informações extras:
http://www.netfilter.org
17. Obrigado!
DÚVIDAS??
Marcus Augustus Pereira Burghardt
LPIC-1, MCLNA, MCLSA e MCTS Security
marcus.apb@gmail.com
http://mapburghardt.blogspot.com