sexta-feira, 8 de agosto de 2008

Single Packet Authorization

Muitos administradores de rede necessitam acessar seus sistemas remotamente, porém se nenhuma medida de segurança for tomada para estas situações, existe uma grande possibilidade de um atacante explorar vulnerabilidades de protocolos e serviços, conseguindo ter acesso não autorizado ao sistema.
Algumas técnicas são utilizadas com o intuito de diminuir o risco de um possível acesso não autorizado. A primeira delas é o uso de senhas, porém hoje já existem diversas alternativas para conseguir ter acesso não autorizado através de senhas legítimas, dentre elas podemos citar o ataque por força bruta, engenharia social, dentre outras.

Há algum tempo surgiu uma técnica chamada de Port Knocking, que basicamente consiste em liberar um determinado serviço, que atualmente esteja bloqueado, após o recebimento de uma sequência pré-determinada de pacotes (TCP/UDP). Esta técnica funciona de acordo com a figura abaixo:



No exemplo acima temos um cenário típico onde um cliente tenta acessar um servidor remoto através de um serviço de SSH. No primeiro momento(azul) o cliente tenta acessar remotamente o servidor, porém regras no firewall(iptables) impedem conexões na porta tcp/22(ssh). No segundo momento(vermelho) o cliente tenta a liberação do acesso através da técnica de Port Knocking, onde uma sequência(knock) pré-determinada de pacotes é enviada para o firewall, porém uma camada conhecida como libpcap, que atua a frente do firewall trata esta sequência, e cria uma nova regra(temporária) no firewall(iptables) para aceitar conexões ssh apenas da máquina cliente. A partir dai o acesso remoto pode acontecer normalmente, com um nível maior de segurança(verde).

O esquema exemplificado acima ainda possui alguns “pontos fracos”, que podem comprometer toda a segurança implementada. Primeiro é interessante saber que o Port Knocking utiliza apenas os campos das portas(TCP/UDP) para a verificação da sequência “knock”, ignorando os “dados” do pacote, sendo impossível assim o uso da criptografia no processo. Um atacante com um snnifer na rede poderia conseguir a sequência “knock” e se passar por um cliente, tendo assim acesso ao sistema. Outro ponto é a possibilidade da entrega fora de ordem dos pacotes, impossibilitando assim o acesso. Além destes, existem outros pontos que de alguma maneira invialbilizam o uso do Port Knocking em um cenário como o descrito acima.

Uma técnica mais elaborada, baseada no Port Knocking, é conhecida como Single Packet Authorization(SPA). O SPA herda os pontos positivos do Port Knocking, como também corrige os pontos negativos encontrados. A principal diferença entre as duas técnicas é que no SPA apenas um pacote é enviado, e não uma sequência, corrigindo assim problemas de pacotes fora de ordem. E neste pacote as informações que serão tratadas pela camada “libpcap” estão na parte de dados, e não nas portas, corrigindo assim o problema de criptografia e replay(atacante captura sequência knock e se passa por um cliente legítimo) .

No mesmo cenário que foi descrito o Port Knocking, iremos exemplificar o Single Packet Authorization. A figura 2 mostra o primeiro momento, em que um cliente tenta acessar um serviço remotamente, mas não consegue fazê-lo devido as regras no firewall(iptables).

Uma solução para o cenário acima é utilizar a técnica do SPA. O software que implementa este serviço é o fwknop(FireWall KNock OPerator) que pode ser encontrado em http://cipherdyne.org/fwknop/. Atualmente o fwknop encontra-se na versão 1.9.6, e pode ser baixado gratuitamente, além do acesso ao seu código-fonte ser liberado. Existem pacotes RPM pré-compilados(server/client), Tarballs(server/client) e uma versão para clientes Windows.

Para Debian e derivados(Ubuntu, Kurumin...) se faz necessário a instalação dos seguintes pacotes(e suas dependências):

  • apt-get install build-essential

  • apt-get install libpcap-dev

Para instalar o fwknop primeiro descompacte o pacote, e depois rode o script de instalação como poderes de super usuário:

# tar xjvf fwknop-1.9.6.tar.bz2

# cd fwknop-1.9.6

# ./install.pl

Para Red Hat e derivados(CentOS, Fedora,...) se faz necessário a instalação dos seguintes pacotes(e suas dependências):

  • yum install gcc

  • yum install libpcap-devel

Para instalar o fwknop basta compilar o pacote RPM:

# rpm -i fwknop-1.9.6-1.i386.rpm


Após a instalação,e ambas máquinas(server/client), podemos passar para a fase de configuração do fwknop. No servidor edite o arquivo /etc/fwknop/access.conf deixando com o seguinte conteúdo:

#Configuração do Servidor Fwknop

SOURCE: ANY;

OPEN_PORTS: tcp/22;

FW_ACCESS_TIMEOUT: 60;

KEY: senha123;


Após configurar o servidor, inicie o serviço fwknop com o comando:

# /etc/init.d/fwknop start

Se tudo estiver correto, seu servidor já estará executando a técnica do Single Packet Authorization.


Obs: Fica subentendido que exista uma regra bloqueando conexões na porta TCP/22, como por exemplo: iptables -A INPUT -i eth0 -p tcp –dport 22 -j REJECT


No lado do cliente(caso o mesmo execute Linux), basta executar o seguinte comando:

# fwknop -A 'tcp/22' -a 192.168.0.10 -D 192.168.0.254

Uma senha será requisitada, digite a senha cadastrada na variável “KEY” do arquivo access.conf.

Após os procedimentos descritos acima, a camada libpcap irá tratar este pacote, resultando na criação de uma nova regra temporária no firewall permitindo apenas conexões remotas que tenham o endereço IP do cliente(192.168.0.10) por um tempo de 60 segundos(variável FW_ACCESS_TIMEOUT do access.conf). A figura abaixo ilustra estes procedimentos:

A partir deste momento, durante um período de 60 segundos o firewall irá permitir conexões remotas para a porta tcp/22 no servidor.

Com o encerramento da conexão, a regra temporária que permitia conexões na porta tcp/22 vindos do IP 192.168.0.10 automaticamente é removida do firewall, voltando assim para o cenário inicial, ou seja, bloqueando conexões.

Todos sabemos que é impossível obter um sistema 100% seguro, porém existem soluções que tentam aumentar o nível de segurança dos sistemas. O SPA pode ser considerada uma técnica que “aumenta” a segurança em acessos remotos, mas está “longe” de ser uma solução 100% segura que barre toda e qualquer tentativa de acesso não autorizado.

--

2 comentários:

R-o-s-a-n-a disse...

Oxe, doido!
Vc tem blog, é?! Sabia não.. só achei pq vi o link no blog de flávio!
Adiciona o meu aí também.

Unknown disse...

Muito massa, tô acompanhando teu blog :P