Skip to topic | Skip to bottom
www.postcogito.org
          ...sine propero notiones
Kiko
Você está aqui: Kiko > PostsEmPortugues > PtBrBlogEntry2008Jan05A Imprimível | fim do tópico


Start of topic | Skip to actions
English Version

Números de Porta Nem Tão Bem Conhecidos Assim

Rec 05-jan-2008 14:48

Os "números de porta nem tão conhecidos assim" (NSWKPNs, sigla do termo em inglês) são uma maneira simples mas razoavelmente eficazes para reduzir a exposição do seu perímetro de rede a ameaças da Internet.

Lembremos que um dos pilares básicos da suite de protocolos TCP/IP é o conceito de números de portas bem conhecidos: por convenção, alguns programas e protocolos usam certos números de porta. A porta padrão do HTTP é 80/tcp, a do HTTPS é 443/tcp, o SSH usa 22/tcp, o syslog usa 514/udp, e por aí vai.

Isso facilita alcançar seu servidor SSH que lhe permite administrar seu site remotamente. Mas também torna seu servidor algo fácil para ataques de força bruta, exploração de bugs e vários outros tipos de abuso.

Claro, você pode colocar regras no seu firewall para rejeitar conexões vindo de enderços não previamente aprovados, mas isso limita sua habilidade de conectar de qualquer lugar.

E se o número da porta mudasse a cada cinco segundos de uma forma que fosse facilmente previsível para você, mas parecesse totalmente imprevisível para qualquer outra pessoa? Mais precisamente: e se pudéssemos fazer com que o número da porta seja calculado partir de uma função de hash criptográfico forte, usando a data/hora atual e uma chave secreta como entrada?

Ainda mais precisamente: suponhamos que a porta do seu servidor SSH fosse calculada de acordo com a seguinte função:

    port = HOTP( (T/G) || K,4)+O

onde:

  • T é a data/hora:min:seg atual
  • G é a granularidade, digamos, 5 segunods
  • K é uma chave secreta de 128-bits, escolhida aleatoriamente
  • / significa divisão inteira de 32 bits
  • || representa a operação de concatenação, de sorte que o resultado do primeiro parâmetro fica com 160 bits de tamanho
  • HOTP(k,d) é a função geradora de senhas descartáveis definida na RFC 4226, com seu resultado truncado para 4 dígitos.
  • O é um número escolhido do conjunto { 10000, 20000, 30000, 40000, 50000 }

Suponha que haja um utilitário chamado pn (de "port number") que realiza esse cálculo, obtendo os parâmetros a partir da linha de comando e enviando o resultado na saída padrão. Então, no lado do cliente, poderíamos fazer:

ssh -p `pn algumasenha 1 5` me@myserver.net

A string algumasenha seria, obviamente, a chave. O 1 é abreviatura para O=10000, fazendo com que o número da porta resultante fique na faixa de 10000-19999. O 5 é a granularidade.

Agora, suponha que tivéssemos um módulo do netfilter chamado nswkpn que verifica se os números de porta batem com o cálculo acima. Então, poderíamos ter regras do iptables mais ou menos assim:

iptables -t nat -A PREROUTING -d ssh_servers_external_ip \  
    -m nswkpn -p tcp --offset 1 -j DNAT --to-destination=ssh_servers_internal_ip:22
iptables -A INPUT -d ssh_servers_internal_ip \ 
    -m nswkpn -p tcp --offset 1 -j ACCEPT # Torque INPUT por FORWARD se o destino for outra maq

Para que funcione, o relógio do cliente e do servidor devem estar sincronizados com precisão melhor do que G.

Usando esse método, reduzimos a chance de um atacante achar nosso servidor SSH de 1 (100%) para 1/10000 (0.01%). Não é tão sorrateiro quanto várias estratégias de port knocking, mas é mais simples. O programa calculador do número da porta pode rodar no seu celular o PDA.

Poderíamos obter uma operação muito mais sorrateira requerendo que a porta de origem satisfizesse o mesmo cálculo acima, mas certos tipos de tradução de endereço realizados pelos firewalls podem alterar os números de porta, fazendo com que o sistema falhe.

Fiquei tentado a chamar esse sistema de "números de porta de uso único", em analogia com as "senhas de uso único" (do termo em inglês "one-time passwords"). Todavia, dei-me conta que isso seria impreciso: os números não são usados uma única vez; de fato, são usados várias vezes, em diferentes instantes. O que dificulta o atacante é a dificuldade de prevê-los.
topo


Você está aqui: Kiko > PostsEmPortugues > PtBrBlogEntry2008Jan05A

topo

Creative Commons License   O conteúdo deste site está disponibilizado nos termos de uma Licença Creative Commons, exceto onde dito em contrário.
  The content of this site is made available under the terms of a Creative Commons License, except where otherwise noted.