As portas de­sem­pe­nham um papel fun­da­men­tal para que os pacotes de dados encontrem o caminho para chegar aos destinos pre­ten­di­dos. Neste sentido, funcionam como interface entre com­pu­ta­do­res e serviços ou programas do sistema e são uti­li­za­dos por pro­to­co­los de rede como o TCP e o UDP. Em com­bi­na­ção com o endereço IP, as portas permitem ao sistema operativo não só saber para que com­pu­ta­dor 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 ope­ra­ti­vos utilizam as portas para en­ca­mi­nhar os pacotes de entrada ou de saída para as apli­ca­ções adequadas. Desta forma, as portas funcionam como in­ter­fa­ces entre os programas e a Internet, geridas pelos sistemas ope­ra­ti­vos. Para que uma aplicação possa comunicar a partir de uma porta, é ne­ces­sá­rio primeiro ativá-la, o que acarreta um problema: se a aplicação apre­sen­tar 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 apli­ca­ções que estas ocultam.

Por «port scanning» entende-se o pro­ce­di­mento que tem como objetivo analisar as portas abertas de um sistema in­for­má­tico com a ajuda de fer­ra­men­tas especiais. Para realizar essa ve­ri­fi­ca­ção, não é ne­ces­sá­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 di­fe­ren­tes portas, obtendo-se as respostas ou mensagens de erro cor­res­pon­den­tes, que a fer­ra­menta analisa e avalia. In­de­pen­den­te­mente da fun­ci­o­na­li­dade 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 apli­ca­ções que utilizam as portas cor­res­pon­den­tes.

A ve­ri­fi­ca­ção de portas constitui um meio muito eficiente ao qual os ad­mi­nis­tra­do­res de sistemas podem recorrer para controlar o tráfego de dados numa rede. Desta forma, é possível iden­ti­fi­car possíveis vul­ne­ra­bi­li­da­des e reduzir a su­per­fí­cie de ataque. Em alguns casos, também é possível resolver problemas de rede es­pe­cí­fi­cos. Uma vez que as fer­ra­men­tas não têm um impacto sig­ni­fi­ca­tivo no de­sem­pe­nho dos sistemas ana­li­sa­dos, podem ser uti­li­za­das sem hesitação para essas medidas de segurança.

Também no âmbito doméstico, o método de ve­ri­fi­ca­ção de portas pode ser útil, pois assim que se instalam e utilizam apli­ca­ções que requerem uma ligação à Internet, as portas são abertas au­to­ma­ti­ca­mente, desde que o firewall não o impeça. A ve­ri­fi­ca­ção de portas ajuda a manter uma visão geral e mostra as portas que já não são ne­ces­sá­rias e que, con­se­quen­te­mente, podem ser fechadas para minimizar os riscos que podem afetar a segurança.

Como é que a ve­ri­fi­ca­ção de portas funciona exa­ta­mente?

Para fazer a varredura de portas, existem nor­mal­mente vários métodos, a maioria dos quais gira em torno do protocolo de ligação TCP. Para com­pre­en­der quais são os processos básicos que ocorrem durante a varredura de portas, é útil dar uma vista de olhos aos aspetos gerais do es­ta­be­le­ci­mento da ligação através do protocolo TCP:

  • No âmbito do processo de­no­mi­nado «ne­go­ci­a­ção em três etapas», o cliente envia, em primeiro lugar, um pacote SYN (syn­ch­ro­nize = «sin­cro­ni­zar») para a porta de destino cor­res­pon­dente.
  • Se este chegar a uma aplicação, recebe um pacote SYN/ACK combinado (syn­ch­ro­nize ack­no­wledge = «confirmar sin­cro­ni­za­ção») que confirma o es­ta­be­le­ci­mento da ligação.
  • O cliente responde na terceira e última etapa com um pacote ACK (ack­no­wledge = “confirmar”), pelo que a ligação é es­ta­be­le­cida e a troca de dados pode já começar.

Se for es­ta­be­le­cido contacto com uma porta fechada, o cliente recebe, na segunda etapa, um pacote com o si­na­li­za­dor RST (reset = «reiniciar») como resposta, pelo que a ne­go­ci­a­ção é in­ter­rom­pida.

Uma vez que a troca de dados com as diversas apli­ca­ções seria, por um lado, muito dis­pen­di­osa e, por outro, muito complexa, a ve­ri­fi­ca­ção de portas limita-se apenas a uma simples tentativa de ligação, tal como de­mons­tram os métodos de ve­ri­fi­ca­ção que apre­sen­ta­mos a seguir.

TCP SYN

No caso do TCP SYN, pode-se falar de uma varredura se­mi­a­berta, uma vez que esta não tem como objetivo o es­ta­be­le­ci­mento de uma ligação TCP completa. Nesta mo­da­li­dade, 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 cor­res­pon­dente está aberta e que é possível es­ta­be­le­cer 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 in­ter­posto um filtro de pacotes, como, por exemplo, uma firewall.

Os es­ca­ne­a­men­tos TCP SYN não são visíveis para as apli­ca­ções mo­ni­to­ri­za­das e, por isso, não geram dados de registo, razão pela qual também são co­nhe­ci­dos como «es­ca­ne­a­men­tos 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á dis­po­ní­vel para quase todos os sistemas ope­ra­ti­vos.

Com a con­fir­ma­ção de que a porta em questão está aberta, considera-se que a ligação foi es­ta­be­le­cida com sucesso. Se a ligação falhar, a porta é marcada como fechada.

Se a ligação for es­ta­be­le­cida na íntegra, nos ficheiros de registo das apli­ca­ções com portas abertas é fácil verificar se este método de sondagem foi utilizado, mas não quais os programas de filtragem uti­li­za­dos. No entanto, se não tiveres direitos para enviar pacotes de dados brutos, o método TCP connect é uma al­ter­na­tiva útil à varredura SYN.

TCP FIN, Xmas e Null

Com estes três métodos de ve­ri­fi­ca­ção de portas, também é possível dis­tin­guir entre portas abertas e fechadas. Para tal, podem ser aplicados os dois prin­cí­pios básicos do TCP, descritos na RFC 793:

  1. Uma porta fechada deve sempre responder aos pacotes de entrada que não sejam pacotes RST com um pacote RST próprio.
  2. 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 con­for­mi­dade dos sistemas com as pu­bli­ca­ções Request For Comment através dos seus pacotes in­di­vi­du­ais:

  • A varredura Null não coloca nenhuma marca especial.
  • No FIN, o scanner de portas envia pacotes FIN (finish = terminar).
  • As var­re­du­ras 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 exa­ta­mente da mesma forma. Os pacotes de teste enviados garantem que, de acordo com as dis­po­si­çõ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 trans­mi­tem 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 pro­ce­di­men­tos sejam mais discretos do que as var­re­du­ras SYN, têm a des­van­ta­gem de não fun­ci­o­na­rem quando os sistemas não cumprem ri­go­ro­sa­mente o protocolo RFC 793. O Windows seria, neste caso, o exemplo mais sig­ni­fi­ca­tivo.

UDP

Nas var­re­du­ras UDP, são enviados ca­be­ça­lhos 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 un­re­a­cha­ble» (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 de­cor­rente da ve­ri­fi­ca­ção de portas com UDP é que este processo é demorado, uma vez que, em muitos sistemas, a emissão das mensagens de erro cor­res­pon­den­tes 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?

Atu­al­mente, existem diversos scanners com fun­ci­o­na­li­da­des muito variadas. Além disso, a maioria destas fer­ra­men­tas é 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 uti­li­za­dos através de in­ter­fa­ces gráficas separadas. Da mesma forma, a Internet oferece inúmeras soluções que permitem fazer a ve­ri­fi­ca­ção de portas di­re­ta­mente no navegador. Em termos fun­ci­o­nais, este tipo de serviços é bastante limitado e oferece apenas, por exemplo, a ve­ri­fi­ca­ção de portas do DNStools, a pos­si­bi­li­dade de examinar portas se­pa­ra­da­mente. Por este motivo, tornam-se uma opção prática para realizar uma análise rápida no com­pu­ta­dor de casa.

Netcat, a veterana das fer­ra­men­tas de rede

O Netcat, cuja abre­vi­a­tura é nc, foi lançado em 1996 por um pro­gra­ma­dor anónimo sob o pseu­dó­nimo de «Hobbit». Embora tenha sido ori­gi­nal­mente concebido para pla­ta­for­mas baseadas em UNIX, hoje em dia existem diversas opções de por­ta­bi­li­dade para outros sistemas, como o Windows, mas também foram de­sen­vol­vi­das versões como o GNU Netcat, o OpenBSD Netcat, o Cryptcat ou o Netcat6 (que também suporta IPv6), que, nor­mal­mente, podem ser im­ple­men­ta­das em numerosas dis­tri­bui­ções de Linux. A versão básica da fer­ra­menta de linha de comando foi concebida, em princípio, para enviar ou ler dados através de ligações de rede uti­li­zando pro­to­co­los como o TCP ou o UDP, embora também possa ser utilizada para realizar uma simples ve­ri­fi­ca­ção de portas. Assim, por exemplo, com um comando simples como

nc -zv localhost 20-30
bash

É possível verificar o estado das portas com­pre­en­di­das entre os números 20 e 30 no sistema em execução. A ve­ri­fi­ca­ção das portas UDP requer o parâmetro adicional –u, mas também é possível in­tro­du­zir os nomes dos an­fi­triõ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 fer­ra­menta fun­da­men­tal e poderosa que se destaca, sobretudo, pela sua função como scanner de portas. O programa, de­sen­vol­vido para sistemas Unix-like, está sujeito à licença GPL e, desde 2000, também está dis­po­ní­vel para sistemas Windows, embora com algumas li­mi­ta­ções. Assim, o método TCP connect, por exemplo, implica um tempo des­pro­por­ci­o­nal devido à API de rede do Windows, e a ve­ri­fi­ca­ção das portas do próprio sistema só é possível se forem tomados certos desvios. Nor­mal­mente, o Nmap pode ser con­tro­lado através da linha de comandos. No entanto, com o Zenmap existe uma interface gráfica de alto de­sem­pe­nho com a qual é possível utilizar a fer­ra­menta de rede de uma forma ainda mais con­for­tá­vel.

Tanto o criador do Nmap, Gordon Lyon, como a equipa de pro­gra­ma­do­res desta fer­ra­menta, de­sen­vol­vem o programa e as suas fun­ci­o­na­li­da­des para realizar var­re­du­ras de portas de forma contínua, o que constitui a principal razão por detrás da grande variedade de fun­ci­o­na­li­da­des que o ca­rac­te­ri­zam. Técnicas como o OS fin­ger­prin­ting (o re­co­nhe­ci­mento 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 di­ver­si­dade dos métodos de varredura dis­po­ní­veis, que apre­sen­ta­mos na tabela abaixo, é evidente:

Método de ve­ri­fi­ca­ção de portas Comando do Nmap Descrição
TCP Connect nmap -sT host A opção clássica para quem não é ad­mi­nis­tra­dor
TCP Syn nmap -sS host Método de ve­ri­fi­ca­ção rápido e discreto para ad­mi­nis­tra­do­res
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 aces­si­bi­li­dade 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 Se­me­lhante à ve­ri­fi­ca­ção, permite verificar algumas portas abertas e fechadas
TCP Maimon nmap -sM host Com­bi­na­çã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 com­pu­ta­dor, de­no­mi­nado 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 al­ter­na­tiva ao TCP e ao UDP
Protocolo IP nmap -sO host Não permite a ve­ri­fi­ca­ção de portas, mas verifica quais são os pro­to­co­los baseados em endereços IP su­por­ta­dos no sistema de destino

No site oficial do Nmap, pode des­car­re­gar tanto o Nmap como a interface Zenmap Nmap para o sistema operativo pre­ten­dido. Para tal, pode aceder tanto à versão atual (estável) como à versão beta (em de­sen­vol­vi­mento).

O controlo dos portos nem sempre é realizado de forma legal. Se, em última instância, isso resultar numa tentativa de ataque, apro­vei­tando, 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 in­for­má­tico fica pa­ra­li­sado devido a uma varredura intensiva de portas. Uma vez que os métodos de controlo podem re­pre­sen­tar uma grande so­bre­carga para o sistema de destino devido à elevada frequên­cia de pedidos de ligação, pode ocorrer o bloqueio do sistema. É até possível que os res­pon­sá­veis pelo sistema de destino se apercebam da so­bre­carga antes da falha geral e a con­si­de­rem uma tentativa de ataque. Neste caso, não se pode descartar a pos­si­bi­li­dade de ter de enfrentar con­sequên­cias legais.

Caso se provoque in­ten­ci­o­nal­mente uma so­bre­carga no sistema externo, es­ta­ría­mos perante os famosos ataques DoS e DDoS, que quase cer­ta­mente podem dar origem a um processo penal.

Das in­for­ma­ções acima expostas, depreende-se que é acon­se­lhá­vel cer­ti­fi­car-se de que se possui au­to­ri­za­ção para realizar a chamada ve­ri­fi­ca­ção de portas no sistema em questão. É também re­co­men­dá­vel utilizar esta técnica apenas por motivos de segurança e não por mera cu­ri­o­si­dade. As medidas apre­sen­ta­das para im­ple­men­tar a ve­ri­fi­ca­ção de portas realçam a im­por­tân­cia de não perder de vista as portas, tanto do próprio sistema ou do com­pu­ta­dor em rede, como dos serviços aos quais se pode aceder através delas.

Ir para o menu principal