Windows server 2012 защита от брутфорса

0

15.10.201911:5415.10.2019 11:54:47

Для защиты RDP сервера от брутфорса мы воспользуемся утилитой IPBan от Jeff Johnson.
Утилита IPBan блокирует ip адресс с которго идет перебор паролей после нескольких неудачных попыток авторизации.

Для начала проведем подготовительный этап.

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

Переходим  в «Локальные политики» (Win + R, введите secpol.msc и «OK»). —> «Политика аудита» и включить регистрацию событий для «Аудита входа в систему» и «Аудита событий входа в систему»:

audit.png

Подготовительный этап закончен, переходим к настройке IPBan

Скачиваем утилиту https://github.com/DigitalRuby/IPBan/releases для своей разрядности Windows.

Распаковываем архив, к примеру на диск C:\ в папку ipban.

Запускаем cmd консоль обязательно с правами Администратора.

И прописываем IPBan как службу Windows, командой:

sc.exe create IPBAN type=own start=delayed-auto binPath=c:\ipban\DigitalRuby.IPBan.exe DisplayName=IPBAN

ipban.png
Заходим в оснастку служб Windows (Win + R, введите services.msc и «OK») находим и запускаем службу IPBAN

ipban2.png

IPBan отслеживает неудачные попытки входа и добавляет правило для Windows фаервола.
Удалить случайно добавленный ip адрес либо посмотреть какие адреса сейчас добавленны можно в оснастке фаервола — правило IPBan_Block_0.
Также создаются два правила IPBan_EmergingThreats_0 и IPBan_EmergingThreats_1000 — общеизвестные IP адреса с которых происходят попытки входа.  
firewol.png

Вот и все, теперь наш Windows сервер зашишен от перебора паролей.

P.S. Также этот способ работает на Windows 8 — Windows 10.

Инструкция
по скрипту и сам скрипт, проверялся на работоспособность в Windows
Server 2012. Остальная информация на данной странице, актуальна для
любой версии ОС.

На RDP сервера выставленные в Интернет
достаточно быстро начинаются атаки переборщиков паролей. Зачастую, это не
просто «школьники» или «хацкеры», которые пробуют свои силы в «хакерстве».
Последние несколько лет, проблема с вирусами-шифровальщиками, стала достаточно
серьезной. Дело в том, что половина всех заражений серверов вирусами-шифровальщиками, происходит через взлом пароля к
RDP. Остальная часть, через уязвимости в самом RDP. Поэтому, любой системный админ скажет,
что «выставлять»
RDP в
Интернет – нельзя. Для борьбы с перебором паролей к
RDP, следует использовать VPN. И все бы хорошо, если бы не одно «но».

Нужна профессиональная помощь в настройке сервера? Есть вопросы? Качественная и надежная IT-помощь по доступным ценам:

  • Настройка Windows Server для пользователей СНГ
  • Настройка Linux сервера для пользователей СНГ
  • Помощь в администрировании серверов для пользователей Украины и СНГ

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

Сейчас есть множество безопасных, доступных по цене, простые и удобные решений, которые позволяют организовать VPN для удаленной работы. Например, VPN клиент Pulse Secure, позволяет буквально в два клика, организовать безопасный RDP доступ. Просто запустил — ввел пароль — готово. Либо, создать свой VPN на базе облачных решений. Для бизнес-пользователей в Украине, есть готовая сеть VPN для защиты RDP, по доступной цене.

Сами
растраты на организацию
RDP
сервера для клиентов в таких фирмах – уже достижение. А тут еще нужен
производительный роутер, нужно организовать поддержку пользователей.

Итак, небольшая
фирма с
RDP сервером наружу.

Первый признак
работы сканеров – большое количество неудачных событий 4625 (
An account failed to log on) в которых указаны различные
распространенные имена пользователей.

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

  • имена
    пользователей не должны быть стандартными
  • пароль
    должен быть сложным
  • количество
    неудачных попыток входа для пользователя должно быть ограничено

Как минимум нужно
настроить в групповой локальной или доменной политике следующие параметры:

Computer Configuration\Security Settings\Local Policies\Account Policies\Password Policy

Minimum password length = 9

Password must meet complexity requirements = Enabled

Computer Configuration\Security Settings\Local Policies\Account Policies\Account Lockout Policy

Account lockout threshold = 5

Reset account lockout counter after = 30

Account lockout duration = 30

Так же необходимо
выставить параметры безопасности на уровне
RDP:

Computer Configuration\Policies\Administrative
Templates\Windows Components\Remote Desktop Services\Remote Desktop Session
Host\Security

Require secure RPC communication = Enabled

Require use of specific security layer for remote (RDP)
connections = SSL

Require user authentication for remote connections by using
Network Level Authentication = Enabled

Set client connection encryption level = High

При таких
настройках и нестандартных именах пользователей успешный подбор пароля (или его
получение из сетевых пакетов) практически невозможны.

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

Признаком данной ситуации станут события 5817 «Netlogon
has failed an additional 129 authentication requests in the last 30 minutes.
The requests timed out before they could be sent to domain controller
\\server.ourdomain.local in domain OURDOMAIN.»

Первый
«метод защиты»
– изменение стандартного
RDP-порта 3389 на нестандартный. Настройки
находятся в реестре:

KEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal
Server\WinStations\RDP-Tcp\PortNumber

для применения
нужен рестарт сервера.

Однако, по опыту
замечено, что сканеры успешно обрабатывают данную ситуацию и через день-два новый
порт уже вовсю сканируют.

Второй шаг, сделать
на уровне маршрутизатора блокировку
IP если с него создано некое количество сессий за единицу времени (если это
возможно на вашем роутере).

Однако, стоит
учесть, что переборщики паролей, работают в рамках одной сессии кидая в неё
пакет за пакетом, а
RDP
сервер, несмотря на большое количество неуспешных попыток и не будет ее
разрывать. Поэтому, нужен сетевой экран, умеющий делать инспекцию пакетов на
уровне приложения. Но такие устройства и их поддержка явно выходят за рамки
бюджета маленькой фирмы.

На линуксе
существует утилита
fail2ban парсящая логи и блокирующая на уровне firewall адреса с которых происходит много
неуспешных попыток входа. 

Не то чтобы утилита, но вариант решения (это больше концепт идеи, чем рабочий вариант): fail2ban в виде скрипта.
Правда тема старая, решение костыльное (использования IPSec не по назначению). А ещё оно на VBScript :). Но решение вполне рабочее (было по крайней мере) :). Помню что проверял его на сервере и оно работало.

Можно использовать что-то подобное под Windows Server используя Powershell.

Определим
переменные:

# количество
неуспешных попыток за единицу времени при которых
IP блокируется

# с единицей
времени определимся ниже

$ban_treshold = 5

#
продолжительность блокировки в часах

$ban_duration = 24

# инициализируем
массивы в которых будут добавляться
IP для блокировки

$ip2ban = @()

$ip2ban_str = @()

В нашем случае с
параметром групповой политики
Require use of specific security layer for remote (RDP) connections = SSL и включенным NLA события
4625 не будут содержать
IP
источника. И для
Server 2008,
чтобы видеть в событиях 4625 источник перебора прийдется ставить менее
защишенный
security layer = RDP.

Server 2012 более продвинутый, можно использовать настройки
SSL+NLA и при этом ориентироваться на события 140 ( A connection from the
client computer with an IP address of xxx.xxx.xxx.xxx failed because the user
name or password is not correct. ) в Applications and Services Logs. Не путайте
с NTFS событиями 140 ( The system failed to flush data to the transaction log.
) появляющимися в логе System.

# получаем события

$evt140 = Get-WinEvent -ProviderName
Microsoft-Windows-RemoteDesktopServices-RdpCoreTS|?{$_.id -eq 140}

# пишем в лог

«— Get-WinEvent $ban_date_str» >>
$log_file

# группируем
события по
IP, фильтруем по
количеству, определенному в
ban_treshold и записываем в
массив

$ip2ban = $evt140.properties.value|Group-Object|?{$_.count
-ge $ban_treshold}|select name,count

# пишем в лог IP определенные для блокировки и для
информации количество попыток

$ip2ban|%{ «#block_ip «+$_.name+»
«+$_.count >> $log_file }

Самое важное –
список
IP для блокировки (он
у вас должен быть). Теперь нужно очистить лог от событий, чтобы не
анализировать их при последующих запусках скрипта и создать правила для
firewall.

# проверяем что
список
IP не пустой

if($ip2ban.count -gt 0){

# очищаем лог

  get-winevent
-ListLog Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational| % {
[System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog($_.LogName)
}

 
$ip2ban|%{$ip2ban_str+=$_.name.tostring()}

# создаем правило firewall

  New-NetFirewallRule
-DisplayName «RDP_DYN_BAN_$ban_date_str» -Enabled «True»
-Profile Any -Direction Inbound -Action Block -RemoteAddress $ip2ban_str
-Protocol TCP

# пишем в лог имя
созданного правила

  «— New-NetFirewallRule
RDP_DYN_BAN_$ban_date_str» >> $log_file

}

Как только
правила начинают накапливаться, чтобы их не стало сильно много, нужно удалять правила,
которые старше
ban_duration.

# читаем текущие правила

$current_frs = Get-NetFirewallRule -DisplayName RDP_DYN_BAN*

$current_frs|%{

# переводим
строковое имя правила в
datetime

  $date_frs=[datetime]::parseexact($_.displayname,
‘RDP_DYN_BAN_ddMMyyyy_HHmmss’,$null)

# если разница в
часах больше
ban_duration удаляем правило

  if( ((get-date) —
$date_frs).totalhours -ge $ban_duration ){

    «—
Remove-NetFirewallRule -Displayname «+$_.displayname  >> $log_file

    $_|RemoveNetFirewallRuleConfirm:$false

  }

}

Осталось
настроить запуск скрипта в планировщике, например, каждый час или 30 минут. Это
и будет единицей времени для
ban_treshold определенной
нами в скрипте.

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

VPN — единственно правильный вариант защиты от подбора паролей через RDP. Сейчас есть очень простые и удобные VPN клиенты, буквально запустил — ввел пароль — готово. Pulse Secure, является готовым решением для организации VPN без лишних хлопот. Если совсем никак не получается реализовать VPN — ставить блокировку учетной записи при неправильном вводе пароля, например 5 раз на 30 минут — помогает, хотя это и не полноценное решение.

Есть интересное и бесплатное программное решение: Cyberarms Intrusion Detection and Defense Software (IDDS) Есть инструкция: «Устанавливаем и настраиваем Cyberarms Intrusion Detection and Defense Software (IDDS)».

Работает не только с RDP, но и может отслеживать:

  • FTP
  • RRAS — Routing and Remote Access
  • Kerberos pre-authentication
  • AD Credential Validation
  • Windows Base
  • FileMaker
  • SMTP
  • SQL Server

И как вариант, можно рассмотреть RdpGuard, что достаточно актуально будет для облачных виртуальных серверов.

Для любителей держать открытым RPD в Интернет, рекомендую ознакомиться: https://www.ptsecurity.com/ru-ru/about/news/zloumyshlenniki-mogut-poluchit-dostup-k-kazhdomu-desyatomu-otkrytomu-udalennomu-rabochemu-stolu/

Дополнительная информация и вариант решения для защиты от перебора паролей RDP с блокировкой IP правилами Windows Firewall: https://winitpro.ru/index.php/2019/10/02/blokirovka-rdp-atak-firewall-powershell/

Для блокировок IP, ознакомьтесь с решением IPBan:

  • Оф. сайт: https://www.digitalruby.com/ipban/
  • Github: https://github.com/DigitalRuby/IPBan
  • Инструкция: «Защита RDP подключения от брутфорса при помощи IPBan.»

Добавлено 27.01.2021

Имел возможность реализовать защиту RDP соединения, при помощи готового решение для реализации двухфакторной аутентификации с защитой RDP от ESET (ESET Secure Authentication для защиты локального или удаленного входа в систему через протокол RDP).

Ссылки на получение пробной лицензии и загрузки для пользователей РФ.

Заявка на получение ключа активации (бесплатная триал версия на 30-ть дней): https://www.esetnod32.ru/download/business/trial/?from=esa#download-business-trial

Загрузка последнего дистрибутива ESET Secure Authentication: https://www.esetnod32.ru/download/business/commercial/access/

Ссылка на решение ESET Secure Authentication, для пользователей Украины.

https://www.eset.com/ua/business/secure-authentication/

Ссылка на загрузку: https://www.eset.com/ua/business/secure-authentication/download/

Есть простое и понятное видео, которое сам использовал при настройке ESET Secure Authentication.

Добавлено 19.02.2021

Есть ряд базовых советов, по защите от атак шифровальщиков и неизвестных угроз:

  • Пять шагов для защиты от вирусов-шифровальщиков.
  • Как защититься от всевозможных вирусов-шифровальщиков?
  • Простой, эффективный и бесплатный способ защиты от вирусов-шифровальщиков.
  • Защита главной загрузочной записи (MBR).
  • Отключаем SMB в ОС Windows 7/10 и в Windows 2008 R2.
  • Нужен ли вам «IT-аудит безопасности»?
  • «Защита RDP подключения от брутфорса при помощи IPBan.» 
  • «Устанавливаем и настраиваем Cyberarms Intrusion Detection and Defense Software (IDDS).»  

Добавлено 04.07.2021

Есть доступное по цене и надежное решение с готовым виртуальным сервером VPN для бизнеса, которое можно развернуть буквально за считанные минуты. Услуга предоставляется только для юридических лиц Украины. Узнать больше…

Бизнес-предложение для фирм, предприятий, частных лиц и организаций (облачные решения).

Резервное
копирование данных, защита данных от потерь, организация удаленного
офиса для сотрудников, настройка бухгалтерии в облаке, 
VDS/VPS, опытная и
отзывчивая поддержка, обслуживание и сопровождение на базе TUCHA.UA. Данное предложение
актуально для коммерческих и государственных структур.
Узнать больше… Услуги предоставляются данной компанией по СНГ и за пределами (Европа, США).

Добавлено 21.10.2021

На сайте winitpro в обсуждении статьи, один из пользователей, поделился своим рабочим скриптом, который:

  • не зависит от языка системы и кодировок
  • сохраняет логи
  • проверяет на повторяющиеся IP адреса и отсекает их

Скрин на комментарий:

Сам скрипт:

$Attempts = 5 # За сколько попыток блокировать
$Hours = 1 # За какое время считать попытки
$RDPPort = «3389» # Блокируемый порт, стандартный — 3389
$NameRule = «BlockRDPBruteForce» # Название правила брандмауэра
$log = «blocked_ip_rdp.txt» # Лог-файл (можно указать вместе с путём к файлу)

# Проверяем наличие правила в брандмауэре и создаём его, если отсутствует
if($null -eq (Get-NetFirewallRule -DisplayName $NameRule -ErrorAction SilentlyContinue)){New-NetFirewallRule -DisplayName «$NameRule» –RemoteAddress 1.1.1.1 -Direction Inbound -Protocol TCP –LocalPort $RDPPort -Action Block}
# Получаем список системных сообщений с неудачными попытками за указанное время
$badRDPlogons = Get-WinEvent -FilterHashTable @{LogName=’Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational’;ID=’140′;StartTime=([DateTime]::Now.AddHours(-$Hours))}
# Получаем новые IP адреса с неудачными попытками авторизации за указанное время
$getip = $badRDPlogons.Properties | group-object -property value | where {$_.Count -gt $Attempts} | Select -property Name
# Получаем список IP из текущего правила брандмауэра
$current_ips = (Get-NetFirewallRule -DisplayName «$NameRule» | Get-NetFirewallAddressFilter ).RemoteAddress -split(‘,’)
# Проверяем найденные IP среди уже заблокированных и формируем итоговый список IP
$ip = $getip | where { $getip.Name.Length -gt 1 -and !($current_ips -contains $getip.Name) }
$ip | % {
$current_ips += $ip.name
# Записываем информацию в лог-файл
‘[‘+(Get-Date).ToString() + ‘] IP ‘ + $ip.name + ‘ blocked for ‘ + ($badRDPlogons | where { $_.IpAddress -eq $ip.name }).count + ‘ unsuccessful attempts in ‘ + $Hours + ‘ hour(s).’ >> $Log}
# Обновляем правило брандмауэра
Set-NetFirewallRule -DisplayName «$NameRule» -RemoteAddress $current_ips

Ссылка на источник скрипта, приведена выше. Смотрите внимательно комментарии к статье по ссылке.

Добавить 15.05.2022

Полезная заметка добавлена: Настройка двухфакторной аутентификации (2FA) в Windows с помощью MultiOTP.

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

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

Нажмите Win + X и выберите «Управление компьютером»:

RDP_security_7.png

Затем выберите «Локальные пользователи» —→ «Пользователи» —→ кликните правой кнопкой мыши по имени пользователя «Администратор» и выберите «Переименовать»:

RDP_security_8.png

Переименуйте пользователя и используйте это имя для последующих подключений к удаленному рабочему столу.

Блокировка RDP-подключений для учетных записей с пустым паролем

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

  1. Откройте локальную политику безопасности (нажмите Win + R и введите команду secpol.msc)

  2. Перейдите в раздел «Локальные политики» –-> «Параметры безопасности».

IPBan_edit_4.png

         3. Дважды щелкните на политике «Учетные записи: разрешить использование пустых паролей…» и убедитесь, что она включена:

RDP_security_2.png

Вещь полезная, поэтому не оставляйте этот параметр без внимания.

Смена стандартного порта 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 и «ОК») и воспользуйтесь командой следующего вида: 
    get-childitem “местоположение папки” | unblock-file -confirm

    Например:

 IPBan_3_0.png

     4. Вам нужно внести следующие изменения в локальную политику безопасности, чтобы убедиться, что в логах системы отображаются IP-адреса. Октройте «Локальную политику безопасности» (Win + R, введите secpol.msc и «OK«). Перейдите  в «Локальные политики» —> «Политика аудита» и включить регистрацию сбоев для «Аудита входа в систему» и «Аудита событий входа в систему»:

IPBan_4.png

     5. Для Windows Server 2008 или эквивалентного вам следует отключить логины NTLM и разрешить только NTLM2-вход в систему. В Windows Server 2008 нет другого способа получить IP-адрес для входа в систему NTLM. Октройте «Локальную политику безопасности» (Win + R, введите secpol.msc и «OK«). Перейдите  в «Локальные политики» —> «Параметры безопасности» —> «Сетевая безопасность: Ограничения NTLM: входящий трафик NTLM» и установите значение «Запретить все учетные записи»:

IPBan_edit_1.png

     6. Теперь необходимо создать службу IPBan, чтобы приложение запускалось при старте системы и работало в фоновом режиме. Запустите оснастку PowerShell (Win + R, введите powershell и «ОК») и выпоните команду типа:

sc.exe create IPBAN type= own start= auto binPath= c:\"Каталог с программой"\IPBan.exe DisplayName= IPBAN

Например:

IPBan_6_0.png

 Перейдите в службы (Win + R, введите services.msc и «OK«) и запустите службу IPBAN, в дальнейшем она будет запускаться автоматически:

IPBan_edit_3.png

В «Диспетчере задач» можно убедиться, что служба запущена и работает:

IPBan_8.png

Таким образом, программа следит за неудачными попытками авторизации и добавляет неугодные IP адреса в созданное правило для входящих подключений брандмауэра Windows:

IPBan_edit_2.png

IPBan_10.png

Заблокированные IP адреса можно разблокировать вручную. Перейдите на вкладку «Область» в свойствах правила «IPBan_0» и удалите из списка нужный Вам IP адрес:

IPBan_11.png

Возникла идея написать простой 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

создать правило блокировки RDP с с IP адресов ведущих RDP атаку

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

Можно сделать дополнительное разрешающее правило, чтобы скрипт не блокировал нужные IP адреса или подсети.

Теперь нужно собрать из журналов компьютера список IP адресов, с которых за последние 2 часа фиксировалось более 5 неудачных попыток авторизации. Для этого в журнале Security нужно выбрать события с EventID 4625 (неудачный вход — An account failed to log on и LogonType = 3, см. статью Анализ RDP логов в Windows). В найденных событиях нужно найти IP адрес подключающегося пользователя и проверить, что этот IP адрес встречался в логах более 5 раз.

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

$Last_n_Hours = [DateTime]::Now.AddHours(-2)
$badRDPlogons = Get-EventLog -LogName 'Security' -after $Last_n_Hours -InstanceId 4625 | ?{$_.Message -match 'logon type:\s+(3)\s'} | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }
$getip = $badRDPlogons | group-object -property IpAddress | where {$_.Count -gt 5} | Select -property Name

Можете вывести список найденных адресов IP: $getip

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

$log = "C:\ps\blocked_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

добавить IP адреса, с которых идет перебор паролей в блокировку

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

блокировка IP адресов правилами брандмауэра

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

Вы можете создать задание планировщика с помощью PowerShell скрипта или вручную:

$repeat = (New-TimeSpan -Hours 2)
$duration = ([timeSpan]::maxvalue)
$Trigger= New-ScheduledTaskTrigger -Once -At (Get-Date).Date -RepetitionInterval $repeat -RepetitionDuration $duration
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\block_rdp_attack.ps1"

Register-ScheduledTask -TaskName "BlockRDPBruteForce_PS" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

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

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

Время на прочтение
3 мин

Количество просмотров 21K

Раз мы более — менее разобрались с тем, как важны пароли и логины (ссылка на первую часть ЗДЕСЬ), предлагаю ещё больше обезопасить наш открыто висящий RDP в сети Интернет буквально за полчаса максимум.

В поисках самого простого и бесплатного (или максимально дешевого) способа защиты RDP предлагаю добавить известный многим IPBAN от Jeff Johnson: https://github.com/jjxtra. Единственный замеченный минус — у меня, почему-то, не зависимо от того указываю я 3 попытки для блокировки или 5 — всё равно начинает блокировать где-то с пятой попытки (а может это проблема используемой мной версии — 1.8.0), хотя потом я решил, может это и к лучшему — если предположить что у нас до блокировки учетной записи даётся 3 попытки, то оставшиеся две вполне сгодятся для звонка системному администратору с просьбой сбросить пароль. В общем, для начала нужно скачать саму программу в соответствии с используемой у вас ОС:

https://github.com/DigitalRuby/IPBan/releases

Пока скачивается архив надо настроить локальную политику безопасности: щелкаем на значок поиска в панели задач так и вводим «локаль…» или «secpol.msc» (если нет значка поиска жмем WIN+R,вводим secpol.msc и жмем Enter), затем переходим во вкладку Локальная политика и Политика аудита. В локальных политиках включаем аудит входа в систему и аудит СОБЫТИЙ входа в систему, ставим галки как на скрине — Успех и Отказ для обеих политик и нажимаем ОК:

Архив уже должен скачаться, разахивируем его на любой диск, лучше в корень диска чтобы был проще путь к установке, я извлек в папку ipb на диск C:

Теперь запускаем командную строку от имени администратора вставляем команду:

sc.exe create IPBAN type=own start=delayed-auto binPath=c:\ipb\DigitalRuby.IPBan.exe DisplayName=IPBAN


! Я настраивал на Windows Server 2019, IPBAN корректно работает на Server 2012 и новее, если у вас 2008/2008R2, то всё сложнее, да и вообще на 2008 оно работает не всегда адекватно, но если сильно хочется… (и ещё кое-что: я проверить это не могу, так как самый старый сервер у меня на 2012, так что на свой страх и риск. Ах, да, на старых клиентах с XP и не обновлённой семеркой пропадёт путь к сетевым папкам после запрета NTLM, так что ещё раз: IPBAN ставим на 2008 если только очень хочется)

! ещё раз, текст ниже курсивом — ЭТО ТОЛЬКО ДЛЯ 2008/2008R2, не вздумайте запрещать NTLM на новых версиях ОС Windows Server !

! перед тем как начать вносить изменения настоятельно рекомендую или иметь физический доступ к серверу или проверить работоспособность сторонних программ для удаленного подключения — Anydesk, Rudesktop и т.д.

В командной строке от администратора вводим команду:

sc create IPBAN binPath= c:\ipb\DigitalRuby.IPBan.exe DisplayName= «IPBAN»

Дальше нужно запретить всё NTLM (а заодно и доступ к общим папкам на сервере для WinXp и Win7):

Открываем редактор групповых политик (gpedit.msc) и идём по пути:

Конфигурация компьютера > Конфигурация Windows > Политики безопасности > Локальные политики > Параметры безопасности > Сетевая безопасность: ограничения NTLM: входящий трафик

Выбираем Запретить все учетные записи и надеемся что ничего не отвалится.

Всё, возвращаемся к более «свежим ОС» или продолжаем настройку «старого» сервера:


и жмем Enter, должно выйти так (не забываем путь указать свой, у меня C:\ipb):

Если всё ок, пишет Успех

Если всё ок, пишет Успех

Теперь надо сконфигурировать настройки IPBAN под наши нужды, открываем в текстовом редакторе файл ipban.config (C:\ipb\ipban.config), нажимаем CTRL+F5 и по порядку:

1) добавим в исключения нашу локальную сеть (например, у нас сеть 192.168.1.*), ищем <add key=»Whitelist» value= и пишем:

<add key="Whitelist" value="192.168.1.0/24"/>

2) указываем количество попыток залогиниться — я указал 3 попытки (почему-то у меня по факту 6, но кто любит четкость работы — всегда есть идеально работающие платные программы с хорошей тех. поддержкой), ищем FailedLoginAttemptsBeforeBan и пишем число попыток 3 до блокировки:

<add key="FailedLoginAttemptsBeforeBanUserNameWhitelist" value="3"/>

3) По умолчанию продолжительность бана сутки, но если хочется изменить эту настройку ищем ExpireTime и пишем нужный период времени на блокировку, я указал ради примера 10 часов:

<add key="ExpireTime" value="00:10:00:00"/>

Сохраняем наш файл, осталось запустить нашу службу и при необходимости добавить её в автозапуск. Перед запуском убедитесь что у вас работает именно брандмауэр Windows, если используется сторонний, например от антивируса, то работать IPBAN не будет.

Открываем службы, находим службу IPBan и для первого раза я рекомендую её просто запустить, и проверить всё ли работает как надо, если за несколько дней проблем не будет можно выбрать автозапуск:

После успешного запуска автоматически создадутся правила в брандмауэре Windows. Там можно просмотреть заблокированные IP адреса и удалить ненужный на случай «особого работника», чтобы не ждать пока снимется блокировка:

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

  • Windows server 2012 зарегистрировать dll
  • Windows server 2012 квота на папку
  • Windows server 2012 для web server
  • Windows server 2012 запуск в безопасном режиме
  • Windows server 2012 завершение сеанса