
Opensvp é uma ferramenta de segurança que implementa "ataques" para testar a resistência de firewalls a ataques ao nível de protocolo.
Opensvp é uma ferramenta de segurança que implementa "ataques" para poder testar a resistência de firewalls a ataques ao nível de protocolo. Implementa ataques clássicos, bem como alguns novos tipos de ataques contra o gateway de camada de aplicação (chamado de helper no mundo Netfilter).
Por exemplo, o opensvp é capaz, sob certas condições (ver explicação abaixo para detalhes), de abrir um pin hole num firewall que protege um servidor ftp: mesmo que a política de filtragem garanta que apenas a porta 21 está aberta para o servidor, pode abrir 'qualquer' porta no servidor usando o opensvp.
Consideremos 192.168.2.3 como um servidor a executar ftp, colocado atrás de um firewall. Se o utilizador, como root, executar::
opensvp --attacker -t 192.168.2.3 --helper ftp --port 23 -v -i eth0
Então terá um acesso temporário à porta 23 do servidor, independentemente das regras do firewall.
O documento "Secure use of iptables and connection tracking helpers" https://home.regit.org/netfilter-en/secure-use-of-helpers/ descreve o método de proteção contra este tipo de ataque.
Consulte o capítulo seguinte para uma descrição precisa do ataque implementado.
Estando numa rede diretamente ligada ao firewall através da interface eth0, o atacante pode executar o seguinte comando ::
opensvp --attacker -t 192.168.2.3 --helper ftp --port 23 -v -i eth0
192.168.2.3 é o endereço do servidor FTP e 23 é a porta que queremos abrir no servidor.
Depois de um ataque bem-sucedido, é então possível ligar a 192.168.2.3 na porta 23.
É possível que um cliente envie uma mensagem de comando forjada que é interpretada pelos firewalls como uma possível abertura de ligação dinâmica.
É possível usar um servidor padrão para enviar o ataque, mas com um servidor personalizado saberá a transformação feita pelo possível gateway NAT.
Uma sessão típica é a seguinte. No servidor que tem o endereço IP 1.2.3.4, pode executar ::
$ opensvp --server --helper irc -v
No cliente, pode então executar ::
$ opensvp --client -t 1.2.3.4 --helper irc --port 23 -v 2.3.4.5:23 should be opened from outside
No servidor, é apresentada a seguinte mensagem ::
You should be able to connect to 2.3.4.5:23
Aqui, 2.3.4.5 é o endereço público do cliente.
No atacante, precisa de iniciar o opensvp e indicar qual é a fila Netfilter utilizada e qual é a interface de saída ::
Em seguida, precisa de usar iptables para enviar para o userspace o tráfego que quer ocultar do mecanismo de reconhecimento de protocolo ::
iptables -I INPUT -p tcp --sport 443 -j NFQUEUE iptables -I OUTPUT -p tcp --dport 443 -j NFQUEUE
Quando terminar, prima CTRL+C para interromper o processo do ataque.
Alguns protocolos de rede utilizam múltiplas ligações para o intercâmbio entre um cliente e um servidor. O exemplo mais conhecido é o ftp, onde os comandos passam por uma ligação na porta 21 e onde a troca de dados é feita com dois modos diferentes (ligação a partir da porta 20 ou ligação dinâmica).
Algumas implementações de firewall implementam um gateway de camada de aplicação (ALG) para conseguir detetar esta ligação paralela e autorizá-la dinamicamente. Outras soluções são utilizar um relay de aplicação (proxy transparente) ou abrir todos os fluxos possíveis (ler quase tudo).
O ALG analisa o tráfego, deteta e interpreta o comando enviado entre os pares para declarar os parâmetros das ligações paralelas. Uma vez feito isso, abre um pin hole temporário no firewall para deixar passar o tráfego provável.
A ideia deste ataque é forjar este tipo de mensagens para abrir um pin hole no firewall, mas um pin hole que não deveria ter sido aberto.
Condição:
A sequência é a seguinte :
Um sniffer na rede do atacante captura um pacote do fluxo do protocolo
O pacote forjado é enviado na interface ligada ao firewall
O firewall transmite o pacote de volta ao cliente e fica agora à espera de um pacote com características baseadas na entrada do atacante
Este ataque é uma aplicação direta do princípio descrito. Assim que um pacote de dados é recebido, o atacante envia um comando DCC forjado.
Neste ataque, a ligação do cliente é aberta pelo atacante. Ele liga-se ao servidor ftp atrás de um firewall e inicia uma ligação real. Assim que a sessão é estabelecida, lança o ataque enviando um comando 227 forjado.
Se for utilizado IPv6, o mesmo ataque é feito com um comando 229 forjado.
Alvos possíveis
A principal restrição destes ataques é que o atacante tem de estar numa rede
diretamente ligada ao firewall.
Assim, as principais possibilidades são:
* Ataque a partir de uma LAN de utilizador
* Ataque numa infraestrutura de alojamento (hosting farm)
Ambos os casos podem levar a uma grave exposição de informações, dando ao atacante acesso a
serviços não protegidos.
Linux
~~~~~
Este ataque funciona em firewalls Netfilter IPv4 se rp_filter estiver definido para
0 (esperemos que este não seja o valor predefinido).
Não existe atualmente nenhuma implementação de reverse path filtering para IPv6; o firewall
não está, portanto, protegido e a proteção tem de ser configurada nas regras do firewall (ver
próximo capítulo).
Sabe-se que alguns softwares de firewall são vulneráveis:
* fwbuilder: é necessário definir uma política específica
* shorewall: versões recentes corrigem o problema
* edenwall: vulnerável
O ataque funciona tanto para firewall de gateway como para firewall local. Num firewall local, a filtragem
FORWARD tem de ser ativada e uma regra ESTABLISHED ACCEPT tem de ser configurada nessa
chain. Este pode ser o caso de sistemas a executar máquinas virtuais.
Defesa contra o ataque
======================
Linux
-----
Consulte o seguinte documento, dedicado ao assunto: https://home.regit.org/netfilter-en/secure-use-of-helpers/
Outros SO e dispositivos
--------------------
O requisito básico é ativar anti-spoofing rigoroso e controlar o carregamento de ALG, se possível.