Cómo confundir a los escáneres de vulnerabilidad con Krawl
Si abres los registros de cualquier servidor web público, casi seguro encontrarás un flujo constante de basura: búsquedas interminables de /wp-login.php, /.env, /.git/HEAD o versiones antiguas de phpMyAdmin. Los escáneres y analizadores buscan presas fáciles a todas horas. Por lo general, simplemente bloqueamos el acceso a través de NGINX o los cortamos con reglas de WAF. Pero hay otro enfoque: en lugar de luchar, alimenta la automatización enemiga con desinformación de primera mientras agotas los recursos del atacante.
Hace poco me encontré con el proyecto Krawl. Es un servidor de engaño especializado que se hace pasar por una aplicación web vulnerable, alimenta a los bots con páginas trampa interminables, e incluso puede generar HTML realista sobre la marcha usando modelos de lenguaje.
Qué puede hacer esta trampa
El objetivo principal de Krawl es simple: resultar atractivo para los escáneres automatizados, registrar su comportamiento y llevarlos a un callejón sin salida.
Esto es lo que utiliza internamente:
- Redes de enlaces infinitas (Trampas para arañas). El proyecto genera páginas con enlaces aleatorios entre sí, obligando a los analizadores a caminar en círculos y desperdiciar tráfico.
- Paneles de administración y archivos de configuración falsos. Krawl responde a solicitudes de rutas populares como WordPress, phpMyAdmin o paneles de inicio de sesión, recopilando las contraseñas ingresadas.
- Generación de páginas mediante redes neuronales. Si un escáner accede a una dirección desconocida, Krawl puede consultar a OpenRouter u OpenAI para renderizar rápidamente HTML contextual con una vulnerabilidad.
- Trampas en robots.txt. El servidor declara rutas prohibidas que los bots inmediatamente comienzan a verificar primero, revelando sus intenciones.
Además, el servidor puede inyectar tokens canario de CanaryTokens. Si un atacante intenta usar una clave API falsa encontrada en un sistema externo, recibirás una notificación inmediata.
Cómo Krawl calcula la reputación de las IPs
Capturar bots no es suficiente: necesitas entender quién realmente está tocando a tu puerta. Krawl analiza en segundo plano la actividad de cada dirección IP entrante según varios criterios.
El sistema evalúa la frecuencia de métodos HTTP riesgosos, visitas a rutas de robots.txt, tiempos de solicitud y coincidencias con firmas de SQLi o XSS. Al final, la dirección recibe una etiqueta: atacante, rastreador malicioso, motor de búsqueda legítimo o usuario normal.
Si la exportación está habilitada, puedes obtener los datos directamente a través de la API para tus filtros de red:
curl "https://krawl.local/<SECRET_PATH>/api/export-ips?categories=attacker&fwtype=iptables"
El endpoint entrega reglas listas para usar para iptables, nftables, RouterOS o listas de bloqueo para OPNsense y pfSense.
Panel de monitoreo
Existe una interfaz web para observar lo que está sucediendo. Para evitar que los bots encuentren accidentalmente el propio panel de administración del honeypot, está oculto detrás de una ruta secreta dinámica (KRAWL_DASHBOARD_SECRET_PATH) y una contraseña.
Dentro puedes ver la geografía de los ataques, un desglose de tipos de cargas útiles y un expediente detallado de cada dirección sospechosa con historial de solicitudes y línea de tiempo.
Dos modos de funcionamiento
Los desarrolladores crearon dos configuraciones:
- Standalone. Se ejecuta en un único contenedor, almacena datos en SQLite en modo WAL y mantiene la caché directamente en la memoria del proceso Python. Una buena opción para proyectos personales y VPS pequeños donde el tráfico no supera las几百 de miles de solicitudes.
- Escalable. Este incorpora PostgreSQL y Redis. Este modo es necesario cuando quieres escalar horizontalmente las instancias de Krawl detrás de un balanceador de carga o desplegar el proyecto en Kubernetes a través del chart oficial de Helm.
El patrón de uso típico se reduce a colocar Krawl junto a tu aplicación principal detrás de NGINX o Traefik. Todo el tráfico sospechoso o las solicitudes a rutas del sistema inexistentes se redirigen al honeypot.
Inicio rápido
La forma más sencilla de probar el proyecto localmente es ejecutar un contenedor Docker en modo Standalone:
docker run -d \
-p 5000:5000 \
-e KRAWL_DASHBOARD_SECRET_PATH="/my-secret-dashboard" \
-e KRAWL_DASHBOARD_PASSWORD="admin-secret-password" \
-v krawl-data:/app/data \
--name krawl \
ghcr.io/blessedrebus/krawl:latest
Si planeas configurar la generación de páginas con IA, simplemente añade variables de entorno a docker-compose.yml:
services:
krawl:
image: ghcr.io/blessedrebus/krawl:latest
container_name: krawl-server
ports:
- "5000:5000"
environment:
- KRAWL_MODE=standalone
- KRAWL_DASHBOARD_SECRET_PATH=/secret-dashboard
- KRAWL_DASHBOARD_PASSWORD=super-safe-password
- KRAWL_AI_ENABLED=true
- KRAWL_AI_PROVIDER=openrouter
- KRAWL_AI_API_KEY=your_openrouter_key
- KRAWL_AI_MODEL=nvidia/nemotron-3-super-120b-a12b:free
volumes:
- krawl-data:/app/data
restart: unless-stopped
volumes:
krawl-data:
Para qué servirá esto
Krawl difícilmente reemplazará un WAF completo en un proyecto de alto tráfico, pero tiene un nicho diferente. Es una herramienta excelente para equipos azules, laboratorios caseros y quienes quieran estudiar patrones de ataque reales en sus servicios.
En lugar de rechazar ciegamente las solicitudes con un 404, conviertes el escaneo en una trampa, recopilas una base de datos de IPs maliciosas y la envías a tus firewalls. Puedes comenzar a experimentar con un contenedor Docker normal en un subdominio separado o servidor de pruebas.
Proyectos relacionados