O que é a varredura de portas?
As portas desempenham um papel fundamental para que os pacotes de dados encontrem o caminho para chegar aos destinos pretendidos. Neste sentido, funcionam como interface entre computadores e serviços ou programas do sistema e são utilizados por protocolos de rede como o TCP e o UDP. Em combinação com o endereço IP, as portas permitem ao sistema operativo não só saber para que computador deve enviar o fluxo de dados, mas também a que aplicação deve entregar os pacotes.
O que é a varredura de portas?
Os sistemas operativos utilizam as portas para encaminhar os pacotes de entrada ou de saída para as aplicações adequadas. Desta forma, as portas funcionam como interfaces entre os programas e a Internet, geridas pelos sistemas operativos. Para que uma aplicação possa comunicar a partir de uma porta, é necessário primeiro ativá-la, o que acarreta um problema: se a aplicação apresentar falhas de segurança, cada porta aberta é também um possível ponto de entrada para ataques. Para reduzir o risco de ataques, deve estar ciente das portas abertas no seu sistema e das aplicações que estas ocultam.
Por «port scanning» entende-se o procedimento que tem como objetivo analisar as portas abertas de um sistema informático com a ajuda de ferramentas especiais. Para realizar essa verificação, não é necessário registar-se no sistema de destino, bastando estar ligado a ele, por exemplo, através de uma rede local ou da Internet. Com a ajuda dos port scanners, são enviados, a título de teste, pacotes de dados especiais para as diferentes portas, obtendo-se as respostas ou mensagens de erro correspondentes, que a ferramenta analisa e avalia. Independentemente da funcionalidade do programa de port scanning utilizado, é possível obter não só dados sobre quais as portas abertas ou fechadas, mas também sobre os serviços ou aplicações que utilizam as portas correspondentes.
A verificação de portas constitui um meio muito eficiente ao qual os administradores de sistemas podem recorrer para controlar o tráfego de dados numa rede. Desta forma, é possível identificar possíveis vulnerabilidades e reduzir a superfície de ataque. Em alguns casos, também é possível resolver problemas de rede específicos. Uma vez que as ferramentas não têm um impacto significativo no desempenho dos sistemas analisados, podem ser utilizadas sem hesitação para essas medidas de segurança.
Também no âmbito doméstico, o método de verificação de portas pode ser útil, pois assim que se instalam e utilizam aplicações que requerem uma ligação à Internet, as portas são abertas automaticamente, desde que o firewall não o impeça. A verificação de portas ajuda a manter uma visão geral e mostra as portas que já não são necessárias e que, consequentemente, podem ser fechadas para minimizar os riscos que podem afetar a segurança.
Como é que a verificação de portas funciona exatamente?
Para fazer a varredura de portas, existem normalmente vários métodos, a maioria dos quais gira em torno do protocolo de ligação TCP. Para compreender quais são os processos básicos que ocorrem durante a varredura de portas, é útil dar uma vista de olhos aos aspetos gerais do estabelecimento da ligação através do protocolo TCP:
- No âmbito do processo denominado «negociação em três etapas», o cliente envia, em primeiro lugar, um pacote SYN (synchronize = «sincronizar») para a porta de destino correspondente.
- Se este chegar a uma aplicação, recebe um pacote SYN/ACK combinado (synchronize acknowledge = «confirmar sincronização») que confirma o estabelecimento da ligação.
- O cliente responde na terceira e última etapa com um pacote ACK (acknowledge = “confirmar”), pelo que a ligação é estabelecida e a troca de dados pode já começar.
Se for estabelecido contacto com uma porta fechada, o cliente recebe, na segunda etapa, um pacote com o sinalizador RST (reset = «reiniciar») como resposta, pelo que a negociação é interrompida.
Uma vez que a troca de dados com as diversas aplicações seria, por um lado, muito dispendiosa e, por outro, muito complexa, a verificação de portas limita-se apenas a uma simples tentativa de ligação, tal como demonstram os métodos de verificação que apresentamos a seguir.
TCP SYN
No caso do TCP SYN, pode-se falar de uma varredura semiaberta, uma vez que esta não tem como objetivo o estabelecimento de uma ligação TCP completa. Nesta modalidade, podem ser enviados pacotes SYN normais para cada uma das portas com o scanner de portas, após o que se aguarda uma resposta por parte do anfitrião de destino. Se este responder com um pacote SYN/ACK, isso indica que a porta correspondente está aberta e que é possível estabelecer a ligação. Se a resposta consistir num pacote RST, isso indicará que a porta está fechada. Se o host de destino ainda não tiver enviado uma resposta, tudo indica que foi interposto um filtro de pacotes, como, por exemplo, uma firewall.
Os escaneamentos TCP SYN não são visíveis para as aplicações monitorizadas e, por isso, não geram dados de registo, razão pela qual também são conhecidos como «escaneamentos furtivos ».
Ligar TCP
Se utilizar o seu scanner de portas para realizar uma varredura do tipo «connect», neste caso não gera nem envia os pacotes de dados por conta própria, mas recorre, para tal, à chamada do sistema «connect». Esta está disponível para quase todos os sistemas operativos.
Com a confirmação de que a porta em questão está aberta, considera-se que a ligação foi estabelecida com sucesso. Se a ligação falhar, a porta é marcada como fechada.
Se a ligação for estabelecida na íntegra, nos ficheiros de registo das aplicações com portas abertas é fácil verificar se este método de sondagem foi utilizado, mas não quais os programas de filtragem utilizados. No entanto, se não tiveres direitos para enviar pacotes de dados brutos, o método TCP connect é uma alternativa útil à varredura SYN.
TCP FIN, Xmas e Null
Com estes três métodos de verificação de portas, também é possível distinguir entre portas abertas e fechadas. Para tal, podem ser aplicados os dois princípios básicos do TCP, descritos na RFC 793:
- Uma porta fechada deve sempre responder aos pacotes de entrada que não sejam pacotes RST com um pacote RST próprio.
- A porta aberta deve ignorar todos os pacotes que não estejam marcados como SYN, RST ou ACK.
Os três métodos de análise acima referidos refletem esta situação quando se trata de avaliar a conformidade dos sistemas com as publicações Request For Comment através dos seus pacotes individuais:
- A varredura Null não coloca nenhuma marca especial.
- No FIN, o scanner de portas envia pacotes FIN (finish = terminar).
- As varreduras Xmas combinam as marcas FIN, PSH (push = empurrar) e URG (urgent = urgente), pelo que «iluminam» o pacote da mesma forma que uma árvore de Natal.
Estes três métodos funcionam exatamente da mesma forma. Os pacotes de teste enviados garantem que, de acordo com as disposições da RFC, uma porta fechada responda com um pacote RST e que uma porta aberta não apresente qualquer reação. No entanto, uma vez que apenas alguns routers transmitem mensagens de erro quando uma porta é filtrada, também pode ocorrer uma ausência de reação no caso de uma porta filtrada. Embora estes procedimentos sejam mais discretos do que as varreduras SYN, têm a desvantagem de não funcionarem quando os sistemas não cumprem rigorosamente o protocolo RFC 793. O Windows seria, neste caso, o exemplo mais significativo.
UDP
Nas varreduras UDP, são enviados cabeçalhos UDP vazios e sem dados para todas as portas de destino. Se um serviço responder com um pacote UDP, confirma-se que a porta a que pertence está aberta. Se o router enviar ao scanner de portas a mensagem de erro «Port unreachable» (Tipo 3, Código 3), este saberá que a porta está fechada. Outros tipos de mensagens de erro indicam que um filtro de pacotes está a bloquear a porta. O grande problema decorrente da verificação de portas com UDP é que este processo é demorado, uma vez que, em muitos sistemas, a emissão das mensagens de erro correspondentes pode demorar muito tempo por motivos de segurança e as portas abertas respondem de forma muito irregular. O kernel do Linux limita o número de mensagens a, por exemplo, uma por segundo, o que significa que é possível escanear 65 535 portas em cerca de 18 horas.
Que tipos de scanners de portas existem?
Atualmente, existem diversos scanners com funcionalidades muito variadas. Além disso, a maioria destas ferramentas é gratuita (freeware) ou de código aberto (open source). Em muitos casos, trata-se de programas de linha de comandos que também podem ser utilizados através de interfaces gráficas separadas. Da mesma forma, a Internet oferece inúmeras soluções que permitem fazer a verificação de portas diretamente no navegador. Em termos funcionais, este tipo de serviços é bastante limitado e oferece apenas, por exemplo, a verificação de portas do DNStools, a possibilidade de examinar portas separadamente. Por este motivo, tornam-se uma opção prática para realizar uma análise rápida no computador de casa.
Netcat, a veterana das ferramentas de rede
O Netcat, cuja abreviatura é nc, foi lançado em 1996 por um programador anónimo sob o pseudónimo de «Hobbit». Embora tenha sido originalmente concebido para plataformas baseadas em UNIX, hoje em dia existem diversas opções de portabilidade para outros sistemas, como o Windows, mas também foram desenvolvidas versões como o GNU Netcat, o OpenBSD Netcat, o Cryptcat ou o Netcat6 (que também suporta IPv6), que, normalmente, podem ser implementadas em numerosas distribuições de Linux. A versão básica da ferramenta de linha de comando foi concebida, em princípio, para enviar ou ler dados através de ligações de rede utilizando protocolos como o TCP ou o UDP, embora também possa ser utilizada para realizar uma simples verificação de portas. Assim, por exemplo, com um comando simples como
nc -zv localhost 20-30bashÉ possível verificar o estado das portas compreendidas entre os números 20 e 30 no sistema em execução. A verificação das portas UDP requer o parâmetro adicional –u, mas também é possível introduzir os nomes dos anfitriões ou os endereços IP de sistemas externos em vez de localhost.
Análise completa da rede com o Nmap
O Network Mapper (Nmap), lançado em 1997, é uma ferramenta fundamental e poderosa que se destaca, sobretudo, pela sua função como scanner de portas. O programa, desenvolvido para sistemas Unix-like, está sujeito à licença GPL e, desde 2000, também está disponível para sistemas Windows, embora com algumas limitações. Assim, o método TCP connect, por exemplo, implica um tempo desproporcional devido à API de rede do Windows, e a verificação das portas do próprio sistema só é possível se forem tomados certos desvios. Normalmente, o Nmap pode ser controlado através da linha de comandos. No entanto, com o Zenmap existe uma interface gráfica de alto desempenho com a qual é possível utilizar a ferramenta de rede de uma forma ainda mais confortável.
Tanto o criador do Nmap, Gordon Lyon, como a equipa de programadores desta ferramenta, desenvolvem o programa e as suas funcionalidades para realizar varreduras de portas de forma contínua, o que constitui a principal razão por detrás da grande variedade de funcionalidades que o caracterizam. Técnicas como o OS fingerprinting (o reconhecimento do host de destino pelo sistema operativo) e a leitura dos serviços ocultos atrás de uma porta tornam o Nmap numa das soluções de varredura de portas mais populares. A grande diversidade dos métodos de varredura disponíveis, que apresentamos na tabela abaixo, é evidente:
| Método de verificação de portas | Comando do Nmap | Descrição |
|---|---|---|
| TCP Connect | nmap -sT host | A opção clássica para quem não é administrador |
| TCP Syn | nmap -sS host | Método de verificação rápido e discreto para administradores |
| TCP FIN/XMAS/Null | nmap -sF host nmap -sX host nmap -sN host | Métodos capazes de contornar firewalls |
| TCP Ping | nmap -sP host | Este não é um método de varredura clássico e sua função é ajudar a verificar a acessibilidade de um host |
| TCP ACK | nmap -sA host | Verifica portas filtradas, mas não oferece uma distinção entre portas abertas e fechadas |
| Janela TCP | nmap -sW host | Semelhante à verificação, permite verificar algumas portas abertas e fechadas |
| TCP Maimon | nmap -sM host | Combinação entre FIN e ACK |
| TCP Idle | nmap -sI zombie-host | Este é o método mais discreto e complexo para escanear portas, mas também o mais lento; é executado num terceiro computador, denominado zombie |
| UDP | nmap -sU host | Método de varredura para portas UDP sem conexão |
| SCTP Init | nmap -sY host | Varredura de portas com SCTP, uma alternativa ao TCP e ao UDP |
| Protocolo IP | nmap -sO host | Não permite a verificação de portas, mas verifica quais são os protocolos baseados em endereços IP suportados no sistema de destino |
No site oficial do Nmap, pode descarregar tanto o Nmap como a interface Zenmap Nmap para o sistema operativo pretendido. Para tal, pode aceder tanto à versão atual (estável) como à versão beta (em desenvolvimento).
Por que razão a verificação de portas nem sempre é legal
O controlo dos portos nem sempre é realizado de forma legal. Se, em última instância, isso resultar numa tentativa de ataque, aproveitando, por exemplo, uma falha de segurança, podem ser cometidos atos puníveis.
A situação jurídica parece um pouco menos clara quando, por exemplo, um sistema informático fica paralisado devido a uma varredura intensiva de portas. Uma vez que os métodos de controlo podem representar uma grande sobrecarga para o sistema de destino devido à elevada frequência de pedidos de ligação, pode ocorrer o bloqueio do sistema. É até possível que os responsáveis pelo sistema de destino se apercebam da sobrecarga antes da falha geral e a considerem uma tentativa de ataque. Neste caso, não se pode descartar a possibilidade de ter de enfrentar consequências legais.
Caso se provoque intencionalmente uma sobrecarga no sistema externo, estaríamos perante os famosos ataques DoS e DDoS, que quase certamente podem dar origem a um processo penal.
Das informações acima expostas, depreende-se que é aconselhável certificar-se de que se possui autorização para realizar a chamada verificação de portas no sistema em questão. É também recomendável utilizar esta técnica apenas por motivos de segurança e não por mera curiosidade. As medidas apresentadas para implementar a verificação de portas realçam a importância de não perder de vista as portas, tanto do próprio sistema ou do computador em rede, como dos serviços aos quais se pode aceder através delas.