>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Python

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.

Logo de Krawl

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.

Página de engaño

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.

Puntuación de reputación IP

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.

Panel GeoIP

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.

Tipos de ataques

Detalle de IP

Dos modos de funcionamiento

Los desarrolladores crearon dos configuraciones:

  1. 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.
  2. 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.

Arquitectura de caso de uso

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