Este artículo proporciona una guía exhaustiva de la herramienta IA para pruebas de penetración de código abierto, Nebula, desde sus fundamentos hasta sus aplicaciones avanzadas. Cubre de manera integral los procedimientos de configuración, el flujo de operaciones desde la terminal, la integración en CI/CD, el desarrollo de plugins e incluso el know-how para la operación en equipo. Es una guía de referencia indispensable para los profesionales de la seguridad en la era de la IA.
- ¿Qué es Nebula?
- Detalles de Funcionalidad y Arquitectura
- Instalación y Configuración Inicial
- Uso Básico: Operación al Estilo ChatOps
- Pruebas de Penetración Totalmente Automatizadas con el Modo Autónomo
- Creación de una Plataforma de Escaneo Interna con Flask y React
- Integración con GitHub Actions: Automatización de Escaneos Nocturnos
- Ajuste de Modelos y Comparación Multi-Modelo
- Operación en Equipo y PenTestOps
- Caso de Estudio: Automatización de la Creación de Informes Prácticos
- FAQ: Preguntas Frecuentes y Respuestas
- El Futuro del Pentesting con Nebula
- Anexo: Cómo Construir tu Plataforma de Pentesting con Nebula
¿Qué es Nebula?
Nebula es una herramienta de pentesting de código abierto impulsada por IA que automatiza el proceso de evaluación de seguridad. Utiliza modelos de lenguaje grandes (LLM) para ejecutar de forma autónoma tareas desde el reconocimiento hasta la detección de vulnerabilidades, reduciendo la carga de trabajo manual y agilizando la generación de informes para los profesionales.
En una era donde la IA y la seguridad convergen, Nebula automatiza las pruebas de penetración con un enfoque innovador. Como un asistente de pruebas de penetración con IA, reduce drásticamente el tiempo dedicado a escaneos manuales y a la creación de informes, agilizando la evaluación de la seguridad de una organización.
Desarrollada y publicada por el equipo de Beryllium, contribuye a la comunidad como un proyecto de código abierto. La IA ejecuta de manera autónoma desde la fase de reconocimiento (Recon) hasta la detección de vulnerabilidades e intentos de explotación básicos, registrando detalladamente los logs y los hallazgos. Esto reduce significativamente la carga de trabajo de los profesionales de la seguridad y garantiza la calidad de las pruebas de penetración.
Detalles de Funcionalidad y Arquitectura
Nebula, como herramienta IA para pruebas de penetración, integra de manera fluida modelos de lenguaje grandes (LLM) con un conjunto de herramientas de pentesting reales. Se conecta en el backend con herramientas como Nmap, crackmapexec, OWASP ZAP y Nikto, permitiendo que el LLM interprete la salida de los comandos para decidir la siguiente acción.
A pesar de su operación basada en CLI, permite instruir los pasos mediante comandos de lenguaje natural. En modo autónomo, ejecuta en un solo paso el proceso completo: Recon → Escaneo → Intento de autenticación simple → Generación de informe. Su arquitectura se compone de una CLI, scripts de Python y un mecanismo de plugins, lo que permite a los usuarios añadir o personalizar modelos y plugins para adaptarse a requisitos específicos.
Instalación y Configuración Inicial
Primero, prepara un entorno de Python. Se recomienda Python 3.8 o superior. Crea un entorno virtual e instala Nebula.
python3 -m venv nebula-env
source nebula-env/bin/activate
pip install --upgrade pip
pip install nebula-aiEn la primera ejecución, se descargará el modelo LLM. Selecciona el modo GPU o CPU para obtener los datos del modelo, que ocupan varios GB.
Uso Básico: Operación al Estilo ChatOps
Al introducir un comando en lenguaje natural precedido por “!” en la CLI, se ejecuta la herramienta de pentesting correspondiente.
nebula ! enumerate 192.168.1.10Nebula ejecutará un escaneo Nmap en segundo plano, analizará los resultados y propondrá la siguiente acción. A continuación:
nebula ! find vulnerabilities on http://192.168.1.10Procediendo de esta manera interactiva, se encadenan fluidamente las fases desde el reconocimiento hasta la detección de vulnerabilidades y los intentos de explotación básicos.
Pruebas de Penetración Totalmente Automatizadas con el Modo Autónomo
Al activar el modo autónomo, Nebula ejecuta automáticamente el ciclo completo (Recon → Escaneo → Explotación simple → Generación de informe) dentro del alcance permitido. Para profundizar en la automatización, puedes consultar otras herramientas que también buscan automatizar pruebas de penetración.
nebula --autonomous-mode ! enumerate corp-net.example.comLa lógica de ejecución automática es determinada por la IA, que invoca secuencialmente las herramientas más adecuadas. El proceso se completa de principio a fin sin intervención humana.
Creación de una Plataforma de Escaneo Interna con Flask y React
Para integrar Nebula en una aplicación web, se recomienda la siguiente arquitectura:
flowchart LR
subgraph Backend
A[Nebula CLI] --> B[Servicio de Escaneo (Flask)]
B --> C[(BD de Resultados)]
B --> D[Cola de Tareas (Redis+RQ)]
end
subgraph Frontend
E[Dashboard React + MUI]
end
A --- B
B --- E
B --- F[Slack/Webhook]El backend utiliza Flask + RQ, y el frontend React + Material‑UI. El servicio de escaneo invoca la CLI de Nebula como un subproceso y envía el progreso mediante WebSockets.

Integración con GitHub Actions: Automatización de Escaneos Nocturnos
Ejemplo de integración en CI/CD (GitHub Actions):
name: Pentest Nocturno
on:
schedule:
- cron: '0 2 * * *'
jobs:
pentest:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Configurar Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- run: |
pip install nebula-ai
nebula --autonomous-mode ! enumerate prod.example.com
- name: Cargar Informes
uses: actions/upload-artifact@v3
with:
name: pentest-reports
path: engagements/La ejecución periódica permite compartir internamente el estado más reciente de las vulnerabilidades de forma continua.
Ajuste de Modelos y Comparación Multi-Modelo
Nebula es compatible con múltiples LLMs. La calidad de la salida varía según el modelo, por lo que se puede seleccionar el más adecuado para cada propósito.
nebula --model llama‑3.1‑8B‑Instruct ! enumerate target
nebula --model mistralai/Mistral-7B-Instruct-v0.2 ! enumerate targetSe presenta una metodología para comparar los resultados de escaneo de múltiples modelos, reduciendo así los falsos positivos y las omisiones.
Operación en Equipo y PenTestOps
Puntos clave para la implementación a nivel organizacional:
- Gestión de Engagements: Organizar los proyectos en carpetas separadas.
- Compartición de Logs e Informes: Publicación automática en Wiki o Confluence.
- Integración con Slack/Webhook: Notificaciones instantáneas sobre detecciones.
- Creación Automática de Tickets: Integración con JIRA/GitHub Issues.
- Modelo Híbrido con Análisis Cualitativo: Gestionar manualmente los puntos que la IA no puede detectar.
Se propone una operación bajo el concepto de PenTestOps, que incluye el mantenimiento de una base de conocimiento y la programación automática de reuniones de retrospectiva.
Caso de Estudio: Automatización de la Creación de Informes Prácticos
Ejemplo de un comando de una línea para generar automáticamente los resultados de una verificación en formato Markdown y convertirlos a PDF con Pandoc:
pandoc engagements/CorpNet-*/notes.md -o report-$(date +%F).pdfLos hallazgos ya incluyen anotaciones de la IA, lo que permite que el informe esté listo para su presentación con solo revisar y ajustar los comentarios.
FAQ: Preguntas Frecuentes y Respuestas
¿Es Nebula completamente automático y seguro?
Debido al riesgo de mala interpretación por parte de la IA, se recomienda una operación supervisada inicialmente.
¿Cuál es la licencia para uso comercial?
Es la licencia MIT de código abierto, que permite el uso comercial.
¿Qué nivel de personalización admiten los modelos?
Es posible especificar libremente cualquier modelo de tipo “Instruct” disponible en HuggingFace.
¿Permite la ejecución simultánea en equipo?
La versión Nebula Pro ofrece funcionalidades de ejecución en paralelo y compartición de engagements.
El Futuro del Pentesting con Nebula
Nebula es una herramienta que eleva la automatización de las pruebas de penetración al siguiente nivel mediante el uso de tecnología de IA. En el futuro, se esperan avances en la sofisticación de los LLMs, funciones de colaboración en tiempo real y una mayor precisión en la simulación de ataques. Te invitamos a utilizar las metodologías de este artículo como base para optimizar la herramienta según tu propio entorno.
Anexo: Cómo Construir tu Plataforma de Pentesting con Nebula
Diseño de la Arquitectura General

- Nebula CLI
- Instalable mediante $$ \text{pip install nebula‑ai} $$ (PyPI).
- Permite automatizar Recon → Escaneo → Creación de informes vía CLI.
- El código fuente está disponible en el repositorio de GitHub:
berylliumsec/nebula.
- Servicio de Escaneo (Flask)
- Proporciona una API REST/WebSocket con Python y Flask.
- Invoca la CLI de Nebula como un subproceso en segundo plano.
- El progreso se puede enviar en tiempo real al frontend.
- Base de Datos de Resultados
- Almacena los resultados de los escaneos y los logs de anotaciones de forma estructurada. PostgreSQL o SQLite son opciones sencillas y manejables.
- Cola de Tareas
- Utiliza RQ (Redis Queue) o similar para ejecutar trabajos de forma asíncrona, evitando bloquear el servidor web durante ejecuciones prolongadas.
- Frontend (React + Material‑UI)
- Un dashboard para registrar objetivos, verificar el estado de los escaneos y visualizar informes.
- Muestra logs y progreso en streaming mediante WebSocket.
- CI/CD y Alertas
- Se integra con GitHub Actions o GitLab CI para automatizar escaneos nocturnos.
- Las notificaciones a Slack o Teams se implementan fácilmente mediante Webhooks.
Implementación del Servicio de Escaneo con Flask
# app.py
import os, subprocess, uuid
from flask import Flask, request, jsonify
from flask_socketio import SocketIO, emit
from rq import Queue
from redis import Redis
app = Flask(__name__)
socketio = SocketIO(app, cors_allowed_origins="*")
redis_conn = Redis()
task_queue = Queue(connection=redis_conn)
NEBULA_CMD = "nebula" # Nombre del comando CLI
def run_scan(job_id, target):
"""Ejecuta un escaneo de Nebula en segundo plano y notifica el progreso vía SocketIO."""
cmd = [NEBULA_CMD, "--autonomous-mode", "!", f"enumerate {target}"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
for line in proc.stdout:
socketio.emit(f"scan_progress_{job_id}", {"line": line.strip()})
proc.wait()
socketio.emit(f"scan_done_{job_id}", {"status": proc.returncode == 0})
@app.route("/api/scan", methods=["POST"])
def start_scan():
data = request.get_json()
target = data.get("target")
job_id = str(uuid.uuid4())
task_queue.enqueue(run_scan, job_id, target)
return jsonify({"job_id": job_id}), 202
if __name__ == "__main__":
socketio.run(app, host="0.0.0.0", port=5000)Puntos Clave:
task_queue.enqueueejecuta el escaneo de forma asíncrona.SocketIOenvía los logs al cliente en tiempo real.- Se recomienda guardar los artefactos (logs, informes) en un directorio predefinido y registrar sus metadatos en la base de datos.
Ejemplo de Frontend: Dashboard en Tiempo Real
// ScanDashboard.jsx
import React, { useState, useEffect } from "react";
import io from "socket.io-client";
import { Button, TextField, List, ListItem } from "@mui/material";
export default function ScanDashboard() {
const [target, setTarget] = useState("");
const [logs, setLogs] = useState([]);
const [jobId, setJobId] = useState(null);
useEffect(() => {
// Solo se establece la conexión cuando hay un jobID
if (!jobId) return;
const socket = io("http://localhost:5000");
const progressHandler = (data) => {
setLogs(prev => [...prev, data.line]);
};
const doneHandler = (data) => {
setLogs(prev => [...prev, data.status ? "Completo" : "Error"]);
// Se limpian los listeners una vez que el trabajo termina
socket.off(`scan_progress_${jobId}`, progressHandler);
socket.off(`scan_done_${jobId}`, doneHandler);
};
socket.on(`scan_progress_${jobId}`, progressHandler);
socket.on(`scan_done_${jobId}`, doneHandler);
// Función de limpieza para desconectar el socket al desmontar el componente
return () => {
socket.disconnect();
};
}, [jobId]);
const startScan = async () => {
const res = await fetch("/api/scan", {
method: "POST",
headers: { "Content-Type":"application/json" },
body: JSON.stringify({ target })
});
const { job_id } = await res.json();
setLogs([]); // Limpia logs anteriores
setJobId(job_id); // Establece el nuevo jobID, lo que activará el useEffect
};
return (
<div>
<TextField label="Objetivo" value={target} onChange={e => setTarget(e.target.value)} />
<Button variant="contained" onClick={startScan}>Iniciar Escaneo</Button>
<List>
{logs.map((line, idx) => <ListItem key={idx}><code>{line}</code></ListItem>)}
</List>
</div>
);
}- Construido de forma sencilla con Material‑UI (MUI).
- Recibe las líneas de log secuencialmente vía WebSocket y las muestra en una lista.
Ideas de Expansión y Mejoras
- Análisis Automático de Resultados y Generación de Informes:
- Convertir las notas de IA de Nebula (notes.md) de Markdown a HTML/PDF y distribuirlas al portal interno.
- Comparación Multi-Modelo:
- Ejecutar escaneos con múltiples modelos, como
nebula --model mistralai/Mistral-7B-Instruct-v0.2, y visualizar las diferencias en los resultados de detección.
- Ejecutar escaneos con múltiples modelos, como
- Mecanismo de Plugins:
- Integrar herramientas internas (p. ej., motores SAST/DAST) vía API después del escaneo.
- Creación Automática de Tickets:
- Crear automáticamente issues en JIRA o GitHub al detectar una vulnerabilidad, integrándolo en el flujo de desarrollo.
- Análisis en el Dashboard:
- Almacenar en la base de datos una puntuación para cada engagement (usando CVSS o estándares internos) y visualizar su evolución en el tiempo.
Combinando estos elementos, es posible transformar Nebula de una “simple CLI” a una plataforma de pruebas de penetración impulsada por IA a nivel empresarial.


