Ataki fuzzingowe 2026: analiza 12 wektorów z 20 000 linii logów Nginx
Zautomatyzowany skaner fuzzingowy zrzucił ponad 20 000 zapytań w 5 minut na serwer z Nginx. Dwa adresy IP z tej samej podsieci (185.x.x.52, 185.x.x.38) używały User-Agent curl/8.7.1. Prawdopodobne narzędzia: Nuclei z niestandardowymi szablonami lub ffuf/gobuster z listą słów z GitHub. Atak przebiegał parabolicznie: start z 100 rps, nacisk na limity, eskalacja na drugi adres IP, wygaszanie ze śmieciowymi ścieżkami.
Skaner rozpoczął od plików .env, przeszedł do skryptów debugowania, LFI/RCE, konfigów CI/CD i POST-flood. Wszystkie zapytania zostały zablokowane przez podstawowe ustawienia Nginx: ograniczenie szybkości, routing metod, catch-all dla SPA.
Top 12 wektorów skanowania
Analiza logów ujawniła charakterystyczne wzorce. Oto kluczowe przykłady z rzeczywistymi zapytaniami:
- Polowanie na .env:
/.env.staging,/.env.local,/api/.env. Cel — klucze DB, tokeny AWS.
{"time_local":"16/Mar/2026:17:19:51 +0000","remote_addr":"185.x.x.52","request_method":"GET","request_uri":"/.env.staging","status":"404","body_bytes_sent":"53","http_user_agent":"curl/8.7.1"}
- Debugowanie serwera:
/admin/admin_phpinfo.php4,phpinfo.php. Rozpoznanie wersji i ścieżek dla LFI.
- Debug Yii2/Laravel:
/debug/default/view?panel=config— próba wycieku konfiguracji z hasłami.
- Tutoriale z GitHub:
/07-accessing-data/begin/vue-heroes/.env— szukanie kopiuj-wklej z kursów.
- Fixtures NPM:
/babel-plugin-dotenv/test/fixtures/dev-env/.env— testy w vendor.
- LFI w Grafana:
/login?redirectTo=%2Fpms%3Fmodule%3Dlogging%26file_name%3D..%2F..%2F..%2F..%2F..%2F..%2F~%2F.aws%2Fcredentials(status 429).
- Iniekcja RCE:
/admin/config?cmd=cat%20/root/.aws/credentials.
- Klucze SSH:
/.ssh/id_rsa.
- CI/CD:
/.gitlab-ci.yml,sendgrid.env.
- Artefakty Next.js:
/_next/static/chunks/app/error.jsdla source maps.
- POST-flood:
/api/files/upload(status 405).
- Śmieci:
/config.json.bak.1.
Mechanizmy ochrony na poziomie Nginx
Serwer wytrzymał obciążenie dzięki ścisłej konfiguracji. Omówienie praktyk:
- Ograniczenie szybkości:
limit_req zone=grafana_login_ip burst=5 nodelay;na formularze logowania i API. Zapytania LFI zwróciły 429, oszczędzając CPU.
- Ograniczenia metod: Zakaz POST na nieobsługiwanych endpointach — 405 Method Not Allowed. Zapytania nie docierają do serwera aplikacji.
- Routing catch-all:
try_files $uri $uri/ /index.html;zwraca stronę SPA z 200 zamiast 404. Bot pobrał 40+ KB HTML zamiast konfigów.
- Weryfikacja SNI: 421 Misdirected Request na HTTP/2 z nieprawidłowym Host — spowalnia skanery z multipleksowaniem.
Analiza dynamiki ataku
{"time_local":"16/Mar/2026:17:19:51 +0000","remote_addr":"185.x.x.52","request_method":"GET","request_uri":"/config.php","status":"200","body_bytes_sent":"40414","http_user_agent":"curl/8.7.1"}
Bot zinterpretował 200 jako sukces, ale dostał śmieci. Takie sztuczki dezorientują parsery generatorów list słów.
Fuzzing ewoluuje: listy słów mutują z GitHub, NPM, tutoriali. Skanery adaptują się do limitów, ale podstawowa higiena (bez .git, testów) + filtry Nginx utrzymują obronę.
Co ważne:
- Fuzzing 2026 skupia się na .env, LFI/RCE, CI/CD, kopiuj-wklej z GitHub.
- 20k zapytań/5 min — norma dla Nuclei/ffuf; rate limit burst=5 blokuje.
- Catch-all z 200 OK + duży ładunek myli boty.
- Routing metod (405) i SNI (421) minimalizują obciążenie backendu.
- Regularny audyt logów wykrywa nowe wzorce list słów.
— Editorial Team
Brak komentarzy.