Depois de ter localizado sistemas ativos em uma rede, é hora de dar uma olhada nesses hosts para determinar se existem portas abertas que podem ser úteis. Essencialmente o que estamos fazendo em cada host vivo é “mexer as maçanetas” em cada porta para ver quais portas estão abertas e fechadas. E enquanto podemos estar vendo que estão abertos e fechados, ainda não estamos no ponto em que estamos “espiando o que tem dentro”.
Você deve saber como as varreduras de portas funcionam e os diferentes tipos de varredura disponíveis, bem como por que você usaria um tipo e não o outro. Preste muita atenção aos scans mencionados aqui, porque cada um tem pequenos detalhes que você pode esquecer. Lembre-se também de estudar, estudar, estudar essas varreduras.
Antes de começar a executar alguns scan de portas, vamos rever alguns fundamentos. Se você se lembrar, TCP é um protocolo orientado a conexão e UDP é sem conexão. Saber como esses protocolos funcionam e o significado de cada um vai fazer e escolher a varredura correta, vai ser muito mais fácil para você e definitivamente mais produtivo.
O handshake de três vias (3-way-handshake) é executado quando você está tentando estabelecer uma conexão TCP com um sistema ou, especificamente, uma porta no sistema. O handshake estabelece uma conexão bem-sucedida e confiável entre dois sistemas. O processo envolve três etapas:
Vejamos os passos:
- Hosta A envia o pacote SYN para o host B com uma solicitação para estabelecer conexão;
- Host B responde com um pacote SYN-ACK como um reconhecimento da solicitação;
- Host A responde com um ACK, que serve para estabelecer por completo a conexão.
Se estes três passos acontecerem sem erro, uma conexão é estabelecida com sucesso e as informações irão fluir por ela.
SYN e ACK são dois dos indicadores em um pacote conhecido como sinalizadores. Esses sinalizadores são essencialmente bits que são definidos como on ou off no cabeçalho de um pacote TCP. O sistema receptor usará esses sinalizadores para determinar como processar esse pacote específico. Em um pacote TCP é possível ter cada pacote ativado ou cada pacote desligado, com qualquer variação de ligar e desligar permitido na maioria dos casos. Esta informação básica é vital para você a partir deste ponto, porque ele terá um impacto direto sobre a utilidade do seu processo de scanning.
- SYN inicia uma conexão entre dois hosts para facilitar a comunicação;
- ACK reconhece o pacote recebido;
- URG indica que um dado de um pactoe é urgente e deve ser processado imediatamente;
- PSH instrui o sistema remetente para enviar todos os dados em buffer imediatamente;
- FIN avisa ao sistema remoto que nenhuma informação a mais será enviada, ou seja, ele encerra a conexão de forma simples.
- RST reseta a conexão.
Esta informação pode ser útil em várias áreas, especialmente quando você está usando um montador de pacotes. Você pode usar um montador de pacotes e usar as flags para identificar como um sistema responde ao pacote e que tipo de resultado ocorre.
Veremos como usar isto com o hping2 e hping3. No hping3, por exemplo, é possível gerar diferentes tipos de pacotes e enviar para o alvo:
- Criar um pacote ACK e enviar para a porta 80 do alvo:
hping3 –A <target IP address> -p 80 - Criar um SYN scan em diversas portas da vítima:
hping3 -8 50-56 –s <target IP address> -v - Criar um pacote com FIN, URG e PSH e enviar para a porta 80 da vítima:
hping3 –F –P -U <target IP address> -p 80
Os tipos de scans
Full-Open Scan
Este tipo de scan cria a conexão completa com o 3-way-handshake. A vantagem é que você tem uma resposta positiva do sistema alvo. Em um pentest ele pode ocorrer de propósito ou sem querer, mas isto pode ser ruim ou até mesmo fatal para o teste, pois o ataque poderá ser logado pelo firewall e um IDS.
Quando uma porta fechada é encontrada, a resposta do host remoto será o sinalizador RST, finalizando a tentativa de conexão.
No nmap, podemos usar a flag -sT que significa “scan TCP”:
nmap -sT <range ou endereço IP>
Tenha em mente que este tipo de scan causa muito “barulho” na rede e com certeza será logado. Use-o somente quando nenhum outro scan funcionar ou simplesmente for necessário.
Stealth / Half-Open Scan
Neste, o processo é semelhante ao full-open scan, mas faz menos barulho. Também é chamado de SYN scan.
Enquanto no full-open o processo de 3-way-handshake finaliza com ACK, no half-open é finalizado com uma resposta RST, o que significa que o host atacante não quer se conectar com o host remoto. Com isto, temos a resposta de que a porta está disponível mas não estabelecemos uma conexão, de fato. Como este scan não recebe o ACK final, ele é menos confiável.
Caso a porta esteja fechada, a conexão inicia com SYN e terá a resposta com um RST.
Para fazer este scan no nmap, use o comando:
nmap –sS <range / endereço IP>
Xmas Tree Scan
Este scan vem de uma frase em inglês “lit up like a Christmas (Xmas) tree” (iluminado como uma árvore de natal), pois fala a respeito da quantidade de sinalizadores enviados, que são os URG, PSH e FIN ligados. Ao enviar isto, o sistema remoto irá determinar o que fazer, que deveria ser dar um drop no pacote ou ignorar, mas alguns deles respondem com a porta aberta ou com o RST, informando que a porta está fechada.
Para fazer isto no nmap:
nmap –sX –v <range ou endereço IP>
FIN Scan
Neste scan, o atacante envia para a vítima um pacote com o sinalizador FIN. Ele tem um perfil mais baixo, o que pode passar pelo firewall e chegar ao sistema alvo.
Semelhante ao Xmas tree scan, se um FIN é enviado para uma porta aberta, não teremos resposta, mas se a porta estiver fechada, a vítima responderá com um RST.
No nmap temos o seguinte comando:
nmap –sF <range ou endereço IP>
NULL Scan
Neste scan, o atacante envia para a vítima um pacote sem um flag. O resultado é similar ao FIN scan. A vítima irá responder de acordo com a porta aberta ou fechada. Ou seja, ao enviar para uma porta aberta, não teremos resposta, mas se enviar para uma porta fechada, teremos o RST.
No nmap temos o seguinte comando:
nmap –sN <range ou endereço IP>
Na prática, este é um tipo de ataque fácil de perceber, pois não existe motivos para um pacote ser enviado sem nenhum sinalizador. Logo, os administradores de redes devem ficar atentos a estes tipos de pacotes quando trafegarem na rede e forem detectados por seus sistemas.
Idle Scanning
É um tipo de scan muito único e poderoso por ser muito discreto em relação aos outros scans, mas depende de como você faz o scan. A intenção aqui é enviar os pacotes sem parecer que estão saindo do sistema remetente. Na prática, ele é feito a partir de máquinas de salto (ou zumbis) até o sistema alvo. Caso o defensor vá investigar a origem, ele apontará para a máquina de salto e não para a máquina de origem de fato.
Ela é mais complexa de ser feita em relação as outras técnicas, pois depende de três pontos:
- Um meio de determinar se uma porta TCP está aberta é enviar um pacote SYN para a porta. A máquina de destina responderá com um pacote SYN/ACK se a porta estiver aberta, e com RST se estiver fechada;
- Uma máquina que recebe um pacote SYN/ACK não solicitado, vai responder com um RST. Um RST não solicitado será ignorado;
- Cada pacote IP na Internet tem um número de identificação de fragmento (IP ID).Uma vez que muitos sistemas operacionais simplesmente incrementam esse número para cada pacote que enviam, a detecção do ID IP pode informar um invasor quantos pacotes foram enviados desde a última sondagem.
É através da aplicação e combinação dessas propriedades que o atacante pode falsificar sua identidade e lançar a culpa em outro sistema, que neste caso é o zumbi. Para um observador externo, o zumbi vai parecer o criador do ataque.
Um idle scan consiste em três etapas que seriam repetidas para cada porta a ser verificada:
- Verifique o IP ID da máquina zumbi e grave-o;
- Forge um pacote SYN do zumbi e envie para a porta desejada no destino. Dependendo do estado da porta, a reação do alvo pode ou não fazer com que o ID do zumbi seja incrementado;
- Verifique o ID IP do zumbi outra vez. O estado da porta de destino é então determinado comparando este novo ID IP com o registrado na etapa 1.
Após esse processo, o ID IP do zumbi deve ter incrementado por um valor de um ou dois. Um aumento de um indica que o zumbi não enviou nenhum pacote, exceto por sua resposta à sonda do atacante. Essa falta de pacotes enviados significa que a porta não está aberta (o alvo deve ter enviado ao zumbi um pacote RST, que foi ignorado ou
aconteceu nada mesmo). Um aumento de dois indica que o zumbi enviou um pacote entre as duas sondas. Este pacote extra normalmente significa que a porta está aberta (o alvo presumivelmente enviou o zumbi um pacote SYN / ACK em resposta ao SYN forjado, que induziu um pacote RST do zumbi). Aumentos maiores do que dois geralmente significam um host zumbi ruim. Pode não ter números de ID IP previsíveis, ou pode estar envolvido em comunicação não relacionada ao idle scan.
Mesmo que o que acontece com uma porta fechada é ligeiramente diferente do que acontece com uma porta filtrada, o atacante mede o mesmo resultado em ambos os casos, ou seja, um ID IP acrescido em um. Portanto, não é possível para o idle scan distinguir entre portas fechadas e filtradas. Quando o nmap registra um aumento de ID IP em um, ele marca a porta fechada | filtrada.
A vantagem deste scan é que você consegue se manter discreto em relação aos sistemas de detecção e firewalls, mas por outro lado, o tempo para conseguir executar este scan irá crescer bastante.
ACK Scanning
Alguns dos scans podem fazer com que você seja bloqueado, provavelmente existe um firewall no meio do caminho. Então o que fazer? Este firewall, provavelmente, deve ser stateful, ou seja, ele inspeciona o estado do pacote durante as conexões de rede. Eles foram feitos para identificar diferentes tipos de conexões, entre legítimos ou não. Qualquer pacote diferente do que ele conhece será dropado e o host não poderá passar.
O ACK scan foi feito para detectar a presença de firewall stateful. No modo normal, um pacote ACK só seria enviado em resposta a uma conexão sendo estabelecida em alguma conexão TCP existente. Caso um pacote com ACK passe e não existe uma conexão estabelecida, ele não deveria passar.
Quando este scan é realizado e um ACK é enviado para um alvo, os resultados irão nos dizer o que queremos saber (esperamos). Quando um ACK é capaz de fazê-lo todo o caminho para o seu destino, um pacote RST será retornado se a porta está aberta ou fechada (é porque um RST é retornado para ambas as portas abertas e fechadas que esta varredura não é usado para detectar o estado real das portas). Também é possível que, se um ACK atinge seu destino, então um scanner como nmap retornará uma mensagem informando que a porta não está filtrada. Se o destino não puder ser alcançado pela mensagem ACK, nenhuma resposta será retornada, indicando que ele não atingiu seu destino pretendido. No caso do ACK não atingir o seu alvo, a outra resposta potencial pode vir na forma de uma mensagem de erro ICMP (tal como o tipo 3, código 0, 1, 2, 3, 9, 10 ou 13) ou é rotulada como “Filtrada”.
Quando um scan é bloqueado
Então, o que você faz como um pentester se filtros de pacotes, firewalls e outros dispositivos começam a pegar evidências de seu ataque? Muitos métodos estão disponíveis para evadir ou minimizar o risco de detecção durante o scan. Por exemplo, a fragmentação funciona rompendo um pacote em várias partes com o objetivo de impedir que os dispositivos de detecção vejam o que o pacote original não fragmentado pretende fazer. Pense nisso como tirar uma foto grande e cortá-la em pedaços como um quebra-cabeça. Se você não sabe o que o retrato original é você tem que remontar um grupo dos pedaços para saber o que ela é de fato.
No nmap, se você deseja fragmentar um pacote, você pode fazer isso usando a opção -f da seguinte maneira:
nmap –sS –T4 –A –f –v <range ou endereço IP>
Outras ferramentas que podem fragmentar pacotes são fragtest e fragroute. São usados através de linhas de comando, mas fazem a mesma coisa que outras ferramentas de fragmentação.
UDP Scanning
Tenha em mente que o UDP é um protocolo connectionless, diferente do TCP, que é baseado em conexão. UDP não possui sinalizadores, logo você mudará a forma de pensar.
No UDP, uma vez que um pacote deixa um sistema, este é o fim das coisas ou pelo menos fomos ensinados assim. Na realidade, quando um pacote UDP é enviado, nenhuma resposta é retornada se a porta no destino para o qual ele está sendo enviado está aberta. No entanto, se a porta estiver fechada, uma resposta será devolvida na forma de uma mensagem “Port Unreachable”.
No nmap temos o seguinte comando:
nmap –sU <range / endereço IP>
Sugestão de Livro: Certified Ethical Hacker version 9: Study Guide. Sybex. 2016.