GitHub - heindall92/skadi · GitHub
Skip to content
heindall92Public

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

Repository files navigation

SKADI

Escáner de vulnerabilidades web multi-herramienta (inspirado en RapidScan) con:

  • 19 comprobaciones con herramientas externas orquestadas en paralelo: nmap, nikto, sqlmap, wafw00f, whatweb, dnsrecon, gobuster, xsstrike, sslscan, lbd — incluye familia SSL (Heartbleed, FREAK, POODLE, CCS Injection, Logjam), BSQLi, Shellshock, Slowloris acotado, detección de balanceador de carga y más.
  • 7 checks propios (sin dependencias externas): métodos HTTP, clickjacking, HSTS, CORS, banner del servidor, cookies sin Secure y OCSP stapling.
  • Análisis con IA (Ollama): resumen ejecutivo, puntuación de riesgo 0–100, detección de falsos positivos y plan de remediación priorizado. Sin Ollama disponible, degrada a un análisis local basado en reglas.
  • Modo adaptativo (--ai-adaptive): la IA decide el lote de reconocimiento inicial y el siguiente lote según la evidencia.
  • Heurística estilo mindmap AD (OCD): árbol de decisión data/ad_paths.json que activa rutas de ataque según los hallazgos y las traduce en plan accionable (run/skip/observe).
  • Reportes TXT / JSON / HTML autocontenidos (sin dependencias web; exportación a PDF opcional vía CDN).

Requisitos

  • Python 3.8+ (solo stdlib en runtime; no requiere dependencias de terceros).
  • Opcional: Ollama en http://localhost:11434 para el análisis con IA.
  • Las herramientas externas se detectan automáticamente; los checks que no pueden ejecutarse se marcan como skipped y el escáner continúa.
sudo apt install nmap nikto sqlmap wafw00f whatweb dnsrecon gobuster xsstrike sslscan lbd -y

Instalación

Desde el árbol fuente (sin instalar):

python3 skadi.py scan example.com

Como paquete:

pip install .
skadi scan example.com

Uso

# Escaneo completo (por defecto)
python3 skadi.py scan example.com

# Con análisis de IA (Ollama; degrada a reglas locales si no está disponible)
python3 skadi.py scan example.com --ai

# Modo adaptativo: la IA decide los lotes de herramientas según la evidencia
python3 skadi.py scan example.com --ai-adaptive

# Sesión interactiva de preguntas sobre el análisis (después de --ai)
python3 skadi.py scan example.com --ai --ask

# Listar comprobaciones disponibles
python3 skadi.py list-checks

# Solo determinados checks
python3 skadi.py scan example.com --checks nmap_ports,clickjacking

# Configurar salida y formato
python3 skadi.py scan example.com -o ./reportes -f all        # txt+json+html
python3 skadi.py scan example.com -o ./reportes -f html

Flags de scan

Flag Descripción
target Dominio, IP o IP:puerto objetivo
-o, --output Directorio para los reportes (default: output)
-f, --format txt, json, html o all (default: all)
-q, --quiet Menos salida en consola
--skip-ping Omitir la verificación de conectividad previa
--threads N Hilos concurrentes (default: 5)
--checks ID1,ID2 Ejecutar solo los checks indicados
--ai Análisis post-scan con IA
--ai-adaptive Escaneo adaptativo guiado por IA
--ask Chat interactivo sobre el análisis
--model Modelo Ollama (default: llama3.1)
--ollama-url URL del servidor Ollama (default: http://localhost:11434)
--lang es o en (default: es)

Configuración

Orden de precedencia: flags CLI > variables de entorno SKADI_* > archivo JSON.

  1. Copia skadi_config.example.json a skadi_config.json (directorio de trabajo) o ~/.config/skadi/config.json (o define SKADI_CONFIG con la ruta).
  2. Variables de entorno equivalentes: SKADI_OLLAMA_URL, SKADI_OLLAMA_MODEL, SKADI_THREADS, SKADI_OUTPUT_DIR, SKADI_REPORT_FORMAT, SKADI_LANG, SKADI_TOOL_TIMEOUT, SKADI_QUIET, SKADI_SKIP_PING.
  3. La heurística AD lee data/ad_paths.json; se puede apuntar a otro archivo con SKADI_AD_PATHS.
  4. Timeout por herramienta: global vía SKADI_TOOL_TIMEOUT (default 300s); una tool puede declarar su propio timeout en tools/tool_defs.py (slowloris_check usa 360s con --script-timeout 150s).

Códigos de salida

Código Significado
0 Escaneo completado
1 Error genérico de ejecución
2 Uso incorrecto de la CLI
3 Objetivo inalcanzable
4 Configuración inválida
130 Interrupción por el usuario (SIGINT)

Tests

pip install pytest
python3 -m pytest tests/ -q

Estructura

skadi.py                 CLI principal
modules/scanner.py       Orquestación de tools + checks HTTP + modo adaptativo
modules/ai_agent.py      Cliente Ollama, análisis por reglas, detección de FPs
modules/heuristics.py    Motor de decisión AD (mindmap OCD)
modules/reporter.py      Reportes TXT / JSON / HTML
modules/config.py        Config central (JSON + env + CLI)
tools/tool_defs.py       Definiciones de tools, keywords y negative_keywords
data/ad_paths.json       Rutas de decisión AD (configurables)
tests/                   Suite pytest (49 tests)

Falsos positivos

El escáner evalúa marcadores negativos (negative_keywords por tool + lista universal de CLI) antes que los positivos: salidas de error/uso, "do not appear to be injectable", "NOT VULNERABLE", ausencia de WAF, transferencias de zona fallidas, etc. no marcan vulnerable=True. El análisis de IA aplica además sus propias reglas de FP y solo calcula la puntuación de riesgo sobre los hallazgos reales.

Instalación desde Git

git clone https://github.com/heindall92/skadi.git
cd skadi
python3 -m pytest tests/ -q   # 49 tests
python3 skadi.py --version    # 1.3.0

Licencia

MIT © 2026 Yoandy Ramirez Delgado (heindall92). Ver el archivo LICENSE.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages