>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Python

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.

Logo Krawl

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.

Strona pułapka

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.

Ocena reputacji IP

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.

Pulpit GeoIP

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.

Typy ataków

Szczegóły IP

Dwa tryby pracy

Twórcy przygotowali dwie konfiguracje:

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

Architektura przypadków użycia

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