Hoe Krawl kwetsbaarheidsscanners in de war brengt
Als je de logs van elke publieke webserver opent, zul je vrijwel zeker een constante stroom van rommel vinden: eindeloze zoektochten naar /wp-login.php, /.env, /.git/HEAD of oude versies van phpMyAdmin. Scanners en parsers jagen dag en nacht op gemakkelijke prooien. Meestal blokkeren we de toegang gewoon via NGINX of snijden we ze af met WAF-regels. Maar er is een andere aanpak: in plaats van terug te vechten, voer je de automatisering van de vijand topklasse desinformatie terwijl je de resources van de aanvaller uitput.
Onlangs kwam ik het Krawl-project tegen. Het is een gespecialiseerde misleidingsserver die zich voordoet als een kwetsbare webapplicatie, bots eindeloze valpagina's voert, en zelfs realistische HTML dynamisch kan genereren met behulp van taalmodellen.
Wat deze val kan doen
Het hoofddoel van Krawl is simpel: er aantrekkelijk uitzien voor geautomatiseerde scanners, hun gedrag loggen, en ze in een doodlopende weg leiden.
Hier is wat het intern gebruikt:
- Oneindige linkwebs (Spider Traps). Het project genereert pagina's met willekeurige links naar elkaar, waardoor parsers in cirkels lopen en verkeer verspillen.
- Valse adminpanelen en configuratiebestanden. Krawl reageert op verzoeken voor populaire paden zoals WordPress, phpMyAdmin of inlogpanelen, en verzamelt ingevoerde wachtwoorden.
- Pagina-generatie via neurale netwerken. Als een scanner een onbekend adres raakt, kan Krawl OpenRouter of OpenAI raadplegen om snel contextuele HTML met een kwetsbaarheid te renderen.
- Vallen in robots.txt. De server declareert verboden paden die bots onmiddellijk eerst controleren, waardoor hun bedoelingen worden onthuld.
Bovendien kan de server canary-tokens van CanaryTokens injecteren. Als een aanvaller probeert een gevonden vals API-sleutel in een extern systeem te gebruiken, ontvang je onmiddellijk een melding.
Hoe Krawl IP-reputatie berekent
Bots vangen is niet genoeg — je moet begrijpen wie er eigenlijk op je deur klopt. Krawl analyseert de activiteit van elk inkomend IP-adres op de achtergrond volgens verschillende criteria.
Het systeem evalueert de frequentie van riskante HTTP-methoden, bezoeken aan paden uit robots.txt, timing van verzoeken, en matches tegen SQLi- of XSS-signaturen. Uiteindelijk krijgt het adres een label: aanvaller, slechte crawler, legitieme zoekmachine, of gewone gebruiker.
Als export is ingeschakeld, kun je de data direct via de API ophalen voor je netwerkfilters:
curl "https://krawl.local/<SECRET_PATH>/api/export-ips?categories=attacker&fwtype=iptables"
Het endpoint levert kant-en-klare regels voor iptables, nftables, RouterOS, of blocklists voor OPNsense en pfSense.
Monitoringdashboard
Er is een webinterface om te observeren wat er gebeurt. Om te voorkomen dat bots per ongeluk het eigen adminpaneel van de honeypot vinden, is het verborgen achter een dynamisch geheim pad (KRAWL_DASHBOARD_SECRET_PATH) en wachtwoord.
Binnenin kun je de geografie van aanvallen zien, een uitsplitsing van payload-typen, en een gedetailleerd dossier over elk verdacht adres met verzoekgeschiedenis en tijdlijn.
Twee werkmodi
De ontwikkelaars hebben twee configuraties gemaakt:
- Standalone. Draait in één container, slaat data op in SQLite in WAL-modus, en houdt de cache rechtstreeks in het Python-procesgeheugen. Een goede optie voor pet projects en kleine VPS'en waar het verkeer niet hoger is dan een paar honderdduizend verzoeken.
- Schaalbaar. Deze gebruikt PostgreSQL en Redis. Deze modus is nodig wanneer je Krawl-instanties horizontaal wilt schalen achter een load balancer of het project wilt deployen in Kubernetes via de officiële Helm-chart.
Het typische gebruikspatroon komt neer op het plaatsen van Krawl naast je hoofdapplicatie achter NGINX of Traefik. Al het verdachte verkeer of verzoeken naar niet-bestaande systeempaden wordt geproxied naar de honeypot.
Snelle start
De gemakkelijkste manier om het project lokaal uit te proberen is door een Docker-container in Standalone-modus te draaien:
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
Als je van plan bent om AI-gestuurde paginageneratie te configureren, voeg dan eenvoudig omgevingsvariabelen toe aan docker-compose.override.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:
Waar dit nuttig voor zal zijn
Krawl zal waarschijnlijk geen volledige WAF vervangen op een project met veel verkeer, maar het heeft een andere niche. Het is een uitstekend hulpmiddel voor blue teams, homelabs, en degenen die echte aanvalspatronen op hun diensten willen bestuderen.
In plaats van verzoeken blind te weigeren met een 404, maak je scannen tot een val, verzamel je een database van kwaadaardige IP's, en voer je deze aan je firewalls. Je kunt beginnen met experimenteren met een gewone Docker-container op een apart subdomein of testsserver.
Gerelateerde projecten