Порт 3389 — самый сканируемый порт в интернете после 22 и 445. Windows-сервер на публичном IP получает первую попытку входа по RDP уже через несколько минут, а затем — тысячи в сутки. Почти все они отсекаются шестью настройками, на которые уходит пятнадцать минут. Это список, который мы по умолчанию применяем в наших RDP-образах; мы объясняем каждый пункт, чтобы вы могли проверить его и дополнить.
Как выглядят атаки
Откройте журнал событий безопасности (Security) на любом Windows-сервере, который пробыл в сети хотя бы сутки, и отфильтруйте события с ID 4625 (неудачный вход). Вы увидите непрерывный поток попыток входа под именами Administrator, admin, user, test и ещё несколькими сотнями личных имён, с IP-адресов из всех стран. Это не целевые атаки: ботнет перебирает все адреса IPv4 и идёт дальше. Защита в том, чтобы не быть лёгкой целью.
1. Проверка подлинности на уровне сети (NLA)
NLA требует, чтобы клиент прошёл проверку подлинности до создания сеанса. Без неё каждая попытка поднимает на сервере экран входа, что расходует CPU и открывает область до входа в систему, где когда-то находились несколько известных уязвимостей RDP. В наших образах NLA включена; проверить это можно в разделе Система → Удалённый рабочий стол → Дополнительные параметры или так:
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication
# 1 = NLA required
2. Политика блокировки учётных записей
Политика блокировки замедляет подбор. Десять неудачных попыток за десять минут и блокировка на пятнадцать превращают бота, который перебирает тысячи паролей в час, в бота, который пробует сорок. Настроить её можно через локальную политику безопасности или одной командой:
net accounts /lockoutthreshold:10 /lockoutduration:15 /lockoutwindow:10
Встроенная учётная запись Administrator по замыслу исключена из блокировки, и это подводит нас к следующему пункту.
3. Обычный пользователь для повседневной работы и переименованный Administrator
Любая атака сначала пробует Administrator. Переименование не делает учётную запись невидимой (её SID по-прежнему оканчивается на 500), но на практике срывает все автоматические подборы, которые мы видим. Создайте отдельного обычного пользователя для повседневной работы, добавьте его в группу Remote Desktop Users и оставьте учётную запись администратора для сеансов обслуживания.
Rename-LocalUser -Name Administrator -NewName ops-admin
New-LocalUser -Name jane -PasswordNeverExpires:$false
Add-LocalGroupMember -Group 'Remote Desktop Users' -Member jane
Для каждой учётной записи используйте длинную парольную фразу или, ещё лучше, случайную строку из 24 символов из менеджера паролей. Вся угроза подбора держится на паролях, которые способен запомнить человек.
4. Ограничьте RDP своим адресом
Эта настройка даёт больше всего. Если порт 3389 отвечает только на IP вашего офиса или дома, ботнеты даже не увидят экран входа. Брандмауэр Windows умеет ограничить встроенное правило списком удалённых адресов:
Set-NetFirewallRule -DisplayGroup 'Remote Desktop' -RemoteAddress 203.0.113.5,198.51.100.0/24
Если ваш адрес меняется (у домашних подключений это бывает часто), вместо него можно разрешить фиксированный приватный адрес туннеля WireGuard или Tailscale; дополнение Tailscale устанавливает клиент при развёртывании. Консоль в панели управления остаётся доступной, если вы заблокируете себя сами, поэтому это изменение безопасно.
5. Смена порта и чего она стоит
Перенос RDP с порта 3389 останавливает самых примитивных сканеров и ни одного из умных, потому что полное сканирование портов находит его за секунды. Всё равно сделайте это: шум в журнале событий сократится на 95%, и настоящие атаки станут заметны. Измените порт в реестре, добавьте правило брандмауэра для нового порта, перезапустите службу и только потом удалите старое правило.
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber -Value 33890
New-NetFirewallRule -DisplayName 'RDP 33890' -Direction Inbound -Protocol TCP -LocalPort 33890 -Action Allow -RemoteAddress 203.0.113.5
Restart-Service TermService -Force
6. Центр обновления Windows по расписанию
Большинство реальных взломов RDP используют уязвимости, исправленные за месяцы до этого. Оставьте автоматические обновления включёнными, задайте часы активности, чтобы перезагрузка выпадала на ночь по вашему часовому поясу, и раз в месяц заглядывайте в Параметры → Центр обновления Windows. Дополнение Windows Update на выделенных серверах настраивает расписание за вас.
Остальное по порядку приоритета
- Defender включён, с облачной защитой. Он уже установлен; не отключайте его, чтобы какой-то инструмент работал быстрее.
- Никаких общих учётных записей. Один человек — один пользователь; только так журнал событий вообще что-то вам расскажет.
- Отключите SMBv1 и, если вы не пользуетесь общим доступом к файлам, полностью закройте порт 445.
Set-SmbServerConfiguration -EnableSMB1Protocol $false. - Выходите из системы, а не просто отключайтесь. Отключённые сеансы продолжают работать, а ваши учётные данные остаются в памяти.
- Следите за событием 4625. Всплеск после ужесточения настроек означает либо что кто-то нашёл новый порт (это нормально), либо что область действия правила брандмауэра пропала после обновления (а это плохо).
Что наши RDP-образы делают из коробки
NLA включена, действует описанная выше политика блокировки учётных записей, Defender и Центр обновления Windows работают, SMBv1 отключён, а пароль администратора — случайный, из 20 символов — один раз показывается в панели. Шаги с 3 по 5 требуют вашего собственного адреса или ваших собственных имён, поэтому применять их предстоит вам; когда всё сделано, RDP-сервер на публичном IP становится скучным сервером, а это и есть цель.
