На любом хосте Windows, напрямую подключённом к Интернету, с открытым наружу портом RDP периодически будут фиксироваться попытки удаленного перебора паролей. Для эффективной защиты стандартного RDP порта
3389
от перебора паролей и эксплуатации уязвимостей рекомендуется разместить RDP сервер за VPN или шлюзом RD Gateway. Если реализовать такую схему невозможно, нужно внедрять дополнительные средства для защиты RDP:
- Не использовать стандартные имена учетных записей в Windows (если это не сделать, популярные имена учетных записей {
admin
,
administrator
,
user1
}будут периодически блокироваться в соответствии с настройками политики паролей Windows); - Использовать сложные политики паролей пользователей;
- Изменить стандартный RDP порт 3389 на другой;
- Настроить 2FA для RDP входа (пример настройки двухфакторной аутентификации для RDP с помощью open-source multiOTP).
В этой статье мы настроим автоматическую блокировку IP адресов, с которых выполняются неудачные попытки RDP аутентификации.
PowerShell скрипт для блокировки IP адресов-источников RDP атак
При неудачной попытке аутентификации в Windows по RDP в журнале событий Security регистрируется событие с EventID 4625 (неудачный вход —
An account failed to log on
и
LogonType = 3
, см. статью Анализ RDP логов в Windows ). В описании события указано имя пользователя, под которым выполнялась попытка подключения и IP адрес источника.
Можно вывести список таких событий с неудачными попытками входа за последний час по с помощью PowerShell командлета Get-WinEvent:$result = Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625; EndTime=(get-date).AddHours(-1)} | ForEach-Object {
$eventXml = ([xml]$_.ToXml()).Event
[PsCustomObject]@{
UserName = ($eventXml.EventData.Data | Where-Object { $_.Name -eq 'TargetUserName' }).'#text'
IpAddress = ($eventXml.EventData.Data | Where-Object { $_.Name -eq 'IpAddress' }).'#text'
EventDate = [DateTime]$eventXml.System.TimeCreated.SystemTime
}
}
$result
С помощью PowerShell скрипта можно анализировать этот лог, и, если с конкретного IP адреса за последние 2 часа было зафиксировано более 5 неудачных попыток входа по RDP, IP адрес будет добавлен в блокирующее правило Windows Firewall.
# количество неудачных попыток входа с одного IP адреса, при достижении которого нужно заблокировать IP $badAttempts = 5 # Просмотр лога за последние 2 часа $intervalHours = 2 # Если в блокирующем правиле более 3000 уникальных IP адресов, создать новое правило Windows Firewall $ruleMaxEntries = 3000 # номер порта, на котором слушает RDP $RdpLocalPort=3389 # файл с логом работы PowerShell скрипта $log = "c:\ps\rdp_block.log" # Список доверенных IP адресов, которые нельзя блокировать $trustedIPs = @("192.168.1.100", "192.168.1.101","8.8.8.8") $startTime = [DateTime]::Now.AddHours(-$intervalHours) $badRDPlogons = Get-EventLog -LogName 'Security' -After $startTime -InstanceId 4625 | Where-Object { $_.Message -match 'logon type:\s+(3)\s' } | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]}} $ipsArray = $badRDPlogons | Group-Object -Property IpAddress | Where-Object { $_.Count -ge $badAttempts } | ForEach-Object { $_.Name } # Удалить доверенные IP адреса $ipsArray = $ipsArray | Where-Object { $_ -notin $trustedIPs } if ($ipsArray.Count -eq 0) { return } [System.Collections.ArrayList]$ips = @() [System.Collections.ArrayList]$current_ip_lists = @() $ips.AddRange([string[]]$ipsArray) $ruleCount = 1 $ruleName = "BlockRDPBruteForce" + $ruleCount $foundRuleWithSpace = 0 while ($foundRuleWithSpace -eq 0) { $firewallRule = Get-NetFirewallRule -DisplayName $ruleName -ErrorAction SilentlyContinue if ($null -eq $firewallRule) { New-NetFirewallRule -DisplayName $ruleName –RemoteAddress 1.1.1.1 -Direction Inbound -Protocol TCP –LocalPort $RdpLocalPort -Action Block $firewallRule = Get-NetFirewallRule -DisplayName $ruleName $current_ip_lists.Add(@(($firewallRule | Get-NetFirewallAddressFilter).RemoteAddress)) $foundRuleWithSpace = 1 } else { $current_ip_lists.Add(@(($firewallRule | Get-NetFirewallAddressFilter).RemoteAddress)) if ($current_ip_lists[$current_ip_lists.Count – 1].Count -le ($ruleMaxEntries – $ips.Count)) { $foundRuleWithSpace = 1 } else { $ruleCount++ $ruleName = "BlockRDPBruteForce" + $ruleCount } } } # Удалить IP адреса, которые уже есть в правиле for ($i = $ips.Count – 1; $i -ge 0; $i--) { foreach ($current_ip_list in $current_ip_lists) { if ($current_ip_list -contains $ips[$i]) { $ips.RemoveAt($i) break } } } if ($ips.Count -eq 0) { exit } # Заблокировать IP в firewall и записать в лог $current_ip_list = $current_ip_lists[$current_ip_lists.Count – 1] foreach ($ip in $ips) { $current_ip_list += $ip (Get-Date).ToString().PadRight(22) + ' | ' + $ip.PadRight(15) + ' | The IP address has been blocked due to ' + ($badRDPlogons | Where-Object { $_.IpAddress -eq $ip }).Count + ' failed login attempts over ' + $intervalHours + ' hours' >> $log } Set-NetFirewallRule -DisplayName $ruleName -RemoteAddress $current_ip_list
В русской версии Windows этот скрипт не будет работать, т.к. расчитан на ENG редакцию. Для адаптации скрипт под русскую Windows замените строку:
$badRDPlogons = Get-EventLog -LogName ...
На блок кода:
$ipPattern = '\b(?:\d{1,3}\.){3}\d{1,3}\b'
$badRDPlogons = @()
$events = Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational';ID='140';StartTime=$startTime}
$events.message | ForEach-Object {
if ($_ -match $ipPattern) {
$ipObject = [PSCustomObject]@{
IpAddress = $matches[0]
}
$badRDPlogons += $ipObject
}
}
После запуска PoweShell скрипт создаст правило в Windows Defender Firewall, которое заблокирует подключение к RDP порту для полученного списка IP адресов.
В лог файл скрипт PowerShell будет записывать список заблокированных IP:
Готовый скрипт block_rdp_attack.ps1 можно скачать с GitHub: https://github.com/winadm/posh/blob/master/RemoteDesktop/block_rdp_attack.ps1
Чтобы скачать PS1 скрипт с GitHub на локальный диск, выполните:
$path = "C:\PS\" If(!(test-path -PathType container $path)) { New-Item -ItemType Directory -Path $path } $url = "https://raw.githubusercontent.com/winadm/posh/master/RemoteDesktop/block_rdp_attack.ps1" $output = "$path\block_rdp_attack.ps1" Invoke-WebRequest -Uri $url -OutFile $output
Можно запускать скрипт автоматически при появлении в логе события 4625. Такое задание планировщика можно создать с помощью PowerShell скрипта:
$taskname="BlockRDPBruteForce_Attack_PS"
$scriptPath="C:\PS\block_rdp_attack.ps1"
$triggers = @()
$triggers += New-ScheduledTaskTrigger -AtLogOn
$CIMTriggerClass = Get-CimClass -ClassName MSFT_TaskEventTrigger -Namespace Root/Microsoft/Windows/TaskScheduler:MSFT_TaskEventTrigger
$trigger = New-CimInstance -CimClass $CIMTriggerClass -ClientOnly
$trigger.Subscription =
@"
<QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[(EventID=4625)]]</Select></Query></QueryList>
"@
$trigger.Enabled = $True
$triggers += $trigger
$User='Nt Authority\System'
$Action=New-ScheduledTaskAction -Execute "Powershell.exe" -Argument "-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File $scriptPath"
Register-ScheduledTask -TaskName $taskname -Trigger $triggers -User $User -Action $Action -RunLevel Highest -Force
Задание будет запускаться при каждом неудачном RDP входе, анализировать журнал событий и блокировать IP адреса. Задание запускается от имени System и не зависит от того, выполнени ли вход пользователем или нет.
0
15.10.201910:5415.10.2019 10:54:47
Для защиты RDP сервера от брутфорса мы воспользуемся утилитой IPBan от Jeff Johnson.
Утилита IPBan блокирует ip адресс с которго идет перебор паролей после нескольких неудачных попыток авторизации.
Для начала проведем подготовительный этап.
Для того чтобы в логах системы отоброжались IP адреса с которых идет перебор паролей, нам нужно включить аудит событий.
Переходим в «Локальные политики» (Win + R, введите secpol.msc и «OK»). —> «Политика аудита» и включить регистрацию событий для «Аудита входа в систему» и «Аудита событий входа в систему»:
Подготовительный этап закончен, переходим к настройке 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
Заходим в оснастку служб Windows (Win + R, введите services.msc и «OK») находим и запускаем службу IPBAN
IPBan отслеживает неудачные попытки входа и добавляет правило для Windows фаервола.
Удалить случайно добавленный ip адрес либо посмотреть какие адреса сейчас добавленны можно в оснастке фаервола — правило IPBan_Block_0.
Также создаются два правила IPBan_EmergingThreats_0 и IPBan_EmergingThreats_1000 — общеизвестные IP адреса с которых происходят попытки входа.
Вот и все, теперь наш Windows сервер зашишен от перебора паролей.
P.S. Также этот способ работает на Windows 8 — Windows 10.
Часто у наших клиентов (обычно это небольшие организации без собственной IT службы) возникает необходимость предоставить доступ к своему серверу терминалов (о настройке и обеспечении отказоустойчивости будет отдельная статья) через глобальную сеть Интернет. Мы конечно же советуем так не делать, а использовать для подключения VPN (рекомендуем любимый нами SoftEther VPN Server), но если уж клиент настаивает, то стараемся максимально его обезопасить. И вот как раз про средства, которыми мы этого достигаем и пойдет речь в этой статье…
Первая программа, о которой мы расскажем называется Cyberarms Intrusion Detection and Defense Software (IDDS).
К сожалению, судя по всему, разработка была прекращена в 2017-м году, но тем не менее программа (с некоторыми нюансами — о них далее) работает даже на ОС Windows Server 2019.
Принцип действия довольно таки простой, но в тоже время эффективный: после нескольких неудачных попыток ввода пароля(количество для блокировки определено в параметрах) срабатывает Soft lock(подозрение в брутфорсе), в журнале создается инцидент и IP помечается как подозрительный. Если новых попыток не последовало, то спустя 20 минут адрес убирается из списка наблюдаемых. Если же перебор паролей продолжается, то IP адрес «злоумышленника» добавляется в запрещающее подключения правило брандмауэра Windows (должен быть в активированном состоянии) и тем самым подбор пароля с этого адреса временно прекращается, так как подключения полностью блокируются. Блокировка Hard lock продлится 24 часа — такой параметр выставлен по умолчанию. Вечную блокировку,»Hard lock forever», включать не рекомендуем, иначе количество IP в правиле брандмауэра быстро «распухнет» и программа будет тормозить.
Устанавливается программа просто — скачиваем архив с установщиком, распаковываем во временную папку. Cкачиваем и устанавливаем Microsoft Visual C++ 2010 x64 (vcredist_x64.exe) и только после этого запускаем пакет установщика Windows —Cyberarms.IntrusionDetection.Setup.x64.msi, потому как у setup.exe скачать и установить автоматически Visual C++ не получается.
Далее производим настройку — активируем агент для защиты RDP сессий «TLS/SSL Security Agent«, во вкладке «AGENTS«:
Вторая программа — Duo Authentication for Windows Logon and RDP
это инструмент для мультифакторной аутентификации от Duo Security (Cisco), коммерческий многофункциональный продукт, который безупречно работает и позволяет использовать смартфоны, токены и коды для 2FA.
Настраивается ПО немного сложнее предыдущей программы, но благодаря хорошей документации от разработчика довольно таки быстро.
-
Зарегистрируйте себе административный аккаунт, для доступа к панели управления (Личный кабинет). Рекомендуем сразу добавить еще одного администратора, потому как восстановить доступ с помощью разработчика довольно таки проблематично, а прецеденты с неожиданной утратой смартфона администратора возникают часто.
-
Войдите в панель администратора Duo и перейдите в Приложения (Applications).
-
Нажмите «Защитить приложение» и найдите в списке приложений запись для Microsoft RDP. Щелкните Защитить в крайнем правом углу, чтобы настроить приложение и получить ключ интеграции, секретный ключ и имя хоста API. Эта информация понадобится вам для завершения настройки (в процессе установки Duo Authentication for Windows Logon).
Мы рекомендуем установить политики по умолчанию для новых пользователей приложения Microsoft RDP значение «Запрет доступа«, поскольку ни один незарегистрированный в Duo пользователь не должен успешно проходить авторизацию. Но для этого вам будет необходимо добавить всех пользователей в Duo через панель управления вручную или, что намного удобнее, через импорт из Active Directory (об этом расскажем позже) и выслать им ссылку для активации приложения Duo Security, предварительно установленному на их смартфонах.
4. Загрузите и установите пакет установщика Duo Authentication for Windows Logon. Во время установки введите данные, полученные на предыдущем шаге.
Если вы хотите включить автономный доступ с помощью Duo MFA, вы можете сделать это сейчас в разделе «Настройки автономного доступа» на странице приложения Duo или вернуться в панель администратора позже, чтобы настроить автономный доступ после первой проверки успешного входа в систему с помощью двух-факторной аутентификации.
Также во время установки рекомендуем установить все 3 галки в чекбоксах — эти настройки позволят вам получать доступ в ОС без 2FA, например при использовании консоли гипервизора или при отсутствии подключения к серверам Duo (частый случай — большое расхождение по времени):
не лишним будет напоминание о безопасном хранении всех ключей:
Treat your secret key like a passwordThe security of your Duo application is tied to the security of your secret key (skey). Secure it as you would any sensitive credential. Don’t share it with unauthorized individuals or email it to anyone under any circumstances!
После установки Duo Authentication for Windows Logon можно добавить пользователя (своего, без привилегий администратора) и активировать приложение на смартфоне. Для этого переходим в раздел Users, жмем Add User — заполняем необходимые поля. Далее добавляем пользователю телефон (раздел Phones — Add Phone) и активируем Duo Moibile (ссылку для активации пользователю можно отправить SMS, если есть деньги на балансе или вручную через Email или другим удобным способом).
Теперь при подключении и успешной авторизации (по логину и паролю) пользователю будет отправлено Push уведомление на смартфон с активированным приложением Duo Mobile:
Если на смартфоне нет доступа в Интернет (и соответственно Push приходить не будут), то можно подтвердить авторизацию сгенерированным кодом (Passcode ) из приложения:
Настройка синхронизации пользователей с глобальным каталогом (Azure AD — Active Directory — LDAP) хорошо описана в документации разработчика, хочу лишь уточнить что это платный функционал. Основной компонент для синхронизации пользователей, это Duo Authentication Proxy — ПО, которое обеспечивает подключение к каталогу.
Если вы используете RDWEb (клиентский доступ или шлюз), то вам пригодится еще один компонент — Duo Authentication for Microsoft Remote Desktop Web. Настройка его аналогична Duo Authentication for Windows Logon и не должна вызвать затруднений.
Подводя итоги заметим, что рассмотренное ПО не является панацеей от всех бед для публичных сервисов (доступных из сети Интернет), потому как бывают уязвимости, эксплуатация которых позволяет злоумшленникам обходить даже такие меры по обеспечению безопасности ОС\инфраструктуры в целом. Поэтому требуется всегда комплесно подходить к этому вопросу — мониторинг, аудит и регламентные процедуры по обновлению позволят вам почувствовать себя защищенными в этом неспокойном мире. Берегите свои данные!
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Используете ли вы в своей инфраструктуре сервер терминалов?
58.43% Да, подключение к рдп исключительно через VPN52
35.96% Да, сервер терминалов доступен напрямую из Интернета32
Проголосовали 89 пользователей. Воздержались 17 пользователей.
Инструкция
по скрипту и сам скрипт, проверялся на работоспособность в 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\SecurityRequire secure RPC communication = Enabled
Require use of specific security layer for remote (RDP)
connections = SSLRequire user authentication for remote connections by using
Network Level Authentication = EnabledSet 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$_|Remove—NetFirewallRule —Confirm:$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.
Защита RDP от брутфорса при помощи IPBan.
@LeakinfoДля блокировки неудачных попыток подключения к RDP, можно в ручном режиме проверять журнал событий, чтобы отслеживать IP-адрес тех, кто указывает неверные данные при попытке зайти на RDP и блокировать их при помощи брандмауэра Windows. Однако, это кропотливый и сложный процесс и для упрощения поставленной задачи, есть решение, которое позволяет автоматизировать данные процессы блокировки тех IP-адресов, которые указали неверные данные при попытке входа. Ниже, мы разберем основной принцип автоматической фильтрации и блокировки IP-адресов, для защиты RDP подключения от брутфорса.
Сразу оговорюсь, что решение проверялось на Windows Server 2016, Windows Server 2019 и ОС Windows 10 Pro. Данная заметка, написана «по горячему», с использованием Windows Server 2019. Однако, есть «обрывки идей и мыслей» в заметке, как использовать данное решение и на Windows Server 2008, которые мне удалось собрать с открытых источников. При этом, лично не работал с данным решением на Windows Server ниже 2016.
Защита RDP от брутфорса при помощи IPBan.
Есть готовое решение IPBan, с открытым исходным кодом, позволяющее производить автоматический мониторинг журнала событий Windows, фиксируя неудачные попытки зайти на сервер по RDP и после 5-й неудачной попытки входа, блокирует в автоматическом режиме IP-адрес на 24 часа.
Решение работает на Windows Server не ниже Windows Server 2008 (Windows XP и Windows Server 2003 не поддерживаются).
Оф. сайт: https://www.digitalruby.com/ipban/
Github: https://github.com/DigitalRuby/IPBan/releases/
Настраиваем IPBan.
1. Открываем GitHub по ссылке: https://github.com/DigitalRuby/IPBan/releases/
2. Выбираем нужную разрядность Windows x86/x64 (на момент создания заметки, была доступна последняя версия IPBan 1.6.0):
3. Скачав архив, распакуйте его содержимое в любую папку (в рассматриваемом примере, создам папку IPBan и расположу ее в корень диска C:).
4. Выделите все распакованные файлы, нажмите по ним правой кнопкой мыши и в появившемся окне, выберите «Свойства». В открывшемся меню, выберите вариант (поставьте галочку) «Разблокировать», если данная возможность присутствует.
Зачастую, файлы скачанные с Интернета, система автоматически блокирует. Для корректной работы с файлами, их необходимо разблокировать.
Если файлы не заблокированы, у вас должна быть следующая картина:
При просмотре свойств исполняемого.exe (DigitalRuby.IPBan.exe) файла в папке, у вас не должно быть сообщений о блокировании ресурса:
Вы можете разблокировать файлы, посредством выполнения команды в PowerShell. Для этого, запустите PowerShell от имени Администратора и в открывшемся окне, выполните команду:get-childitem «Укажите_расположение_вашей_папки» | unblock-file -confirm
Для наглядности. В моем примере, была выполнена следующая команда в PowerShell:
get-childitem «C:\IPBan» | unblock-file -confirm
5. Необходимо проверить, что в системных логах отображаются IP-адреса. Для этого, внесите изменения в локальную политику безопасности. Открываем «Локальную политику безопасности». Для этого, нажмите на клавиатуре Win + R, введите в окне «Выполнить» secpol.msc и нажмите «ОК»:
Переходим в «Локальные политики» -> «Политика аудита»:
Включаем регистрацию сбоев для «Аудита входа в систему»:
Включаем регистрацию сбоев для «Аудита событий входа в систему»:
В результате, у вас станет так:
Примечание. Только для для Windows Server 2008 и для Windows Server 2008 R2!
Для Windows Server 2008, насколько удалось найти информацию, необходимо открыть «Локальную политику безопасности» (Win + R, введите secpol.msc и «OK») и перейти в:
- «Локальные политики» -> «Параметры безопасности» -> «Сетевая безопасность: Ограничения NTLM: входящий трафик NTLM» («Network security: Restrict NTLM: Incoming NTLM traffic») и установите значение «Запретить все учетные записи» («Deny all accounts»).
При этом, для Windows Server 2008 R2, необходимо еще настроить:
- «Локальные политики» -> «Параметры безопасности» -> «Сетевая безопасность: ограничения NTLM — проверка подлинности NTLM на этом домене» («Network security: Restrict NTLM: NTLM authentication in this domain») и установить значение «Запретить все» («Deny all»).
К сожалению, нет уже возможности проверить это лично на Windows Server 2008. При поиске информации, нашел много сообщений о том, что у пользователей, возникают проблемы на Windows Server 2008 R2 с невозможностью зайти на него, если установить только «Запретить все учетные записи» в «Сетевая безопасность: Ограничения NTLM: входящий трафик NTLM». Поэтому, пробуйте еще указать «Запретить все» в «Сетевая безопасность: ограничения NTLM — проверка подлинности NTLM на этом домене».
6. Создаем службу IPBan, для автозапуска утилиты при запуске системы и ее фоновой работы. Запустите PowerShell от имени Администратора. Выполните в окне PowerShell следующую команду:
sc.exe create IPBAN type= own start= auto binPath= C:\Каталог_с_утилитой\Имя_исполняемого_файла.exe DisplayName= IPBAN
И нажмите Enter. Получаем сообщение об успехе.
Для наглядности. В моем примере, была выполнена следующая команда в PowerShell:
sc.exe create IPBAN type= own start= auto binPath= C:\IPBan\DigitalRuby.IPBan.exe DisplayName= IPBAN
На заметку. По мере выхода новых версий утилиты IPBan, имя исполняемого файла, несколько раз менялось. На момент написания заметки, исполняемый файл имеет следующее имя: DigitalRuby.IPBan.exe.
А вот в самой првой версии IPBan, имя исполняемого файла, было: IPBan.exe
Именно поэтому, указал выше команду, где заменил имя файла на «C:\Каталог_с_утилитой\Имя_исполняемого_файла.exe» и привел скрины. Иначе, вы получите сообщение с ошибкой. Прежде, чем выполнять по данной инструкции команды, проверяйте содержимое скачанных файлов и проверяйте имя исполняемого файлы в папке. Надеюсь, суть уловили.
7. Вышеприведенной командой, в пункте 6, мы создали службу IPBan в системе. Для запуска службы, перейдите в «Службы». Для этого, нажмите на клавиатуре Win + R, введите в окне «Выполнить» services.msc и нажмите «ОК»:
Ищем в окне «Службы», службу «IPBAN» и запускаем ее:
В свойствах службы «IPBAN», мы всегда можем изменить тип запуска. Если она больше нам станет ненужной, мы всегда можем ее отключить. Естественно, нельзя удалять файлы службы, где у нас была распакована утилита IPBan. Поэтому, ответственно изначально подойдите к выбору места распаковки утилиты, чтобы потом не пришлось все перенастраивать.
После запуска службы «IPBAN», мы можем найти ее в Диспетчере задач во вкладке «Процессы» -> разделе «Фоновые процессы»:
И во вкладке Диспетчера задач «Службы»:
Благодаря работе службы «IPBAN», все IP-адреса, скоторых было сделано 5-ть неудачных попыток входа, будут автоматически занесены в брандмауэр Windows с блокировкой на 24 часа. Служба создает правило IPBan_Block_0:
Свойства правила IPBan_Block_0:
Удалять/разблокировать ошибочно добавленные IP-адреса, можно во вкладке «Область» в свойствах правила «IPBan_0» и удалите из списка нужный вам IP-адрес:
Тут же, можно просматривать какие IP-адреса сейчас добавлены. Также создаются два правила IPBan_EmergingThreats_0 и IPBan_EmergingThreats_1000 – общеизвестные IP-адреса с которых происходят попытки входа.
Частые ошибки и заметки.
На форумах, можно найти информацию по использованию утилиты IPBan, где также указано, что в настройках Локальной политики нужно отключить логины NTLM и разрешить только NTLM2-вход в систему. Как указал выше, это только для Windows Server 2008 и Windows Server 2008 R2. Если вы сделаете так например на Windows Server 2019, то не сможете зайти на свой сервер.
При изменении политики NTLM пропадет доступ к сетевым папкам сервера со всех «старых» клиентов, например WinXP.
Правило IPBan_Block_0 зачастую не создается сразу, а только после неудачной попытки входа.
Вы можете изменить время блокировки IP, количество попыток и т.д. посредством корректировки данных в файле ipban.config.
Например:
- FailedLoginAttemptsBeforeBan – отвечает за количество попыток входа (по умолчанию, установлено 5-ть попыток), после чего, происходит бан.
- ExpireTime – отвечает за время блокировки IP-адреса (по умолчанию, установлена блокировка на 24 часа).
Однако, конфигурационный файл, периодически меняет свое названия (и содержимое) с выходом новых версий, имейте это ввиду.
Полную документацию по данным правкам, смотрите тут: https://github.com/DigitalRuby/IPBan/wiki/Configuration
На форуме rutracker, пользователь evgen_b привел свою инструкцию по настройке IPBan: https://rutracker.org/forum…
Заключение.
Если у вас будут поправки и дополнения, оставляйте комментарии. Проверить работу данное решения на Windows Server 2008, Windows Server 2008 R2 и Windows Server 2012, у меня нет сейчас возможности. При этом, стоит подумать об отказе использования Windows Server 2008 и старее. Про использование XP и речи не идет.
- 🔴 Отказ от ответственности
- 👁 Бот для поиска информации
- 🦋 Слитая информация — @Leakinfo
- 🎭 Наша группа > — Точка входа
- ❤️ Поблагодарить Bitcoin