Desenvolvendo um Scanner de Portas TCP Multithread de Alta Performance em Ruby

Autor: Adiel Santos Fontes
Introdução
Scanners de portas são ferramentas fundamentais na fase de reconhecimento em segurança cibernética: eles mapeiam a superfície de uma rede ou sistema, revelando serviços ativos e portas abertas. Com essas informações, o profissional de teste de penetração consegue identificar versões de softwares que possuem vulnerabilidades e possíveis pontos de entrada antes de avançar para etapas mais profundas de exploração.
Neste projeto, apresento o Fydelis Security Scanner: uma ferramenta de varredura de portas TCP desenvolvida em Ruby, com foco em velocidade, leveza e eficiência. Contando com suporte a multithreading e perfis de performance configuráveis, ela se torna uma opção ideal para atividades de reconhecimento em testes de penetração e auditorias de rede.
Principais Funcionalidades
- Multithreaded: Varredura rápida, utilizando filas de trabalho para processamento paralelo das portas.
- Perfis de Velocidade: Modos de execução que variam de polite a insane, permitindo ajustar o ritmo da varredura conforme a necessidade.
- Banner Grabbing: Tenta identificar qual serviço está sendo executado em cada porta detectada como aberta.
- Versatilidade: Aceita diferentes formatos de seleção de portas: intervalos (ex: 1-1000), lista de portas específicas (ex: 22,80,443) ou perfis pré-definidos.
- Exportação de Resultados: Salva o relatório da varredura diretamente em um arquivo de texto.
- Modo Verbose: Opção para exibir também as portas fechadas, útil para auditorias mais detalhadas.
Fundamentos Técnicos: A Engenharia por Trás da Ferramenta
Por que escolhi Ruby?
A linguagem se destaca pela facilidade de leitura e escrita, além de contar com uma biblioteca de sockets nativa e bem estruturada, fatores que agilizam o desenvolvimento e a manutenção do código, sem perder desempenho.
Conceitos de Rede Aplicados
A varredura funciona com base no processo de Three-Way Handshake (apertamento de mão em três etapas) do protocolo TCP: quando a função Socket.tcp tenta estabelecer uma conexão, ela envia um pacote SYN; se a porta estiver aberta, o alvo responde com SYN-ACK; e por fim a ferramenta envia ACK concluindo a conexão ou interrompe-a imediatamente após a confirmação para não gerar tráfego desnecessário. Se a porta estiver fechada, o alvo responde com um pacote RST, indicando que a conexão não é possível.
Multithreading
Para evitar que o programa fique parado esperando respostas de cada porta individualmente, utilizei as classes Thread e Queue nativas da linguagem. Dessa forma, várias conexões são iniciadas simultaneamente, otimizando drasticamente o tempo total de varredura sem perder o controle do processo.
O Diferencial: Arquitetura e Garantia de Performance
Modularidade
O código é organizado em uma estrutura de pastas clara, com diretórios bin/ (para o executável principal) e lib/ (para as funções e módulos reutilizáveis), facilitando atualizações e a adição de novas funcionalidades.
Segurança e Estabilidade
Implementei tratamento de sinais (com trap "INT") para encerrar as conexões de forma organizada quando o usuário interromper a execução, evitando processos "zumbis" no sistema. Além disso, o uso da classe Mutex garante que não ocorram conflitos de escrita ou resultados duplicados ao salvar os dados no arquivo de log.
Perfis de Velocidade
- Os perfis permitem adaptar o comportamento da ferramenta ao cenário:
- Modos mais lentos (como o polite) evitam acionar sistemas de detecção ou bloqueios de firewalls;
- Modos mais rápidos (como o insane) são indicados para redes internas confiáveis, onde a velocidade é prioridade.
Demonstração Prática
Para consultar todas as opções de uso, basta executar a ferramenta com o parâmetro de ajuda:
ruby -Ilib bin/fydelis.rb --help

Ao final da varredura, você pode definir um caminho para que os resultados sejam salvos automaticamente em um arquivo de texto, facilitando o armazenamento e a análise posterior.

Observação: as imagens de demonstração não puderam ser carregadas no momento, mas estão disponíveis nos endereços informados acima.
Conclusão
Durante o desenvolvimento deste projeto, pude aplicar e aprofundar conhecimentos sobre funcionamento do protocolo TCP, programação concorrente e boas práticas de desenvolvimento de ferramentas de segurança, equilibrando desempenho e estabilidade.
Para as próximas versões, pretendo adicionar funcionalidades como:
Detecção automática de sistema operacional do alvo;
Integração com bancos de vulnerabilidades;
Suporte a varredura UDP;
Relatórios em formatos adicionais (como CSV e JSON).
Convido você a acessar o repositório oficial do projeto, testar a ferramenta e contribuir com sugestões, correções ou novas funcionalidades:
https://github.com/fydelis2025/Fydelis_Scanner
#Ruby, #CyberSecurity, #Pentest, #OpenSource, #Networking #adielfontes #fydelis #fydelistech

