- Инструкция по защите RDP подключения
- Переименуйте стандартную учетную запись администратора
- Блокировка RDP-подключений для учетных записей с пустым паролем
- Смена стандартного порта Remote Desktop Protocol
- Защита от буртфорса
- Защита сервиса RDP под Windows от подбора пароля.
- Защита терминального сервера от подбора пароля
Инструкция по защите RDP подключения
В этой инструкции описаны рекомендуемые действия по защите Вашего сервера.
Переименуйте стандартную учетную запись администратора
Нажмите Win + X и выберите «Управление компьютером»:
Затем выберите «Локальные пользователи» —→ «Пользователи» —→ кликните правой кнопкой мыши по имени пользователя «Администратор» и выберите «Переименовать»:
Переименуйте пользователя и используйте это имя для последующих подключений к удаленному рабочему столу.
Блокировка RDP-подключений для учетных записей с пустым паролем
Усилить безопасность можно запретив подключаться к учетным записям с пустым паролем. Для этого нужно включить политику безопасности «Учетные записи»: разрешить использование пустых паролей только при консольном входе»:
Откройте локальную политику безопасности (нажмите Win + R и введите команду secpol.msc)
Перейдите в раздел «Локальные политики» –-> «Параметры безопасности».
3. Дважды щелкните на политике «Учетные записи: разрешить использование пустых паролей. » и убедитесь, что она включена:
Вещь полезная, поэтому не оставляйте этот параметр без внимания.
Смена стандартного порта Remote Desktop Protocol
Не лишним будет сменить стандартный порт на котором работает протокол RDP. Как это сделать уже описано в наших инструкциях: Windows Server 2012 и Windows Server 2016.
Защита от буртфорса
Чтобы блокировать множественные попытки подключения с неверными данными, можно отслеживать журнал событий и вручную блокировать атакующие IP адреса посредством брандмауэра Windows или воспользоваться готовым приложением. Последний случай мы рассмотрим подробнее.
Для блокировки атакующих IP адресов будем использовать свободно распратраняющееся ПО — IPBan. Это приложение проверено и работает в Windows Server 2008 и всех последующие версях. Windows XP и Server 2003 — не роддерживаются. Алгоритм его работы простой: программа мониторит журнал событий Windows, фиксирует неудачные попытки входа в систему и, после 5-ти попыток злоумышленника подобрать пароль, блокирует IP адрес на 24 часа.
- Cкачайте архив с программой здесь;
- В нем находятся два архива IPBan-Linux-x64.zip и IPBan-Windows-x86.zip, нам нужен последний. Распакуйте архив IPBan-Windows-x86.zip в любое удобное место (в примере это корень диска C:);
- Так как файлы скачанные с интернета система автоматически блокирует в целях безопасности, для работы приложения необходимо разблокировать все файлы. Щелкните правой кнопкой мыши на все извлеченные файлы и выберите свойства. Обязательно выберите «разблокировать», если этот параметр доступен. Либо, откройте окно PowerShell (Win + R, введите powershellи «ОК») и воспользуйтесь командой следующего вида:
4. Вам нужно внести следующие изменения в локальную политику безопасности, чтобы убедиться, что в логах системы отображаются IP-адреса. Октройте «Локальную политику безопасности» (Win + R, введите secpol.msc и «OK«). Перейдите в «Локальные политики» —> «Политика аудита» и включить регистрацию сбоев для «Аудита входа в систему» и «Аудита событий входа в систему»:
5. Для Windows Server 2008 или эквивалентного вам следует отключить логины NTLM и разрешить только NTLM2-вход в систему. В Windows Server 2008 нет другого способа получить IP-адрес для входа в систему NTLM. Октройте «Локальную политику безопасности» (Win + R, введите secpol.msc и «OK«). Перейдите в «Локальные политики» —> «Параметры безопасности» —> «Сетевая безопасность: Ограничения NTLM: входящий трафик NTLM» и установите значение «Запретить все учетные записи»:
6. Теперь необходимо создать службу IPBan, чтобы приложение запускалось при старте системы и работало в фоновом режиме. Запустите оснастку PowerShell (Win + R, введите powershell и «ОК») и выпоните команду типа:
Перейдите в службы (Win + R, введите services.msc и «OK«) и запустите службу IPBAN, в дальнейшем она будет запускаться автоматически:
В «Диспетчере задач» можно убедиться, что служба запущена и работает:
Таким образом, программа следит за неудачными попытками авторизации и добавляет неугодные IP адреса в созданное правило для входящих подключений брандмауэра Windows:
Заблокированные IP адреса можно разблокировать вручную. Перейдите на вкладку «Область» в свойствах правила «IPBan_0» и удалите из списка нужный Вам IP адрес:
Защита сервиса RDP под Windows от подбора пароля.
Однажды на пару моих windows-серверов напали злодеи — пытались попасть на сервер через RDP, я поглядел на это безобразие и решил что надо их блокировать по IP. Готовых решений поискал, да не нашёл, поэтому сделал сам.
Навеяно этим постом.
Использую связку PowerShell и фаервола wipfw для защиты от угроз из интернета, в частности от злоумышленников, подбирающих логины и пароли к сеансу RDP.
Скрипт на PowerShell анализирует логи системы безопасности и готовит конфигурационный файл для wipfw. А уже wipfw, помимо своей основной работы, блокирует IP которые нашёл скрипт.
Скрипт выполняется у меня с определённой периодичностью, да и действующие аккаунты блокируются после 3-х неудачных попыток ввода пароля (разблокируются автоматом по таймауту), так что теперь стало поспокойнее.
Помимо конфигурационного файла для wipfw, получается еще и файл со статистикой по попыткам подбора логина/пароля, выглядит статистика примерно так:
23 сентября 2011 г. 8:35:45
Address UserName Cnt
——- ——— —
78.39.192.78 adm 23
78.39.192.78 admin 89
78.39.192.78 admin1 23
78.39.192.78 admin2 23
78.39.192.78 administrator 23
78.39.192.78 aspnet 23
78.39.192.78 backup 23
78.39.192.78 console 23
78.39.192.78 david 23
78.39.192.78 guest 23
78.39.192.78 john 23
78.39.192.78 owner 23
78.39.192.78 server 23
78.39.192.78 sql 23
78.39.192.78 support 23
78.39.192.78 support_388945a0 23
78.39.192.78 sys 23
78.39.192.78 test2 23
78.39.192.78 test3 23
78.39.192.78 user 89
78.39.192.78 user1 23
78.39.192.78 user2 23
78.39.192.78 user3 23
78.39.192.78 user4 23
78.39.192.78 user5 23
23 сентября 2011 г. 10:30:18
23 сентября 2011 г. 10:40:20
23 сентября 2011 г. 10:50:19
Address UserName Cnt
——- ——— —
201.241.45.134 administrator 89
В файле видно IP за которым скрывается злодей, логин к которому подбирался пароль и количество попыток.
Словарь логинов по которому пытались ломать серверы:
1
123
a
actuser
adm
admin1
admin2
administrator
aspnet
backup
console
david
guest
john
owner
server
sql
support
support_388945a0
sys
test2
test3
user1
user2
user3
user4
user5
user
admin
db2admin
reception
Administrador
Есть конечно и список IP за которыми сидят злодеи. Что интересно, в большинстве случаев злодеи либо сидят за Windows Server 2003, либо прямо с них и работают. Напрашивается вывод про бот-сеть из заражённых серверов.
Ну и собственно скрипт.
$IPs = New-Object System.Collections.ArrayList
if($Events.Count -gt 1) <
$Events | %<
$Data = New-Object System.Management.Automation.PSObject
$Data | Add-Member NoteProperty Address ($null)
$Data | Add-Member NoteProperty UserName ($null)
$Data | Add-Member NoteProperty Cnt ($null)
if(($data.address -ne ) -and ($data.address.length -gt 7))
<
$IPs += $Data
#$Data
>
>
$IPs = $IPs | sort -property Address, UserName
for ( $i = 1; $i -le $IPs.Count; $i++ )
<
if(($IPs[$i].Address -ne $IPs[$i-1].Address) -or ($IPs[$i].UserName -ne $IPs[$i-1].UserName))
<
$k = $i
>
else <
$IPs[$k].Cnt++
>
Get-date | Out-File ($FilesPath+»\rdp_ban_list.txt») –append
$IPs | %
$IPs = $IPs | %
$IPs = (type ($FilesPath+»\rdp_ban_ip_list.txt»)) -replace «[^.\d]» -match «\d<1,3>\.\d<1,3>\.\d<1,3>\.\d<1,3>»
$IPs = $IPs | sort-object | Get-Unique
$IPs | Out-File ($FilesPath+»\rdp_ban_ip_list.txt») -encoding oem
$IPs = (type ($FilesPath+»\rdp_ban_ip_list.txt»)) -replace «[^.\d]» -match «\d<1,3>\.\d<1,3>\.\d<1,3>\.\d<1,3>«
type ($FilesPath+»\wipfw_prefix.conf») | Out-File ($FilesPath+»\wipfw.conf») -encoding oem
$IPs | sort | % <"add 00666 unreach 10 log tcp from "+$_+" to any in via eth8">| Out-File ($FilesPath+»\wipfw.conf») -encoding oem –append
type ($FilesPath+»\wipfw_suffix.conf») | Out-File ($FilesPath+»\wipfw.conf») -encoding oem –append
$FilesPath+=»\wipfw.conf»
&’c:\windows\system32\ipfw.exe’ $FilesPath>
В планах доработать скрипт чтоб конфигурационный файл wipfw пересобирался только в том случае, если были попытки взлома, а не после каждого запуска скрипта. И надо подумать на тему разблокировки IP-адресов по таймауту (через полгода-год?).
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Защита терминального сервера от подбора пароля
Итак, что мы имеем:
- терминальный сервер на Windows 2008R2
- реальный IP адрес сервера
- нет возможность всех клиентов заставить работать по VPN
- события о подборе пароля в журнале безопасности.
Трудности в том, что:
- при включенной NLA (Network Level Authentication) в логах отсутствует IP адрес источника;
- в отличии от Windows Server 2012 r2 в журнале Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational есть только запись «Прослушиватель RDP-Tcp получил соединение» но нет IP адреса источника.
Вариант 1: отключить NLA (в конфигурации сервера узла удалённых рабочих столов, с свойствах подключения убрать галоску «Разрешить подключаться только с компьютеров, на которых работает удалённый рабочий стол с проверкой подлинности на уровне сети»), после чего можно будет использовать DRPDefender — но это не наш метод.
Вариант 2: При успешном подключении (код события 4624 в журнале безопасности) выполняется запись айпишника в «белый лист». На всякий случай, чтоб его случайно не заблокировать. Так как некоторые терминальные клиенты (с MacOS и Linux) при подключенном состоянии к серверу но не работы на самом терминальном сервере (т.е. работе на локальном компьютере) пытаются переподключиться к серверу, создавая события 261 из Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational , и рискуют попасть в бан.
При создании нового события с кодом 261 из Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational выполняем скрипт. Который берёт айпиадреса которые сейчас активны на порту нашего терминального сервера (net stat с фильтрами), сравнивает их с IP адресами с которых за последние 7дней были успешные подключения по RDP, если с адреса были успешные подключения — тогда не трогаем его (скрипт закрывается). Если за 7 дней с этого IP адреса небыло успешных подключений — тогда «берём его на карандаш» а точнее записываем его в отдельный файлик (отдельный файлик для каждого адреса). Если в файлике более 20 строк (было 20 попыток подключиться) тогда добавляем этот адрес в правило фаервола (виндового) и создаётся отдельное задание (само, автоматически) на разблокировку через 15 минут.
P.S. 1: Для блокировки нужно в виндовом фаерволе создать запрещающее правило с названием BlockAttackers
P.S. 2: Задание в шедуллере должно иметь право на чтение виндовых журналов. По идеи должно хватать роли «Читатели журнала событий».
P.S. 3: Задание в шедуллере должно иметь право на изменение правил фаервола. Запускаю от имени системы.
Собрал оба скрипта в один файл. вынес ключевые параметры в переменные в начале файла
Инструкция по установке:
1. создаём правило в Брандмауере с названием «BlockAttackers»:
- действие «блокировать»;
- тип протокола — любой (ну или можно указать только порт RDP подключения, настроенный в виндовой службе);
- область — Удалённый IP адрес — указанные IP-адреса — добавьте адрес к примеру 1.1.1.1 (вероятность подключения вашего сотрудника с такого IP близится к нулю);
- профиль безопасности — все.
2. создаём задание в виндовом шедуллере, выполнять от имени «система» к примеру, при возникновении события с кодом 261 в журнале Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational выполняем действие «запуск программы» powershell.exe с аргументом
3. создаём задание в виндовом шедуллере, выполнять от имени «система» к примеру, при возникновении события с кодом 4624 в журнале «безопасность» источник «Microsoft Windows security auditing.» выполняем действие «запуск программы» powershell.exe с аргументом
4. создаём задание в виндовом шедуллере, выполнять от имени «система» к примеру, по расписанию в полночь (или около того) выполняем действие «запуск программы» powershell.exe с аргументом
По итогу в папке Temp создаются файлики с айпишниками успешных и неуспешных подключений.
— Добавил ключ устаонвки
— Подправил некоторые моменты относящиеся к описанию внутри кода.
— опитимизирован процесс установки в зависимости от версии ОС.