Блог

Брутфорс-атаки остаются одной из самых распространённых угроз для RDP-серверов. Злоумышленники используют слабые или компрометированные пароли, чтобы получить доступ к системе. Эта угроза базируется не на уязвимостях протокола RDP, а на нарушении политики безопасности паролей, что делает её особенно опасной.

RDP с поддержкой SSL и проверки подлинности на уровне сети (NLA) достаточно безопасен для работы без VPN, если используются актуальные версии ОС и установлены все обновления. Однако пароли остаются слабым местом, а стандартные средства Windows не предоставляют защиты от их перебора. В этом руководстве мы рассмотрим, как с помощью механизма Connection Tracking настроить эффективную защиту от брутфорса.

Приобрести оригинальные ключи активации Windows Server RDS можно у нас в каталоге от 3440 ₽

Принцип работы Connection Tracking

Connection Tracking позволяет анализировать состояние соединений и пакетов, классифицируя их на четыре состояния:

NEW: новый пакет, не принадлежащий ни одному соединению.

ESTABLISHED: пакет, принадлежащий уже существующему соединению.

RELATED: пакет, связанный с существующим соединением (например, дополнительные соединения FTP).

INVALID: пакет, который не соответствует вышеуказанным состояниям.

При работе RDP клиент сначала проходит аутентификацию. Если данные введены неверно, каждый новый запрос создаёт пакет с состоянием NEW. При успешной аутентификации создаётся RDP-сессия, в которой пакеты переходят в состояние ESTABLISHED.

Таким образом, большое количество пакетов NEW, отправленных за короткий промежуток времени, свидетельствует о брутфорс-атаке.

Шаг 1: Создание списка подозрительных адресов

Мы будем использовать механизм Address List и таблицу Mangle. Это позволит фиксировать IP-адреса, с которых поступает слишком много пакетов NEW.

1) Откройте IP → Firewall → Mangle и создайте новое правило:

Chain: forward

Protocol: tcp

Dst. Port: 3389

Connection State: new

На вкладке Action:

— Укажите Add src to address list.

— Введите имя списка rdp_stage1.

— Установите Timeout: 1 минута.

Команда в терминале:


/ip firewall mangle add action=add-src-to-address-list address-list=rdp_stage1 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp

Шаг 2: Эскалация списков

Мы создаём последовательные списки (rdp_stage2, rdp_stage3 и т.д.) для фиксации повторных запросов. Если адрес уже находится в rdp_stage1 и поступает ещё один пакет NEW, он перемещается в rdp_stage2.

Пример команды для второго этапа:


/ip firewall mangle add action=add-src-to-address-list address-list=rdp_stage2 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage1

Повторите это для rdp_stage3, rdp_stage4 и rdp_stage5.

Шаг 3: Блокировка адресов
После попадания адреса в rdp_stage5 он перемещается в список rdp_drop, с блокировкой на 30 минут.

Создайте новое правило:

Chain: forward

Protocol: tcp

Dst. Port: 3389

Src. Address List: rdp_stage5

На вкладке Action укажите:

Add src to address list.

— Введите rdp_drop.

— Установите Timeout: 30 минут.

Команда в терминале:


/ip firewall mangle add action=add-src-to-address-list address-list=rdp_drop address-list-timeout=30m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage5

Как это работает? Адрес источника первого пакета с состоянием NEW добавляется в список rdp_stage1 на 1 минуту. Если за это время от того же адреса придёт ещё один новый пакет, он попадёт в rdp_stage2. Этот процесс продолжается: каждый новый пакет переводит адрес на следующий этап (rdp_stage3, rdp_stage4 и т.д.).

После шестого пакета адрес попадает в список rdp_drop на 30 минут. Время блокировки можно настроить самостоятельно, но не рекомендуется ставить слишком большие значения, чтобы избежать долгих блокировок в случае ошибки. Например, полчаса предпочтительнее, чем сутки, если администратор недоступен.

Важно: правила нужно размещать в обратном порядке — от rdp_stage5 к rdp_stage1. Это связано с тем, что действие add src to address list не завершает обработку пакета, и он продолжает движение по цепочке. Если оставить порядок от первого к последнему, пакет будет сразу добавляться во все списки, включая rdp_drop, что нарушит логику.

Если вы работаете в терминале, то правильная последовательность действий будет выглядеть так:


/ip firewall mangle
add action=add-src-to-address-list address-list=rdp_drop address-list-timeout=30m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage5
add action=add-src-to-address-list address-list=rdp_stage5 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage4
add action=add-src-to-address-list address-list=rdp_stage4 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage3
add action=add-src-to-address-list address-list=rdp_stage3 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage2
add action=add-src-to-address-list address-list=rdp_stage2 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp src-address-list=rdp_stage1
add action=add-src-to-address-list address-list=rdp_stage1 address-list-timeout=1m chain=forward connection-state=new dst-port=3389 protocol=tcp

Теперь проверим работу наших правил, выполним подключение к RDP одновременно контролируя IP — Firewall — Address Lists. Если все прошло нормально, то мы увидим наш адрес-источник в списках rdp_stage1 и rdp_stage2.

Теперь попробуем три раза ошибиться и на четвертый зайти:

Как видим, практика полностью совпадает с теорией, следовательно, можно переходить к блокировкам, не опасаясь, что пострадают легальные пользователи. Блокировать мы будем в таблице Raw, почему? Raw содержит «сырые» данные о пакетах, до того, как они будут переданы Connection Tracking, а так как определение состояния пакета достаточно ресурсозатратная операция, то отсекая лишний трафик в Raw мы снижаем нагрузку на процессор роутера, что важно в случае достаточно большого списка.

Шаг 4: Блокировка трафика

Теперь мы блокируем адреса из списка rdp_drop.

1) Откройте IP → Firewall → Raw и создайте правило:

Chain: prerouting

Protocol: tcp

Dst. Port: 3389

Src. Address List: rdp_drop

На вкладке Action выберите drop.

Команда в терминале:


/ip firewall raw add action=drop chain=prerouting dst-port=3389 protocol=tcp src-address-list=rdp_drop

Обратите внимание: в предложенной схеме мы блокируем злоумышленнику только доступ к RDP. Если убрать ограничения по протоколу и порту, можно полностью блокировать источник, но делать этого не рекомендуется. Даже сам администратор может ошибочно несколько раз ввести пароль, а при полной блокировке он потеряет возможность подключиться к сети. Если блокируется только RDP, администратор сможет зайти на роутер и снять блокировку.

Защиту от брутфорса можно считать настроенной. На первых этапах рекомендуется периодически проверять содержимое списка rdp_drop, чтобы исключить попадание туда легальных пользователей. В случае необходимости следует корректировать настройки или информировать пользователей о новых правилах.

Этот подход универсален и может применяться для любого сервиса, не только RDP. Для настройки достаточно определить допустимое количество новых пакетов для выбранного протокола и установить границу, после которой трафик можно считать подозрительным.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии