В этой инструкции описаны рекомендуемые действия по защите Вашего сервера.

Переименуйте стандартную учетную запись администратора

Нажмите 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 часа.

  1. Cкачайте архив с программой здесь;
  2. В нем находятся два архива IPBan-Linux-x64.zip и IPBan-Windows-x86.zip, нам нужен последний. Распакуйте архив IPBan-Windows-x86.zip в любое удобное место (в примере это корень диска C:);
  3. Так как файлы скачанные с интернета система автоматически блокирует в целях безопасности, для работы приложения необходимо разблокировать все файлы. Щелкните правой кнопкой мыши на все извлеченные файлы и выберите свойства. Обязательно выберите «разблокировать», если этот параметр доступен. Либо, откройте окно 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 адрес:

Однажды на пару моих 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+"
dp_ban_list.txt") –append
$IPs | %> | Out-File ($FilesPath+"
dp_ban_list.txt") –append

$IPs = $IPs | %> | Get-Unique | Out-File ($FilesPath+"
dp_ban_ip_list.txt") –append -encoding oem

$IPs = (type ($FilesPath+"
dp_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+"
dp_ban_ip_list.txt") -encoding oem
$IPs = (type ($FilesPath+"
dp_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:windowssystem32ipfw.exe’ $FilesPath>

В планах доработать скрипт чтоб конфигурационный файл wipfw пересобирался только в том случае, если были попытки взлома, а не после каждого запуска скрипта. И надо подумать на тему разблокировки IP-адресов по таймауту (через полгода-год?).

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Возникла идея написать простой PowerShell скрипт для автоматической блокировки в брандмауэре Windows IP адресов, с которых фиксируются попытки подбора паролей через RDP (или длительные RDP атаки). Идея заключается в следующем: скрипт PowerShell анализирует журнал событий системы, и, если с конкретного IP адреса за последние 2 часа зафиксировано более 5 неудачных попыток авторизации через RDP, такой IP адрес автоматически добавляется в блокирующее правило встроенного брандмауэра Windows.

Итак, имеется небольшая сеть с доменом, для доступа внутрь на один из компьютеров на интернет-шлюзе с Linux через NAT проброшен RDP порт (снаружи отвечает порт TCP 13211, а внутрь перенаправляется стандартный 3389). Периодически на компьютере происходит блокировка известных учетных записей доменной политикой паролей из-за неудачных попыток авторизоваться на компьютере через RDP. Наша задача автоматически блокировать IP адреса, через которых идет подбор паролей в RDP .

Сначала создадим на компьютере правило брандмауэра, которое блокирует входящее RDP подключение с указанных IP адресов:

New-NetFirewallRule -DisplayName "BlockRDPBruteForce" –RemoteAddress 1.1.1.1 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Block

В дальнейшем в это правило мы будем добавлять IP адреса, с которых фиксируется попытки подбора паролей по RDP.

Теперь нужно собрать из журналов компьютера список IP адресов, с которых за последние 2 часа фиксировалось более 5 неудачных попыток авторизации. Для этого в журнале Security нужно выбрать события с Event >

Я использую такой код для выбора IP адресов атакующих из событий за последние 2 часа (можете изменить время):

$Last_n_Hours = [DateTime]::Now.AddHours(-2)
$badRDPlogons = Get-EventLog -LogName ‘Security’ -after $Last_n_Hours -Instance ;e= <$_.ReplacementStrings[-2]>>
$getip = $badRDPlogons | group-object -property IpAddress | where <$_.Count -gt 5>| Select -property Name

Теперь все обнаруженные IP адреса атакующего нужно добавить в правило брандмауэра BlockRDPBruteForce, которое мы создали ранее. Для управления брандмауэром Windows мы будем использовать встроенный модуль встроенный PowerShell модуль NetSecurity. Сначала получим список текущих заблокированных IP адресов и добавим к нему новые.

$log = "C:pslocked_ip.txt"
$current_ips = (Get-NetFirewallRule -DisplayName "BlockRDPBruteForce" | Get-NetFirewallAddressFilter ).RemoteAddress
foreach ($ip in $getip)
<
$current_ips += $ip.name
(Get-Date).ToString() + ‘ ‘ + $ip.name + ‘ IP заблокирован за ‘ + ($badRDPlogons | where <$_.IpAddress -eq $ip.name>).count + ‘ попыток за 2 часа’>> $log # запись события блокировки IP адреса в лог файл
>
Set-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress $current_ips

Проверяем, что в блокирующее правило Windows Defender Firewall добавились новые IP адреса.

Вам осталось скопировать данный PowerShell код в файл c:pslock_rdp_attack.ps1 и добавить его в задание планировщика, для запуска по расписанию. Например, каждые 2 часа.

$repeat = (New-TimeSpan -Hours 2)
$duration = ([timeSpan]::maxvalue)
$Trigger= New-ScheduledTaskTrigger -Once -At (Get-Date).Date -RepetitionInterval $repeat -RepetitionDuration $duration
$User= "NT AUTHORITYSYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:PSlock_rdp_attack.ps1"
Register-ScheduledTask -TaskName "BlockRDPBruteForce_PS" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

Либо вы можете запускать скрипт PowerShell при появлении события 4625 в журнале, таким образом вы будете более быстро реагировать на атаку подбора пароля по RDP.

Вы можете модифицировать данный скрипт под свои реалии и использовть для блокировки RDP атак.