Jak zmylić skanery podatności za pomocą Krawl
Jeśli otworzysz logi dowolnego publicznego serwera webowego, prawie na pewno znajdziesz nieustanny strumień śmieci: bezlik wyszukiwań /wp-login.php, /.env, /.git/HEAD lub starych wersji phpMyAdmin. Skanery i parsery polują na łatwy łup przez całą dobę. Zazwyczaj po prostu blokujemy dostęp przez NGINX lub odcinamy regułami WAF. Ale jest inne podejście: zamiast walczyć, nakarm automatyzację wroga najlepszej jakości dezinformacją, jednocześnie drenując zasoby atakującego.
Ostatnio natknąłem się na projekt Krawl. To wyspecjalizowany serwer pułapka, który udaje podatną aplikację webową, karmi boty nieskończonymi stronami pułapkami, a nawet może generować realistyczny HTML na bieżąco za pomocą modeli językowych.
Co potrafi ta pułapka
Główny cel Krawl jest prosty: wyglądać atrakcyjnie dla zautomatyzowanych skanerów, logować ich zachowanie i wciągać ich w ślepe zaułki.
Oto co wykorzystuje wewnętrznie:
- Nieskończone sieci linków (Pułapki na pająki). Projekt generuje strony z losowymi linkami do siebie nawzajem, zmuszając parsery do chodzenia w kółko i marnowania ruchu.
- Fałszywe panele admina i pliki konfiguracyjne. Krawl odpowiada na żądania popularnych ścieżek jak WordPress, phpMyAdmin czy panele logowania, zbierając wprowadzone hasła.
- Generowanie stron przez sieci neuronowe. Jeśli skaner trafi na nieznany adres, Krawl może zapytać OpenRouter lub OpenAI, aby szybko wyrenderować kontekstowy HTML z podatnością.
- Pułapki w robots.txt. Serwer deklaruje zabronione ścieżki, które boty natychmiast zaczynają sprawdzać jako pierwsze, ujawniając swoje intencje.
Dodatkowo serwer może wstrzykiwać tokeny canary z CanaryTokens. Jeśli atakujący spróbuje użyć znalezionego fałszywego klucza API w zewnętrznym systemie, natychmiast otrzymasz powiadomienie.
Jak Krawl oblicza reputację adresów IP
Łapanie botów to za mało — musisz zrozumieć, kto tak naprawdę puka do twoich drzwi. Krawl analizuje w tle aktywność każdego przychodzącego adresu IP według kilku kryteriów.
System ocenia częstotliwość ryzykownych metod HTTP, odwiedziny ścieżek z robots.txt, timing żądań oraz dopasowania do sygnatur SQLi lub XSS. Pod koniec adres otrzymuje etykietę: atakujący, zły crawler, legalna wyszukiwarka lub zwykły użytkownik.
Jeśli eksport jest włączony, możesz pobrać dane bezpośrednio przez API dla swoich filtrów sieciowych:
curl "https://krawl.local/<SECRET_PATH>/api/export-ips?categories=attacker&fwtype=iptables"
Endpoint dostarcza gotowe reguły dla iptables, nftables, RouterOS lub list blokowania dla OPNsense i pfSense.
Pulpit monitorujący
Jest też interfejs webowy do obserwowania tego, co się dzieje. Aby zapobiec przypadkowemu znalezieniu przez boty panelu admina samego honeypota, jest on ukryty za dynamiczną tajną ścieżką (KRAWL_DASHBOARD_SECRET_PATH) i hasłem.
W środku możesz zobaczyć geografię ataków, podział typów payloadów oraz szczegółowe dossier każdego podejrzanego adresu z historią żądań i osią czasu.
Dwa tryby pracy
Twórcy przygotowali dwie konfiguracje:
- Standalone. Działa w jednym kontenerze, dane przechowuje w SQLite w trybie WAL, a cache trzyma bezpośrednio w pamięci procesu Pythona. Dobra opcja dla projektów hobbystycznych i małych VPS-ów, gdzie ruch nie przekracza kilkuset tysięcy żądań.
- Skalowalny. Ten wprowadza PostgreSQL i Redis. Ten tryb jest potrzebny, gdy chcesz horyzontalnie skalować instancje Krawl za load balancerem lub wdrożyć projekt w Kubernetes przez oficjalny chart Helm.
Typowy wzorzec użycia sprowadza się do umieszczenia Krawl obok głównej aplikacji za NGINX lub Traefik. Cały podejrzany ruch lub żądania do nieistniejących ścieżek systemowych są proxyowane do honeypota.
Szybki start
Najłatwiejszy sposób, żeby wypróbować projekt lokalnie, to uruchomić kontener Docker w trybie 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
Jeśli planujesz skonfigurować generowanie stron z AI, po prostu dodaj zmienne środowiskowe do 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:
Do czego to się przyda
Krawl raczej nie zastąpi pełnego WAF-a w projekcie o wysokim ruchu, ale ma inną niszę. To doskonałe narzędzie dla zespołów blue team, homelabów i tych, którzy chcą badać prawdziwe wzorce ataków na swoich serwisach.
Zamiast ślepo odrzucać żądania kodem 404, zamieniasz skanowanie w pułapkę, zbierasz bazę złośliwych adresów IP i przekazujesz ją do swoich firewalli. Możesz zacząć eksperymentować zwykłym kontenerem Docker na osobnej subdomenie lub serwerze testowym.
Powiązane projekty