Introdução.
Você já se preocupou com a quantidade de portas abertas no firewall da sua empresa, a porta 22 precisa para o acesso SSH, a 3389 para o terminal Server, a 5900 para o VNC?
Claro que a gente não se preocupa isso é bobagem, afinal nós profissionais de TI sempre temos pouca coisa para fazer e estamos constantemente trocando senhas de todos os serviços, atualizando o sistema, monitorando logs, e usamos tunelamento*. Além disso, não usamos portas padrões para o ssh, ele está rodando na porta “60500” e nenhum Hacker* irá descobrir isso :D. Bom brincadeiras a parte afinal em qualquer chat de Stripts* a palavra nmap* rola solta.
Sabemos no entanto que é praticamente impossível não possuir nenhuma porta aberta para o uso externo. Afinal temos servidores pop (porta 110), smtp (porta 25), e o próprio servidor web (porta 80) que devem estar “bem abertas” para o acesso. No entanto podemos minimizar o problema abrindo outras portas apenas quando realmente for necessário.
A idéia de um Port knocking é exatamente essa. As portas de serviços como o do Ssh ficam fechadas para acesso externo até segunda ordem a não ser que você solicite a abertura.
*Tunelamento resumidamente seria a conexão entre duas máquinas utilizando-se de uma porta qualquer onde podem trafegar informações de qualquer serviço mesmo que utilizem outra porta. Um bom exemplo de protocolo que suporta tunelamento é o Security Shell (ssh).
*Hacker diz respeito ao usuário que estuda um sistema ou hardware de computador, procurar entender seu mecanismo e como ele funciona a fim de aperfeiçoá-lo. Ao contrário do que divulga a mídia onde o Hacker é o usuário que invade sistemas e os danifica, ela está se referindo na verdade ao Cracker. Um Hacker pode invadi um sistema a fim de apontar falhas a serem corrigidas no entanto jamais causará prejuízos ou roubo de informações sigilosas.
*Scripts antigamente denominado de Lamer é o usuário que apesar de não compreender exatamente como um sistema ou mecanismo funciona utiliza-se de ferramentas criadas por outros. Esses causam prejuízos, danificam sistemas com o único intuito de ganhar fama ou dinheiro.
*Nmap software utilizado para escaneamento de redes a procura de informações diversas de um host.
Knockd
O knockd é um servidor port knoking que utiliza a lógica de combinações de portas, ou seja, caso uma tentativa de conexão externa respeite uma lógica de portas previamente definidas, a porta realmente requerida será aberta.
Um serviço knockd fica ativo em seu servidor monitorando todas as tentativas de conexões externas, caso a ordem das tentativas de conexões em portas distintas respeitem a ordem definida no seu arquivo de configuração uma regra é ativada e adicionada ao firewall.
Imaginamos que precisamos acesso a porta 3389, tentaremos inicialmente a conexão no servidor pelas portas 5000, 6000 e 7000 respectivamente (também fechadas), o serviço knockd estará monitorando essa tentativa e disparando a regra correspondente liberando acesso a porta 3389 no firewall.
Da mesma forma que a porta é aberta após finalizarmos a conexão uma outra regra é definida para fechar a porta.
O que foi utilizado
Para esse tutorial foram utilizados os sistemas Ubuntu server 11.04 configurado como firewall que possui duas placas de redes uma para acesso da internet e outro para a rede local, uma máquina cliente da rede local com Windows 2008 R2, ip 192.168.1.18, rodando o Terminal Server na porta 3389 (“Windows com W viu :)”) e uma maquina externa a rede Windows Seven que irá acessar o TS da internet.
Nosso objetivo será manter a porta 3389 fechada para acesso externo no firewall e abri-la apenas (não para toda a internet) ao cliente externo que entrou com a seqüência de portas definidas no arquivo de configuração do knocking.
Instalação e configuração do servidor
Para instalar o knockd como root digite:
#apt-get install knockd
Edite o arquivo de configuração:
# mcedit /etc/knockd.conf
Apague o conteúdo padrão do arquivo e preencha com o seguinte conteúdo:
#--INICIO--#
[options]
UseSyslog
[OPENTS2003]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 3389 -j DNAT -s %IP% --to 192.168.1.18
tcpflags = syn
[CLOSETS2003]
sequence = 9000,8000,7000
seq_timeout = 5
command = sbin/iptables -t nat -D PREROUTING -p tcp -i eth0 --dport 3389 -j DNAT -s %IP% --to 192.168.1.18
tcpflags = syn
#--FIM--#
As linhas mais importantes desse arquivo são:
sequence = 7000,8000,9000
é onde definimos a seqüência de portas tcp que devem respeitada para a adição da regra da linha command = /sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 3389 -j DNAT -s %IP% --to 192.168.1.18 no firewall.
sequence = 9000,8000,7000 é onde definimos a seqüência de portas tcp que devem respeitada para a remoção da regra da linha command = /sbin/iptables -t nat -D PREROUTING -p tcp -i eth0 --dport 3389 -j DNAT -s %IP% --to 192.168.1.18 do firewall.
Execute o knockd com o seguinte comando:
knockd –i eth0 –d –c /etc/knockd.conf
Obs: Neste tutorial considere eth0 a placa do firewall ligada à internet.
Dicas:
*Você pode adicionar no final do arquivo /etc/rc.local o comando knockd –i eth0 –d –c /etc/knockd.conf afim de o serviço do knocking iniciar junto com o servidor.
*Podem ser adicionadas novas regras OPEN e CLOSE no arquivo de configuração do knocking.
Configuração o cliente knockd no Windows
Com o servidor em pleno funcionamento vamos baixar o cliente knockd para Windows e criar um pequeno script para executá-lo e disparar a solicitação de abertura da porta 3389 ao servidor além de abrir o cliente do Terminal Server para acesso.
Baixe o cliente knock para Windows no link abaixo:
http://www.zeroflux.org/proj/knock/files/knock-win32.zip
Cria uma pasta no c:\ com o nome de knockcli
Descompacte o arquivo baixado, entre na pasta Release e copie o executável knock.exe para a pasta c:\knockcli
Abra o bloco de notas e digite o seguinte conteúdo:
c:
cd\
cd knockcli
knock “ipdoservidor” 7000:tcp 8000:tcp 9000:tcp
cls
echo "Mantenha essa janela aberta"
%windir%\system32\mstsc.exe
knock “ipdoservidor” 9000:tcp 8000:tcp 7000:tcp
Salve com o arquivo com o nome de iniciaTS.cmd
Configuração o cliente knockd em uma máquina Linux (Ubuntu).
Para instalar cliente do knockd no Linux o comando é o mesmo do servidor, como root:
#apt-get install knockd
Podemos agora criar um pequeno script que irá executar o cliente knocking, abrir o cliente TS (Rdesktop) e ao término da sessão do TS fechar a porta novamente.
Em um terminal crie o arquivo exemplo.sh no diretório de sua preferência (não precisa ser como root):
$ mcedit /home/itn/exemplo.sh
Adicione o seguinte conteúdo ao arquivo:
#!/bin/bash
knock “ipdoservidor” 7000:tcp 8000:tcp 9000:tcp
rdesktop “ipdoservidor”
knock “ipdoservidor” 9000:tcp 8000:tcp 7000:tcp
As linhas
knock “ipdoservidor” 7000:tcp 8000:tcp 9000:tcp é a seqüência de solicitação de conexão de portas definidas no servidor para abrir a porta 3389.
knock “ipdoservidor” 9000:tcp 8000:tcp 7000:tcp é a seqüência de solicitação de conexão de portas definidas no servidor para fechamento da porta 3389.
Marque o arquivo como executável:
$ chmod +x /home/itn/exemplo.sh
Execute o arquivo (clicando sobre ou via terminal).
$ /home/itn/exemplo.sh
Conclusão
Esse tutorial foi uma pequena demonstração do uso prático de um Port knocking, sendo que o limite para o seu uso é a imaginação. Concluímos também que com esse pequeno guia podemos dormir mais tranqüilos sabendo que a “temida” porta 3389 está fechada dando um pouco mais de dor de cabeça ao Scripts, Hacker ou curiosos de plantão .
Referências
KNOCKD, a port-knocking server. Disponível em:
Nenhum comentário:
Postar um comentário