https://youtube.com/watch?v=zhLoIgGp92M%3Fsi%3DOXFsiL8D9FDvHrJP
The session highlighted the severe impact downtime can have on modern enterprises, especially when subjected to repeated attacks. The panelists explored the pros and cons of different response options, what you can do to prepare for inevitable attacks, and how to quickly bounce back
This segment was part of our live virtual event, “Cyber Resilience in 2024: Availability Is Your Best Ability,” presented by ITPro Today and InformationWeek on May 2, 2024.
На любом хосте Windows, напрямую подключённом к Интернету, с открытым наружу портом RDP периодически будут фиксироваться попытки удаленного перебора паролей. Для эффективной защиты стандартного RDP порта
3389
от перебора паролей и эксплуатации уязвимостей рекомендуется разместить RDP сервер за VPN или шлюзом RD Gateway. Если реализовать такую схему невозможно, нужно внедрять дополнительные средства для защиты RDP:
- Не использовать стандартные имена учетных записей в Windows (если это не сделать, популярные имена учетных записей {
admin
,
administrator
,
user1
}будут периодически блокироваться в соответствии с настройками политики паролей Windows); - Использовать сложные политики паролей пользователей;
- Изменить стандартный RDP порт 3389 на другой;
- Настроить 2FA для RDP входа (пример настройки двухфакторной аутентификации для RDP с помощью open-source multiOTP).
В этой статье мы настроим автоматическую блокировку IP адресов, с которых выполняются неудачные попытки RDP аутентификации.
Just one example: On Super Bowl weekend 2023, the most significant attack ever measured exceeded 71 million requests per second, making it the largest HTTP DDoS attack in history.
So, welcome everybody. Keeping that in mind, the goal of DDoS is still to deny access to services for both companies and their customers. The average cost of downtime could be as high as $5,500 per minute. So, what can a company do to recover from an attack swiftly and efficiently?
Well, let’s start the panel off with Nia.
Great question. It’sno surprise that in 2024, it’s less about the singular DDoS attackitself. In 2024, we’re starting to seethe emergence of layered attacks. So, you’ll experience the DDoS attackitself, and that may be layered in with someransomware and other vector pointsof attack.
But with that said, I’d like tokind of go back to my time with thepublic sector and the government andrely on some advice coming out of theCyber Security and Infrastructure Security Agency – a little bit of a mouthful there –the CISA. In 2024, they are leaning in with this eight-pillar approach that says, “Let’s take a step back and look at this more comprehensively. Do we have an immediate response plan activation? What does that look like? What are the steps, and how many can we run in parallel? Does it include the re-establishment of Border Gateway Protocols? What about restarting your firewalls? What about the consistent monitoring and analyzing of traffic and leveraging anti-DDoS services?” So, some of the trends that didn’t exist when they came up with this idea in 2022 exist today, in that we have products and services in the market that can come in and absorb and mitigate the excess traffic during the attack itself.
And then, “What are we doing after the attack is done? What does that post-attack analysis and that root cause analysis look like? Is it baked into your incident response plans?” That is a little bit of where I would start.
Absolutely. How about you Cassandra?
Myanswers typically would be a little bitmore tactical, just coming from software. For me, It really comes down to this: Are you defining and practicing abusiness continuity plan and a disasterrecovery plan? Are youphoning it in, or are you really makingsure that you have something to failover to quickly for your customers, whether it’s a separate instance on aseparate network or somethingthat’s just behind the network thatyou’re able to push out quickly? Thoseare important.
Businesscontinuity looks at that first day, anddisaster recovery looks at, “If you’redown, what do you do?” You need toplan for both. And you need to notonly put it on a paper agreement, but youneed to practice that. You need to comeup with your “Lessons Learned” andgo fix the things.
Where Isee a lot of places falling short isthat they’re just phoning it in andnot practicing. Then, something comes, and they finally musttake those Lessons Learned and dosomething about it.
PowerShell скрипт для блокировки IP адресов-источников RDP атак
При неудачной попытке аутентификации в Windows по RDP в журнале событий Security регистрируется событие с EventID 4625 (неудачный вход —
An account failed to log on
и
LogonType = 3
, см. статью Анализ RDP логов в Windows ). В описании события указано имя пользователя, под которым выполнялась попытка подключения и IP адрес источника.
С помощью 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 замените строку:
На блок кода:
После запуска PoweShell скрипт создаст правило в Windows Defender Firewall, которое заблокирует подключение к RDP порту для полученного списка IP адресов.
В лог файл скрипт PowerShell будет записывать список заблокированных IP:
$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
Задание будет запускаться при каждом неудачном RDP входе, анализировать журнал событий и блокировать IP адреса. Задание запускается от имени System и не зависит от того, выполнени ли вход пользователем или нет.
About the Author(s)
Brandon Taylor supports Data Center Knowledge, InformationWeek, ITPro Today and Network Computing. He enables the successful delivery of sponsored content programs, secures speakers for the brands’ many events, and assists in content strategy.