Knowledge Base

Блокировка прямого бот-трафика и неизвестных Host

Что проверяет метод

Категория: Server Hardening · Риск: high

Что проверяет метод

Метод проверяет, отдаёт ли сервер приложение на запросы, которые не должны попадать в боевой сайт:

Это безопасная проверка: она не подбирает пароли, не отправляет payloads и не меняет состояние приложения.

Почему это важно

Ботам и сканерам удобно начинать разведку с IP-адреса, случайных доменов и подмены `Host`. Если default virtual host отдаёт обычное приложение или API, атакующий получает лишнюю информацию:

Хороший результат — неизвестный Host завершается на edge/proxy и не доходит до backend.

Быстрая проверка

curl -sI -H "Host: attacker.invalid" http://example.com/
curl -skI -H "Host: attacker.invalid" https://example.com/

Хорошо:

HTTP/1.1 421 Misdirected Request
Server: nginx

Плохо:

HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
...
обычный HTML сайта или API-ответ

Пример для Nginx

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    server_tokens off;
    return 421;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;
    server_tokens off;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    return 421;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    if ($host !~ ^(example\.com|www\.example\.com)$) {
        return 421;
    }

    proxy_set_header Host $host;
}

Как писать в отчёте

Плохо:

> Host header test failed.

Хорошо:

> Сервер отвечает на запросы с чужим именем сайта. Это упрощает разведку и может раскрывать приложение ботам, которые обращаются по IP или случайному домену.

Technical classification:

unknown_host_reaches_application

Связанные статьи