Skip to content

XavierDelacth/KalinScan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KaliScan v2 — Network Security Scanner GUI

KaliScan v2 Python Flask Nmap License

Aviso Legal: Esta ferramenta destina-se exclusivamente a ambientes autorizados e fins educativos/profissionais. A utilização em redes sem permissão explícita é ilegal. O autor não se responsabiliza por usos indevidos.


Descrição

O KaliScan v2 é uma interface gráfica web para análise de segurança de redes locais, construída sobre o motor de scanning Nmap. A ferramenta automatiza a descoberta de hosts, enumeração de serviços, detecção de vulnerabilidades e geração de relatórios detalhados — tudo acessível através de um browser moderno.

O problema que resolve é a fragmentação e complexidade dos workflows de análise de segurança: em vez de executar manualmente dezenas de comandos Nmap distintos, interpretar output bruto e compilar relatórios, o KaliScan v2 orquestra toda a sequência de forma automática, apresenta os resultados de forma estruturada e exporta relatórios profissionais em PDF e JSON.


Funcionalidades

Descoberta de Rede

  • Ping Sweep automático — descobre todos os hosts activos na sub-rede configurada
  • Detecção automática de rede local — identifica o IP e a sub-rede do sistema host
  • Auto-refresh a cada 5 minutos — mantém a lista de hosts actualizada via thread em background
  • Notificações push em tempo real — via Server-Sent Events (SSE), o browser recebe alertas quando novos hosts aparecem ou ficam offline

Scanning e Análise

  • 10 módulos de scan independentes, executáveis individualmente ou em sequência completa:

    ID Nome Comando Nmap
    ping_sweep Ping Sweep nmap -sn {target}
    tcp_connect TCP Connect nmap -sT {target}
    version_os Versões + OS nmap -sV -O -v {target}
    default_scripts Scripts Padrão nmap -sC -sV {target}
    ftp_backdoor FTP Backdoor nmap --script=ftp-vsftpd-backdoor,ftp-anon -p 21
    smb_enum SMB Análise nmap --script smb-enum-users,smb-vuln-ms17-010 -p 445,139
    http_scan HTTP Análise nmap --script http-headers,http-methods,http-enum -p 80,443
    aggressive Scan Agressivo nmap -A -T4 {target}
    syn_stealth SYN Stealth nmap -sS -T4 -p 1-1024 {target}
    full_vuln Vulnerabilidades NSE nmap -sS -sV -O -p- --script vuln,exploit,auth
  • Output em tempo real — terminal integrado exibe linhas do Nmap à medida que são produzidas

  • Parser automático de output Nmap — extrai portas, serviços, versões, OS, MAC, vendor e scripts NSE

Detecção de Vulnerabilidades

  • Identificação automática de CVEs conhecidos por expressão regular no output NSE
  • Classificação por severidade: CRITICAL, HIGH, MEDIUM, LOW
  • Detecção específica para:
    • vsftpd 2.3.4 Backdoor (CVE-2011-2523)
    • EternalBlue MS17-010 (CVE-2017-0144)
    • MS08-067 (CVE-2008-4250)
    • FTP Anonymous Login
    • MySQL root sem password
    • Telnet activo
    • Apache desactualizado
    • phpMyAdmin exposto
    • SSH versão desactualizada

Mitigações

  • Base de dados interna de mitigações com descrição, passos de resolução e comandos executáveis
  • Mapeamento porta → mitigação automático com base nas portas abertas detectadas
  • CVSS score associado a cada mitigação

Interface e Relatórios

  • Interface dark mode com tema cibersegurança (IBM Plex Mono + Rajdhani)
  • Sidebar com lista de hosts com badges de estado (online/offline/novo/vulns)
  • Relatório por host com tabs: Portas, Vulnerabilidades, Mitigações, Output Raw
  • Histórico de scans agrupado por sessão com timestamps, duração e estatísticas
  • Exportação PDF — relatório detalhado multi-página com ReportLab (capa, índice, portas, vulns, mitigações, output raw)
  • Exportação JSON — estrutura completa com metadados, sumário e dados por host
  • Exportação individual por host ou exportação global de todos os hosts scaneados

Tecnologias Utilizadas

Camada Tecnologia Versão
Backend Python 3.8+
Framework Web Flask 3.0+
Scanner Nmap 7.x
Geração PDF ReportLab 3.x
Frontend HTML5 + CSS3 + JavaScript (Vanilla)
Tipografia IBM Plex Mono, Rajdhani (Google Fonts)
Comunicação Assíncrona Server-Sent Events (SSE)
Concorrência Python threading + queue stdlib
Parsing Python re (Regex) stdlib

Não são utilizadas bases de dados externas — o estado é mantido em memória durante a sessão.


Estrutura do Projeto

kaliscan/
├── app.py              # Backend principal Flask — toda a lógica do servidor
├── index.html          # Frontend completo — UI, CSS e JavaScript
├── requirements.txt    # Dependências Python
└── install.sh          # Script de instalação automática

Descrição dos Ficheiros

app.py — Núcleo da aplicação. Contém:

  • Estado global da aplicação (state dict com hosts, rede, timestamps)
  • Base de dados de mitigações (MITIGATIONS, PORT_MITIGATION_MAP)
  • Definição dos 10 módulos de scan (SCAN_SEQUENCE)
  • Parser de output Nmap (parse_nmap_output)
  • Thread de auto-refresh (auto_sweep_worker)
  • 11 rotas Flask: /, /api/network-info, /api/state, /api/mitigations, /api/events (SSE), /api/sweep/stream, /api/full-scan/stream, /api/single-scan/stream, /api/report/json/<ip>, /api/report/json/all, /api/report/pdf/<ip>, /api/report/pdf/all
  • Gerador de PDF (generate_pdf_report) e builder JSON (_build_json_export)

index.html — Interface completa (single-file):

  • ~1200 linhas de CSS com variáveis custom, design system dark mode
  • ~800 linhas de JavaScript vanilla: gestão de estado, SSE consumers, rendering dinâmico de UI, lógica de scans

requirements.txt — Lista de dependências pip:

flask>=3.0.0

ReportLab é utilizado mas não está declarado neste ficheiro — ver secção Problemas Comuns.

install.sh — Instala Nmap, Python, Flask e cria o comando kaliscan em /usr/local/bin/.


Requisitos

Sistema Operativo

  • Linux (Debian/Ubuntu/Kali Linux recomendado)
  • macOS (funcional, SYN scan requer root)
  • Windows (suporte parcial — sem SYN/OS scan sem WinPcap)

Software Necessário

Software Versão Mínima Obrigatório
Python 3.8+
pip 21+
Nmap 7.0+
Flask 3.0+ ✅ (via pip)
ReportLab 3.x ✅ para PDF

Permissões

  • sudo/root recomendado para SYN Stealth scan (-sS) e detecção de OS (-O)
  • Sem root: TCP Connect scan (-sT) e version scan (-sV) funcionam normalmente

Instalação

Método 1 — Script Automático (Recomendado)

git clone https://github.com/seuuser/kaliscan.git
cd kaliscan
sudo bash install.sh

O script instala automaticamente: Nmap, Python3, pip e Flask, e cria o atalho kaliscan.

Método 2 — Manual

# 1. Instalar Nmap
sudo apt-get update && sudo apt-get install -y nmap

# 2. Instalar dependências Python
pip3 install flask --break-system-packages
pip3 install reportlab --break-system-packages

# 3. Clonar ou copiar os ficheiros
git clone https://github.com/seuuser/kaliscan.git
cd kaliscan

Método 3 — Ambiente Virtual

python3 -m venv venv
source venv/bin/activate
pip install flask reportlab
sudo python3 app.py

Configuração

Rede

Por defeito, o KaliScan detecta automaticamente a rede local. Para forçar uma rede específica, edite directamente no browser o campo "Rede / Alvo" na sidebar ou modifique a função get_local_network() em app.py.

Porta do Servidor

O servidor Flask inicia na porta 5000. Para alterar:

# Em app.py, linha final:
app.run(host="0.0.0.0", port=5000, debug=False, threaded=True)
# Altere port=5000 para a porta desejada

Auto-Refresh

O intervalo de refresh automático está definido em 300 segundos (5 minutos). Para alterar:

# Em app.py, função auto_sweep_worker():
time.sleep(300)  # Altere para o valor desejado em segundos

Timeout dos Scans

# Em run_nmap_cmd():
result = subprocess.run(..., timeout=300)  # 5 minutos por scan
# Em /api/full-scan/stream:
item = q.get(timeout=600)  # 10 minutos timeout total

Como Executar

# Execução normal (sem SYN/OS scan)
python3 app.py

# Execução com privilégios completos (recomendado)
sudo python3 app.py

# Via atalho (após install.sh)
kaliscan

# Com variável de ambiente para debug
FLASK_DEBUG=1 sudo python3 app.py

Output esperado no terminal:

════════════════════════════════════════════════════
  KaliScan v2 — Network Scanner GUI
════════════════════════════════════════════════════
  IP Local  : 192.168.1.100
  Rede      : 192.168.1.0/24
  Interface : http://127.0.0.1:5000
  Refresh   : automático a cada 5 minutos
════════════════════════════════════════════════════

Abrir no browser: http://127.0.0.1:5000 ou http://localhost:5000


Como Usar

1. Descoberta de Rede

  1. Abrir http://127.0.0.1:5000 no browser
  2. Verificar/editar a rede no campo da sidebar (ex: 192.168.1.0/24)
  3. Clicar em "⬡ Descobrir Rede"
  4. Os hosts detectados aparecem na sidebar em tempo real

2. Scan de um Host

  • Scan rápido: clicar directamente no card do host na sidebar → inicia scan completo
  • Scan individual: clicar no botão "▶ Escanear" no card → abre o Scan Picker → escolher o módulo desejado
  • Scan completo: Scan Picker → "🔴 Scan Completo" → executa todos os 10 módulos em sequência

3. Interpretar Resultados

Após o scan, o relatório apresenta:

  • Tab "Portas e Serviços" — lista completa de portas abertas com versões detectadas
  • Tab "Vulnerabilidades" — CVEs e issues detectados pelos scripts NSE, ordenados por severidade
  • Tab "Mitigações" — passos de resolução com comandos para cada vulnerabilidade
  • Tab "Output Raw" — output completo do Nmap para auditoria

4. Exportar Relatório

  • JSON (botão "↓ JSON"): dados estruturados para integração com outros sistemas
  • PDF (botão "⎙ PDF"): relatório profissional para entrega a clientes
  • Exportação global (botão "⎙ Exportar ▾" no topo): exporta todos os hosts scaneados

Fluxo de Funcionamento

Browser                    Flask (app.py)              Nmap
  │                             │                         │
  ├─ GET /                      │                         │
  │◄─ HTML (index.html) ────────┤                         │
  │                             │                         │
  ├─ GET /api/sweep/stream ─────►                         │
  │                             ├─ Popen(nmap -sn ...) ──►│
  │◄── SSE: host_found ─────────┤◄── stdout line ─────────┤
  │◄── SSE: sweep_complete ─────┤                         │
  │                             │                         │
  ├─ GET /api/full-scan/stream ─►                         │
  │                             ├─ [para cada scan] ──────►│
  │◄── SSE: scan_start ─────────┤                         │
  │◄── SSE: line (output) ──────┤◄── stdout lines ────────┤
  │◄── SSE: scan_done ──────────┤                         │
  │◄── SSE: complete (host) ────┤ (parse + merge estado)  │
  │                             │                         │
  ├─ GET /api/report/pdf/{ip} ──►                         │
  │◄── PDF (ReportLab) ─────────┤                         │

Gestão de Estado

O estado global (state) é um dicionário Python partilhado entre threads, protegido por threading.Lock(). Contém todos os hosts descobertos, com os respectivos dados de portas, vulnerabilidades, mitigações e histórico de scans.

Merge de Resultados

Cada scan individual é executado e o seu output é parseado e merged no estado do host sem sobrescrever dados anteriores — portas são adicionadas sem duplicação, vulnerabilidades são deduplicadas, e campos como OS/hostname são preenchidos apenas quando ausentes.


Exemplos de Uso

Scan Completo de Host Específico (via API)

# Ver hosts descobertos
curl http://localhost:5000/api/state | python3 -m json.tool

# Descarregar relatório JSON de um host
curl http://localhost:5000/api/report/json/192.168.1.1 -o relatorio.json

# Descarregar PDF de todos os hosts
curl http://localhost:5000/api/report/pdf/all -o relatorio_completo.pdf

Scan Isolado via curl + SSE

# Acompanhar scan FTP em tempo real
curl -N "http://localhost:5000/api/single-scan/stream?target=192.168.1.50&scan_id=ftp_backdoor"

Capturas Esperadas

Vista Descrição
Sidebar Lista de hosts com dots verde/cinza, badges "NOVO", "X VULN", chips de portas abertas
Scan em Progresso Barra de steps com spinner no step activo, terminal com output verde em tempo real
Relatório Grid de 5 stats (portas, críticas, altas, total vulns, mitigações) + tabela de portas + cards de vulns por severidade
Mitigações Cards expansíveis com descrição, lista de passos e bloco de comandos copiáveis
Histórico Tabela agrupada por sessão com timestamps, duração e toggle para output raw
PDF exportado Capa com metadados, índice de hosts, secções por host com tabelas coloridas

Problemas Comuns e Soluções

ERROR: nmap não encontrado

sudo apt-get install nmap
# Verificar:
nmap --version

ModuleNotFoundError: No module named 'reportlab'

O requirements.txt não inclui ReportLab. Instalar manualmente:

pip3 install reportlab --break-system-packages

PermissionError no SYN scan ou detecção de OS

# Executar com sudo:
sudo python3 app.py

Porta 5000 já em uso

# Verificar o processo:
lsof -i :5000
# Matar:
kill -9 <PID>
# Ou alterar a porta em app.py

Hosts não aparecem na sidebar

  • Verificar que a rede está correcta no campo da sidebar
  • Confirmar que o utilizador tem permissão para enviar pacotes ICMP
  • Tentar com sudo para garantir permissões completas

PDF não gera / ImportError ReportLab

pip3 install "reportlab>=3.6" --break-system-packages

SSE desliga após alguns segundos (Nginx/proxy)

Adicionar ao proxy:

proxy_read_timeout 600s;
proxy_buffering off;

Melhorias Futuras

Área Sugestão
Persistência Guardar estado em SQLite ou JSON em disco para sobreviver a reinícios
Autenticação Adicionar login básico (Flask-Login) para acesso multi-utilizador
Agendamento Scans agendados (cron-like) com notificações por email
Integração CVE Consulta à NVD API para dados actualizados de CVEs
Exportação HTML Relatório HTML standalone para partilha fácil
Comparação de Scans Diff entre sessões para detectar mudanças na superfície de ataque
requirements.txt Adicionar reportlab>=3.6 às dependências declaradas
Containerização Dockerfile para execução isolada e reproduzível
Testes Suite de testes unitários para o parser Nmap e módulos de mitigação
Rate limiting Protecção contra scans acidentais em larga escala

Segurança

Boas Práticas Aplicadas

  • Toda a execução de comandos usa subprocess com lista de argumentos (não shell=True), mitigando injecção de comandos
  • Lock de threading (threading.Lock) protege o estado partilhado contra race conditions
  • Escape HTML (esc()) em todo o output dinâmico no frontend previne XSS
  • Servidor Flask inicia em modo debug=False em produção

Recomendações Adicionais

  • Não expor na internet — usar apenas em redes locais isoladas ou via VPN
  • Adicionar autenticação antes de qualquer exposição externa
  • Restringir host="0.0.0.0" para host="127.0.0.1" se o acesso for apenas local
  • Registar todas as actividades de scan em ficheiro de log para auditoria

Performance

  • Ping sweep numa /24: ~5-15 segundos (dependendo da rede e TTL)
  • Scan completo de um host: 2-15 minutos (o full_vuln com -p- é o mais lento)
  • Scans paralelos: cada scan corre na sua própria thread; múltiplos hosts podem ser scaneados em simultâneo
  • Memória: estado em RAM — em redes grandes (/16), considerar limitar o número de hosts activos em memória
  • SSE: cada cliente aberto mantém uma conexão HTTP persistente; adequado para uso individual/pequena equipa

Autor

Desenvolvido como ferramenta educativa de segurança de redes.

Para contribuições, issues ou sugestões, abrir uma issue no repositório do projecto.


Licença

MIT License — ver ficheiro LICENSE para detalhes completos.

Uso permitido para: fins educativos, pentest em ambientes autorizados, auditoria interna.
Uso proibido em: redes sem autorização expressa do proprietário.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors